浏览代码

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	alien-store/src/main/java/shop/alien/store/service/impl/LifeDiscountCouponServiceImpl.java
lyx 2 月之前
父节点
当前提交
43cc6cfb57
共有 23 个文件被更改,包括 515 次插入143 次删除
  1. 4 0
      alien-entity/src/main/java/shop/alien/entity/store/LifeMessage.java
  2. 12 0
      alien-entity/src/main/java/shop/alien/entity/store/LifeUserDynamics.java
  3. 4 0
      alien-entity/src/main/java/shop/alien/entity/store/StoreAppVersion.java
  4. 4 0
      alien-entity/src/main/java/shop/alien/entity/store/StoreUser.java
  5. 12 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserDynamicsVo.java
  6. 3 0
      alien-entity/src/main/java/shop/alien/entity/store/vo/WebSocketVo.java
  7. 5 0
      alien-entity/src/main/java/shop/alien/mapper/LifeUserDynamicsMapper.java
  8. 1 1
      alien-entity/src/main/java/shop/alien/mapper/second/SecondTradeRecordMapper.java
  9. 84 0
      alien-entity/src/main/resources/mapper/LifeUserDynamicsMapper.xml
  10. 7 6
      alien-second/src/main/java/shop/alien/second/service/impl/PlatformSecondTradeServiceImpl.java
  11. 27 17
      alien-second/src/main/java/shop/alien/second/service/impl/SecondTradeRecordServiceImpl.java
  12. 1 0
      alien-store/src/main/java/shop/alien/store/config/WebSocketProcess.java
  13. 61 5
      alien-store/src/main/java/shop/alien/store/controller/LifeUserDynamicsController.java
  14. 20 4
      alien-store/src/main/java/shop/alien/store/controller/StoreAppVersionController.java
  15. 15 0
      alien-store/src/main/java/shop/alien/store/controller/StoreUserController.java
  16. 32 1
      alien-store/src/main/java/shop/alien/store/service/LifeUserDynamicsService.java
  17. 19 0
      alien-store/src/main/java/shop/alien/store/service/StoreAppVersionService.java
  18. 70 69
      alien-store/src/main/java/shop/alien/store/service/impl/LifeDiscountCouponServiceImpl.java
  19. 17 10
      alien-store/src/main/java/shop/alien/store/service/impl/LifeDiscountCouponUserServiceImpl.java
  20. 1 1
      alien-store/src/main/java/shop/alien/store/service/impl/LifeGroupPackageServiceImpl.java
  21. 38 3
      alien-store/src/main/java/shop/alien/store/service/impl/StoreAppVersionServiceImpl.java
  22. 36 16
      alien-store/src/main/java/shop/alien/store/service/impl/StoreIncomeDetailsRecordServiceImpl.java
  23. 42 10
      alien-store/src/main/java/shop/alien/store/service/impl/StoreInfoServiceImpl.java

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

@@ -68,4 +68,8 @@ public class LifeMessage {
     @ApiModelProperty(value = "修改人ID")
     @TableField("updated_user_id")
     private Integer updatedUserId;
+
+    @ApiModelProperty(value = "业务ID")
+    @TableField("business_id")
+    private Integer businessId;
 }

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

