Browse Source

Merge remote-tracking branch 'origin/develop' into develop

tangxiangan 2 years ago
parent
commit
485d33746e
24 changed files with 554 additions and 59 deletions
  1. 6 1
      backend-core/src/main/java/cn/kdan/pdf/backend/core/config/oauth/AuthExceptionEntryPoint.java
  2. 36 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/AdvertisementController.java
  3. 34 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/AvatarController.java
  4. 31 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/DeviceController.java
  5. 4 4
      backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/MembersController.java
  6. 45 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/enums/LanguageEnum.java
  7. 10 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/enums/ProviderEnum.java
  8. 1 1
      backend-core/src/main/java/cn/kdan/pdf/backend/core/model/member/SubPricing.java
  9. 22 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/params/QueryAdvertisementParam.java
  10. 25 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/pojo/app/AdvertisementVo.java
  11. 27 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/pojo/app/MemberInfoVo.java
  12. 19 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/AdvertisementService.java
  13. 26 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/AvatarService.java
  14. 8 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/DeviceService.java
  15. 15 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/MemberService.java
  16. 8 6
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/SocialAccountService.java
  17. 47 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/AdvertisementServiceImpl.java
  18. 6 3
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/AuthServiceImpl.java
  19. 40 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/AvatarServiceImpl.java
  20. 23 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/DeviceServiceImpl.java
  21. 37 6
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/MemberServiceImpl.java
  22. 2 13
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/PricingServiceImpl.java
  23. 46 25
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/SocialAccountServiceImpl.java
  24. 36 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/utils/CommonBusinessUtils.java

+ 6 - 1
backend-core/src/main/java/cn/kdan/pdf/backend/core/config/oauth/AuthExceptionEntryPoint.java

@@ -2,6 +2,7 @@ package cn.kdan.pdf.backend.core.config.oauth;
 
 import cn.kdan.pdf.backend.core.constant.AuthConstant;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.oauth2.common.exceptions.InvalidTokenException;
 import org.springframework.security.web.AuthenticationEntryPoint;
