Ver código fonte

提交微信登录和产品优化搜索优化

qiubo 4 anos atrás
pai
commit
7f82bb6b58
15 arquivos alterados com 643 adições e 28 exclusões
  1. 19 19
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/GlobalCorsConfig.java
  2. 78 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/OmePreItemController.java
  3. 8 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/PmsPortalProductController.java
  4. 52 1
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/WechatH5Controller.java
  5. 57 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/UmsMemberPlaformDo.java
  6. 35 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/OmsPreItemService.java
  7. 5 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/PmsPortalProductService.java
  8. 15 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/UmsMemberCacheService.java
  9. 15 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/UmsMemberPlatformService.java
  10. 12 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/UmsMemberService.java
  11. 65 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/impl/OmsPreItemServiceImpl.java
  12. 64 1
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/impl/PmsPortalProductServiceImpl.java
  13. 36 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/impl/UmsMemberCacheServiceImpl.java
  14. 138 0
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/impl/UmsMemberPlatformServiceImpl.java
  15. 44 7
      forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/impl/UmsMemberServiceImpl.java

+ 19 - 19
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/config/GlobalCorsConfig.java

@@ -10,25 +10,25 @@ import org.springframework.web.filter.CorsFilter;
  * 全局跨域相关配置
  * Created by macro on 2019/7/27.
  */
-@Configuration
+//@Configuration
 public class GlobalCorsConfig {
 
-    /**
-     * 允许跨域调用的过滤器
-     */
-    @Bean
-    public CorsFilter corsFilter() {
-        CorsConfiguration config = new CorsConfiguration();
-        //允许所有域名进行跨域调用
-        config.addAllowedOrigin("*");
-        //允许跨越发送cookie
-        config.setAllowCredentials(true);
-        //放行全部原始头信息
-        config.addAllowedHeader("*");
-        //允许所有请求方法跨域调用
-        config.addAllowedMethod("*");
-        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
-        source.registerCorsConfiguration("/**", config);
-        return new CorsFilter(source);
-    }
+//    /**
+//     * 允许跨域调用的过滤器
+//     */
+//    @Bean
+//    public CorsFilter corsFilter() {
+//        CorsConfiguration config = new CorsConfiguration();
+//        //允许所有域名进行跨域调用
+//        config.addAllowedOrigin("*");
+//        //允许跨越发送cookie
+//        config.setAllowCredentials(true);
+//        //放行全部原始头信息
+//        config.addAllowedHeader("*");
+//        //允许所有请求方法跨域调用
+//        config.addAllowedMethod("*");
+//        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+//        source.registerCorsConfiguration("/**", config);
+//        return new CorsFilter(source);
+//    }
 }

+ 78 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/OmePreItemController.java

@@ -0,0 +1,78 @@
+package com.hwrj.cloud.portal.controller;
+
+import com.github.pagehelper.PageInfo;
+import com.hwrj.cloud.common.api.CommonPage;
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.model.OmsPreItem;
+import com.hwrj.cloud.portal.model.UmsMember;
+import com.hwrj.cloud.portal.service.OmsPreItemService;
+import com.hwrj.cloud.portal.util.MemberUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+@Controller
+@Api(tags = "OmePreItemController", description = "预购信息处理")
+@RequestMapping("/pre")
+public class OmePreItemController {
+    @Autowired
+    private HttpServletRequest request;
+
+    @Autowired
+    private MemberUtil memberUtil;
+    @Autowired
+    private OmsPreItemService omsPreItemService;
+    @PutMapping(value = "/add")
+    @ApiOperation("添加有意向商品")
+    @ResponseBody
+    public CommonResult add(@RequestBody OmsPreItem omsPreItem){
+        UmsMember umsMember = memberUtil.getRedisUmsMember(request);
+        omsPreItem.setMemberId(umsMember.getId());
+        omsPreItemService.addOmsPreItem(omsPreItem);
+        return CommonResult.success(null);
+
+
+    }
+
+    @GetMapping(value = "/detail")
+    @ApiOperation("获取有意向详情")
+    @ResponseBody
+    public CommonResult detail(@RequestParam(value = "意向id") Long preId){
+
+        omsPreItemService.getOmsPreItemDetail(preId);
+        return CommonResult.success(null);
+    }
+
+    @GetMapping(value = "/own")
+    @ApiOperation("获取有意向详情")
+    @ResponseBody
+    public CommonResult getOwn(@RequestParam(defaultValue = "10") int pageSize,
+                               @RequestParam(defaultValue = "1") int pageNO){
+        UmsMember umsMember = memberUtil.getRedisUmsMember(request);
+        List<OmsPreItem> omsPreItemListOwn = omsPreItemService.getOmsPreItemListOwn(umsMember.getId(), pageSize, pageNO);
+
+
+
+        return CommonResult.success(CommonPage.restPage(omsPreItemListOwn));
+    }
+
+    @GetMapping(value = "/other")
+    @ApiOperation("获取有意向详情")
+    @ResponseBody
+    public CommonResult getOtherToOwn(@RequestParam(defaultValue = "10") int pageSize,
+                               @RequestParam(defaultValue = "1") int pageNO){
+        UmsMember umsMember = memberUtil.getRedisUmsMember(request);
+        List<OmsPreItem> omsPreItemListOwn = omsPreItemService.getOmsPreItemListOther(umsMember.getId(), pageSize, pageNO);
+
+
+
+        return CommonResult.success(CommonPage.restPage(omsPreItemListOwn));
+    }
+
+
+}

