From c6675b55023dff3c4f441ab0bb9493198949126e Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期五, 16 一月 2026 18:22:41 +0800
Subject: [PATCH] 小程序   接口开发

---
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java |  224 ++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 171 insertions(+), 53 deletions(-)

diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 1dfd46f..f3e00a0 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -20,12 +20,10 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.core.wx.WxMiniConfig;
 import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.ShopMapper;
 import com.doumee.dao.business.SmsrecordMapper;
 import com.doumee.dao.business.join.MemberJoinMapper;
-import com.doumee.dao.business.model.Areas;
-import com.doumee.dao.business.model.Goodsorder;
-import com.doumee.dao.business.model.Member;
-import com.doumee.dao.business.model.Smsrecord;
+import com.doumee.dao.business.model.*;
 import com.doumee.dao.system.SystemUserMapper;
 import com.doumee.dao.system.dto.MemberRechargeDTO;
 import com.doumee.dao.web.dto.MemberOwnDTO;
@@ -44,6 +42,8 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import io.swagger.models.auth.In;
+import io.swagger.util.Yaml;
 import lombok.extern.log4j.Log4j;
 import me.chanjar.weixin.common.error.WxErrorException;
 import okhttp3.OkHttpClient;
@@ -77,6 +77,9 @@
 
     @Autowired
     private MemberMapper memberMapper;
+
+    @Autowired
+    private ShopMapper shopMapper;
 
     @Autowired
     private SmsrecordMapper smsrecordMapper;
@@ -241,38 +244,38 @@
             if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(openId)) {
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鑾峰彇openid澶辫触锛佽鑱旂郴绠$悊鍛�");
             }
-            Member member = memberMapper.selectOne(new QueryWrapper<Member>().eq("OPEN_ID", openId));
-            if (member == null) {
-                member = new Member();
-                member.setImgurl("20230410/4010b821-2137-4e6d-86e4-5ab9c06184a4.png");
-                member.setNickname("寰俊鐢ㄦ埛"+ CodeVerifyUtils.createVerificationCode(4));
-                member.setCreateDate(new Date());
-                member.setIsdeleted(Constants.ZERO);
-                member.setType(Constants.ZERO);
-                member.setOrigin(Constants.ZERO);
-                member.setRecId(recId);
-                member.setOpenId(openId);
-                memberMapper.insert(member);
-            }
-            member.setImgFullUrl(systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
-                    systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+member.getImgurl());
+            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getOpenId, openId)
+                            .eq(Member::getIsdeleted,Constants.ZERO)
+                    .last(" limit 1"));
             //鍒涘缓token
-            JwtPayLoad payLoad = new JwtPayLoad(member.getId());
+            JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+member.getId());
             String token = JwtTokenUtil.generateToken(payLoad);
             AccountResponse accountResponse = new AccountResponse();
-            accountResponse.setToken(token);
             accountResponse.setSessionKey(session.getSessionKey());
-            accountResponse.setMember(member);
+            if(Objects.nonNull(member)){
+                if(Objects.isNull(member.getRecId())){
+                    member.setRecId(recId);
+                }
+                memberMapper.updateById(member);
+                member.setImgFullUrl(systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
+                        systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+member.getImgurl());
+                accountResponse.setToken(token);
+                accountResponse.setMember(member);
+            }else{
+                accountResponse.setOpenid(openId);
+            }
             return accountResponse;
         } catch (WxErrorException e) {
             e.printStackTrace();
         }
         throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"寰俊鐧诲綍寮傚父锛佽鑱旂郴绠$悊鍛�");
     }
+
+
     @Override
     public AccountResponse wxLoginTest( Integer memberId){
         //鍒涘缓token
-        JwtPayLoad payLoad = new JwtPayLoad(memberId);
+        JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+memberId);
         String token = JwtTokenUtil.generateToken(payLoad);
         AccountResponse accountResponse = new AccountResponse();
         accountResponse.setToken(token);
@@ -280,9 +283,82 @@
     }
 
 