@@ -100,4 +100,16 @@ public class LifeUserDynamics {
     @ApiModelProperty(value = "省份")
     @TableField("address_province")
     private String addressProvince;
+
+    @ApiModelProperty(value = "置顶")
+    @TableField("top_status")
+    private Integer topStatus;
+
+    @ApiModelProperty(value = "修改时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date topTime;
+
+    @ApiModelProperty(value = "启用状态0-启用,1-禁用")
+    @TableField("enable_status")
+    private Integer enableStatus;
 }

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

@@ -37,6 +37,10 @@ public class StoreAppVersion extends Model<StoreAppVersion> {
     @TableField("version_num")
     private Integer versionNum;
 
+    @ApiModelProperty(value = "版本信息")
+    @TableField("version_info")
+    private String versionInfo;
+
     @ApiModelProperty(value = "app类型: 1:用户端, 2:商家端")
     @TableField("app_type")
     private Integer appType;

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

@@ -123,6 +123,10 @@ public class StoreUser extends Model<StoreUser> {
     @TableField("head_img")
     private String headImg;
 
+    @ApiModelProperty(value = "支付宝账号")
+    @TableField("alipay_account")
+    private String alipayAccount;
+
     @TableField(exist = false)
     private String userName;
     @TableField(exist = false)

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

@@ -48,4 +48,16 @@ public class LifeUserDynamicsVo extends LifeUserDynamics {
 
     @ApiModelProperty(value = "达人标识")
     private String isExpert;
+
+    @ApiModelProperty(value = "转发量")
+    private Integer transferCount;
+
+    @ApiModelProperty(value = "粉丝量")
+    private Integer fansCount;
+
+    @ApiModelProperty(value = "商家还是用户")
+    private String userType;
+
+    @ApiModelProperty(value = "动态类型1-图片 2-视频 3-其他")
+    private String dynamicsType;
 }

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

@@ -38,4 +38,7 @@ public class WebSocketVo {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @ApiModelProperty(value = "创建时间")
     private Date createdTime;
+
+    @ApiModelProperty(value = "业务ID(用户动态ID)")
+    private Integer businessId;
 }

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

@@ -49,4 +49,9 @@ public interface LifeUserDynamicsMapper extends BaseMapper<LifeUserDynamics> {
             "and lud.id in (select llr.huifu_id from life_like_record llr where llr.dianzan_id = #{phoneId} and llr.delete_flag = 0) \n"+
             "and lud.phone_id not in (select lb.blocked_phone_id  from life_blacklist lb where lb.blocker_phone_id = #{phoneId} and lb.delete_flag = 0)")
     List<LifeUserDynamicsVo> selectDianZanList(String phoneId);
+
+    List<LifeUserDynamicsVo> getDynamicsList(@Param("nickName") String nickName, @Param("userType") String userType, @Param("dynamicsType") Integer dynamicsType, @Param("releaseStartTime") String releaseStartTime, @Param("releaseEndTime") String releaseEndTime);
+
+    List<LifeUserDynamicsVo> getDynamicsDetail(@Param("id") Integer id);
+
 }

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

@@ -67,7 +67,7 @@ public interface SecondTradeRecordMapper extends BaseMapper<SecondTradeRecord> {
             "    and transaction_time >= #{beginTime} and transaction_time <= #{endTime} " +
             "    group by seller_id " +
             ") " +
-            "select a.*, ifnull(b.num, 0) buyer, ifnull(c.num, 0) seller, user.user_name userName, concat('user_', user.user_phone) phoneId " +
+            "select a.*, ifnull(b.num, 0) buyer, ifnull(c.num, 0) seller, user.user_name userName, concat('user_', user.user_phone) phoneId, user.user_phone userPhone " +
             "from ( " +
             "    select userId, sum(num) num " +
             "    from record " +

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

@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="shop.alien.mapper.LifeUserDynamicsMapper">
+
+    <select id="getDynamicsList" resultType="shop.alien.entity.store.vo.LifeUserDynamicsVo">
+        select dyna1.*, COUNT(dyna1.id) AS fansCount from (
+        select dyna.*,COUNT(lc.id) AS commentCount,  COUNT(lm.id) AS transferNum from (
+        with dynamice as(
+        select
+        CASE
+        WHEN image_path REGEXP '.mp4|.avi|.flv|.mkv|.rmvb|.wmv|.3gp|.mov' THEN 2
+        WHEN image_path REGEXP '.jpg|.jpeg|.png|.bmp|.webp|.gif|.svg' THEN 1
+        ELSE 0
+        END AS dynamicsType,id, title, phone_id phoneId, context, image_path, address,address_name,address_context, liulan_count, dianzan_count, type, created_time, substring_index(phone_id, '_', 1) userType, substring_index(phone_id, '_', -1) phone, draft , address_province, top_status, top_time, enable_status
+        from life_user_dynamics
+        where delete_flag = 0 and draft = 0 order by created_time desc
+        )
+        select dynamice.*, user.nick_name userName, user.head_img userImage, info.id storeUserId, user.id storeOrUserId, 0 isExpert
+        from dynamice
+        left join store_user user on dynamice.phone = user.phone and user.delete_flag = 0
+        left join store_info info on info.id = user.store_id and info.delete_flag = 0
+        left join store_img img on img.store_id = user.store_id and img.img_type = '10' and img.delete_flag = 0
+        where dynamice.userType = 'store'
+        union
+        select dynamice.*, user.user_name userName, user.user_image userImage, user.id storeUserId, user.id storeOrUserId, IF(lue.expert_code IS NOT NULL , 1, 0) AS isExpert
+        from dynamice
+        join life_user user on dynamice.phone = user.user_phone and user.delete_flag = 0
+        left join life_user_expert  lue on lue.user_id = user.id and lue.delete_flag = 0
+        where dynamice.userType = 'user') dyna
+        left join life_comment lc on lc.dongtai_shequ_id = dyna.id
+        left join life_message lm on lm.business_id = dyna.id
+        GROUP BY dyna.id order by  dyna.created_time desc) dyna1
+        left join life_fans lf1 on lf1.followed_id =  dyna1.phoneId
+        where 1=1
+        <if test="nickName != null and nickName != ''">
+            AND dyna1.userName LIKE CONCAT('%', #{nickName}, '%')
+        </if>
+
+        <if test="userType != null and userType != ''">
+            AND dyna1.userType = #{userType}
+        </if>
+
+        <if test="dynamicsType != null and dynamicsType != ''">
+            AND dyna1.dynamicsType = #{dynamicsType}
+        </if>
+
+        <if test="releaseStartTime != null and releaseStartTime != ''">
+            AND dyna1.created_time >= #{releaseStartTime}
+        </if>
+
+        <if test="releaseEndTime != null and releaseEndTime != ''">
+            AND dyna1.created_time &lt;= #{releaseEndTime}
+        </if>
+        GROUP by dyna1.id order by dyna1.top_status desc, dyna1.top_time desc
+    </select>
+
+    <select id="getDynamicsDetail" resultType="shop.alien.entity.store.vo.LifeUserDynamicsVo">
+        select dyna1.*, COUNT(dyna1.id) AS fansCount from (
+        select dyna.*,COUNT(lc.id) AS commentCount,  COUNT(lm.id) AS transferNum from (
+        with dynamice as(
+        select id, title, phone_id phoneId, context, image_path, address,address_name,address_context, liulan_count, dianzan_count, type, created_time, substring_index(phone_id, '_', 1) userType, substring_index(phone_id, '_', -1) phone, draft , address_province, top_status, top_time, enable_status
+        from life_user_dynamics
+        where id = #{id} and delete_flag = 0 and draft = 0 order by created_time desc
+        )
+        select dynamice.*, user.nick_name userName, user.head_img userImage, info.id storeUserId, user.id storeOrUserId, 0 isExpert
+        from dynamice
+        left join store_user user on dynamice.phone = user.phone and user.delete_flag = 0
+        left join store_info info on info.id = user.store_id and info.delete_flag = 0
+        left join store_img img on img.store_id = user.store_id and img.img_type = '10' and img.delete_flag = 0
+        where dynamice.userType = 'store'
+        union
+        select dynamice.*, user.user_name userName, user.user_image userImage, user.id storeUserId, user.id storeOrUserId, IF(lue.expert_code IS NOT NULL , 1, 0) AS isExpert
+        from dynamice
+        join life_user user on dynamice.phone = user.user_phone and user.delete_flag = 0
+        left join life_user_expert  lue on lue.user_id = user.id and lue.delete_flag = 0
+        where dynamice.userType = 'user') dyna
+        left join life_comment lc on lc.dongtai_shequ_id = dyna.id
+        left join life_message lm on lm.business_id = dyna.id
+        GROUP BY dyna.id order by  dyna.created_time desc) dyna1
+        left join life_fans lf1 on lf1.followed_id =  dyna1.phoneId
+        GROUP by dyna1.id order by dyna1.top_status desc, dyna1.top_time desc
+    </select>
+
+</mapper>

+ 7 - 6
alien-second/src/main/java/shop/alien/second/service/impl/PlatformSecondTradeServiceImpl.java

@@ -95,6 +95,7 @@ public class PlatformSecondTradeServiceImpl extends ServiceImpl<SecondTradeRecor
             throw new Exception(e);
         }
     }
+
     @Override
     public List<JSONObject> getOperationJsonList(Integer tradeId) throws Exception {
         try {
@@ -180,7 +181,7 @@ public class PlatformSecondTradeServiceImpl extends ServiceImpl<SecondTradeRecor
                 // 第一个人签到
                 JSONObject signInJson = new JSONObject();
                 signInJson.put("flag", 1);
-                signInJson.put("message", (Objects.equals(record.getBuyerId(), signIn.get(0).getUserId()) ? "买家" : "卖家" ) + "已签到");
+                signInJson.put("message", (Objects.equals(record.getBuyerId(), signIn.get(0).getUserId()) ? "买家" : "卖家") + "已签到");
                 signInJson.put("time", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm").format(signIn.get(0).getCreatedTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()));
                 operationJsonList.add(signInJson);
 
@@ -188,13 +189,13 @@ public class PlatformSecondTradeServiceImpl extends ServiceImpl<SecondTradeRecor
                 if (signIn.size() > 1) {
                     JSONObject signInJson2 = new JSONObject();
                     signInJson2.put("flag", 1);
-                    signInJson2.put("message", (Objects.equals(record.getBuyerId(), signIn.get(1).getUserId()) ? "买家" : "卖家" ) + "已签到");
+                    signInJson2.put("message", (Objects.equals(record.getBuyerId(), signIn.get(1).getUserId()) ? "买家" : "卖家") + "已签到");
                     signInJson2.put("time", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm").format(signIn.get(1).getCreatedTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()));
                     operationJsonList.add(signInJson2);
                 } else {
                     JSONObject signInJson2 = new JSONObject();
                     signInJson2.put("flag", CollectionUtil.isEmpty(successFail) ? 0 : 2);
-                    signInJson2.put("message", (Objects.equals(record.getBuyerId(), signIn.get(0).getUserId()) ? "卖家" : "买家" ) + "未签到");
+                    signInJson2.put("message", (Objects.equals(record.getBuyerId(), signIn.get(0).getUserId()) ? "卖家" : "买家") + "未签到");
                     signInJson2.put("time", "");
                     operationJsonList.add(signInJson2);
                 }
@@ -227,7 +228,7 @@ public class PlatformSecondTradeServiceImpl extends ServiceImpl<SecondTradeRecor
                 // 第一个人确认交易
                 JSONObject successFailJson = new JSONObject();
                 successFailJson.put("flag", 1);
-                successFailJson.put("message", (Objects.equals(record.getBuyerId(), successFail.get(0).getUserId()) ? "买家" : "卖家" ) + "确认交易" +
+                successFailJson.put("message", (Objects.equals(record.getBuyerId(), successFail.get(0).getUserId()) ? "买家" : "卖家") + "确认交易" +
                         (5 == successFail.get(0).getType() ? "成功" : "失败"));
                 successFailJson.put("time", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm").format(successFail.get(0).getCreatedTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()));
                 operationJsonList.add(successFailJson);
@@ -236,14 +237,14 @@ public class PlatformSecondTradeServiceImpl extends ServiceImpl<SecondTradeRecor
                 if (successFail.size() > 1) {
                     JSONObject successFailJson2 = new JSONObject();
                     successFailJson2.put("flag", 1);
-                    successFailJson2.put("message", (Objects.equals(record.getBuyerId(), successFail.get(1).getUserId()) ? "买家" : "卖家" ) + "确认交易" +
+                    successFailJson2.put("message", (Objects.equals(record.getBuyerId(), successFail.get(1).getUserId()) ? "买家" : "卖家") + "确认交易" +
                             (5 == successFail.get(1).getType() ? "成功" : "失败"));
                     successFailJson2.put("time", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm").format(successFail.get(1).getCreatedTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()));
                     operationJsonList.add(successFailJson2);
                 } else {
                     JSONObject successFailJson2 = new JSONObject();
                     successFailJson2.put("flag", Objects.equals(record.getSellerId(), successFail.get(0).getUserId()) ? 2 : 0);
-                    successFailJson2.put("message", (Objects.equals(record.getBuyerId(), successFail.get(0).getUserId()) ? "卖家" : "买家" ) + "未确认交易");
+                    successFailJson2.put("message", (Objects.equals(record.getBuyerId(), successFail.get(0).getUserId()) ? "卖家" : "买家") + "未确认交易");
                     successFailJson2.put("time", "");
                     operationJsonList.add(successFailJson2);
                 }

+ 27 - 17
alien-second/src/main/java/shop/alien/second/service/impl/SecondTradeRecordServiceImpl.java

@@ -194,20 +194,22 @@ public class SecondTradeRecordServiceImpl extends ServiceImpl<SecondTradeRecordM
         try {
             // 交易信息
             SecondTradeRecord trade = secondTradeRecordMapper.selectById(tradeId);
-            if (trade.getTradeStatus() == 6) throw new BusinessException("该交易已取消,不可操作");
 
-            // 修改交易状态
-            SecondTradeRecord tradeRecord = new SecondTradeRecord();
-            tradeRecord.setId(tradeId);
-            tradeRecord.setTradeStatus(type == 1 ? 3 : 2);
-            secondTradeRecordMapper.updateById(tradeRecord);
-
-            // 保存交易操作表
-            SecondTradeOperation operation = new SecondTradeOperation();
-            operation.setTradeId(trade.getId());
-            operation.setUserId(Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId"));
-            operation.setType(type == 1 ? 3 : 2);
-            secondTradeOperationMapper.insert(operation);
+            // 有定时任务: 超过交易时间还未确认的交易会自动取消并保存交易操作表  所以如果是已取消的交易  不需要进行这两步操作
+            if (trade.getTradeStatus() != 6) {
+                // 修改交易状态
+                SecondTradeRecord tradeRecord = new SecondTradeRecord();
+                tradeRecord.setId(tradeId);
+                tradeRecord.setTradeStatus(type == 1 ? 3 : 2);
+                secondTradeRecordMapper.updateById(tradeRecord);
+
+                // 保存交易操作表
+                SecondTradeOperation operation = new SecondTradeOperation();
+                operation.setTradeId(trade.getId());
+                operation.setUserId(Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId"));
+                operation.setType(type == 1 ? 3 : 2);
+                secondTradeOperationMapper.insert(operation);
+            }
 
             // 商品信息
             SecondGoods goods = secondGoodsMapper.selectById(trade.getGoodsId());
@@ -217,15 +219,18 @@ public class SecondTradeRecordServiceImpl extends ServiceImpl<SecondTradeRecordM
 
             JSONObject lastMessageContent = JSONObject.parseObject(lastMessage.getContent());
             lastMessageContent.put("messageId", lastMessage.getId());
-            lastMessageContent.put("tradeStatus", type == 1 ? 3 : 2);
+            lastMessageContent.put("tradeStatus", trade.getTradeStatus() == 6 ? 6 : (type == 1 ? 3 : 2));
             LifeMessage message = new LifeMessage();
             message.setId(lastMessage.getId());
             message.setContent(lastMessageContent.toJSONString());
             lifeMessageMapper.updateById(message);
 
-            // 发送消息
-            trade.setTradeStatus(type == 1 ? 3 : 2);
-            sendMsg(goods, trade, trade.getTradeStatus(), "4");
+            // 如果交易已取消  不需要发送消息
+            if (trade.getTradeStatus() != 6) {
+                // 发送消息
+                trade.setTradeStatus(type == 1 ? 3 : 2);
+                sendMsg(goods, trade, trade.getTradeStatus(), "4");
+            }
 
             // 发起交易人信息
             Integer userId = Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId");
@@ -248,6 +253,11 @@ public class SecondTradeRecordServiceImpl extends ServiceImpl<SecondTradeRecordM
             alienStoreFeign.sendMsgToClientByPhoneId(phoneId, JSONObject.from(webSocketVo).toJSONString());
             alienStoreFeign.sendMsgToClientByPhoneId(receiverId, JSONObject.from(webSocketVo).toJSONString());
 
+            // 交易已取消
+            if (trade.getTradeStatus() == 6 ) {
+                throw new BusinessException("该交易已取消,不可操作");
+            }
+
             // 创建交易时间小于十分钟,直接发送交易提醒
             if (1 == type && Math.abs(Duration.between(Instant.now(), trade.getTransactionTime().toInstant()).getSeconds()) < 600) {
                 sendSignInMessage(trade);

+ 1 - 0
alien-store/src/main/java/shop/alien/store/config/WebSocketProcess.java

@@ -97,6 +97,7 @@ public class WebSocketProcess implements ApplicationContextAware {
             lifeMessage.setReceiverId(webSocketVo.getReceiverId());
             lifeMessage.setContent(webSocketVo.getText());
             lifeMessage.setType(webSocketVo.getType());
+            lifeMessage.setBusinessId(webSocketVo.getBusinessId());
             // 查询自己是否在对方的黑名单中
             if (baseRedisService.hasKey("blackList_" + webSocketVo.getSenderId())) {
                 List<String> blackList = baseRedisService.getList("blackList_" + webSocketVo.getSenderId());

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

@@ -17,10 +17,7 @@ import shop.alien.store.service.LifeUserDynamicsService;
 import shop.alien.util.common.ListToPage;
 import shop.alien.util.common.safe.*;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 用户动态
@@ -107,7 +104,7 @@ public class LifeUserDynamicsController {
             if ("high".equals(response.getRiskLevel())) {
                 return R.data(3);
             }
-
+            lifeUserDynamics.setUpdatedTime(new Date());
             int cnt = lifeUserDynamicsService.addOrUpdateStore(lifeUserDynamics);
             if (cnt == 0) {
                 return R.data(1);
@@ -184,4 +181,63 @@ public class LifeUserDynamicsController {
     public R<List<LifeUserDynamicsVo>> getDianZanList(@RequestParam(required = false) String phoneId) {
         return R.data(lifeUserDynamicsService.getDianZanList(phoneId));
     }
+
+    @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 = "nickName", value = "昵称", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "userType", value = "user-用户 store-商户", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "dynamicsType", value = "1-图片 2-视频", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "releaseStartTime", value = "发布开始时间", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "releaseEndTime", value = "发布结束时间", dataType = "String", paramType = "query")})
+    @GetMapping("/getDynamicsList")
+    public R<IPage<LifeUserDynamicsVo>> getDynamicsList(@RequestParam(defaultValue = "1") Integer page,
+                                                        @RequestParam(defaultValue = "10") Integer size,
+                                                        @RequestParam(required = false) String nickName,
+                                                        @RequestParam(required = false) String userType,
+                                                        @RequestParam(defaultValue = "0",required = false) Integer dynamicsType,
+                                                        @RequestParam(required = false) String releaseStartTime,
+                                                        @RequestParam(required = false) String releaseEndTime) {
+        log.info("LifeUserDynamicsController.getDynamicsList?page={}&size={}&nickName={}&userType={}&dynamicsType={}", page, size, nickName, userType, dynamicsType);
+        List<LifeUserDynamicsVo> stores = lifeUserDynamicsService.getDynamicsList(page, size, nickName, userType, dynamicsType, releaseStartTime, releaseEndTime);
+        return R.data(ListToPage.setPage(stores, page, size));
+    }
+
+
+    @ApiOperation("置顶/取消功能")
+    @ApiOperationSupport(order = 2)
+    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "用户动态ID", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "topStatus", value = "动态状态0-取消置顶,1-置顶", dataType = "Integer", paramType = "query")})
+    @PostMapping("setTopStatus")
+    public R setTopStatus(String id, int topStatus) {
+        log.info("LifeUserDynamicsController.setTopStatus?id={},topStatus={}", id, topStatus);
+        if (lifeUserDynamicsService.setTopStatus(id, topStatus) == 0){
+            return R.fail("操作失败");
+        }
+        return R.success("操作成功");
+    }
+
+    @ApiOperation("启用/禁用功能")
+    @ApiOperationSupport(order = 2)
+    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "用户动态ID", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "topStatus", value = "启用状态0-启用,1-禁用", dataType = "Integer", paramType = "query")})
+    @PostMapping("setEnableStatus")
+    public R setEnableStatus(String id, int enableStatus) {
+        log.info("LifeUserDynamicsController.setEnableStatus?id={},enableStatus={}", id, enableStatus);
+        if (lifeUserDynamicsService.enableStatus(id, enableStatus) == 0){
+            return R.fail("操作失败");
+        }
+        return R.success("操作成功");
+    }
+
+    @ApiOperation("查看动态详情")
+    @ApiOperationSupport(order = 1)
+    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "动态ID", dataType = "Integer", paramType = "query", required = true)})
+    @GetMapping("/getDynamicsDetail")
+    public R<LifeUserDynamicsVo> getDynamicsDetail(@RequestParam() Integer id) {
+        log.info("LifeUserDynamicsController.getDynamicsDetail?id={}", id);
+        LifeUserDynamicsVo lifeUserDynamicsVo = lifeUserDynamicsService.getDynamicsDetail(id);
+        return R.data(lifeUserDynamicsVo);
+    }
 }

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

@@ -1,12 +1,10 @@
 package shop.alien.store.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.*;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.StoreAppVersion;
 import shop.alien.store.service.StoreAppVersionService;
@@ -36,4 +34,22 @@ public class StoreAppVersionController {
         return R.data(storeAppVersionService.getLatestVersion(appType));
     }
 
+    @ApiOperation("保存或修改版本信息")
+    @ApiOperationSupport(order = 2)
+    @PostMapping("/saveVersionInfo")
+    public R<StoreAppVersion> saveVersionInfo(@RequestBody StoreAppVersion storeAppVersion) {
+        return storeAppVersionService.saveVersionInfo(storeAppVersion) ? R.success("成功") : R.fail("失败");
+    }
+
+    @ApiOperation("列表分页查询")
+    @ApiOperationSupport(order = 3)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "appType", value = "app类型: 1:用户端, 2:商家端", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "pageSize", value = "条数", dataType = "Integer", paramType = "query", required = true, defaultValue = "10"),
+            @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "Integer", paramType = "query", required = true, defaultValue = "1")
+    })
+    @GetMapping("/getList")
+    public R<IPage<StoreAppVersion>> getList(Integer appType, Integer pageSize, Integer pageNum) {
+        return R.data(storeAppVersionService.getList(appType, pageSize, pageNum));
+    }
 }

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

@@ -1,6 +1,8 @@
 package shop.alien.store.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.*;
 import lombok.RequiredArgsConstructor;
@@ -423,4 +425,17 @@ public class StoreUserController {
         log.info("StoreUserController.havePayPassword?storeUserId={},password={}",storeUserId,password);
         return storeUserService.havePayPassword(storeUserId,password);
     }
+
+    /**
+     * 支付设置增加支付宝账户
+     */
+    @ApiOperation("支付设置增加支付宝账户")
+    @PostMapping("/addAlipayAccount")
+    public R<Integer> addAlipayAccount(@RequestBody StoreUserVo storeUserVo) {
+        log.info("StoreUserController.addAlipayAccount?storeUserVo={}", storeUserVo);
+        LambdaUpdateWrapper<StoreUser> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+        lambdaUpdateWrapper.set(StoreUser :: getAlipayAccount, storeUserVo.getAlipayAccount());
+        lambdaUpdateWrapper.eq(StoreUser :: getId, storeUserVo.getId());
+        return R.data(storeUserMapper.update(null,lambdaUpdateWrapper));
+    }
 }

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