+ 8 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/PmsPortalProductController.java

@@ -53,6 +53,14 @@ public class PmsPortalProductController {
         return CommonResult.success(list);
     }
 
+    @ApiOperation("搜索商品类型")
+    @RequestMapping(value = "/categorySearch", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<List<PmsProductCategoryNode>> searchCategoryTreeList(@RequestParam(value = "关键字",required = false) String key) {
+        List<PmsProductCategoryNode> list = portalProductService.categorySearchTreeList(key);
+        return CommonResult.success(list);
+    }
+
     @ApiOperation("获取前台商品详情")
     @RequestMapping(value = "/detail/{id}", method = RequestMethod.GET)
     @ResponseBody

+ 52 - 1
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/controller/WechatH5Controller.java

@@ -1,5 +1,13 @@
 package com.hwrj.cloud.portal.controller;
 
+import cn.hutool.core.bean.BeanUtil;
+import com.hwrj.cloud.common.api.CommonResult;
+import com.hwrj.cloud.portal.model.UmsMember;
+import com.hwrj.cloud.portal.model.UmsMemberPlatform;
+import com.hwrj.cloud.portal.service.UmsMemberPlatformService;
+import com.hwrj.cloud.portal.service.UmsMemberService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.api.WxConsts;
 import me.chanjar.weixin.common.error.WxErrorException;
@@ -10,18 +18,22 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Controller;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.net.URLEncoder;
 import java.security.GeneralSecurityException;
+import java.util.Map;
 
 @Slf4j
 @Controller
+@Api(tags = "WechatH5Controller", description = "微信登录")
 @RequestMapping("/wechat/h5")
 public class WechatH5Controller {
     /**
@@ -30,7 +42,16 @@ public class WechatH5Controller {
     @Autowired
     private WxMpService wxMpService;
 
+    @Value("${jwt.tokenHeader}")
+    private String tokenHeader;
+    @Value("${jwt.tokenHead}")
+    private String tokenHead;
 
+    @Autowired
+    private UmsMemberPlatformService umsMemberPlatformService;
+
+    @Autowired
+    private UmsMemberService memberService;
 
     private static final String WECHAT_USER_INFO = "wechatUserInfo";
 
@@ -43,7 +64,10 @@ public class WechatH5Controller {
 
     @Value("${wx.mp.url}")
     private String url;
+    @Value("${wx.mp.before}")
+    private String reUrl;
 
+    @ApiOperation(value = "微信认证")
     @GetMapping("/authorize")
     public void authorize(@RequestParam("returnUrl") String returnUrl, HttpServletResponse response) throws IOException {
         // 用户授权完成后的重定向链接,441aca54.ngrok.io为使用ngrok代理后的公网域名,该域名需要替换为在微信公众号后台设置的域名,否则请求微信服务器不成功,一般都是采用将本地服务代理映射到一个可以访问的公网进行开发调试
@@ -62,6 +86,7 @@ public class WechatH5Controller {
      * @return
      * @throws Exception
      */
+    @ApiOperation(value = "微信认证成功后回调")
     @GetMapping("/userInfo")
     public String userInfo(@RequestParam("code") String code,
                            @RequestParam("state") String returnUrl) throws Exception {
@@ -86,6 +111,23 @@ public class WechatH5Controller {
         wxMpService.oauth2refreshAccessToken(wxMpOAuth2AccessToken.getRefreshToken());
         // 验证accessToken是否有效
         wxMpService.oauth2validateAccessToken(wxMpOAuth2AccessToken);
+
+
+        UmsMemberPlatform umsMemberPlatform= new UmsMemberPlatform();
+        BeanUtil.copyProperties(wxMpUser,umsMemberPlatform);
+        umsMemberPlatform.setOpenid(wxMpUser.getOpenId());
+        umsMemberPlatform.setUnionid(wxMpUser.getUnionId());
+        umsMemberPlatform.setHeadimgurl(wxMpUser.getHeadImgUrl());
+
+        String token = umsMemberPlatformService.addUmsMemberPlatformService(umsMemberPlatform);
+        String trueUrl = null;
+        if (StringUtils.isEmpty(returnUrl)){
+            trueUrl= reUrl+"?token="+token+"&tokenHead="+tokenHead;
+        }else if (!returnUrl.contains("?")){
+            trueUrl=reUrl+returnUrl+"?token="+token+"&tokenHead="+tokenHead;
+        }else {
+            trueUrl=reUrl+returnUrl+"&token="+token+"&tokenHead="+tokenHead;
+        }
 //        MyWxMpUser myWxMpUser =new MyWxMpUser();
 //        BeanUtils.copyProperties(wxMpUser,myWxMpUser);
 //        //后台新增用户成功
@@ -100,7 +142,16 @@ public class WechatH5Controller {
 //            //是否是发起跳转
 //            return "redirect:" + returnUrl+"?customerId="+customerId;
 //        }
-        return "redirect:" + returnUrl;
+        return "redirect:" + trueUrl;
+
+    }
+
+
+    @GetMapping("/info")
+    @ResponseBody
+    public CommonResult<Map<String,Object>> loginInfo() {
+        Map<String,Object> map = memberService.getCurrentWxUser();
+        return CommonResult.success(map);
 
     }
 

+ 57 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/domain/UmsMemberPlaformDo.java

@@ -0,0 +1,57 @@
+package com.hwrj.cloud.portal.domain;
+
+import com.hwrj.cloud.portal.model.UmsMemberPlatform;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+public class UmsMemberPlaformDo implements UserDetails {
+    private UmsMemberPlatform umsMemberPlatform;
+
+    public UmsMemberPlaformDo(UmsMemberPlatform umsMemberPlatform){
+        this.umsMemberPlatform=umsMemberPlatform;
+
+    }
+    @Override
+    public Collection<? extends GrantedAuthority> getAuthorities() {
+        //返回当前用户的权限
+        return Arrays.asList(new SimpleGrantedAuthority("TEST"));
+    }
+
+    @Override
+    public String getPassword() {
+        return umsMemberPlatform.getOpenid();
+    }
+
+    @Override
+    public String getUsername() {
+        return umsMemberPlatform.getNickname();
+    }
+
+    @Override
+    public boolean isAccountNonExpired() {
+        return true;
+    }
+
+    @Override
+    public boolean isAccountNonLocked() {
+        return true;
+    }
+
+    @Override
+    public boolean isCredentialsNonExpired() {
+        return true;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    public UmsMemberPlatform getUmsMemberPlatform(){
+        return umsMemberPlatform;
+    }
+}

+ 35 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/OmsPreItemService.java

@@ -0,0 +1,35 @@
+package com.hwrj.cloud.portal.service;
+
+import com.github.pagehelper.PageInfo;
+import com.hwrj.cloud.portal.model.OmsPreItem;
+
+import java.util.List;
+
+public interface OmsPreItemService {
+    /**
+     * 添加预购信息详情
+     * @param omsPreItem
+     */
+    public void addOmsPreItem(OmsPreItem omsPreItem);
+
+    /**
+     * 根据预购id查看预购信息详情
+     * @param preId
+     */
+    public OmsPreItem getOmsPreItemDetail(Long preId);
+
+
+    /**
+     * 查看当前人的有意向的信息
+     */
+    public List<OmsPreItem> getOmsPreItemListOwn(Long id, int pageSize, int pageNo);
+
+    /**
+     * 查看当前人的有意向的信息
+     *获取当前人的其他人有意向的信息
+     */
+    public List<OmsPreItem> getOmsPreItemListOther(Long id,int pageSize,int pageNo);
+
+
+
+}

+ 5 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/PmsPortalProductService.java

@@ -23,6 +23,11 @@ public interface PmsPortalProductService {
      */
     List<PmsProductCategoryNode> categoryTreeList();
 
+    /**
+     * 以树形结构搜索所有二级商商品分类
+     */
+    List<PmsProductCategoryNode> categorySearchTreeList(String key);
+
     /**
      * 获取前台商品详情
      */

+ 15 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/UmsMemberCacheService.java

@@ -41,4 +41,19 @@ public interface UmsMemberCacheService {
      * 获取验证码
      */
     String getLoginCode(String telephone);
+
+    /**
+     * 获取验证码
+     */
+    void setToken(String token,String userName);
+
+    /**
+     * 获取验证码
+     */
+    String getToken(String userName);
+
+    /**
+     * 获取验证码
+     */
+    Boolean delToken(String userName);
 }

+ 15 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/UmsMemberPlatformService.java

@@ -0,0 +1,15 @@
+package com.hwrj.cloud.portal.service;
+
+
+import com.hwrj.cloud.portal.model.UmsMemberPlatform;
+
+public interface UmsMemberPlatformService {
+
+    /**
+     * 添加用户
+     * @return 1为添加成功,2为已有对应的用户,没有添加
+     */
+    public String addUmsMemberPlatformService(UmsMemberPlatform umsMemberPlatform);
+
+
+}

+ 12 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/UmsMemberService.java

@@ -1,9 +1,13 @@
 package com.hwrj.cloud.portal.service;
 
+import com.hwrj.cloud.portal.domain.UmsMemberPlaformDo;
 import com.hwrj.cloud.portal.model.UmsMember;
+import com.hwrj.cloud.portal.model.UmsMemberPlatform;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Map;
+
 /**
  * 会员管理Service
  * Created by macro on 2018/8/3.
@@ -54,6 +58,12 @@ public interface UmsMemberService {
      */
     UmsMember getCurrentMember();
 
+    /**
+     * 获取当前微信登录用户
+     * @return
+     */
+    public Map<String,Object> getCurrentWxUser();
+
     /**
      * 根据会员id修改会员积分
      */
@@ -82,4 +92,6 @@ public interface UmsMemberService {
      * 刷新token
      */
     String refreshToken(String token);
+
+    Long getMemberId();
 }

+ 65 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/impl/OmsPreItemServiceImpl.java

@@ -0,0 +1,65 @@
+package com.hwrj.cloud.portal.service.impl;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.hwrj.cloud.portal.mapper.OmsPreItemMapper;
+import com.hwrj.cloud.portal.model.OmsPreItem;
+import com.hwrj.cloud.portal.model.OmsPreItemExample;
+import com.hwrj.cloud.portal.model.UmsMember;
+import com.hwrj.cloud.portal.service.OmsPreItemService;
+import com.hwrj.cloud.portal.service.UmsMemberService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.List;
+
+@Service
+public class OmsPreItemServiceImpl implements OmsPreItemService {
+
+    @Autowired
+    private UmsMemberService memberService;
+    @Autowired
+    private OmsPreItemMapper omsPreItemMapper;
+
+    @Override
+    public void addOmsPreItem(OmsPreItem omsPreItem) {
+        if (omsPreItem!= null){
+            int i = omsPreItemMapper.insertSelective(omsPreItem);
+        }else {
+            throw new RuntimeException("添加预购失败");
+        }
+
+    }
+
+    @Override
+    public OmsPreItem getOmsPreItemDetail(Long preId) {
+        if (StringUtils.isEmpty(preId)){
+            return omsPreItemMapper.selectByPrimaryKey(preId);
+        }
+        return null;
+    }
+
+    @Override
+    public List<OmsPreItem> getOmsPreItemListOwn(Long id, int pageSize, int pageNo) {
+        PageHelper.startPage(pageNo,pageSize);
+        OmsPreItemExample example = new OmsPreItemExample();
+        OmsPreItemExample.Criteria criteria = example.createCriteria();
+        criteria.andPushIdEqualTo(id);
+        List<OmsPreItem> omsPreItems = omsPreItemMapper.selectByExample(example);
+        return omsPreItems;
+
+    }
+
+    @Override
+    public List<OmsPreItem> getOmsPreItemListOther(Long id,int pageSize,int pageNo) {
+        PageHelper.startPage(pageNo,pageSize);
+        OmsPreItemExample example = new OmsPreItemExample();
+        OmsPreItemExample.Criteria criteria = example.createCriteria();
+        criteria.andMemberIdEqualTo(id);
+        List<OmsPreItem> omsPreItems = omsPreItemMapper.selectByExample(example);
+        return omsPreItems;
+    }
+
+
+}

+ 64 - 1
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/impl/PmsPortalProductServiceImpl.java

@@ -15,8 +15,11 @@ import com.hwrj.cloud.portal.service.PmsPortalProductService;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -44,6 +47,9 @@ public class PmsPortalProductServiceImpl implements PmsPortalProductService {
     @Autowired
     private PortalProductDao portalProductDao;
 
+    @Autowired
+    private PmsProductCategoryMapper pmsProductCategoryMapper;
+
     @Autowired
     private CouponService couponService;
 
@@ -55,12 +61,17 @@ public class PmsPortalProductServiceImpl implements PmsPortalProductService {
         criteria.andDeleteStatusEqualTo(0);
         if (StrUtil.isNotEmpty(keyword)) {
             criteria.andNameLike("%" + keyword + "%");
+
         }
         if (brandId != null) {
             criteria.andBrandIdEqualTo(brandId);
         }
         if (productCategoryId != null) {
-            criteria.andProductCategoryIdEqualTo(productCategoryId);
+            List<Long> ids = getTwoCategoryIdById(productCategoryId);
+            if (ids !=null&&ids.size()>0){
+                criteria.andProductCategoryIdIn(ids);
+            }
+
         }
         //1->按新品;2->按销量;3->价格从低到高;4->价格从高到低
         if (sort == 1) {
@@ -75,6 +86,28 @@ public class PmsPortalProductServiceImpl implements PmsPortalProductService {
         return productMapper.selectByExample(example);
     }
 
+    public List<Long> getTwoCategoryIdById(Long id){
+        List<Long> list=new ArrayList<>();
+        PmsProductCategory pmsProductCategory = pmsProductCategoryMapper.selectByPrimaryKey(id);
+        if (pmsProductCategory != null){
+            Long parentId = pmsProductCategory.getParentId();
+            if (parentId!=0){
+                list.add(id);
+            }else {
+                PmsProductCategoryExample example= new PmsProductCategoryExample();
+                PmsProductCategoryExample.Criteria criteria = example.createCriteria();
+                criteria.andParentIdEqualTo(id);
+                List<PmsProductCategory> categoryList = pmsProductCategoryMapper.selectByExample(example);
+                if (categoryList!=null&&categoryList.size()>0){
+                    List<Long> collect = categoryList.stream().map(PmsProductCategory::getId).collect(Collectors.toList());
+                    list.addAll(collect);
+                }
+            }
+        }
+
+        return  list;
+    }
+
     @Override
     public List<PmsProductCategoryNode> categoryTreeList() {
         PmsProductCategoryExample example = new PmsProductCategoryExample();
@@ -85,6 +118,36 @@ public class PmsPortalProductServiceImpl implements PmsPortalProductService {
         return result;
     }
 
+    @Override
+    public List<PmsProductCategoryNode> categorySearchTreeList(String key) {
+        List<PmsProductCategory> pms = new ArrayList<>();
+        PmsProductCategoryExample example = new PmsProductCategoryExample();
+        PmsProductCategoryExample.Criteria criteria = example.createCriteria();
+        criteria.andParentIdNotEqualTo(0l);
+        if (!StringUtils.isEmpty(key)){
+            criteria.andNameLike("%"+key+"%");
+        }
+
+        List<PmsProductCategory> twoList = productCategoryMapper.selectByExample(example);
+        pms.addAll(twoList);
+
+        Map<Long, List<PmsProductCategory>> collect =
+                twoList.stream().collect(Collectors.groupingBy(PmsProductCategory::getParentId));
+        if (!collect.isEmpty()){
+            PmsProductCategoryExample example1 = new PmsProductCategoryExample();
+            PmsProductCategoryExample.Criteria criteria1 = example1.createCriteria();
+            ArrayList<Long> longs = new ArrayList<>(collect.keySet());
+            criteria1.andIdIn(longs);
+            List<PmsProductCategory> example2 = productCategoryMapper.selectByExample(example1);
+            pms.addAll(example2);
+
+        }
+        List<PmsProductCategoryNode> result = pms.stream()
+                .filter(item -> item.getParentId().equals(0L))
+                .map(item -> covert(item, pms)).collect(Collectors.toList());
+        return result;
+    }
+
     @Override
     public PmsPortalProductDetail detail(Long id) {
         PmsPortalProductDetail result = new PmsPortalProductDetail();

+ 36 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/impl/UmsMemberCacheServiceImpl.java

@@ -35,6 +35,12 @@ public class UmsMemberCacheServiceImpl implements UmsMemberCacheService {
     @Value("${redis.key.telLoginCode}")
     private String REDIS_KEY_LOGIN_CODE;
 
+    @Value("${redis.key.token}")
+    private String REDIS_KEY_TOKEN;
+
+    @Value("${jwt.expiration}")
+    private Long JWT_EXPIRATION;
+
     @Override
     public void delMember(Long memberId) {
         UmsMember umsMember = memberMapper.selectByPrimaryKey(memberId);
@@ -81,4 +87,34 @@ public class UmsMemberCacheServiceImpl implements UmsMemberCacheService {
         String key = REDIS_DATABASE + ":" + REDIS_KEY_LOGIN_CODE + ":" + telephone;
         return (String) redisService.get(key);
     }
+
+    /**
+     * 获取 token
+     *
+     * @param username
+     */
+    @Override
+    public String getToken(String username) {
+        String key = REDIS_DATABASE + ":" + REDIS_KEY_TOKEN + ":" + username;
+        return (String) redisService.get(key);
+    }
+
+    @Override
+    public Boolean delToken(String userName) {
+        String key = REDIS_DATABASE + ":" + REDIS_KEY_TOKEN + ":" + userName;
+        Boolean del = redisService.del(key);
+        return del;
+    }
+
+    /**
+     * 设置 token
+     *
+     * @param username
+     * @param token
+     */
+    @Override
+    public void setToken(String token, String username) {
+        String key = REDIS_DATABASE + ":" + REDIS_KEY_TOKEN + ":" + username;
+        redisService.set(key, token, JWT_EXPIRATION);
+    }
 }

+ 138 - 0
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/impl/UmsMemberPlatformServiceImpl.java

@@ -0,0 +1,138 @@
+package com.hwrj.cloud.portal.service.impl;
+
+
+import com.hwrj.cloud.portal.domain.MemberDetails;
+import com.hwrj.cloud.portal.domain.UmsMemberPlaformDo;
+import com.hwrj.cloud.portal.mapper.UmsMemberMapper;
+import com.hwrj.cloud.portal.mapper.UmsMemberPlatformMapper;
+import com.hwrj.cloud.portal.model.UmsMember;
+import com.hwrj.cloud.portal.model.UmsMemberExample;
+import com.hwrj.cloud.portal.model.UmsMemberPlatform;
+import com.hwrj.cloud.portal.model.UmsMemberPlatformExample;
+import com.hwrj.cloud.portal.service.UmsMemberCacheService;
+import com.hwrj.cloud.portal.service.UmsMemberPlatformService;
+import com.hwrj.cloud.portal.service.UmsMemberService;
+import com.hwrj.cloud.security.util.JwtTokenUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.Date;
+import java.util.List;
+
+
+@Service
+public class UmsMemberPlatformServiceImpl implements UmsMemberPlatformService {
+    @Autowired
+    private UmsMemberPlatformMapper umsMemberPlatformMapper;
+
+    @Autowired
+    private UmsMemberMapper umsMemberMapper;
+
+    @Autowired
+    private UmsMemberCacheService memberCacheService;
+
+    @Autowired
+    private PasswordEncoder passwordEncoder;
+    @Value("${forest.wx.password}")
+    private String password;
+    @Autowired
+    private JwtTokenUtil jwtTokenUtil;
+
+    @Autowired
+    private UmsMemberService umsMemberService;
+    @Override
+    public String addUmsMemberPlatformService(UmsMemberPlatform umsMemberPlatform) {
+        String token = null;
+        UmsMemberPlatformExample example= new UmsMemberPlatformExample();
+        UmsMemberPlatformExample.Criteria criteria = example.createCriteria();
+        criteria.andOpenidEqualTo(umsMemberPlatform.getOpenid());
+        if (!StringUtils.isEmpty(umsMemberPlatform.getUnionid())){
+            criteria.andUnionidEqualTo(umsMemberPlatform.getUnionid());
+        }
+        List<UmsMemberPlatform> umsMemberPlatforms = umsMemberPlatformMapper.selectByExample(example);
+        if (umsMemberPlatforms != null && umsMemberPlatforms.size()>0){
+            UmsMemberPlatform umsMemberPlatform1 = umsMemberPlatforms.get(0);
+            UmsMember umsMember1 = insetOrGetMemberPlatform(umsMemberPlatform1);
+            UserDetails userDetails = new MemberDetails(umsMember1);
+            UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
+
+            SecurityContextHolder.getContext().setAuthentication(authentication);
+            token = jwtTokenUtil.generateToken(userDetails);
+            memberCacheService.setToken(token,userDetails.getUsername());
+        }else {
+            int insert = umsMemberPlatformMapper.insert(umsMemberPlatform);
+
+            if (insert>0){
+                UmsMemberPlatformExample example1= new UmsMemberPlatformExample();
+                UmsMemberPlatformExample.Criteria criteria1 = example.createCriteria();
+                criteria1.andOpenidEqualTo(umsMemberPlatform.getOpenid());
+                if (!StringUtils.isEmpty(umsMemberPlatform.getUnionid())){
+                    criteria1.andUnionidEqualTo(umsMemberPlatform.getUnionid());
+                }
+                List<UmsMemberPlatform> umsMemberPlatforms1 = umsMemberPlatformMapper.selectByExample(example);
+                UmsMemberPlatform umsMemberPlatform1 = umsMemberPlatforms1.get(0);
+                UmsMember umsMember1 = insetOrGetMemberPlatform(umsMemberPlatform1);
+                UserDetails userDetails = new MemberDetails(umsMember1);
+                UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
+
+                SecurityContextHolder.getContext().setAuthentication(authentication);
+                token = jwtTokenUtil.generateToken(userDetails);
+                memberCacheService.setToken(token,userDetails.getUsername());
+
+            }
+        }
+        return token;
+    }
+    public UmsMemberPlaformDo loadUmsMemberPlatform(UmsMemberPlatform umsMemberPlatform){
+        if (umsMemberPlatform != null){
+            return new UmsMemberPlaformDo(umsMemberPlatform);
+        }
+        throw new UsernameNotFoundException("微信登录失败");
+    }
+
+    /**
+     * 添加用户并获取返回id
+     * @param umsMemberPlatform
+     * @return
+     */
+    public UmsMember insetOrGetMemberPlatform(UmsMemberPlatform umsMemberPlatform){
+        UmsMember umsMember = new UmsMember();
+        if (umsMemberPlatform.getMemberId()==null){
+            umsMember.setNickname(umsMemberPlatform.getNickname());
+            umsMember.setUsername(umsMemberPlatform.getOpenid());
+            umsMember.setPassword(passwordEncoder.encode(password));
+            umsMember.setMemberLevelId(4L);
+            umsMember.setStatus(1);
+            umsMember.setCreateTime(new Date());
+            umsMember.setIcon(umsMemberPlatform.getHeadimgurl());
+            int i = umsMemberMapper.insertSelective(umsMember);
+            UmsMemberExample example = new UmsMemberExample();
+            UmsMemberExample.Criteria criteria = example.createCriteria();
+            criteria.andUsernameEqualTo(umsMemberPlatform.getOpenid());
+            List<UmsMember> umsMembers = umsMemberMapper.selectByExample(example);
+            if (umsMembers==null||umsMembers.size()<1){
+                throw new RuntimeException("登录失败003");
+            }
+            UmsMember ums = umsMembers.get(0);
+            UmsMemberPlatform ff = new UmsMemberPlatform();
+            ff.setId(umsMemberPlatform.getId());
+            umsMemberPlatform.setMemberId(ums.getId());
+            ff.setMemberId(ums.getId());
+            umsMemberPlatformMapper.updateByPrimaryKeySelective(ff);
+            return ums;
+
+        }else {
+            UmsMember umsMember1 = umsMemberMapper.selectByPrimaryKey(umsMemberPlatform.getMemberId());
+            return umsMember1;
+        }
+    }
+
+
+}

+ 44 - 7
forest-portal/portal-server/src/main/java/com/hwrj/cloud/portal/service/impl/UmsMemberServiceImpl.java

@@ -1,17 +1,18 @@
 package com.hwrj.cloud.portal.service.impl;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.hwrj.cloud.common.exception.Asserts;
+import com.hwrj.cloud.portal.domain.UmsMemberPlaformDo;
 import com.hwrj.cloud.portal.mapper.UmsMemberLevelMapper;
 import com.hwrj.cloud.portal.mapper.UmsMemberMapper;
-import com.hwrj.cloud.portal.model.UmsMember;
-import com.hwrj.cloud.portal.model.UmsMemberExample;
-import com.hwrj.cloud.portal.model.UmsMemberLevel;
-import com.hwrj.cloud.portal.model.UmsMemberLevelExample;
+import com.hwrj.cloud.portal.mapper.UmsMemberPlatformMapper;
+import com.hwrj.cloud.portal.model.*;
 import com.hwrj.cloud.portal.domain.MemberDetails;
 import com.hwrj.cloud.portal.service.UmsMemberCacheService;
 import com.hwrj.cloud.portal.service.UmsMemberService;
 import com.hwrj.cloud.security.util.JwtTokenUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -29,14 +30,13 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Random;
+import java.util.*;
 
 /**
  * 会员管理Service实现类
  * Created by macro on 2018/8/3.
  */
+@Slf4j
 @Service
 public class UmsMemberServiceImpl implements UmsMemberService {
     private static final Logger LOGGER = LoggerFactory.getLogger(com.hwrj.cloud.portal.service.impl.UmsMemberServiceImpl.class);
@@ -50,6 +50,10 @@ public class UmsMemberServiceImpl implements UmsMemberService {
     private UmsMemberLevelMapper memberLevelMapper;
     @Autowired
     private UmsMemberCacheService memberCacheService;
+
+    @Autowired
+    private UmsMemberPlatformMapper umsMemberPlatformMapper;
+
     @Value("${redis.key.authCode}")
     private String REDIS_KEY_PREFIX_AUTH_CODE;
     @Value("${redis.expire.authCode}")
@@ -178,6 +182,29 @@ public class UmsMemberServiceImpl implements UmsMemberService {
         MemberDetails memberDetails = (MemberDetails) auth.getPrincipal();
         return memberDetails.getUmsMember();
     }
+    @Override
+    public Map<String,Object> getCurrentWxUser() {
+        SecurityContext ctx = SecurityContextHolder.getContext();
+        Authentication auth = ctx.getAuthentication();
+        MemberDetails memberDetails = (MemberDetails) auth.getPrincipal();
+        UmsMember umsMember = memberDetails.getUmsMember();
+        Map<String,Object> map = new HashMap<>();
+
+        if (umsMember!=null){
+            map.put("user",umsMember);
+            UmsMemberPlatformExample example = new UmsMemberPlatformExample();
+            UmsMemberPlatformExample.Criteria criteria = example.createCriteria();
+            criteria.andMemberIdEqualTo(umsMember.getId());
+            List<UmsMemberPlatform> platforms = umsMemberPlatformMapper.selectByExample(example);
+            if (platforms==null||platforms.size()<1){
+
+                throw  new RuntimeException("登录失败");
+            }
+            map.put("wxUsers",platforms.get(0));
+        }
+
+        return map;
+    }
 
     @Override
     public void updateIntegration(Long id, Integer integration) {
@@ -197,6 +224,8 @@ public class UmsMemberServiceImpl implements UmsMemberService {
         throw new UsernameNotFoundException("用户名或密码错误");
     }
 
+
+
     @Override
     public String login(String username, String password) {
         String token = null;
@@ -209,6 +238,7 @@ public class UmsMemberServiceImpl implements UmsMemberService {
             UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
             SecurityContextHolder.getContext().setAuthentication(authentication);
             token = jwtTokenUtil.generateToken(userDetails);
+            memberCacheService.setToken(token,username);
         } catch (AuthenticationException e) {
             LOGGER.warn("登录异常:{}", e.getMessage());
         }
@@ -231,6 +261,7 @@ public class UmsMemberServiceImpl implements UmsMemberService {
             UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
             SecurityContextHolder.getContext().setAuthentication(authentication);
             token = jwtTokenUtil.generateToken(userDetails);
+            memberCacheService.setToken(token,userDetails.getUsername());
         } catch (AuthenticationException e) {
             LOGGER.warn("登录异常:{}", e.getMessage());
         }
@@ -242,6 +273,12 @@ public class UmsMemberServiceImpl implements UmsMemberService {
         return jwtTokenUtil.refreshHeadToken(token);
     }
 
+    @Override
+    public Long getMemberId() {
+        UmsMember member = getCurrentMember();
+        return member.getId();
+    }
+
     //对输入的验证码进行校验
     private boolean verifyAuthCode(String authCode, String telephone) {
         if (StringUtils.isEmpty(authCode)) {