+    /**
+     * 鏍规嵁openid鑾峰彇鏄惁缁戝畾浜嗗晢鎴�
+     * @param openid
+     * @param memberId
+     * @return
+     */
+    public AccountResponse shopOpenidLogin(String openid, Integer memberId){
+        Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getOpenId, openid)
+                .eq(Shop::getIsdeleted,Constants.ZERO)
+                .last("limit 1")
+        );
+        AccountResponse accountResponse = new AccountResponse();
+        accountResponse.setOpenid(openid);
+        if(Objects.nonNull(shop)){
+            if(Objects.isNull(memberId)
+             && ( Objects.isNull(shop.getMemberId())
+                    || !Constants.equalsInteger(shop.getMemberId(),memberId))){
+                shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
+                        .set(Shop::getMemberId,memberId)
+                        .eq(Shop::getId,shop.getId())
+                );
+            }
+            JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId());
+            String token = JwtTokenUtil.generateToken(payLoad);
+            accountResponse.setToken(token);
+        }
+        return accountResponse;
+    }
+
+
+    /**
+     * 鍟嗘埛璐﹀彿瀵嗙爜鐧诲綍
+     * @param userName
+     * @param password
+     * @param openid
+     * @param memberId
+     * @return
+     */
+    public AccountResponse shopPasswordLogin(String userName,String password,String openid,String memberId){
+        if(StringUtils.isBlank(userName)
+             || StringUtils.isBlank(password)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛鍚嶆垨瀵嗙爜涓嶈兘涓虹┖");
+        }
+        Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getUsername, userName)
+                .eq(Shop::getIsdeleted,Constants.ZERO)
+                .last("limit 1")
+        );
+        if(shop==null){
+            throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
+        }
+        //鍔犲瘑瀵嗙爜
+        String pwd = Utils.Secure.encryptPassword(password, shop.getSalt());
+        if(!pwd.equals(shop.getPassword())){
+            throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
+        }
+        //鍒涘缓token
+        JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId());
+        String token = JwtTokenUtil.generateToken(payLoad);
+        AccountResponse accountResponse = new AccountResponse();
+        accountResponse.setToken(token);
+        shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
+                .set(Shop::getOpenId,openid)
+                .set(Shop::getMemberId,memberId)
+                .eq(Shop::getId,shop.getId())
+        );
+        shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
+                .set(Shop::getOpenId,null)
+                .eq(Shop::getOpenId,openid)
+                .ne(Shop::getId,shop.getId())
+        );
+        return accountResponse;
+    }
+
 
     @Override
