Kaynağa Gözat

update: 修改签到返回的样式

gaohp 1 yıl önce
ebeveyn
işleme
6b39a90a7c
11 değiştirilmiş dosya ile 280 ekleme ve 2 silme
  1. 11 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/signin/AppMemberSignInRecordController.java
  2. 28 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/signin/vo/record/AppMemberSignInConfigMoonRespVO.java
  3. 16 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/signin/vo/record/Days.java
  4. 24 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/signin/vo/record/Rules.java
  5. 7 2
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/convert/signin/MemberSignInRecordConvert.java
  6. 16 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/dal/mysql/signin/MemberSignInRecordMapper.java
  7. 8 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/signin/MemberSignInRecordService.java
  8. 71 0
      feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/signin/MemberSignInRecordServiceImpl.java
  9. 56 0
      feifan-module-mp/feifan-module-mp-biz/src/main/java/cn/newfeifan/mall/module/mp/controller/login/AppLoginController.java
  10. 17 0
      feifan-module-mp/feifan-module-mp-biz/src/main/java/cn/newfeifan/mall/module/mp/controller/login/vo/Oauth2Token.java
  11. 26 0
      feifan-module-mp/feifan-module-mp-biz/src/main/java/cn/newfeifan/mall/module/mp/controller/login/vo/SNSUserInfo.java

+ 11 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/signin/AppMemberSignInRecordController.java

@@ -4,6 +4,7 @@ import cn.newfeifan.mall.framework.common.pojo.CommonResult;
 import cn.newfeifan.mall.framework.common.pojo.PageParam;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.security.core.annotations.PreAuthenticated;
+import cn.newfeifan.mall.module.member.controller.app.signin.vo.record.AppMemberSignInConfigMoonRespVO;
 import cn.newfeifan.mall.module.member.controller.app.signin.vo.record.AppMemberSignInRecordRespVO;
 import cn.newfeifan.mall.module.member.controller.app.signin.vo.record.AppMemberSignInRecordSummaryRespVO;
 import cn.newfeifan.mall.module.member.convert.signin.MemberSignInRecordConvert;
@@ -38,6 +39,16 @@ public class AppMemberSignInRecordController {
         return success(signInRecordService.getSignInRecordSummary(getLoginUserId()));
     }
 
+
+    @GetMapping("/get-own-signInMoon")
+    @Operation(summary = "获取个人当月签到进度")
+    @PreAuthenticated
+    public CommonResult<AppMemberSignInConfigMoonRespVO> getOwnSignInMoon() {
+        AppMemberSignInConfigMoonRespVO appMemberSignInConfigMoonRespVO = signInRecordService.getOwnSignInMoon(getLoginUserId());
+        return success(appMemberSignInConfigMoonRespVO);
+    }
+
+
     @PostMapping("/create")
     @Operation(summary = "签到")
     @PreAuthenticated

+ 28 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/signin/vo/record/AppMemberSignInConfigMoonRespVO.java

@@ -0,0 +1,28 @@
+package cn.newfeifan.mall.module.member.controller.app.signin.vo.record;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class AppMemberSignInConfigMoonRespVO {
+
+    /**
+     * 签到规则
+     */
+    private List<Days> days;
+    /**
+     * 连续签到的天数
+     */
+    private int continueDays;
+
+    private Rules rules;
+
+}

+ 16 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/signin/vo/record/Days.java

@@ -0,0 +1,16 @@
+package cn.newfeifan.mall.module.member.controller.app.signin.vo.record;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class Days {
+    private int isSign;
+    private int isReplenish;
+    private Date date;
+    private Long time;
+    private int day;
+    private String week;
+    private String current;
+}

+ 24 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/controller/app/signin/vo/record/Rules.java

@@ -0,0 +1,24 @@
+package cn.newfeifan.mall.module.member.controller.app.signin.vo.record;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class Rules {
+    private String everyday;
+    private String isInc;
+    private String incNum;
+    private String untilDay;
+    private List<String> discounts;
+    private String isReplenish;
+    private String replenishDays;
+    private String replenishLimit;
+    private String replenishNum;
+}

+ 7 - 2
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/convert/signin/MemberSignInRecordConvert.java

@@ -13,6 +13,7 @@ import cn.newfeifan.mall.module.member.dal.dataobject.user.MemberUserDO;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
 