@@ -13,6 +14,7 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
+@Slf4j
 public class AuthExceptionEntryPoint implements AuthenticationEntryPoint {
     /**
      * 处理token过期的返回内容
@@ -31,7 +33,10 @@ public class AuthExceptionEntryPoint implements AuthenticationEntryPoint {
             map.put("code", AuthConstant.EXCEPTION_CODE_USER_NOT_LOGIN);
             map.put("msg", AuthConstant.EXCEPTION_MSG_USER_NOT_LOGIN);
         }
-        map.put("data", authException.getMessage());
+        //modify app端解析该内容报错,故置空该返回值 by songfuqiang 2022年12月16日09:34:01
+//        map.put("data", authException.getMessage());
+        log.info(map.get("msg").toString() + ":" + authException.getMessage());
+        map.put("data", "");
         map.put("path", request.getServletPath());
         map.put("timestamp", String.valueOf(System.currentTimeMillis()));
         response.setContentType("application/json");

+ 36 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/AdvertisementController.java

@@ -0,0 +1,36 @@
+package cn.kdan.pdf.backend.core.controller;
+
+import cn.kdan.pdf.backend.core.params.QueryAdvertisementParam;
+import cn.kdan.pdf.backend.core.pojo.app.AdvertisementVo;
+import cn.kdan.pdf.backend.core.service.AdvertisementService;
+import constant.CommonConstant;
+import org.springframework.beans.factory.annotation.Autowired;
+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 pojo.AppRequestParam;
+import pojo.AppResultMap;
+
+/**
+ * @author sfq
+ * @description
+ */
+@RestController
+@RequestMapping("/advertisement")
+public class AdvertisementController {
+
+    @Autowired
+    private AdvertisementService advertisementService;
+
+    /**
+     * 条件查询广告数据
+     * @param param 查询条件
+     * @return 广告信息
+     */
+    @PostMapping("/fetchOne")
+    public AppResultMap<AdvertisementVo> fetchOne(@RequestBody AppRequestParam<QueryAdvertisementParam> param){
+        return new AppResultMap<>(CommonConstant.SUCCESS,CommonConstant.CODE_SUCCESS,advertisementService.fetchOne(param.getData()));
+    }
+
+}

+ 34 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/AvatarController.java

@@ -0,0 +1,34 @@
+package cn.kdan.pdf.backend.core.controller;
+
+import cn.kdan.pdf.backend.core.model.Avatars;
+import cn.kdan.pdf.backend.core.service.AvatarService;
+import constant.CommonConstant;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import pojo.AppResultMap;
+
+import java.util.List;
+
+/**
+ * @author sfq
+ * @description
+ */
+@RestController
+@RequestMapping("/avatar")
+public class AvatarController {
+
+    @Autowired
+    private AvatarService avatarService;
+
+    /**
+     * 查询头像列表
+     * @return 头像列表信息
+     */
+    @GetMapping("/list")
+    public AppResultMap<List<Avatars>> list(){
+        return new AppResultMap(CommonConstant.SUCCESS,CommonConstant.CODE_SUCCESS,avatarService.list());
+    }
+
+}

+ 31 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/DeviceController.java

@@ -0,0 +1,31 @@
+package cn.kdan.pdf.backend.core.controller;
+
+import cn.kdan.pdf.backend.core.params.RelationParam;
+import cn.kdan.pdf.backend.core.service.DeviceService;
+import constant.CommonConstant;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import pojo.AppRequestParam;
+import pojo.AppResultMap;
+import pojo.Device;
+
+/**
+ * @author sfq
+ * @description
+ */
+@RestController
+@RequestMapping("/device")
+public class DeviceController {
+
+    @Autowired
+    private DeviceService deviceService;
+
+    @PutMapping("/updateInfo")
+    public AppResultMap<Device> updateInfo(@RequestBody AppRequestParam<RelationParam> param){
+        return new AppResultMap(CommonConstant.SUCCESS,CommonConstant.CODE_SUCCESS,deviceService.updateInfo(param.getData()));
+    }
+
+}

+ 4 - 4
backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/MembersController.java

@@ -11,10 +11,10 @@ import cn.kdan.pdf.backend.core.model.member.ModifyPasswordReq;
 import cn.kdan.pdf.backend.core.params.BindAccountParam;
 import cn.kdan.pdf.backend.core.params.UserResetPwdParams;
 import cn.kdan.pdf.backend.core.pojo.app.BindAccountVo;
+import cn.kdan.pdf.backend.core.pojo.app.MemberInfoVo;
 import cn.kdan.pdf.backend.core.pojo.app.MemberVo;
 import cn.kdan.pdf.backend.core.service.AuthService;
 import cn.kdan.pdf.backend.core.service.MemberService;
-import com.sun.org.apache.xpath.internal.objects.XString;
 import constant.CommonConstant;
 import exception.BackendRuntimeException;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -165,8 +165,8 @@ public class MembersController {
      * @return 用户信息
      */
     @GetMapping("appGetMemberInfo")
-    public AppResultMap<MemberInfoResp> appGetMemberInfo(@RequestParam("subscription") String subscription, @RequestParam("withSocial") String withSocial){
-        return new AppResultMap<>(CommonConstant.SUCCESS,CommonConstant.CODE_SUCCESS,memberService.getMemberDetail(null));
+    public AppResultMap<MemberInfoVo> appGetMemberInfo(@RequestParam("subscription") String subscription, @RequestParam("withSocial") String withSocial){
+        return new AppResultMap<>(CommonConstant.SUCCESS,CommonConstant.CODE_SUCCESS,memberService.appGetMemberInfo(subscription, withSocial));
     }
 
     /**
@@ -175,7 +175,7 @@ public class MembersController {
      * @return 用户信息
      */
     @PutMapping("appModifyName")
-    public AppResultMap<MemberVo> appModifyName(@RequestParam("name") AppRequestParam<String> param){
+    public AppResultMap<MemberVo> appModifyName(@RequestBody AppRequestParam<String> param){
         return new AppResultMap<>(CommonConstant.SUCCESS,CommonConstant.CODE_SUCCESS,memberService.appModifyName(param.getData()));
     }
 

+ 45 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/enums/LanguageEnum.java

@@ -0,0 +1,45 @@
+package cn.kdan.pdf.backend.core.enums;
+
+/**
+ * @author : sfq
+ * @date : 2022/12/14 19:47
+ * @description 'zh-CN': 0, 'en': 1
+ */
+public enum LanguageEnum {
+
+    /**
+     * web端
+     */
+    ZH_CN("zh-CN",0),
+    /**
+     * 安卓端
+     */
+    EN("en",1);
+
+    private final String name;
+    private final Integer value;
+
+    LanguageEnum(String name, Integer value){
+        this.name = name;
+        this.value = value;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public Integer getValue() {
+        return value;
+    }
+
+    public static Integer getCodeByName(String name){
+        Integer value = 0;
+        for (LanguageEnum languageEnum : LanguageEnum.values()) {
+            if(languageEnum.getName().equals(name)){
+                value = languageEnum.getValue();
+            }
+        }
+        return value;
+    }
+
+}

+ 10 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/enums/ProviderEnum.java

@@ -42,4 +42,14 @@ public enum ProviderEnum {
         }
         return value;
     }
+
+    public static String getNameByCode(Integer code){
+        String value = "tencent";
+        for (ProviderEnum providerEnum : ProviderEnum.values()) {
+            if(providerEnum.getValue().equals(code)){
+                value = providerEnum.getName();
+            }
+        }
+        return value;
+    }
 }

+ 1 - 1
backend-core/src/main/java/cn/kdan/pdf/backend/core/model/member/SubPricing.java

@@ -13,7 +13,7 @@ public class SubPricing {
     private Float price;
     private Date startDate;
     private Integer status;
-    private String targetId;
+    private Integer targetId;
     private String targetType;
     private String totalPeriod;
     private Integer totalPoints;

+ 22 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/params/QueryAdvertisementParam.java

@@ -0,0 +1,22 @@
+package cn.kdan.pdf.backend.core.params;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+/**
+ * @author sfq
+ * @description
+ */
+@Data
+public class QueryAdvertisementParam {
+
+    private String slug;
+
+    private String dimension;
+
+    private String language;
+
+    @JsonProperty("version_name")
+    private String versionName;
+
+}

+ 25 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/pojo/app/AdvertisementVo.java

@@ -0,0 +1,25 @@
+package cn.kdan.pdf.backend.core.pojo.app;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author sfq
+ * @description
+ */
+@Data
+public class AdvertisementVo {
+
+    private String id;
+    private String slug;
+    private String language;
+    private String title;
+    private String dimension;
+    private String linkText;
+    private String linkUrl;
+    private String description;
+    private String imageUrl;
+    private Map<String, String> imageUrls;
+
+}

+ 27 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/pojo/app/MemberInfoVo.java

@@ -0,0 +1,27 @@
+package cn.kdan.pdf.backend.core.pojo.app;
+
+import cn.kdan.pdf.backend.core.model.member.MemberInfo;
+import cn.kdan.pdf.backend.core.model.member.SubPricing;
+import cn.kdan.pdf.backend.core.model.member.SubSetPricing;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author sfq
+ * @description
+ */
+@Data
+public class MemberInfoVo {
+
+    private String type;
+
+    private MemberInfo memberInfo;
+
+    private List<SubPricing> pricingList;
+
+    private List<SubSetPricing> setPricingList;
+
+    private List<SocialAccountVo> socialAccountList;
+
+}

+ 19 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/AdvertisementService.java

@@ -0,0 +1,19 @@
+package cn.kdan.pdf.backend.core.service;
+
+import cn.kdan.pdf.backend.core.params.QueryAdvertisementParam;
+import cn.kdan.pdf.backend.core.pojo.app.AdvertisementVo;
+
+/**
+ * @author : sfq
+ * @date : 2022/12/14 17:45
+ */
+public interface AdvertisementService {
+
+    /**
+     * 查询广告数据
+     * @param param 查询条件
+     * @return 广告信息
+     */
+    AdvertisementVo fetchOne(QueryAdvertisementParam param);
+
+}

+ 26 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/AvatarService.java

@@ -0,0 +1,26 @@
+package cn.kdan.pdf.backend.core.service;
+
+import cn.kdan.pdf.backend.core.model.Avatars;
+
+import java.util.List;
+
+/**
+ * @author : sfq
+ * @date : 2022/12/14 16:32
+ */
+public interface AvatarService {
+
+    /**
+     * 查询头像列表信息
+     * @return 头像信息集合
+     */
+    List<Avatars> list();
+
+    /**
+     * 根据用户id查询头像路径
+     * @param memberId 用户id
+     * @return 头像路径
+     */
+    String selectByMemberId(String memberId);
+
+}

+ 8 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/DeviceService.java

@@ -1,6 +1,8 @@
 package cn.kdan.pdf.backend.core.service;
 
 import cn.kdan.pdf.backend.core.model.Devices;
+import cn.kdan.pdf.backend.core.params.RelationParam;
+import pojo.Device;
 
 /**
  * @author : SongFuQiang
@@ -30,4 +32,10 @@ public interface DeviceService {
      */
     void update(Devices device, String uuid);
 
+    /**
+     * 更新设备信息
+     * @param param device+location
+     * @return device
+     */
+    Device updateInfo(RelationParam param);
 }

+ 15 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/MemberService.java

@@ -8,6 +8,7 @@ import cn.kdan.pdf.backend.core.model.member.ModifyPasswordReq;
 import cn.kdan.pdf.backend.core.params.BindAccountParam;
 import cn.kdan.pdf.backend.core.params.UserResetPwdParams;
 import cn.kdan.pdf.backend.core.pojo.app.BindAccountVo;
+import cn.kdan.pdf.backend.core.pojo.app.MemberInfoVo;
 import cn.kdan.pdf.backend.core.pojo.app.MemberVo;
 
 public interface MemberService {
@@ -103,4 +104,18 @@ public interface MemberService {
      * @return 用户信息
      */
     MemberVo appModifyName(String name);
+
+    /**
+     * 根据用户id删除用户
+     * @param memberId 用户ID
+     */
+    void deleteByMemberId(String memberId);
+
+    /**
+     * app获取用户信息
+     * @param subscription 1:不显示订阅信息 0:显示订阅信息
+     * @param withSocial 如果是QQ、微信登录,传入字段可实现第三方登录的信息。0:不显示, 1:显示
+     * @return 用户详细信息
+     */
+    MemberInfoVo appGetMemberInfo(String subscription, String withSocial);
 }

+ 8 - 6
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/SocialAccountService.java

@@ -3,6 +3,9 @@ package cn.kdan.pdf.backend.core.service;
 import cn.kdan.pdf.backend.core.model.Members;
 import cn.kdan.pdf.backend.core.model.SocialAccounts;
 import cn.kdan.pdf.backend.core.params.BindAccountParam;
+import cn.kdan.pdf.backend.core.pojo.app.SocialAccountVo;
+
+import java.util.List;
 
 /**
  * @author : SongFuQiang
@@ -27,10 +30,9 @@ public interface SocialAccountService {
     /**
      * 根据用户id查询社交账号表数据
      * @param userId 用户id
-     * @param provider 第三方
      * @return 社交账号信息
      */
-    SocialAccounts selectByMemberId(String userId, Integer provider);
+    List<SocialAccounts> selectByMemberId(String userId);
 
     /**
      * 根据用户id删除社交账号信息
@@ -42,14 +44,14 @@ public interface SocialAccountService {
      * 绑定社交账号
      * @param member 当前用户
      * @param param 绑定参数
+     * @param socialAccountVo 社交账号返回信息
      */
-    String bindSocialAccount(Members member, BindAccountParam param);
+    String bindSocialAccount(Members member, BindAccountParam param, SocialAccountVo socialAccountVo);
 
     /**
      * 解绑账号
      * @param currentUser 当前用户
-     * @param param 绑定参数
-     * @return socialAccount的id
+     * @param provider 第三方
      */
-    String unbindSocialAccount(Members currentUser, BindAccountParam param);
+    void unbindSocialAccount(Members currentUser, String provider, SocialAccountVo accountVo);
 }

+ 47 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/AdvertisementServiceImpl.java

@@ -0,0 +1,47 @@
+package cn.kdan.pdf.backend.core.service.impl;
+
+import cn.kdan.pdf.backend.core.enums.LanguageEnum;
+import cn.kdan.pdf.backend.core.mapper.AdvertisementsMapper;
+import cn.kdan.pdf.backend.core.model.Advertisements;
+import cn.kdan.pdf.backend.core.model.AdvertisementsExample;
+import cn.kdan.pdf.backend.core.params.QueryAdvertisementParam;
+import cn.kdan.pdf.backend.core.pojo.app.AdvertisementVo;
+import cn.kdan.pdf.backend.core.service.AdvertisementService;
+import cn.kdan.pdf.backend.core.utils.CommonBusinessUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * @author sfq
+ * @description
+ */
+@Service
+public class AdvertisementServiceImpl implements AdvertisementService {
+
+    @Autowired
+    private AdvertisementsMapper advertisementsMapper;
+
+    @Override
+    public AdvertisementVo fetchOne(QueryAdvertisementParam param) {
+        AdvertisementVo vo = new AdvertisementVo();
+        String dimension = param.getDimension();
+        String slug = param.getSlug();
+        String versionName = param.getVersionName();
+        String language = param.getLanguage();
+        language = CommonBusinessUtils.judgeLanguage(language);
+        AdvertisementsExample example = new AdvertisementsExample();
+        example.createCriteria().andDimensionEqualTo(dimension).andSlugEqualTo(slug).andLanguageEqualTo(LanguageEnum.getCodeByName(language));
+        List<Advertisements> advertisementList = advertisementsMapper.selectByExample(example);
+        if(CollectionUtils.isEmpty(advertisementList)){
+            Advertisements adv = advertisementList.get(0);
+            BeanUtils.copyProperties(adv,vo);
+            vo.setImageUrl(adv.getImage());
+        }
+        return vo;
+    }
+
+}

+ 6 - 3
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/AuthServiceImpl.java

@@ -99,6 +99,8 @@ public class AuthServiceImpl implements AuthService {
     private LocationService locationService;
     @Resource
     private MemberServiceImpl memberService;
+    @Resource
+    private AvatarService avatarService;
 
     @Override
     public OauthClientDetails getById(String clientId) {
@@ -292,22 +294,23 @@ public class AuthServiceImpl implements AuthService {
                 if(ObjectUtils.isEmpty(member)) {
                     member = new Members();
                     member.setName(String.valueOf(System.currentTimeMillis()).substring(0, 10));
+                    member.setPhone(account);
                     memberId = memberService.insertMembers(member, password);
                     memberVo.setName(member.getName());
                     memberVo.setEmail(member.getEmail());
                     memberVo.setPhone(member.getPhone());
                     memberVo.setPhoneZone(member.getPhoneZone());
                     memberVo.setTimeZone(member.getTimeZone());
-                    memberVo.setAvatarUrl("");
+                    memberVo.setAvatarUrl(avatarService.selectByMemberId(memberId));
                 }else {
                     if("false".equals(password)){
                         memberVo.setName(member.getName());
                         memberVo.setEmail(member.getEmail());
                         memberVo.setPhone(member.getPhone());
                         memberVo.setPhoneZone(member.getPhoneZone());
-                        memberVo.setAvatarUrl("");
                         memberVo.setTimeZone(member.getTimeZone());
                         memberId = member.getId();
+                        memberVo.setAvatarUrl(avatarService.selectByMemberId(memberId));
                     }
                 }
             }else {
@@ -320,9 +323,9 @@ public class AuthServiceImpl implements AuthService {
                         memberVo.setEmail(member.getEmail());
                         memberVo.setPhone(member.getPhone());
                         memberVo.setPhoneZone(member.getPhoneZone());
-                        memberVo.setAvatarUrl("");
                         memberVo.setTimeZone(member.getTimeZone());
                         memberId = member.getId();
+                        memberVo.setAvatarUrl(avatarService.selectByMemberId(memberId));
                     }else {
                         throw new BackendRuntimeException("账号/密码输入有误");
                     }

+ 40 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/AvatarServiceImpl.java

@@ -0,0 +1,40 @@
+package cn.kdan.pdf.backend.core.service.impl;
+
+import cn.kdan.pdf.backend.core.mapper.AvatarsMapper;
+import cn.kdan.pdf.backend.core.model.Avatars;
+import cn.kdan.pdf.backend.core.model.AvatarsExample;
+import cn.kdan.pdf.backend.core.service.AvatarService;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author sfq
+ * @description
+ */
+@Service
+public class AvatarServiceImpl implements AvatarService {
+
+    @Resource
+    private AvatarsMapper avatarsMapper;
+
+    @Override
+    public List<Avatars> list() {
+        AvatarsExample example = new AvatarsExample();
+        example.createCriteria().andMemberIdIsNull();
+        return avatarsMapper.selectByExample(example);
+    }
+
+    @Override
+    public String selectByMemberId(String memberId) {
+        AvatarsExample example = new AvatarsExample();
+        example.createCriteria().andMemberIdEqualTo(memberId);
+        List<Avatars> avatars = avatarsMapper.selectByExample(example);
+        if(CollectionUtils.isEmpty(avatars)){
+            return "";
+        }
+        return avatars.get(0).getAvatar();
+    }
+}

+ 23 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/DeviceServiceImpl.java

@@ -3,12 +3,17 @@ package cn.kdan.pdf.backend.core.service.impl;
 import cn.kdan.pdf.backend.core.mapper.DevicesMapper;
 import cn.kdan.pdf.backend.core.model.Devices;
 import cn.kdan.pdf.backend.core.model.DevicesExample;
+import cn.kdan.pdf.backend.core.model.Members;
+import cn.kdan.pdf.backend.core.params.RelationParam;
 import cn.kdan.pdf.backend.core.service.DeviceService;
+import cn.kdan.pdf.backend.core.service.MemberService;
 import exception.BackendRuntimeException;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import pojo.Device;
 
 import javax.annotation.Resource;
 import java.util.Date;
@@ -24,6 +29,8 @@ public class DeviceServiceImpl implements DeviceService {
 
     @Resource
     private DevicesMapper devicesMapper;
+    @Resource
+    private MemberService memberService;
 
     @Override
     @Transactional(rollbackFor = BackendRuntimeException.class)
@@ -65,4 +72,20 @@ public class DeviceServiceImpl implements DeviceService {
         example.createCriteria().andMemberIdEqualTo(device.getMemberId()).andUuidEqualTo(uuid);
         devicesMapper.updateByExample(device,example);
     }
+
+    @Override
+    @Transactional(rollbackFor = BackendRuntimeException.class)
+    public Device updateInfo(RelationParam param) {
+        Members currentUser = memberService.getCurrentUser();
+        Device device = param.getDevice();
+        DevicesExample example = new DevicesExample();
+        example.createCriteria().andMemberIdEqualTo(currentUser.getId()).andUuidEqualTo(device.getUuid());
+        List<Devices> devices = devicesMapper.selectByExample(example);
+        if(!CollectionUtils.isEmpty(devices)){
+            Devices dev = devices.get(0);
+            BeanUtils.copyProperties(device,dev);
+            devicesMapper.updateByExample(dev,example);
+        }
+        return device;
+    }
 }

+ 37 - 6
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/MemberServiceImpl.java

@@ -13,6 +13,7 @@ import cn.kdan.pdf.backend.core.model.member.*;
 import cn.kdan.pdf.backend.core.params.BindAccountParam;
 import cn.kdan.pdf.backend.core.params.UserResetPwdParams;
 import cn.kdan.pdf.backend.core.pojo.app.BindAccountVo;
+import cn.kdan.pdf.backend.core.pojo.app.MemberInfoVo;
 import cn.kdan.pdf.backend.core.pojo.app.MemberVo;
 import cn.kdan.pdf.backend.core.pojo.app.SocialAccountVo;
 import cn.kdan.pdf.backend.core.service.AuthService;
@@ -537,15 +538,14 @@ public class MemberServiceImpl implements MemberService {
             }
         } else{
             //绑定第三方账号
-            String accountId = socialAccountService.bindSocialAccount(currentUser,param);
-            SocialAccounts socialAccounts = socialAccountService.selectByAccountId(accountId);
-            BeanUtils.copyProperties(socialAccounts,socialAccountVo);
+            String accountId = socialAccountService.bindSocialAccount(currentUser, param, socialAccountVo);
             bindAccountVo.setSocialAccount(socialAccountVo);
         }
         return bindAccountVo;
     }
 
     @Override
+    @Transactional(rollbackFor = BackendRuntimeException.class)
     public BindAccountVo unbindAccount(BindAccountParam param) {
         BindAccountVo bindAccountVo = new BindAccountVo();
         MemberVo memberVo = new MemberVo();
@@ -561,15 +561,14 @@ public class MemberServiceImpl implements MemberService {
             currentUser.setPhone("");
             update(currentUser);
         } else {
-            String accountId = socialAccountService.unbindSocialAccount(currentUser,param);
-            SocialAccounts socialAccounts = socialAccountService.selectByAccountId(accountId);
-            BeanUtils.copyProperties(socialAccounts,accountVo);
+            socialAccountService.unbindSocialAccount(currentUser, provider, accountVo);
             bindAccountVo.setSocialAccount(accountVo);
         }
         return bindAccountVo;
     }
 
     @Override
+    @Transactional(rollbackFor = BackendRuntimeException.class)
     public MemberVo appModifyName(String name) {
         modifyNickname(name);
         Members currentUser = getCurrentUser();
@@ -592,4 +591,36 @@ public class MemberServiceImpl implements MemberService {
         }
         return vo;
     }
+
+    @Override
+    @Transactional(rollbackFor = BackendRuntimeException.class)
+    public void deleteByMemberId(String memberId) {
+        membersMapper.deleteByPrimaryKey(memberId);
+    }
+
+    @Override
+    public MemberInfoVo appGetMemberInfo(String subscription, String withSocial) {
+        MemberInfoVo memberInfoVo = new MemberInfoVo();
+        MemberInfoResp memberDetail = getMemberDetail(null);
+        memberInfoVo.setType("members");
+        memberInfoVo.setMemberInfo(memberDetail.getMemberInfo());
+        //1:不显示订阅信息 0:显示订阅信息
+        if("0".equals(subscription)){
+            memberInfoVo.setSetPricingList(memberDetail.getSetPricingList());
+            memberInfoVo.setPricingList(memberDetail.getPricingList());
+        }
+        // 如果是QQ、微信登录,传入字段可实现第三方登录的信息。0:不显示, 1:显示
+        if("1".equals(withSocial)){
+            List<SocialAccountVo> list = new ArrayList<>();
+            List<SocialAccounts> socialAccounts = socialAccountService.selectByMemberId(memberDetail.getMemberInfo().getId());
+            for (SocialAccounts account : socialAccounts) {
+                SocialAccountVo vo = new SocialAccountVo();
+                BeanUtils.copyProperties(account,vo);
+                vo.setProvider(ProviderEnum.getNameByCode(account.getProvider()));
+                list.add(vo);
+            }
+            memberInfoVo.setSocialAccountList(list);
+        }
+        return memberInfoVo;
+    }
 }

+ 2 - 13
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/PricingServiceImpl.java

@@ -12,6 +12,7 @@ import cn.kdan.pdf.backend.core.service.MemberService;
 import cn.kdan.pdf.backend.core.service.PricingDiscountService;
 import cn.kdan.pdf.backend.core.service.PricingService;
 import cn.kdan.pdf.backend.core.service.SubscriptionService;
+import cn.kdan.pdf.backend.core.utils.CommonBusinessUtils;
 import enums.CommonEnum;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
@@ -37,14 +38,6 @@ public class PricingServiceImpl implements PricingService {
     @Autowired
     private MemberService memberService;
 
-    /**
-     * 语言(zh、zh-CN、zh-Hans表示汉语,en表示英语)
-     */
-    private final static String ZH = "zh";
-    private final static String ZH_CN = "zh-CN";
-    private final static String ZH_HANS = "zh-Hans";
-    private final static String EN = "en";
-
     /**
      * 1个月
      */
@@ -61,11 +54,7 @@ public class PricingServiceImpl implements PricingService {
             client = ClientEnum.WEB.value();
         }
         String language = req.getLanguage();
-        if ("".equals(language) || ZH.equals(language) || ZH_CN.equals(language) || ZH_HANS.equals(language)) {
-            language = ZH_CN;
-        } else {
-            language = EN;
-        }
+        language = CommonBusinessUtils.judgeLanguage(language);
 
         Members member = memberService.getCurrentUser();
         PricingsExample example = new PricingsExample();

+ 46 - 25
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/SocialAccountServiceImpl.java

@@ -6,15 +6,21 @@ import cn.kdan.pdf.backend.core.model.Members;
 import cn.kdan.pdf.backend.core.model.SocialAccounts;
 import cn.kdan.pdf.backend.core.model.SocialAccountsExample;
 import cn.kdan.pdf.backend.core.params.BindAccountParam;
+import cn.kdan.pdf.backend.core.pojo.app.SocialAccountVo;
 import cn.kdan.pdf.backend.core.pojo.third.Tencent;
 import cn.kdan.pdf.backend.core.pojo.third.Wechat;
+import cn.kdan.pdf.backend.core.service.MemberService;
 import cn.kdan.pdf.backend.core.service.SocialAccountService;
 import cn.kdan.pdf.backend.core.utils.TencentUtils;
 import cn.kdan.pdf.backend.core.utils.WechatUtils;
+import exception.BackendRuntimeException;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
+import utils.CommonUtils;
 
 import javax.annotation.Resource;
 import java.util.Date;
@@ -30,6 +36,8 @@ public class SocialAccountServiceImpl implements SocialAccountService {
 
     @Resource
     private SocialAccountsMapper socialAccountsMapper;
+    @Resource
+    private MemberService memberService;
 
     @Override
     public SocialAccounts selectByAccountId(String accountId) {
@@ -52,14 +60,20 @@ public class SocialAccountServiceImpl implements SocialAccountService {
     }
 
     @Override
-    public SocialAccounts selectByMemberId(String userId, Integer provider) {
+    public List<SocialAccounts> selectByMemberId(String userId) {
+        SocialAccountsExample example = new SocialAccountsExample();
+        example.createCriteria().andMemberIdEqualTo(userId);
+        return socialAccountsMapper.selectByExample(example);
+    }
+
+    public SocialAccounts selectByMemberIdAndProvider(String userId, Integer provider){
         SocialAccountsExample example = new SocialAccountsExample();
         example.createCriteria().andMemberIdEqualTo(userId).andProviderEqualTo(provider);
         List<SocialAccounts> list = socialAccountsMapper.selectByExample(example);
-        if(CollectionUtils.isEmpty(list)){
-            return null;
+        if(!CollectionUtils.isEmpty(list)){
+            return list.get(0);
         }
-        return list.get(0);
+        return null;
     }
 
     @Override
@@ -70,18 +84,25 @@ public class SocialAccountServiceImpl implements SocialAccountService {
     }
 
     @Override
-    public String bindSocialAccount(Members member, BindAccountParam param) {
+    public String bindSocialAccount(Members member, BindAccountParam param, SocialAccountVo socialAccountVo) {
         String accountId = "";
         String accessToken = param.getAccessToken();
         String openid = param.getOpenid();
         String provider = param.getProvider();
+        socialAccountVo.setProvider(provider);
         if(ProviderEnum.TENCENT.getName().equals(provider)){
             Tencent userInfo = TencentUtils.getUserInfo(accessToken);
             String unionId = userInfo.getUnionId();
+            if(StringUtils.isEmpty(unionId)){
+                log.info("未找到第三方账号,accessToken:{},openid:{}",accessToken,openid);
+                throw new BackendRuntimeException("未找到第三方账号");
+            }
             accountId = unionId;
             SocialAccounts socialAccount = selectByAccountId(unionId);
             //看看有没有该账号,没有就新增一条,有就更新用户id
             if(ObjectUtils.isEmpty(socialAccount)){
+                socialAccount = new SocialAccounts();
+                socialAccount.setId(CommonUtils.generateId());
                 socialAccount.setAccountId(unionId);
                 socialAccount.setMemberId(member.getId());
                 socialAccount.setName(userInfo.getNickname());
@@ -89,15 +110,25 @@ public class SocialAccountServiceImpl implements SocialAccountService {
                 socialAccount.setAvatar(userInfo.getFigureUrl());
                 insertSocialAccount(socialAccount);
             } else{
+                //如果有第三方账号,需要先将原用户账号删除,再进行绑定当前用户账号
+                String memberId = socialAccount.getMemberId();
+                memberService.deleteByMemberId(memberId);
                 socialAccount.setMemberId(member.getId());
                 updateSocialAccount(socialAccount);
             }
+            BeanUtils.copyProperties(socialAccount,socialAccountVo);
         }else{
             Wechat userInfo = WechatUtils.getUserInfo(openid, accessToken);
             String unionId = userInfo.getUnionId();
+            if(StringUtils.isEmpty(unionId)){
+                log.info("未找到第三方账号,accessToken:{},openid:{}",accessToken,openid);
+                throw new BackendRuntimeException("未找到第三方账号");
+            }
             accountId = unionId;
             SocialAccounts socialAccount = selectByAccountId(unionId);
             if(ObjectUtils.isEmpty(socialAccount)){
+                socialAccount = new SocialAccounts();
+                socialAccount.setId(CommonUtils.generateId());
                 socialAccount.setAvatar(userInfo.getHeadImgUrl());
                 socialAccount.setAccountId(unionId);
                 socialAccount.setProvider(ProviderEnum.getCodeByName(provider));
@@ -105,9 +136,13 @@ public class SocialAccountServiceImpl implements SocialAccountService {
                 socialAccount.setName(userInfo.getNickname());
                 insertSocialAccount(socialAccount);
             } else{
+                //如果有第三方账号,需要先将原用户账号删除,再进行绑定当前用户账号
+                String memberId = socialAccount.getMemberId();
+                memberService.deleteByMemberId(memberId);
                 socialAccount.setMemberId(member.getId());
                 updateSocialAccount(socialAccount);
             }
+            BeanUtils.copyProperties(socialAccount,socialAccountVo);
         }
         return accountId;
     }
@@ -124,26 +159,12 @@ public class SocialAccountServiceImpl implements SocialAccountService {
     }
 
     @Override
-    public String unbindSocialAccount(Members currentUser, BindAccountParam param) {
-        String accountId = "";
-        String accessToken = param.getAccessToken();
-        String openid = param.getOpenid();
-        String provider = param.getProvider();
+    public void unbindSocialAccount(Members currentUser, String provider, SocialAccountVo accountVo) {
+        accountVo.setProvider(provider);
         SocialAccountsExample example = new SocialAccountsExample();
-        if(ProviderEnum.TENCENT.getName().equals(provider)){
-            Tencent userInfo = TencentUtils.getUserInfo(accessToken);
-            String unionId = userInfo.getUnionId();
-            accountId = unionId;
-            example.createCriteria().andAccountIdEqualTo(unionId);
-            socialAccountsMapper.deleteByExample(example);
-        } else {
-            Wechat userInfo = WechatUtils.getUserInfo(openid, accessToken);
-            String unionId = userInfo.getUnionId();
-            accountId = unionId;
-            SocialAccounts socialAccount = selectByAccountId(unionId);
-            example.createCriteria().andAccountIdEqualTo(unionId);
-            socialAccountsMapper.deleteByExample(example);
-        }
-        return accountId;
+        SocialAccounts socialAccount = selectByMemberIdAndProvider(currentUser.getId(), ProviderEnum.getCodeByName(provider));
+        BeanUtils.copyProperties(socialAccount,accountVo);
+        example.createCriteria().andAccountIdEqualTo(socialAccount.getAccountId());
+        socialAccountsMapper.deleteByExample(example);
     }
 }

+ 36 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/utils/CommonBusinessUtils.java

@@ -0,0 +1,36 @@
+package cn.kdan.pdf.backend.core.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author sfq
+ * @description
+ */
+@Component
+@Slf4j
+public class CommonBusinessUtils {
+
+    /**
+     * 语言(zh、zh-CN、zh-Hans表示汉语,en表示英语)
+     */
+    private final static String ZH = "zh";
+    private final static String ZH_CN = "zh-CN";
+    private final static String ZH_HANS = "zh-Hans";
+    private final static String EN = "en";
+
+    /**
+     * 判断语言
+     * @param language 语言类型
+     * @return 语言类型
+     */
+    public static String judgeLanguage(String language){
+        if ("".equals(language) || ZH.equals(language) || ZH_CN.equals(language) || ZH_HANS.equals(language)) {
+            language = ZH_CN;
+        } else {
+            language = EN;
+        }
+        return language;
+    }
+
+}