@@ -57,6 +57,21 @@ public class LifeUserDynamicsService extends ServiceImpl<LifeUserDynamicsMapper,
         return lifeUserDynamicsMapper.update(null, lambdaUpdateWrapper);
     }
 
+    public int setTopStatus(String id, int topStatus) {
+        LambdaUpdateWrapper<LifeUserDynamics> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+        lambdaUpdateWrapper.eq(LifeUserDynamics::getId, id);
+        lambdaUpdateWrapper.set(LifeUserDynamics::getTopStatus, topStatus);
+        lambdaUpdateWrapper.set(LifeUserDynamics::getTopTime, new Date());
+        return lifeUserDynamicsMapper.update(null, lambdaUpdateWrapper);
+    }
+
+    public int enableStatus(String id, int enableStatus) {
+        LambdaUpdateWrapper<LifeUserDynamics> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+        lambdaUpdateWrapper.eq(LifeUserDynamics::getId, id);
+        lambdaUpdateWrapper.set(LifeUserDynamics::getEnableStatus, enableStatus);
+        return lifeUserDynamicsMapper.update(null, lambdaUpdateWrapper);
+    }
+
     public int addOrUpdateStore(LifeUserDynamics store) {
         if (StringUtils.isEmpty(store.getId())) {
             Date nowDate = new Date(System.currentTimeMillis());
@@ -428,7 +443,7 @@ public class LifeUserDynamicsService extends ServiceImpl<LifeUserDynamicsMapper,
                 new QueryWrapper<LifeUserDynamics>()
                         .eq("phone_id", phoneId)
                         .eq("draft", 1)
-                        .orderByDesc("updated_time")
+                        .orderByAsc("updated_time")
         );
 
 //        for (LifeUserDynamics lifeUserDynamic : lifeUserDynamics) {
@@ -450,4 +465,20 @@ public class LifeUserDynamicsService extends ServiceImpl<LifeUserDynamicsMapper,
         }
         return  lifeUserDynamicsVos;
     }
