From 56fcde8c93a1a10bc50fac775e370a2db57f520e Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期二, 20 一月 2026 17:08:30 +0800
Subject: [PATCH] 小程序   接口开发

---
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java |  308 ++++++++++++++++++++++++++++++++------------------
 1 files changed, 197 insertions(+), 111 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 017cbe5..51363f3 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,10 +20,14 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.core.wx.WxMiniConfig;
 import com.doumee.dao.business.*;
+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.*;
 import com.doumee.dao.system.SystemUserMapper;
 import com.doumee.dao.system.dto.MemberRechargeDTO;
+import com.doumee.dao.system.dto.PlatformConfigDTO;
 import com.doumee.dao.web.dto.MemberOwnDTO;
 import com.doumee.dao.web.dto.shop.Position;
 import com.doumee.dao.system.model.SystemUser;
@@ -39,7 +43,10 @@
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.service.system.SystemDictDataService;
 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;
@@ -74,11 +81,16 @@
     @Autowired
     private MemberMapper memberMapper;
     @Autowired
+    private CouponMapper couponMapper;
+    @Autowired
+    private MemberCouponJoinMapper memberCouponJoinMapper;
+    @Autowired
     private IntegralMapper integralMapper;
     @Autowired
     private ShopMapper shopMapper;
     @Autowired
     private UserActionMapper userActionMapper;
+
 
     @Autowired
     private SmsrecordMapper smsrecordMapper;
@@ -87,12 +99,18 @@
     @Autowired
     private MemberJoinMapper memberJoinMapper;
 
+    @Autowired
+    private InviteRecordMapper inviteRecordMapper;
+
 
     @Autowired
     private SystemUserMapper systemUserMapper;
 
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
+
+    @Autowired
+    private SystemDictDataService systemDictDataService;
 
     @Autowired
     private UploadFileService uploadFileService;
@@ -181,65 +199,6 @@
                 new String[]{user.getUsername(),DateUtil.getPlusTime2(date)},
                 JSONObject.toJSONString(member) ,
                 model.getShopName(), shop.getName());
-    }
-    @Override
-    @Transactional
-    public void updateIntegral(Integral param) {
-        if(param.getMemberId()==null || param.getType()==null
-                || param.getType()<0
-                || param.getType()>2
-                || Constants.formatBigdecimal(param.getNum()).compareTo(new BigDecimal(0))<=0){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST);
-        }
-
-        MPJLambdaWrapper<Member> queryWrapper =new MPJLambdaWrapper<>();
-        queryWrapper.selectAll(Member.class);
-        queryWrapper.selectAs(Shop::getName,Member::getShopName);
-        queryWrapper.leftJoin(Shop.class, Shop::getId,Member::getBindShopId);
-        queryWrapper.eq(Member::getId,param.getMemberId());
-        Member model = memberMapper.selectJoinOne(Member.class,queryWrapper);
-        if(model == null ||Constants.equalsObject(model.getIsdeleted(),Constants.ONE)){
-            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀹㈡埛淇℃伅鏌ヨ鏃犳晥锛�");
-        }
-
-        BigDecimal num = param.getNum();
-        if(param.getType() == 1 &&Constants.formatBigdecimal(model.getIntegral()).compareTo(param.getNum())<0){
-            //濡傛灉鏄噺灏戯紝鍒ゆ柇鐢ㄦ埛浣欓鏄惁婊¤冻
-            num = num.multiply(new BigDecimal(-1));//鍑忓皯
-            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鐢ㄦ埛璐︽埛浣欓涓嶈冻锛�");
-        }
-
-        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-
-        Date date = new Date();
-        //璐︽埛浣欓
-        memberMapper.update(null,new UpdateWrapper<Member>().lambda()
-                .eq(Member::getId,model.getId())
-                .set(Member::getEditDate,date)
-                .set(Member::getEditor,user.getId())
-                .setSql(param.getType() == 0,"total_integral = ifnull(total_integral,0)+" + num)//绱澧炲姞
-                .setSql(param.getType() == 0,"integral = ifnull(integral,0)+" + param.getNum())
-                .setSql(param.getType() == 1,"integral = ifnull(integral,0)-" + param.getNum()));
-
-        Constants.IntegralObjType integralObjType = param.getType()==0?Constants.IntegralObjType.SYSTEM_RECHARGE:Constants.IntegralObjType.SYSTEM_DEDUCT;
-
-        Integral integral = new Integral();
-        integral.setMemberId(model.getId());
-        integral.setCreateDate(new Date());
-        integral.setCreator(user.getId());
-        integral.setIsdeleted(Constants.ZERO);
-        integral.setTitle(integralObjType.getName());
-        integral.setContent(integralObjType.getNoteinfo());
-        integral.setObjId(model.getId());
-        integral.setObjType(integralObjType.getKey());
-        integral.setType(param.getType());
-        integral.setRemark(param.getRemark());
-        integral.setNum(param.getNum());
-        integral.setTotalNum(param.getType() == 0? Constants.formatBigdecimal(model.getIntegral()).add(integral.getNum()):Constants.formatBigdecimal(model.getIntegral()).subtract(integral.getNum()));
-        integral.setOrderCode(null);
-        integral.setUserType(Constants.ZERO);
-        integralMapper.insert(integral);
-
     }
 
     @Override