-    public void wxPhone(WxPhoneRequest wxPhoneRequest){
+    public AccountResponse wxPhone(WxPhoneRequest wxPhoneRequest){
         try {
             WxMaPhoneNumberInfo userPhoneInfo = WxMiniConfig.wxMaService.getUserService().getPhoneNoInfo(
                     wxPhoneRequest.getSessionKey(), wxPhoneRequest.getEncryptedData(), wxPhoneRequest.getIv());
@@ -291,46 +367,79 @@
             if(Objects.isNull(phone)){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈幏鍙栧埌鎵嬫満鍙�");
             }
-            Member member =  memberMapper.selectById(wxPhoneRequest.getMemberId());
+            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getOpenId, wxPhoneRequest.getOpenid())
+                    .eq(Member::getIsdeleted,Constants.ZERO)
+                    .last(" limit 1"));
+            if (member == null) {
+                member = new Member();
+                member.setImgurl("20230410/4010b821-2137-4e6d-86e4-5ab9c06184a4.png");
+                member.setNickname("寰俊鐢ㄦ埛"+ CodeVerifyUtils.createVerificationCode(4));
+                member.setCreateDate(new Date());
+                member.setIsdeleted(Constants.ZERO);
+                member.setType(Constants.ZERO);
+                member.setOrigin(Constants.ZERO);
+                member.setRecId(wxPhoneRequest.getRecId());
+                member.setOpenId(wxPhoneRequest.getOpenid());
+            }
             member.setPhone(phone);
             member.setEditDate(new Date());
-            member.setEditor(wxPhoneRequest.getMemberId());
             member.setImgFullUrl(systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                     systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+member.getImgurl());
-            //鐢熸垚鍒嗕韩鐮�
-            String accessToken = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ACCESS_TOKEN).getCode();
-            if(StringUtils.isBlank(member.getSharingCode())){
-                //鐢熸垚鍥剧墖涓婁紶OSS
-                Map<String,Object> body = new HashMap<>();
-                // 鍦烘櫙鐮侊紝涓庡墠绔害瀹氾紝鏈�缁堟槸闇�瑕佸墠绔В鏋�
-                body.put("scene", member.getId());
-                // 姝e紡鐗堜负 "release"锛屼綋楠岀増涓� "trial"锛屽紑鍙戠増涓� "develop"銆傞粯璁ゆ槸姝e紡鐗堛��
-                body.put("env_version", "release");
-                // 閫忔槑锛屾牴鎹綘鐨勫満鏅嚜琛岃缃産ody鍙傛暟
-                body.put("is_hyaline", true);
-                OkHttpClient client = new OkHttpClient().newBuilder().build();
-                okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/json");
-                okhttp3.RequestBody requestBody = okhttp3.RequestBody.create(mediaType, JSONObject.toJSONString(body));
-                Request request = new Request.Builder().url("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+accessToken)
-                        .method("POST", requestBody).build();
-                try {
-                    Response response = client.newCall(request).execute();
-                    if (response.isSuccessful()) {
-                        InputStream inputStream = new ByteArrayInputStream(response.body().bytes());
-                        FileModel fileModel = uploadFileService.uploadWxCode(inputStream,member.getId().toString());
-                        member.setSharingCode(fileModel.getFileUrl());
-                        inputStream.close();
-                    }
-                } catch (Exception e) {
-                    e.printStackTrace();
+            if(Objects.isNull(member.getId())){
+                memberMapper.insert(member);
+                member.setSharingCode(this.createShareCode(member.getId()));
+                memberMapper.updateById(member);
+            }else{
+                if(StringUtils.isBlank(member.getSharingCode())){
+                    member.setSharingCode(this.createShareCode(member.getId()));
                 }
+                memberMapper.updateById(member);
             }
-            memberMapper.updateById(member);
+            JwtPayLoad payLoad = new JwtPayLoad(Constants.MEMBER_PREFIX+member.getId());
+            String token = JwtTokenUtil.generateToken(payLoad);
+            AccountResponse accountResponse = new AccountResponse();
+            accountResponse.setToken(token);
+            accountResponse.setMember(member);
+            return accountResponse;
         } catch (Exception e) {
             e.printStackTrace();
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏇存柊鎵嬫満鍙峰け璐�");
         }
     }
+
+
+
+    public String createShareCode(Integer memberId){
+        //鐢熸垚鍒嗕韩鐮�
+        String accessToken = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ACCESS_TOKEN).getCode();
+        //鐢熸垚鍥剧墖涓婁紶OSS
+        Map<String,Object> body = new HashMap<>();
+        // 鍦烘櫙鐮侊紝涓庡墠绔害瀹氾紝鏈�缁堟槸闇�瑕佸墠绔В鏋�
+        body.put("scene", memberId);
+        // 姝e紡鐗堜负 "release"锛屼綋楠岀増涓� "trial"锛屽紑鍙戠増涓� "develop"銆傞粯璁ゆ槸姝e紡鐗堛��
+        body.put("env_version", "release");
+        // 閫忔槑锛屾牴鎹綘鐨勫満鏅嚜琛岃缃産ody鍙傛暟
+        body.put("is_hyaline", true);
+        OkHttpClient client = new OkHttpClient().newBuilder().build();
+        okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/json");
+        okhttp3.RequestBody requestBody = okhttp3.RequestBody.create(mediaType, JSONObject.toJSONString(body));
+        Request request = new Request.Builder().url("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+accessToken)
+                .method("POST", requestBody).build();
+        try {
+            Response response = client.newCall(request).execute();
+            if (response.isSuccessful()) {
+                InputStream inputStream = new ByteArrayInputStream(response.body().bytes());
+                FileModel fileModel = uploadFileService.uploadWxCode(inputStream,memberId.toString());
+                inputStream.close();
+                return fileModel.getFileUrl();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
 
     @Override
     public Member updateMember(UpdateMemberRequest updateMemberRequest){
@@ -571,4 +680,13 @@
         Integer integer = integralService.dealIntegral(dealIntegralRequest);
         return integer;
     }
+
+
+
+
+
+
+
+
+
 }

--
Gitblit v1.9.3