+
+    public List<LifeUserDynamicsVo> getDynamicsList(Integer page, Integer size, String nickName, String userType, Integer dynamicsType, String releaseStartTime, String releaseEndTime) {
+        // 查询动态数据并按类型过滤
+        List<LifeUserDynamicsVo> lifeUserDynamicsVoList = lifeUserDynamicsMapper.getDynamicsList(nickName, userType, dynamicsType, releaseStartTime, releaseEndTime);
+
+        return lifeUserDynamicsVoList;
+    }
+
+    public LifeUserDynamicsVo getDynamicsDetail(Integer id) {
+        // 查询动态数据并按类型过滤
+        List<LifeUserDynamicsVo> lifeUserDynamicsVoList = lifeUserDynamicsMapper.getDynamicsDetail(id);
+        if(!CollectionUtils.isEmpty(lifeUserDynamicsVoList)){
+            return lifeUserDynamicsVoList.get(0);
+        }
+        return new LifeUserDynamicsVo();
+    }
 }

+ 19 - 0
alien-store/src/main/java/shop/alien/store/service/StoreAppVersionService.java

@@ -1,5 +1,6 @@
 package shop.alien.store.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import shop.alien.entity.store.StoreAppVersion;
 
@@ -18,4 +19,22 @@ public interface StoreAppVersionService extends IService<StoreAppVersion> {
      * @return StoreAppVersion
      */
     StoreAppVersion getLatestVersion(Integer appType);
+
+    /**
+     * 保存或修改版本信息
+     *
+     * @param storeAppVersion App版本类
+     * @return int
+     */
+    boolean saveVersionInfo(StoreAppVersion storeAppVersion);
+
+    /**
+     * 列表分页查询
+     *
+     * @param appType  app类型: 1:用户端, 2:商家端
+     * @param pageSize 条数
+     * @param pageNum  页数
+     * @return list
+     */
+    IPage<StoreAppVersion> getList(Integer appType, Integer pageSize, Integer pageNum);
 }