+import java.time.LocalDate;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
@@ -50,9 +51,13 @@ public interface MemberSignInRecordConvert {
         MemberSignInConfigDO lastConfig = CollUtil.getLast(configs); // 最大签到天数配置
         // 1.2. 计算今天是第几天签到 (只有连续签到才加否则重置为 1)
         int day = 1;
-        if (lastRecord != null && DateUtils.isYesterday(lastRecord.getCreateTime())) {
+        // 获取当月对应的天数
+        LocalDate today = LocalDate.now();
+        day = today.getDayOfMonth();
+
+        /*if (lastRecord != null && DateUtils.isYesterday(lastRecord.getCreateTime())) {
             day = lastRecord.getDay() + 1;
-        }
+        }*/
         // 1.3 判断是否超出了最大签到配置
         if (day > lastConfig.getDay()) {
             day = 1; // 超过最大配置的天数,重置到第一天。(也就是说开启下一轮签到)

+ 16 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/dal/mysql/signin/MemberSignInRecordMapper.java

@@ -9,6 +9,7 @@ import cn.newfeifan.mall.module.member.dal.dataobject.signin.MemberSignInRecordD
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Set;
 
@@ -62,4 +63,19 @@ public interface MemberSignInRecordMapper extends BaseMapperX<MemberSignInRecord
         return selectList(MemberSignInRecordDO::getUserId, userId);
     }
 
+    /**
+     * 获取用户的签到记录列表信息
+     *
+     * @param userId  用户编号
+     * @param from
+     * @param frommed
+     * @return 签到记录信息
+     */
+    default List<MemberSignInRecordDO> selectListByUserIdInCurrentMoon(Long userId, Date from, Date frommed) {
+        return selectList(new LambdaQueryWrapperX<MemberSignInRecordDO>()
+                .between(MemberSignInRecordDO::getCreateTime, from, frommed)
+                .eq(MemberSignInRecordDO::getUserId, userId)
+        );
+    }
+
 }

+ 8 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/signin/MemberSignInRecordService.java

@@ -3,6 +3,7 @@ package cn.newfeifan.mall.module.member.service.signin;
 import cn.newfeifan.mall.framework.common.pojo.PageParam;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.module.member.controller.admin.signin.vo.record.MemberSignInRecordPageReqVO;
+import cn.newfeifan.mall.module.member.controller.app.signin.vo.record.AppMemberSignInConfigMoonRespVO;
 import cn.newfeifan.mall.module.member.controller.app.signin.vo.record.AppMemberSignInRecordSummaryRespVO;
 import cn.newfeifan.mall.module.member.dal.dataobject.signin.MemberSignInRecordDO;
 
@@ -47,4 +48,11 @@ public interface MemberSignInRecordService {
     AppMemberSignInRecordSummaryRespVO getSignInRecordSummary(Long userId);
 
 
+    /**
+     * 获取当前登录用户当月的登录信息
+     * @param loginUserId
+     * @return
+     */
+    AppMemberSignInConfigMoonRespVO getOwnSignInMoon(Long loginUserId);
+
 }

+ 71 - 0
feifan-module-member/feifan-module-member-biz/src/main/java/cn/newfeifan/mall/module/member/service/signin/MemberSignInRecordServiceImpl.java

@@ -8,7 +8,10 @@ import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.common.util.date.DateUtils;
 import cn.newfeifan.mall.framework.common.util.object.ObjectUtils;
 import cn.newfeifan.mall.module.member.controller.admin.signin.vo.record.MemberSignInRecordPageReqVO;
+import cn.newfeifan.mall.module.member.controller.app.signin.vo.record.AppMemberSignInConfigMoonRespVO;
 import cn.newfeifan.mall.module.member.controller.app.signin.vo.record.AppMemberSignInRecordSummaryRespVO;
+import cn.newfeifan.mall.module.member.controller.app.signin.vo.record.Days;
+import cn.newfeifan.mall.module.member.controller.app.signin.vo.record.Rules;
 import cn.newfeifan.mall.module.member.convert.signin.MemberSignInRecordConvert;
 import cn.newfeifan.mall.module.member.dal.dataobject.signin.MemberSignInConfigDO;
 import cn.newfeifan.mall.module.member.dal.dataobject.signin.MemberSignInRecordDO;
@@ -25,6 +28,10 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Set;
 
@@ -84,6 +91,70 @@ public class MemberSignInRecordServiceImpl implements MemberSignInRecordService
         return summary;
     }
 