@@ -340,7 +299,7 @@
 
 
     @Override
-    public AccountResponse wxLogin(String code,Integer recId){
+    public AccountResponse wxLogin(String code){
         try {
             //鑾峰彇寰俊鏁忔劅鏁版嵁
             WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code);
@@ -348,48 +307,43 @@
             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)){
+                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);
         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());
@@ -398,46 +352,169 @@
             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);
+                if(!this.checkIsCreateInvite(phone)){
+                    member.setRecId(Constants.getInviteCode(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);
+
+                PlatformConfigDTO platformConfigDTO = systemDictDataService.getPlatformConfigDTO();
+                this.createRegionReward(member,platformConfigDTO);
+                //鍒涘缓閭�璇疯褰�
+                this.createInviteRecord(member,platformConfigDTO);
+                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(),"鏇存柊鎵嬫満鍙峰け璐�");
         }
     }
+
+
+    /**
+     * 鍙戞斁娉ㄥ唽濂栧姳淇℃伅
+     * @param member
+     * @param platformConfigDTO
+     */
+    public void createRegionReward(Member member,PlatformConfigDTO platformConfigDTO){
+        //鏌ヨ鐢ㄦ埛鏄惁娉ㄩ攢杩�
+        if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
+                .eq(Member::getIsdeleted,Constants.ONE)
+                .eq(Member::getPhone,member.getPhone())
+        )>Constants.ZERO){
+            return;
+        }
+        //寮�鍚敞鍐岄�佺Н鍒�
+        if(Constants.equalsInteger(platformConfigDTO.getRegIntegralRewardStatus(),Constants.ZERO)){
+            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+            dealIntegralRequest.setIntegralNum(platformConfigDTO.getRegIntegralReward());
+            dealIntegralRequest.setDealType(Constants.ZERO);
+            dealIntegralRequest.setMemberId(member.getId());
+            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.REGISTER);
+            integralService.dealIntegral(dealIntegralRequest);
+        }
+        //寮�鍚敞鍐岄�佷紭鎯犲埜
+        if(Constants.equalsInteger(platformConfigDTO.getRegCouponRewardStatus(),Constants.ZERO)){
+            List<JSONObject> regCouponRewardList = platformConfigDTO.getRegCouponRewardList();
+            //[{"num":"2","couponId":6},{"num":"3","couponId":5}]
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(regCouponRewardList)){
+                List<MemberCoupon> memberCouponList = new ArrayList<>();
+                for (JSONObject jsonObject:regCouponRewardList) {
+                    Integer couponId = jsonObject.getInteger("couponId");
+                    Integer num = jsonObject.getInteger("num");
+                    Coupon coupon =  couponMapper.selectById(couponId);
+                    if(Objects.isNull(coupon)||Constants.equalsInteger(coupon.getIsdeleted(),Constants.ONE)&&num>Constants.ZERO){
+                        continue;
+                    }
+                    MemberCoupon memberCoupon = MemberCoupon.couponToBean(coupon,member,new Date(),Constants.ZERO,null);
+                    for (int i = 0; i < num; i++) {
+                        memberCouponList.add(memberCoupon);
+                    }
+                }
+                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberCouponList)){
+                    memberCouponJoinMapper.insert(memberCouponList);
+                }
+            }
+        }
+    }
+
+
+    /**
+     * 鍒涘缓閭�璇疯褰�
+     * @param member
+     */
+    public void createInviteRecord(Member member,PlatformConfigDTO platformConfigDTO){
+        if(Objects.isNull(member.getRecId())){
+            return;
+        }
+        InviteRecord inviteRecord = new InviteRecord();
+        inviteRecord.setCreateDate(new Date());
+        inviteRecord.setIsdeleted(Constants.ZERO);
+        inviteRecord.setInviteId(member.getRecId());
+        inviteRecord.setMemberId(member.getId());
+        inviteRecord.setPhone(member.getPhone());
+        inviteRecord.setRewardIntegral(Objects.nonNull(platformConfigDTO)&&Constants.equalsInteger(platformConfigDTO.getShareIntegralRewardStatus(),Constants.ZERO)?
+                platformConfigDTO.getShareIntegralReward():BigDecimal.ZERO);
+        inviteRecord.setFirstOrderStatus(Constants.ZERO);
+        inviteRecordMapper.insert(inviteRecord);
+    }
+
+
+    /**
+     * 鏌ヨ鏄惁鍒涘缓杩囬個璇�
+     * @param mobile
+     * @return
+     */
+    public Boolean checkIsCreateInvite(String mobile){
+        return inviteRecordMapper.selectCount(new QueryWrapper<InviteRecord>()
+                .lambda()
+                .eq(InviteRecord::getPhone,mobile)
+        )>Constants.ZERO?true:false;
+    }
+
+
+
+
+    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){
@@ -678,4 +755,13 @@
         Integer integer = integralService.dealIntegral(dealIntegralRequest);
         return integer;
     }
+
+
+
+
+
+
+
+
+
 }

--
Gitblit v1.9.3