+ 70 - 69
alien-store/src/main/java/shop/alien/store/service/impl/LifeDiscountCouponServiceImpl.java

@@ -1,4 +1,3 @@
-
 package shop.alien.store.service.impl;
 
 import com.alibaba.nacos.common.utils.CollectionUtils;
@@ -345,79 +344,81 @@ public class LifeDiscountCouponServiceImpl extends ServiceImpl<LifeDiscountCoupo
     @Override
     public List<LifeDiscountCouponVo> getStoreUserCouponList(String storeId, UserLoginInfo userLoginInfo) {
         List<LifeDiscountCouponVo> lifeDiscountCouponVos = new ArrayList<>();
-        LocalDate now = LocalDate.now();
-        LocalDateTime now1 = now.atStartOfDay();
-        //根据店铺id查询该店铺的优惠券,状态是开启领取的券
-        List<LifeDiscountCoupon> lifeDiscountCoupons = lifeDiscountCouponMapper.selectList(new LambdaQueryWrapper<LifeDiscountCoupon>().eq(LifeDiscountCoupon::getStoreId, storeId).eq(LifeDiscountCoupon::getGetStatus, "1").gt(LifeDiscountCoupon::getSingleQty, 0) //还有库存
-                .ge(LifeDiscountCoupon::getEndGetDate, now).orderByDesc(LifeDiscountCoupon::getCreatedTime));
-        //根据优惠券列表查询该优惠券是否领取过
-        for (LifeDiscountCoupon lifeDiscountCoupon : lifeDiscountCoupons) {
-            LifeDiscountCouponVo lifeDiscountCouponVo = new LifeDiscountCouponVo();
-            lifeDiscountCouponVo.setCouponId(lifeDiscountCoupon.getId());
-            BeanUtils.copyProperties(lifeDiscountCoupon, lifeDiscountCouponVo);
-            //查询该人员该卡券是否达到限领数量
-            LambdaQueryWrapper<LifeDiscountCouponUser> queryWrapper = new LambdaQueryWrapper<>();
-            queryWrapper.eq(LifeDiscountCouponUser::getCouponId, lifeDiscountCoupon.getId());
-            queryWrapper.eq(LifeDiscountCouponUser::getUserId, userLoginInfo.getUserId());
-            queryWrapper.orderByDesc(LifeDiscountCouponUser::getReceiveTime);
-            List<LifeDiscountCouponUser> lifeDiscountCouponUsers = lifeDiscountCouponUserMapper.selectList(queryWrapper);
-            String specifiedDay = lifeDiscountCoupon.getSpecifiedDay();
-            Date receiveDay = null;
-
-            //判断是否已经全部领取
-            if (lifeDiscountCoupon.getRestrictedQuantity() != 0 && lifeDiscountCouponUsers.size() >= lifeDiscountCoupon.getRestrictedQuantity()) {
-                receiveDay = lifeDiscountCouponUsers.get(0).getReceiveTime();
-                lifeDiscountCouponVo.setExpirationTime(lifeDiscountCouponUsers.get(0).getExpirationTime());
-                lifeDiscountCouponVo.setCanReceived(false);
-            } else {
-                //判断一下领取规则
-                LambdaQueryWrapper<LifeDiscountCouponUnavailableRules> rulesLambdaQueryWrapper = new LambdaQueryWrapper<>();
-                rulesLambdaQueryWrapper.eq(LifeDiscountCouponUnavailableRules::getDiscountCouponId, lifeDiscountCoupon.getId());
-                rulesLambdaQueryWrapper.eq(LifeDiscountCouponUnavailableRules::getUnavailableRuleType, DiscountCouponEnum.CLAIM_RULE.getValue());
-                LifeDiscountCouponUnavailableRules lifeDiscountCouponUnavailableRules = lifeDiscountCouponUnavailableRulesMapper.selectOne(rulesLambdaQueryWrapper);
-                //获取一下当前人员领取的最近一次领取
-                if (lifeDiscountCouponUsers.size() == 0) {
-                    lifeDiscountCouponVo.setCanReceived(true);
+        try{
+            LocalDateTime now = LocalDateTime.now();
+            //根据店铺id查询该店铺的优惠券,状态是开启领取的券
+            List<LifeDiscountCoupon> lifeDiscountCoupons = lifeDiscountCouponMapper.selectList(new LambdaQueryWrapper<LifeDiscountCoupon>().eq(LifeDiscountCoupon::getStoreId, storeId).eq(LifeDiscountCoupon::getGetStatus, "1") //还有库存
+                    .ge(LifeDiscountCoupon::getEndGetDate, LocalDate.now()).orderByDesc(LifeDiscountCoupon::getCreatedTime));
+            //根据优惠券列表查询该优惠券是否领取过
+            for (LifeDiscountCoupon lifeDiscountCoupon : lifeDiscountCoupons) {
+                LifeDiscountCouponVo lifeDiscountCouponVo = new LifeDiscountCouponVo();
+                lifeDiscountCouponVo.setCouponId(lifeDiscountCoupon.getId());
+                BeanUtils.copyProperties(lifeDiscountCoupon, lifeDiscountCouponVo);
+                //查询该人员该卡券是否达到限领数量
+                LambdaQueryWrapper<LifeDiscountCouponUser> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.eq(LifeDiscountCouponUser::getCouponId, lifeDiscountCoupon.getId());
+                queryWrapper.eq(LifeDiscountCouponUser::getUserId, userLoginInfo.getUserId());
+                queryWrapper.orderByDesc(LifeDiscountCouponUser::getReceiveTime);
+                List<LifeDiscountCouponUser> lifeDiscountCouponUsers = lifeDiscountCouponUserMapper.selectList(queryWrapper);
+                String specifiedDay = lifeDiscountCoupon.getSpecifiedDay();
+                Date receiveDay = null;
+
+                //判断是否已经全部领取
+                if (lifeDiscountCoupon.getRestrictedQuantity() != 0 && lifeDiscountCouponUsers.size() >= lifeDiscountCoupon.getRestrictedQuantity()) {
+                    receiveDay = lifeDiscountCouponUsers.get(0).getReceiveTime();
+                    lifeDiscountCouponVo.setExpirationTime(lifeDiscountCouponUsers.get(0).getExpirationTime());
+                    lifeDiscountCouponVo.setCanReceived(false);
                 } else {
-                    LifeDiscountCouponUser lifeDiscountCouponUser = lifeDiscountCouponUsers.get(0);
-                    Date receiveTime = lifeDiscountCouponUser.getReceiveTime();
-                    receiveDay = lifeDiscountCouponUser.getReceiveTime();
-
-                    // 将 Date 转换为 Instant
-                    Instant instant = receiveTime.toInstant();
-                    // 获取系统默认时区
-                    ZoneId zoneId = ZoneId.systemDefault();
-                    // 将 Instant 转换为 LocalDateTime
-                    LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
-
-                    String unavailableRuleValue = lifeDiscountCouponUnavailableRules.getUnavailableRuleValue();
-                    long confineTo = 0L;
-                    if (DiscountCouponEnum.DAY.getValue().equals(unavailableRuleValue)) {//如果规则限制一天一张
-                        confineTo = ChronoUnit.DAYS.between(localDateTime, now1);
-                    } else if (DiscountCouponEnum.WEEK.getValue().equals(unavailableRuleValue)) {//如果规则限制一周一张
-                        confineTo = ChronoUnit.WEEKS.between(localDateTime, now1);
-                    } else if (DiscountCouponEnum.MONTH.getValue().equals(unavailableRuleValue)) {//如果规则限制一月一张
-                        confineTo = ChronoUnit.MONTHS.between(localDateTime, now1);
-                    } else if (DiscountCouponEnum.YEAR.getValue().equals(unavailableRuleValue)) {//如果规则限制一年一张
-                        confineTo = ChronoUnit.YEARS.between(localDateTime, now1);
+                    //判断一下领取规则
+                    LambdaQueryWrapper<LifeDiscountCouponUnavailableRules> rulesLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                    rulesLambdaQueryWrapper.eq(LifeDiscountCouponUnavailableRules::getDiscountCouponId, lifeDiscountCoupon.getId());
+                    rulesLambdaQueryWrapper.eq(LifeDiscountCouponUnavailableRules::getUnavailableRuleType, DiscountCouponEnum.CLAIM_RULE.getValue());
+                    LifeDiscountCouponUnavailableRules lifeDiscountCouponUnavailableRules = lifeDiscountCouponUnavailableRulesMapper.selectOne(rulesLambdaQueryWrapper);
+                    //获取一下当前人员领取的最近一次领取
+                    if (lifeDiscountCouponUsers.size() == 0) {
+                        lifeDiscountCouponVo.setCanReceived(true);
+                    } else {
+                        LifeDiscountCouponUser lifeDiscountCouponUser = lifeDiscountCouponUsers.get(0);
+                        Date receiveTime = lifeDiscountCouponUser.getReceiveTime();
+                        receiveDay = lifeDiscountCouponUser.getReceiveTime();
+
+                        // 将 Date 转换为 Instant
+                        Instant instant = receiveTime.toInstant();
+                        // 获取系统默认时区
+                        ZoneId zoneId = ZoneId.systemDefault();
+                        // 将 Instant 转换为 LocalDateTime
+                        LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
+                        String unavailableRuleValue = lifeDiscountCouponUnavailableRules.getUnavailableRuleValue();
+                        long confineTo = 0L;
+                        if (DiscountCouponEnum.DAY.getValue().equals(unavailableRuleValue)) {//如果规则限制一天一张
+                            confineTo = ChronoUnit.DAYS.between(localDateTime, now);
+                        } else if (DiscountCouponEnum.WEEK.getValue().equals(unavailableRuleValue)) {//如果规则限制一周一张
+                            confineTo = ChronoUnit.WEEKS.between(localDateTime, now);
+                        } else if (DiscountCouponEnum.MONTH.getValue().equals(unavailableRuleValue)) {//如果规则限制一月一张
+                            confineTo = ChronoUnit.MONTHS.between(localDateTime, now);
+                        } else if (DiscountCouponEnum.YEAR.getValue().equals(unavailableRuleValue)) {//如果规则限制一年一张
+                            confineTo = ChronoUnit.YEARS.between(localDateTime, now);
+                        }
+                        //如果在规则范围内,则不允许领取,范围外,则可以领取
+                        lifeDiscountCouponVo.setCanReceived(confineTo >= 1);
+                        lifeDiscountCouponVo.setExpirationTime(lifeDiscountCouponUser.getExpirationTime());
                     }
-                    //如果在规则范围内,则不允许领取,范围外,则可以领取
-                    lifeDiscountCouponVo.setCanReceived(confineTo >= 1);
-                    lifeDiscountCouponVo.setExpirationTime(lifeDiscountCouponUser.getExpirationTime());
                 }
-            }
-            if (!StringUtils.isEmpty(specifiedDay)) {
-                int sDay = Integer.parseInt(specifiedDay);
-                if (sDay > 0 && receiveDay != null) {
-                    Date validDate = addDaysToDateJava8(receiveDay, sDay);
-                    LocalDate validDateLocalDate = validDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
-                    lifeDiscountCouponVo.setValidDate(validDateLocalDate);
-                } else {
-                    lifeDiscountCouponVo.setValidDate(null);
+                if (!StringUtils.isEmpty(specifiedDay)) {
+                    int sDay = Integer.parseInt(specifiedDay);
+                    if (sDay > 0 && receiveDay != null) {
+                        Date validDate = addDaysToDateJava8(receiveDay, sDay);
+                        LocalDate validDateLocalDate = validDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+                        lifeDiscountCouponVo.setValidDate(validDateLocalDate);
+                    } else {
+                        lifeDiscountCouponVo.setValidDate(null);
+                    }
                 }
+                lifeDiscountCouponVo.setQuantityClaimed(lifeDiscountCouponUsers.size());
+                lifeDiscountCouponVos.add(lifeDiscountCouponVo);
             }
-            lifeDiscountCouponVo.setQuantityClaimed(lifeDiscountCouponUsers.size());
-            lifeDiscountCouponVos.add(lifeDiscountCouponVo);
+        } catch (Exception e) {
+            log.error("LifeDiscountCouponServiceImpl.getStoreUserUsableCouponList ERROR Msg={}", e);
         }
         return lifeDiscountCouponVos;
     }

+ 17 - 10
alien-store/src/main/java/shop/alien/store/service/impl/LifeDiscountCouponUserServiceImpl.java

@@ -117,16 +117,23 @@ public class LifeDiscountCouponUserServiceImpl extends ServiceImpl<LifeDiscountC
             //是否领取优惠券收藏店铺
             Integer attentionCanReceived = lifeDiscountCoupon.getAttentionCanReceived();
             if(attentionCanReceived != null && attentionCanReceived == 1){
-                LifeCollect lifeCollect = new LifeCollect();
-                lifeCollect.setStoreId(lifeDiscountCoupon.getStoreId());
-                lifeCollect.setUserId(lifeDiscountCouponUserDto.getUserId().toString());
-                lifeCollectMapper.insert(lifeCollect);
-
-                //同步店铺收藏数量
-                if (!StringUtils.isEmpty(lifeCollect.getStoreId())) {
-                    LambdaQueryWrapper<LifeCollect> queryWrapper = new LambdaQueryWrapper<>();
-                    queryWrapper.eq(LifeCollect::getStoreId, lifeCollect.getStoreId());
-                    storeInfoMapper.update(null, new LambdaUpdateWrapper<StoreInfo>().eq(StoreInfo::getId, lifeCollect.getStoreId()).set(StoreInfo::getCollectNum, lifeCollectMapper.selectCount(queryWrapper)));
+
+                LambdaQueryWrapper<LifeCollect> lifeCollectLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                lifeCollectLambdaQueryWrapper.eq(LifeCollect::getStoreId, lifeDiscountCoupon.getStoreId());
+                lifeCollectLambdaQueryWrapper.eq(LifeCollect::getUserId, lifeDiscountCouponUserDto.getUserId());
+                lifeCollectLambdaQueryWrapper.eq(LifeCollect::getDeleteFlag, 0);
+                int lifeCollectCount = lifeCollectMapper.selectCount(lifeCollectLambdaQueryWrapper);
+                if(lifeCollectCount == 0){
+                    LifeCollect lifeCollect = new LifeCollect();
+                    lifeCollect.setStoreId(lifeDiscountCoupon.getStoreId());
+                    lifeCollect.setUserId(lifeDiscountCouponUserDto.getUserId().toString());
+                    lifeCollectMapper.insert(lifeCollect);
+                    //同步店铺收藏数量
+                    if (!StringUtils.isEmpty(lifeCollect.getStoreId())) {
+                        LambdaQueryWrapper<LifeCollect> queryWrapper = new LambdaQueryWrapper<>();
+                        queryWrapper.eq(LifeCollect::getStoreId, lifeCollect.getStoreId());
+                        storeInfoMapper.update(null, new LambdaUpdateWrapper<StoreInfo>().eq(StoreInfo::getId, lifeCollect.getStoreId()).set(StoreInfo::getCollectNum, lifeCollectMapper.selectCount(queryWrapper)));
+                    }
                 }
             }
         } catch (Exception e) {

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

@@ -321,7 +321,7 @@ public class LifeGroupPackageServiceImpl extends ServiceImpl<LifeGroupPackageMap
         QueryWrapper<LifeCouponVo> wrapper = new QueryWrapper<>();
         wrapper.eq(StringUtils.isNotEmpty(storeId), "coupon.store_id ", storeId)
 //                .eq(StringUtils.isNotEmpty(status), "coupon.status", status)
-                .eq("coupon.type", 2)
+                .eq("coupon.type", 1)
                 .eq("coupon.delete_flag", 0)
                 .and(StringUtils.isNotEmpty(couponCode) || StringUtils.isNotEmpty(name), wq -> wq.like(StringUtils.isNotEmpty(couponCode), "coupon.coupon_code", couponCode)
                         .or()

+ 38 - 3
alien-store/src/main/java/shop/alien/store/service/impl/StoreAppVersionServiceImpl.java

@@ -1,8 +1,11 @@
 package shop.alien.store.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import shop.alien.entity.store.StoreAppVersion;
 import shop.alien.mapper.StoreAppVersionMapper;
 import shop.alien.store.service.StoreAppVersionService;
@@ -25,9 +28,41 @@ public class StoreAppVersionServiceImpl extends ServiceImpl<StoreAppVersionMappe
     @Override
     public StoreAppVersion getLatestVersion(Integer appType) {
         LambdaQueryWrapper<StoreAppVersion> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-        lambdaQueryWrapper.eq(StoreAppVersion::getAppType, appType)
-                .orderByDesc(StoreAppVersion::getVersionNum)
-                .last("limit 1");
+        lambdaQueryWrapper.eq(StoreAppVersion::getAppType, appType).orderByDesc(StoreAppVersion::getVersionNum).last("limit 1");
         return this.getOne(lambdaQueryWrapper);
     }
+
+    /**
+     * 保存或修改版本信息
+     *
+     * @param storeAppVersion App版本类
+     * @return int
+     */
+    @Transactional
+    @Override
+    public boolean saveVersionInfo(StoreAppVersion storeAppVersion) {
+        LambdaQueryWrapper<StoreAppVersion> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(StoreAppVersion::getAppType, storeAppVersion.getAppType()).orderByDesc(StoreAppVersion::getVersionNum).last("limit 1");
+        StoreAppVersion one = this.getOne(lambdaQueryWrapper);
+        storeAppVersion.setVersionNum(one.getVersionNum() + 1);
+        return this.saveOrUpdate(storeAppVersion);
+    }
+
+    /**
+     * 列表分页查询
+     *
+     * @param appType  app类型: 1:用户端, 2:商家端
+     * @param pageSize 条数
+     * @param pageNum  页数
+     * @return list
+     */
+    @Override
+    public IPage<StoreAppVersion> getList(Integer appType, Integer pageSize, Integer pageNum) {
+        IPage<StoreAppVersion> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<StoreAppVersion> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(null != appType, StoreAppVersion::getAppType, appType);
+        lambdaQueryWrapper.orderByDesc(StoreAppVersion::getCreatedTime);
+        return this.page(page, lambdaQueryWrapper);
+    }
+
 }

+ 36 - 16
alien-store/src/main/java/shop/alien/store/service/impl/StoreIncomeDetailsRecordServiceImpl.java

@@ -131,29 +131,49 @@ public class StoreIncomeDetailsRecordServiceImpl extends ServiceImpl<StoreIncome
                 //调用支付宝转账
                 BigDecimal decimal = new BigDecimal(withdrawalMoney);
                 BigDecimal divide = decimal.divide(new BigDecimal(100), 2, RoundingMode.DOWN);
-                if (Double.parseDouble(divide.toString()) < 0.10) {
+                if (Double.parseDouble(divide.toString()) < 0.1) {
                     return R.fail("金额不能小于0.1元");
                 }
+                StoreAliPayLog pay = new StoreAliPayLog();
+                if(StringUtils.isNotBlank(storeUser.getAlipayAccount())){
+                    pay = aliApi.pay(storeUser.getName(), storeUser.getIdCard(), storeUser.getAlipayAccount(), divide.toString());
+                }else{
+                    pay = aliApi.pay(storeUser.getName(), storeUser.getIdCard(), storeUser.getPhone(), divide.toString());
+                }
                 //增加提现记录
-//                StoreAliPayLog pay = aliApi.pay(storeUser.getName(), storeUser.getIdCard(), storeUser.getPhone(), divide.toString());
                 StoreCashOutRecord storeCashOutRecord = new StoreCashOutRecord();
-                storeCashOutRecord.setStoreId(storeId);
-//                storeCashOutRecord.setOrderNo(pay.getOutBizNo());
-                storeCashOutRecord.setMoney(withdrawalMoney);
-                // 手续费不是减过了吗
+                if(pay != null){
+                    storeCashOutRecord.setStoreId(storeId);
+                    storeCashOutRecord.setOrderNo(pay.getOutBizNo());
+                    storeCashOutRecord.setMoney(withdrawalMoney);
+                    // 手续费不是减过了吗
 //                storeCashOutRecord.setCommission(commission);
-                storeCashOutRecord.setCashOutType(0);
-//                storeCashOutRecord.setAliOrderNo(pay.getOrderId());
-                storeCashOutRecord.setPaymentDate(new Date());
-                storeCashOutRecord.setPaymentStatus(3);
-                storeCashOutRecord.setDeleteFlag(0);
-                storeCashOutRecord.setStoreUserId(storeUser.getId());
+                    storeCashOutRecord.setCashOutType(0);
+                    storeCashOutRecord.setAliOrderNo(pay.getOrderId());
+                    storeCashOutRecord.setPaymentDate(new Date());
+                    storeCashOutRecord.setPaymentStatus(1);
+                    storeCashOutRecord.setDeleteFlag(0);
+                    storeCashOutRecord.setStoreUserId(storeUser.getId());
 //                storeCashOutRecord.setIncomeStartTime(startDate);
 //                storeCashOutRecord.setIncomeEndTime(endDate);
-                storeCashOutRecordMapper.insert(storeCashOutRecord);
-                //减少账户余额
-                storeUserMapper.updateById(new StoreUser(storeUser.getId(), storeUser.getMoney() - withdrawalMoney));
-                return R.data(storeCashOutRecord);
+                    storeCashOutRecordMapper.insert(storeCashOutRecord);
+                    //减少账户余额
+                    storeUserMapper.updateById(new StoreUser(storeUser.getId(), storeUser.getMoney() - withdrawalMoney));
+                    return R.data(storeCashOutRecord);
+                }else{
+                    // 提现失败
+                    storeCashOutRecord.setStoreId(storeId);
+                    storeCashOutRecord.setPaymentStatus(2);
+                    storeCashOutRecord.setCashOutType(0);
+                    storeCashOutRecord.setDeleteFlag(0);
+                    storeCashOutRecord.setMoney(withdrawalMoney);
+//                    storeCashOutRecord.setApproveTime(new Date());// 审批时间
+                    storeCashOutRecord.setFailReason("支付失败");
+                    storeCashOutRecord.setPayDate(new Date());//支付时间
+                    storeCashOutRecord.setStoreUserId(storeUser.getId());
+                    storeCashOutRecordMapper.insert(storeCashOutRecord);
+                    return R.fail("提现失败");
+                }
             }
             return R.fail("余额不足");
         }

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

@@ -34,10 +34,7 @@ import shop.alien.mapper.*;
 import shop.alien.store.config.BaseRedisService;
 import shop.alien.store.config.GaoDeMapUtil;
 import shop.alien.store.config.WebSocketProcess;
-import shop.alien.store.service.NearMeService;
-import shop.alien.store.service.StoreClockInService;
-import shop.alien.store.service.StoreCommentService;
-import shop.alien.store.service.StoreInfoService;
+import shop.alien.store.service.*;
 import shop.alien.store.util.CommonConstant;
 import shop.alien.store.util.FileUploadUtil;
 import shop.alien.store.util.GroupConstant;
@@ -46,7 +43,7 @@ import shop.alien.util.common.DistanceUtil;
 import shop.alien.util.common.constant.CouponStatusEnum;
 import shop.alien.util.common.constant.CouponTypeEnum;
 import shop.alien.util.common.constant.OrderStatusEnum;
-
+import javax.annotation.Resource;
 import java.io.File;
 import java.io.IOException;
 import java.net.URLEncoder;
@@ -92,6 +89,8 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
 
     private final BaseRedisService baseRedisService;
 
+    private final TagStoreRelationMapper tagStoreRelationMapper;
+
     private final NearMeService nearMeService;
 
     private final WebAuditMapper webAuditMapper;
@@ -127,6 +126,9 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
     private final AliOSSUtil aliOSSUtil;
 
     private final WebSocketProcess webSocketProcess;
+    @Resource
+    private StoreIncomeDetailsRecordService storeIncomeDetailsRecordService;
+
 
     @Value("${spring.web.resources.excel-path}")
     private String excelPath;
@@ -644,6 +646,19 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
                 storeImgMapper.insert(storeImg);
         }
 
+        //初始化标签数据
+        LambdaQueryWrapper<TagStoreRelation> tagStoreRelationLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        tagStoreRelationLambdaQueryWrapper.eq(TagStoreRelation::getStoreId, storeInfo.getId());
+        tagStoreRelationLambdaQueryWrapper.eq(TagStoreRelation::getDeleteFlag, 0);
+        int tagStoreCount = tagStoreRelationMapper.selectCount(tagStoreRelationLambdaQueryWrapper);
+        if(tagStoreCount == 0){
+            TagStoreRelation tagStoreRelation = new TagStoreRelation();
+            tagStoreRelation.setStoreId(storeInfo.getId());
+            tagStoreRelation.setDeleteFlag(0);
+            tagStoreRelationMapper.insert(tagStoreRelation);
+        }
+
+
         // 发送通知
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         String commonDate = simpleDateFormat.format(new Date());
@@ -1047,8 +1062,8 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
         // 当前登录用户是否收藏
         LambdaUpdateWrapper<LifeCollect> shouCangWrapper = new LambdaUpdateWrapper<>();
         shouCangWrapper.eq(LifeCollect::getUserId, userId).eq(LifeCollect::getStoreId, storeId);
-        LifeCollect shouCang = lifeCollectMapper.selectOne(shouCangWrapper);
-        if (null == shouCang) {
+        List<LifeCollect> shouCangList = lifeCollectMapper.selectList(shouCangWrapper);
+        if (null == shouCangList || shouCangList.isEmpty()) {
             result.setCollection(0);
         } else {
             result.setCollection(1);
@@ -1917,10 +1932,21 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
         LambdaQueryWrapper<StoreInfo> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(StoreInfo::getId, id);
         StoreInfo storeInfo = storeInfoMapper.selectOne(queryWrapper);
+//      当前时间 string类型的当前时间
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Date date = new Date();
+        String formattedDate = sdf.format(date);
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(Calendar.DAY_OF_YEAR, -4);
+        Date startDay = calendar.getTime();
+        String startDayS = sdf.format(startDay);
+        JSONObject  jsonObject =storeIncomeDetailsRecordService.noYetPayment(id, 0, 0,startDayS,formattedDate, 1, 10);
+        String moneyNew = jsonObject.getString("money");
         if (storeInfo != null) {
             //判断店铺存在未体现金额 0:未通过 1:通过
             StoreUser storeUser = storeUserMapper.selectOne(new LambdaQueryWrapper<StoreUser>().eq(StoreUser::getStoreId, id));
-            if (storeUser.getMoney() != null && storeUser.getMoney() > 0) {
+            if (storeUser.getMoney() != null && storeUser.getMoney() > 0 && !"0.00".equals(moneyNew)) {
                 storeInfoMap.put("storeMoneyStatus", "0");
             } else {
                 storeInfoMap.put("storeMoneyStatus", "1");
@@ -1932,14 +1958,20 @@ public class StoreInfoServiceImpl extends ServiceImpl<StoreInfoMapper, StoreInfo
             } else {
                 storeInfoMap.put("storeOrderStatus", "1");
             }
-            //判断店铺存在正在售卖的商品 0:未通过 1:通过
+            //判断店铺存在正在售卖的商品 0:未通过 1:通过  storeGoodsStatus 代金券   storeGroupStatus 团购
             List<LifeGroupBuyMain> lifeGroupBuyMainList = lifeGroupBuyMainMapper.selectList(new LambdaQueryWrapper<LifeGroupBuyMain>().eq(LifeGroupBuyMain::getStoreId, id).eq(LifeGroupBuyMain::getStatus, 5).eq(LifeGroupBuyMain::getDeleteFlag, 0));
             List<LifeCoupon> lifeCoupons = lifeCouponMapper.selectList(new LambdaQueryWrapper<LifeCoupon>().in(LifeCoupon::getStatus, 5).and(qw -> qw.gt(LifeCoupon::getSingleQty, 0)).eq(LifeCoupon::getStoreId, id).eq(LifeCoupon::getType, 1).eq(LifeCoupon::getDeleteFlag, 0));
-            if (!CollectionUtils.isEmpty(lifeCoupons) || !CollectionUtils.isEmpty(lifeGroupBuyMainList)) {
+            if (!CollectionUtils.isEmpty(lifeCoupons) ) {
                 storeInfoMap.put("storeGoodsStatus", "0");
             } else {
                 storeInfoMap.put("storeGoodsStatus", "1");
             }
+            if (!CollectionUtils.isEmpty(lifeGroupBuyMainList)) {
+                storeInfoMap.put("storeGroupStatus", "0");
+            } else {
+                storeInfoMap.put("storeGroupStatus", "1");
+            }
+
         }
         return storeInfoMap;
     }