+    @Override
+    public AppMemberSignInConfigMoonRespVO getOwnSignInMoon(Long loginUserId) {
+
+        // 获取当前月份, 天数 , 星期数
+        List<Days> days = generateDaysForCurrentMonth();
+        LocalDate today = LocalDate.now();
+        LocalDate firstDayOfMonth = today.withDayOfMonth(1);
+        LocalDate lastDayOfMonth = today.withDayOfMonth(today.lengthOfMonth());
+
+        // 获取签到的天数
+        // 查询用户当月的签到情况
+        List<MemberSignInRecordDO> lastRecordInMoon = signInRecordMapper.selectListByUserIdInCurrentMoon(loginUserId,
+                Date.from(firstDayOfMonth.atStartOfDay(ZoneId.systemDefault()).toInstant()),
+                Date.from(lastDayOfMonth.atStartOfDay(ZoneId.systemDefault()).toInstant())
+        );
+        for (MemberSignInRecordDO memberSignInRecordDO : lastRecordInMoon) {
+            updateDayByNumber(days,memberSignInRecordDO.getDay());
+        }
+
+        MemberSignInRecordDO lastRecord = signInRecordMapper.selectLastRecordByUserId(loginUserId);
+        return AppMemberSignInConfigMoonRespVO.builder()
+                .days(days)
+                .continueDays(lastRecord.getDay())
+                .rules(Rules.builder().build())
+                .continueDays(0).build();
+    }
+
+
+    public static void updateDayByNumber(List<Days> daysList, int day) {
+        for (Days dayObj : daysList) {
+            if (dayObj.getDay() == day) {
+                dayObj.setIsSign(1);
+                dayObj.setIsReplenish(0);
+                break;
+            }
+        }
+    }
+
+
+    public static List<Days> generateDaysForCurrentMonth() {
+        List<Days> daysList = new ArrayList<>();
+        LocalDate today = LocalDate.now();
+        LocalDate firstDayOfMonth = today.withDayOfMonth(1);
+        LocalDate lastDayOfMonth = today.withDayOfMonth(today.lengthOfMonth());
+
+        for (LocalDate date = firstDayOfMonth; date.isBefore(lastDayOfMonth.plusDays(1)); date = date.plusDays(1)) {
+            Days day = new Days();
+            day.setDate(Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant()));
+            day.setTime(day.getDate().getTime());
+            day.setDay(date.getDayOfMonth());
+            day.setWeek(date.getDayOfWeek().toString());
+
+            if (date.isBefore(today)) {
+                day.setCurrent("before");
+            } else if (date.equals(today)) {
+                day.setCurrent("today");
+            } else {
+                day.setCurrent("after");
+            }
+            daysList.add(day);
+        }
+        return daysList;
+    }
+
     @Override
     public PageResult<MemberSignInRecordDO> getSignInRecordPage(MemberSignInRecordPageReqVO pageReqVO) {
         // 根据用户昵称查询出用户ids

+ 56 - 0
feifan-module-mp/feifan-module-mp-biz/src/main/java/cn/newfeifan/mall/module/mp/controller/login/AppLoginController.java

@@ -0,0 +1,56 @@
+package cn.newfeifan.mall.module.mp.controller.login;
+
+import cn.newfeifan.mall.framework.common.pojo.CommonResult;
+import cn.newfeifan.mall.module.mp.controller.admin.account.vo.MpAccountCreateReqVO;
+import cn.newfeifan.mall.module.mp.service.account.MpAccountService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+import java.io.BufferedReader;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.Base64;
+
+import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "商城移动端 - 创建公众号账号")
+@RestController
+@RequestMapping("/mp/app")
+@Validated
+public class AppLoginController {
+
+    @Resource
+    private MpAccountService mpAccountService;
+
+    @PostMapping("/authorize")
+    @Operation(summary = "引导用户授权")
+    @PreAuthorize("@ss.hasPermission('mp:account:create')")
+    public CommonResult<Long> createAccount(@Valid @RequestBody MpAccountCreateReqVO createReqVO) throws UnsupportedEncodingException {
+        String appid = "wxbb000000000e";
+        String uri = "wftest.zzff.net/wx/weixinLogin";
+        uri = URLEncoder.encode(uri, "UTF-8");
+        String result = "";
+        BufferedReader in = null;
+
+        try {
+            String urlNameString = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + uri + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
+        } catch (Exception e) {
+
+        }
+        return success(mpAccountService.createAccount(createReqVO));
+    }
+
+
+    // todo 创建一个接口, 用于接收回调信息
+
+
+}

+ 17 - 0
feifan-module-mp/feifan-module-mp-biz/src/main/java/cn/newfeifan/mall/module/mp/controller/login/vo/Oauth2Token.java

@@ -0,0 +1,17 @@
+package cn.newfeifan.mall.module.mp.controller.login.vo;
+
+import lombok.Data;
+
+@Data
+public class Oauth2Token {
+    // 网页授权接口调用凭证
+    private String accessToken;
+    // 凭证有效时长
+    private int expiresIn;
+    // 用于刷新凭证
+    private String refreshToken;
+    // 用户标识
+    private String openId;
+    // 用户授权作用域
+    private String scope;
+}

+ 26 - 0
feifan-module-mp/feifan-module-mp-biz/src/main/java/cn/newfeifan/mall/module/mp/controller/login/vo/SNSUserInfo.java

@@ -0,0 +1,26 @@
+package cn.newfeifan.mall.module.mp.controller.login.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SNSUserInfo {
+    // 用户标识
+    private String openId;
+    // 用户昵称
+    private String nickname;
+    // 性别(1是男性,2是女性,0是未知)
+    private int sex;
+    // 国家
+    private String country;
+    // 省份
+    private String province;
+    // 城市
+    private String city;
+    // 用户头像链接
+    private String headImgUrl;
+    // 用户特权信息
+    private List<String> privilegeList;
+    private String unionid;
+}