From 11c5ab8d97809bdeddb60b22a4fe161a67aa3b05 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期一, 19 一月 2026 16:03:17 +0800
Subject: [PATCH] 小程序 接口开发
---
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 277 +++++++++++++++++++++++++++++++++---------------------
1 files changed, 169 insertions(+), 108 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..f405e38 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,6 +20,9 @@
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;
@@ -40,6 +43,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;
@@ -79,6 +84,7 @@
private ShopMapper shopMapper;
@Autowired
private UserActionMapper userActionMapper;
+
@Autowired
private SmsrecordMapper smsrecordMapper;
@@ -181,65 +187,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
@@ -348,38 +295,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);
@@ -387,9 +334,81 @@
}
+ /**
+ * 鏍规嵁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());
@@ -398,46 +417,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){
@@ -678,4 +730,13 @@
Integer integer = integralService.dealIntegral(dealIntegralRequest);
return integer;
}
+
+
+
+
+
+
+
+
+
}
--
Gitblit v1.9.3