ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java
@@ -68,8 +68,8 @@ * @date 2023/4/30 15:36 * @version 1.0 */ @PostMapping("/user/getSysUserBYmobile") public R<SysUser> getSysUserBYmobile(@RequestBody String mobile); @PostMapping("/user/getSysUserByMobile") public R<SysUser> getSysUserByMobile(@RequestBody String mobile); /** * @description: 更新用户手机 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
@@ -12,6 +12,8 @@ String USER_NOT_LOGIN = "用户没有登录或登录已失效"; String MOBILE_USER_DOUBLE = "手机号已创建用户,请直接登录"; String AUTHORIZE_MISS = "授权信息不完整"; String AUTHORIZE_FAILED = "授权信息解密失败"; @@ -56,6 +58,8 @@ String MOBILE_FAILED = "验证手机非绑定手机"; String MOBILE_DOUBLE = "手机号已被占用"; String AGREEMENT_FAILED = "获取协议失败"; String GOODS_DOWN = "商品已下架"; ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppUserSuggestDto.java
@@ -15,4 +15,7 @@ @ApiModelProperty(value = "建议内容") private String suggestContent; @ApiModelProperty(value = "建议类型1平台2商户") private Integer suggestType; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java
@@ -50,7 +50,7 @@ } @Override public R<SysUser> getSysUserBYmobile(String mobile) { public R<SysUser> getSysUserByMobile(String mobile) { return null; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java
@@ -24,6 +24,11 @@ private Long userid; /** * 商户id */ private Long shopid; /** * 用户名 */ private String username; @@ -147,4 +152,12 @@ { this.sysUser = sysUser; } public Long getShopid() { return shopid; } public void setShopid(Long shopid) { this.shopid = shopid; } } ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
@@ -4,6 +4,7 @@ import com.ruoyi.system.api.model.AppMiniLoginDto; import com.ruoyi.system.api.model.AppMiniLoginVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; @@ -27,6 +28,8 @@ * @author jqs */ @RestController @Api(value = "系统和小程序登录", tags = "系统和小程序登录") public class TokenController { @Autowired @@ -55,15 +58,7 @@ return R.ok(tokenService.createMiniToken(appMiniLoginVo)); } @ApiOperation("商户端登录") @PostMapping("shopLogin") public R<?> shopLogin(@RequestBody AppMiniLoginDto appMiniLoginDto) { // 小程序用户登录 AppMiniLoginVo appMiniLoginVo = sysLoginService.miniLogin(appMiniLoginDto); // 获取登录token return R.ok(tokenService.createMiniToken(appMiniLoginVo)); } @DeleteMapping("logout") public R<?> logout(HttpServletRequest request) ruoyi-auth/src/main/resources/bootstrap.yml
@@ -15,9 +15,11 @@ discovery: # 服务注册地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 config: # 配置中心地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 # 配置文件格式 file-extension: yml # 共享配置 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java
@@ -13,6 +13,11 @@ public static final String DETAILS_USER_ID = "user_id"; /** * 商户ID字段 */ public static final String DETAILS_SHOP_ID = "shop_id"; /** * 用户名字段 */ public static final String DETAILS_USERNAME = "username"; ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -100,7 +100,7 @@ } /** * 创建小程序令牌 * 创建企业微信令牌 */ public OauthUserVo createQwH5Token(QwH5LoginVo qwH5LoginVo) { ruoyi-gateway/src/main/resources/bootstrap.yml
@@ -15,9 +15,11 @@ discovery: # 服务注册地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 config: # 配置中心地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 # 配置文件格式 file-extension: yml # 共享配置 @@ -34,6 +36,7 @@ ds1: nacos: server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 dataId: sentinel-ruoyi-gateway groupId: DEFAULT_GROUP data-type: json ruoyi-modules/ruoyi-file/src/main/resources/bootstrap.yml
@@ -19,9 +19,11 @@ discovery: # 服务注册地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 config: # 配置中心地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 # 配置文件格式 file-extension: yml # 共享配置 ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml
@@ -15,9 +15,11 @@ discovery: # 服务注册地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 config: # 配置中心地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 # 配置文件格式 file-extension: yml # 共享配置 ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml
@@ -15,9 +15,11 @@ discovery: # 服务注册地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 config: # 配置中心地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 # 配置文件格式 file-extension: yml # 共享配置 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerMemberController.java
@@ -3,9 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.member.domain.dto.MerCashMemberPageDto; import com.ruoyi.member.domain.dto.MerMemberPageDto; import com.ruoyi.member.domain.dto.MerMemberTagEditDto; import com.ruoyi.member.domain.dto.*; import com.ruoyi.member.domain.vo.*; import com.ruoyi.member.service.member.MemberService; import com.ruoyi.system.api.domain.dto.MerBaseDto; @@ -98,5 +96,21 @@ return R.ok(); } @RequestMapping(value = "/addMerMember", method = RequestMethod.POST) @ApiOperation(value = "新增会员") public R addMerMember(@RequestBody MerMemberAddDto merMemberAddDto) { Long userId = SecurityUtils.getUserId(); merMemberAddDto.setUserId(userId); memberService.addMerMember(merMemberAddDto); return R.ok(); } @RequestMapping(value = "/editMerMember", method = RequestMethod.POST) @ApiOperation(value = "编辑会员") public R editMerMember(@RequestBody MerMemberEditDto merMemberAddDto) { Long userId = SecurityUtils.getUserId(); merMemberAddDto.setUserId(userId); memberService.editMerMember(merMemberAddDto); return R.ok(); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java
@@ -60,19 +60,22 @@ } /** * @description: TODO * @description: 获取用户优惠券 * @author jqs34 * @date 2023/5/3 1:45 * @version 1.0 */ @PostMapping("/listVoUserCouponByUserId") public R<List<AppUserCouponVo>> listVoUserCouponByUserId(@RequestBody Long userId){ List<AppUserCouponVo> appUserCouponVoList = userCouponService.listVoUserCouponByUserId(userId); return R.ok(appUserCouponVoList); } /** * 更新会员绑定商户 * @param appMemberBindingDto * @return */ @PostMapping("/updateMemberBinding") public R updateMemberBinding(@RequestBody AppMemberBindingDto appMemberBindingDto) { ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerMemberAddDto.java
New file @@ -0,0 +1,45 @@ package com.ruoyi.member.domain.dto; import com.ruoyi.system.api.domain.dto.MerBaseDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; import java.util.List; /** * @author jqs34 * @version 1.0 * @classname MerMeberInfoVo * @description: TODO * @date 2023 2023/5/4 22:48 */ @Data public class MerMemberAddDto extends MerBaseDto { @ApiModelProperty(value = "用户昵称") private String nickName; @ApiModelProperty(value = "手机号码") private String phonenumber; @ApiModelProperty(value = "性别0=男,1=女,2=未知") private Integer gender; @ApiModelProperty(value = "推荐人") private String referrer; @ApiModelProperty(value = "顾客来源") private String customerSource; @ApiModelProperty(value = "等级") private String level; @ApiModelProperty(value = "生日") private String birthday; @ApiModelProperty(value = "调理问题") private List<String> memberNurse; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerMemberEditDto.java
New file @@ -0,0 +1,49 @@ package com.ruoyi.member.domain.dto; import com.ruoyi.system.api.domain.dto.MerBaseDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; import java.util.List; /** * @author jqs34 * @version 1.0 * @classname MerMeberInfoVo * @description: TODO * @date 2023 2023/5/4 22:48 */ @Data public class MerMemberEditDto extends MerBaseDto { @ApiModelProperty(value = "修改用户id") private Long editUserId; @ApiModelProperty(value = "用户昵称") private String nickName; @ApiModelProperty(value = "手机号码") private String phonenumber; @ApiModelProperty(value = "性别0=男,1=女,2=未知") private Integer gender; @ApiModelProperty(value = "推荐人") private String referrer; @ApiModelProperty(value = "顾客来源") private String customerSource; @ApiModelProperty(value = "等级") private String level; @ApiModelProperty(value = "生日") private String birthday; @ApiModelProperty(value = "调理问题") private List<String> memberNurse; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerMemberPageDto.java
@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; /** * @author jqs34 * @ClassName MerMemberPageDto @@ -17,4 +19,40 @@ @ApiModelProperty(value = "关键词") private String keyword; @ApiModelProperty(value = "成为会员开始时间") private String startMemberDate; @ApiModelProperty(value = "成为会员结束时间") private String endMemberDate; @ApiModelProperty(value = "会员类型1.周期2.服务3.体验") private Integer memberType; @ApiModelProperty(value = "会员来源1.小程序2.推荐3.店铺创建") private Integer memberFrom; @ApiModelProperty(value = "跟进开始时间") private String taskStartDate; @ApiModelProperty(value = "跟进结束时间") private String taskEndDate; @ApiModelProperty(value = "用户标签") private String memberTag; @ApiModelProperty(value = "剩余次数") private Integer surpNum; @ApiModelProperty(value = "会员等级") private String memberLevel; @ApiModelProperty(value = "会员调理问题") private String memberNurse; @ApiModelProperty(value = "会员性别0男1女") private Integer memberGender; @ApiModelProperty(value = "会员活跃度1.活跃2.中度活跃3.轻度活跃") private Integer memberActivity; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -2,8 +2,9 @@ import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.domain.R; @@ -11,10 +12,7 @@ import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.common.core.utils.uuid.IdUtils; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.member.domain.dto.AppUserAuthorizeDto; import com.ruoyi.member.domain.dto.MerCashMemberPageDto; import com.ruoyi.member.domain.dto.MerMemberPageDto; import com.ruoyi.member.domain.dto.MerMemberTagEditDto; import com.ruoyi.member.domain.dto.*; import com.ruoyi.member.domain.pojo.member.MemberNurse; import com.ruoyi.member.domain.vo.*; import com.ruoyi.member.mapper.member.MemberMapper; @@ -34,17 +32,12 @@ import com.ruoyi.system.api.domain.poji.shop.Shop; import com.ruoyi.system.api.domain.poji.sys.SysUser; import com.ruoyi.system.api.domain.vo.AppOrderTotalVo; import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo; import com.ruoyi.system.api.model.AppMiniLoginDto; import com.ruoyi.system.api.model.AppMiniLoginVo; import lombok.extern.log4j.Log4j; import lombok.extern.log4j.Log4j2; import lombok.val; import com.ruoyi.common.core.utils.StringUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.util.EntityUtils; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; @@ -191,66 +184,65 @@ public AppUserAuthorizeVo getAppUserAuthorize(AppUserAuthorizeDto appUserAuthorizeDto){ Member member = this.getById(appUserAuthorizeDto.getUserId()); AppUserAuthorizeVo appUserAuthorizeVo = new AppUserAuthorizeVo(); //获取code接口在redis里存放的sessionkey用于解密 String sessionkey = stringRedisTemplate.opsForValue().get(SecurityConstant.SESSION_KEY+ member.getMiniOpenid()); if(StringUtils.isBlank(sessionkey)){ throw new ServiceException(AppErrorConstant.USER_NOT_LOGIN); } String mobile = null; try { //解密微信加密用户信息和手机号 /*WxMaPhoneNumberInfo wxPhoneInfo; if(StringUtils.isNotBlank(appUserAuthorizeDto.getPhoneEncryptedData())&&StringUtils.isNotBlank(appUserAuthorizeDto.getPhoneIv())){ wxPhoneInfo = wxMaService.getUserService().getPhoneNoInfo(sessionkey, appUserAuthorizeDto.getPhoneEncryptedData(), appUserAuthorizeDto.getPhoneIv()); }else{ throw new ServiceException(AppErrorConstant.AUTHORIZE_MISS); if(StringUtils.isBlank(member.getMobile())){ //获取code接口在redis里存放的sessionkey用于解密 String sessionkey = stringRedisTemplate.opsForValue().get(SecurityConstant.SESSION_KEY+ member.getMiniOpenid()); if(StringUtils.isBlank(sessionkey)){ throw new ServiceException(AppErrorConstant.USER_NOT_LOGIN); } if(StringUtils.isBlank(wxPhoneInfo.getPhoneNumber())){ throw new ServiceException(AppErrorConstant.AUTHORIZE_FAILED); } mobile = wxPhoneInfo.getPhoneNumber();*/ String accessToken = stringRedisTemplate.opsForValue().get("wx_access_token"); if (StringUtils.isBlank(accessToken)) { String responseAccessToken = getAccessTokenByWX(); JSONObject jsonAccessToken = JSONObject.parseObject(responseAccessToken); accessToken = jsonAccessToken.getString("access_token"); String errmsg = jsonAccessToken.getString("errmsg"); Long expiresIn = jsonAccessToken.getLong("expires_in"); try { String accessToken = stringRedisTemplate.opsForValue().get("wx_access_token"); if (StringUtils.isBlank(accessToken)) { throw new ServiceException(errmsg); } else { expiresIn = expiresIn - 100; stringRedisTemplate.opsForValue().set("wx_access_token", accessToken, expiresIn.intValue(), TimeUnit.SECONDS); String responseAccessToken = getAccessTokenByWX(); JSONObject jsonAccessToken = JSONObject.parseObject(responseAccessToken); accessToken = jsonAccessToken.getString("access_token"); String errmsg = jsonAccessToken.getString("errmsg"); Long expiresIn = jsonAccessToken.getLong("expires_in"); if (StringUtils.isBlank(accessToken)) { throw new ServiceException(errmsg); } else { expiresIn = expiresIn - 100; stringRedisTemplate.opsForValue().set("wx_access_token", accessToken, expiresIn.intValue(), TimeUnit.SECONDS); } } String responseUserPhoneNumber = getMobileByWX(accessToken, appUserAuthorizeDto.getMobileCode()); JSONObject jsonUserPhoneNumber = JSONObject.parseObject(responseUserPhoneNumber); String errcode = jsonUserPhoneNumber.getString("errcode"); String errmsg = jsonUserPhoneNumber.getString("errmsg"); if (!errcode.equals("0")) { throw new ServiceException(errmsg); } String phoneInfo = jsonUserPhoneNumber.getString("phone_info"); JSONObject jsonUserPhoneInfo = JSONObject.parseObject(phoneInfo); mobile = jsonUserPhoneInfo.getString("purePhoneNumber"); } catch (Exception e) { e.printStackTrace(); } String responseUserPhoneNumber = getMobileByWX(accessToken, appUserAuthorizeDto.getMobileCode()); JSONObject jsonUserPhoneNumber = JSONObject.parseObject(responseUserPhoneNumber); String errcode = jsonUserPhoneNumber.getString("errcode"); String errmsg = jsonUserPhoneNumber.getString("errmsg"); if (!errcode.equals("0")) { throw new ServiceException(errmsg); Member oldMember = this.getByMobile(mobile); if(oldMember!=null){ member.setNickName(oldMember.getNickName()); member.setGender(oldMember.getGender()); member.setReferrer(oldMember.getReferrer()); member.setBirthday(oldMember.getBirthday()); member.setBindingFlag(1); member.setRelationShopId(oldMember.getRelationShopId()); oldMember.setDelFlag(1); oldMember.setMiniOpenid(oldMember.getMiniOpenid()+"已删除"); this.saveOrUpdate(oldMember); }else{ //更新用户手机信息 SysUser sysUser = new SysUser(); sysUser.setUserId(appUserAuthorizeDto.getUserId()); sysUser.setPhonenumber(mobile); sysUserService.updateUserMobile(sysUser); member.setNickName(sysUser.getNickName()); } String phoneInfo = jsonUserPhoneNumber.getString("phone_info"); JSONObject jsonUserPhoneInfo = JSONObject.parseObject(phoneInfo); mobile = jsonUserPhoneInfo.getString("purePhoneNumber"); } catch (Exception e) { e.printStackTrace(); } SysUser sysUser1 = sysUserService.getSysUserBYmobile(mobile).getData(); if(sysUser1!=null){ member.setUserId(sysUser1.getUserId()); member.setNickName(sysUser1.getNickName()); member.setMobile(mobile); this.saveOrUpdate(member); }else{ //更新用户手机信息 SysUser sysUser = new SysUser(); sysUser.setUserId(appUserAuthorizeDto.getUserId()); sysUser.setPhonenumber(mobile); sysUserService.updateUserMobile(sysUser); member.setNickName(sysUser.getNickName()); mobile = member.getMobile(); } member.setMobile(mobile); this.saveOrUpdate(member); appUserAuthorizeVo.setMobile(mobile); appUserAuthorizeVo.setNickName(member.getNickName()); appUserAuthorizeVo.setOpenid(member.getMiniOpenid()); @@ -358,7 +350,7 @@ /** * @description: TODO * @description: 商户获取会员信息 * @author jqs34 * @date 2023/5/4 22:50 * @version 1.0 @@ -391,7 +383,7 @@ } /** * * 更新会员绑定商户 * @param appMemberBindingDto */ @Override @@ -403,7 +395,7 @@ } /** * * 获取会员基础档案 * @param userId * @return */ @@ -422,7 +414,7 @@ } /** * * 获取会员标签 * @param userId * @return */ @@ -455,7 +447,7 @@ } /** * * 编辑会员标签 * @param merMemberTagEditDto */ @Override @@ -464,4 +456,94 @@ member.setUserTags(merMemberTagEditDto.getUserTags()); this.saveOrUpdate(member); } /** * 添加会员 * @param merMemberAddDto */ @Override public void addMerMember(MerMemberAddDto merMemberAddDto){ String phonenumber = merMemberAddDto.getPhonenumber(); Member oldMember = this.getByMobile(phonenumber); if(oldMember!=null){ throw new ServiceException(AppErrorConstant.MOBILE_USER_DOUBLE); } SysUser sysUser = sysUserService.getSysUserByMobile(phonenumber).getData(); if(sysUser==null){ sysUser = new SysUser(); sysUser.setUserName(phonenumber); sysUser.setUserType("03"); sysUser.setNickName(merMemberAddDto.getNickName()); sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); String password = "hongruitang"; sysUser.setPassword(SecurityUtils.encryptPassword(password)); log.debug("sysUser"+sysUser.toString()); sysUser = sysUserService.registerUser(sysUser).getData(); } log.info("sysUser1-----------------"+sysUser.toString()); String memberId = IdUtils.simpleUUID(); Member member = new Member(); member.setUserId(sysUser.getUserId()); member.setDelFlag(0); member.setNickName(merMemberAddDto.getNickName()); member.setGender(merMemberAddDto.getGender()); member.setMobile(phonenumber); member.setReferrer(merMemberAddDto.getReferrer()); member.setBirthday(merMemberAddDto.getBirthday()); member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); member.setMemberId(memberId); member.setRelationShopId(1L); member.setWxUnionid(null); member.setMiniOpenid(null); member.setBindingFlag(1); member.setRelationShopId(merMemberAddDto.getShopId()); member.setCreateTime(new Date()); log.info("member-----------------"+member.toString()); this.saveOrUpdate(member); } /** * 编辑会员 * @param merMemberEditDto */ @Override public void editMerMember(MerMemberEditDto merMemberEditDto){ Member member = this.getByUserId(merMemberEditDto.getEditUserId()); if(!member.getMobile().equals(merMemberEditDto.getPhonenumber())){ Member memberOld = getByMobile(merMemberEditDto.getPhonenumber()); if(memberOld!=null){ throw new ServiceException(AppErrorConstant.MOBILE_DOUBLE); } } member.setRealName(merMemberEditDto.getNickName()); member.setMobile(merMemberEditDto.getPhonenumber()); member.setGender(merMemberEditDto.getGender()); member.setReferrer(merMemberEditDto.getReferrer()); member.setCustomerSource(merMemberEditDto.getCustomerSource()); member.setLevel(merMemberEditDto.getLevel()); member.setBirthday(merMemberEditDto.getBirthday()); member.setUpdateUserId(merMemberEditDto.getUserId()); member.setUpdateTime(new Date()); log.info("member-----------------"+member.toString()); this.saveOrUpdate(member); SysUser sysUser = new SysUser(); sysUser.setUserId(merMemberEditDto.getEditUserId()); sysUser.setPhonenumber(merMemberEditDto.getPhonenumber()); sysUserService.updateUserMobile(sysUser); } /** * * @param mobile * @return */ @Override public Member getByMobile(String mobile){ LambdaQueryWrapper<Member> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(Member::getDelFlag, 0).eq(Member::getMobile, mobile); Member member = this.getOne(queryWrapper); return member; } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberSuggestServiceImpl.java
@@ -51,6 +51,7 @@ memberSuggest.setCreateUserId(appUserSuggestDto.getUserId()); memberSuggest.setSuggestContent(appUserSuggestDto.getSuggestContent()); memberSuggest.setCreateTime(new Date()); memberSuggest.setSuggestType(appUserSuggestDto.getSuggestType()); this.saveOrUpdate(memberSuggest); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
@@ -1,9 +1,7 @@ package com.ruoyi.member.service.member; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.member.domain.dto.MerCashMemberPageDto; import com.ruoyi.member.domain.dto.MerMemberPageDto; import com.ruoyi.member.domain.dto.MerMemberTagEditDto; import com.ruoyi.member.domain.dto.*; import com.ruoyi.member.domain.vo.*; import com.ruoyi.system.api.domain.dto.AppEditUserDto; import com.ruoyi.system.api.domain.dto.AppMemberBindingDto; @@ -11,7 +9,6 @@ import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo; import com.ruoyi.system.api.model.AppMiniLoginDto; import com.ruoyi.system.api.model.AppMiniLoginVo; import com.ruoyi.member.domain.dto.AppUserAuthorizeDto; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; @@ -27,7 +24,7 @@ public interface MemberService extends IService<Member> { /** * @description: TODO * @description: 通过userId获取会员 * @author jqs34 * @date 2023/4/30 12:41 * @version 1.0 @@ -69,7 +66,7 @@ List<MerMemberPageVo> pageMerMember(Page page, MerMemberPageDto merMemberPageDto); /** * @description: TODO * @description: 商户获取会员信息 * @author jqs34 * @date 2023/5/4 23:55 * @version 1.0 @@ -77,7 +74,7 @@ MerMemberInfoVo getMerMemberInfo(Long userId); /** * 分页获取收银用户列表 * 分页获取收银会员列表 * @param page * @param merCashMemberPageDto * @return @@ -85,28 +82,47 @@ List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto); /** * * 更新会员绑定商户 * @param appMemberBindingDto */ void updateMemberBinding(AppMemberBindingDto appMemberBindingDto); /** * * 获取会员基础档案 * @param userId * @return */ MerMemberBasicFileVo getMerMemberBasicFile(Long userId); /** * * 获取会员标签 * @param userId * @return */ List<MerMemberTagVo> getMerMemberTags(Long userId); /** * * 编辑会员标签 * @param merMemberTagEditDto */ void editMerMemberTags(MerMemberTagEditDto merMemberTagEditDto); /** * 添加会员 * @param merMemberAddDto */ void addMerMember(MerMemberAddDto merMemberAddDto); /** * 编辑会员 * @param merMemberEditDto */ void editMerMember(MerMemberEditDto merMemberEditDto); /** * * @param mobile * @return */ Member getByMobile(String mobile); } ruoyi-modules/ruoyi-member/src/main/resources/bootstrap.yml
@@ -15,9 +15,11 @@ discovery: # 服务注册地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 config: # 配置中心地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 # 配置文件格式 file-extension: yml # 共享配置 ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
@@ -137,7 +137,7 @@ <select id="getOneByMiniOpenid" resultType="com.ruoyi.system.api.domain.poji.member.Member"> SELECT * FROM t_member WHERE mini_openid = #{miniOpenid} SELECT * FROM t_member WHERE del_flag = 0 AND mini_openid = #{miniOpenid} </select> <select id="pageMerMember" resultType="com.ruoyi.member.domain.vo.MerMemberPageVo"> ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberSuggestMapper.xml
@@ -8,7 +8,8 @@ replay_content replayContent, create_time createTime FROM t_member_suggest WHERE del_flag = 0 AND create_user_id = #{param.userId} AND suggest_type = #{param.suggestType} WHERE del_flag = 0 AND create_user_id = #{param.userId} AND suggest_type = #{param.suggestType} </select> </mapper> ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerOrderPageDto.java
@@ -25,4 +25,12 @@ @ApiModelProperty(value = "1.全部2.待核销3.已核销") private Integer type; @ApiModelProperty(value = "订单开始时间") private String startOrderDate; @ApiModelProperty(value = "订单结束时间") private String endOrderDate; @ApiModelProperty(value = "订单来源1.店铺商品2.平台秒杀活动3.线下创建") private Integer orderFrom; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/ShoppingCartMapper.java
@@ -17,6 +17,8 @@ */ public interface ShoppingCartMapper extends BaseMapper<ShoppingCart> { void deleteShoppingCartById(@Param("id") Long id); /** * 批量删除 * @param ids ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -426,6 +426,11 @@ appUserOrderGetVo.setPayMoney(order.getPayMoney()); appUserOrderGetVo.setOrderRemark(order.getOrderRemark()); appUserOrderGetVo.setShopId(order.getShopId()); appUserOrderGetVo.setCreateTime(order.getCreateTime()); appUserOrderGetVo.setPayTime(order.getCreateTime()); appUserOrderGetVo.setUseTime(order.getUseTime()); appUserOrderGetVo.setCancelTime(order.getCancelTime()); appUserOrderGetVo.setOrderRemark(order.getOrderRemark()); Shop shop = remoteShopService.getShop(order.getShopId()).getData(); appUserOrderGetVo.setShopName(shop.getShopName()); appUserOrderGetVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); @@ -618,17 +623,18 @@ if(userId==null){ String name = merNewOrderDto.getName(); String mobile = merNewOrderDto.getMobile(); SysUser sysUser = remoteUserService.getSysUserBYmobile(mobile).getData(); SysUser sysUser = remoteUserService.getSysUserByMobile(mobile).getData(); if(sysUser==null){ //创建新用户 String memberId = IdUtils.simpleUUID(); sysUser = new SysUser(); sysUser.setUserName(name); sysUser.setUserName(mobile); sysUser.setUserType("03"); sysUser.setNickName(name); sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); String password = "hongruitang"; sysUser.setPassword(SecurityUtils.encryptPassword(password)); log.debug("sysUser"+sysUser.toString()); sysUser = remoteUserService.registerUser(sysUser).getData(); userId = sysUser.getUserId(); }else{ @@ -789,7 +795,7 @@ consumerGoodsService.save(consumerGoods); } Member member = remoteMemberService.getMember(userId).getData(); if(member.getBindingFlag()!=1){ if(member!=null&&member.getBindingFlag()!=1){ //绑定商户 AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto(); appMemberBindingDto.setShopId(merNewOrderDto.getShopId()); @@ -816,10 +822,28 @@ for(MerOrderPageVo merOrderPageVo : merOrderPageVoList){ userId = merOrderPageVo.getUserId(); member = remoteMemberService.getMember(userId).getData(); merOrderPageVo.setUserName(member.getNickName()); merOrderPageVo.setUserMobile(member.getMobile()); if(member!=null){ if(StringUtils.isNotBlank(member.getNickName())){ merOrderPageVo.setUserName(member.getNickName()); } merOrderPageVo.setUserMobile(member.getMobile()); }else{ SysUser sysUser = remoteUserService.getSysUser(userId).getData(); if(StringUtils.isNotBlank(sysUser.getNickName())){ merOrderPageVo.setUserName(sysUser.getNickName()); } merOrderPageVo.setUserMobile(sysUser.getPhonenumber()); } orderFrom = merOrderPageVo.getOrderFrom(); orderFromDesc = "商城订单"; if(orderFrom!=null){ if(orderFrom == 1){ orderFromDesc = "商城订单"; }else{ orderFromDesc = "线下创建"; } }else{ orderFromDesc = "商城订单"; } merOrderPageVo.setOrderFromDesc(orderFromDesc); } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ShoppingCartServiceImpl.java
@@ -97,8 +97,11 @@ @Override public void deleteShoppingCart(AppBaseBathDto appBaseBathDto){ String[] ids = appBaseBathDto.getIds().split(","); List<String> list = Arrays.asList(ids); shoppingCartMapper.deleteShoppingCartByIds(list); for(String str : ids){ shoppingCartMapper.deleteShoppingCartById(Long.valueOf(str)); } /*List<String> list = Arrays.asList(ids); shoppingCartMapper.deleteShoppingCartByIds(list);*/ } /** ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/CodeFactoryUtil.java
@@ -2,13 +2,16 @@ import com.ruoyi.common.redis.service.RedisService; import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateUtils; import org.apache.poi.ss.usermodel.DateUtil; import org.springframework.beans.factory.annotation.Autowired; import java.security.SecureRandom; import java.util.Date; import java.util.Random; import java.util.concurrent.TimeUnit; /** * @author jqs34 @@ -18,6 +21,16 @@ * @version: 1.0 */ public class CodeFactoryUtil { //静态住入到自己的类中 private static RedisService redisService; //将静态属性以入参(形参)的方式传入一个方法中,然后将此方法通过 @Autowired 注入到Spring容器中 @Autowired public void setService(RedisService redisService) { CodeFactoryUtil.redisService = redisService; } /** * APP用户编码 @@ -69,11 +82,38 @@ public static String getShopOrderNo() { String orderNo; String timeTemp = DateFormatUtils.format(new Date(), "yyyyMMdd"); String suffixNumber = "0001"; orderNo = ORDER_PREFIX + timeTemp + suffixNumber; String prefix = ORDER_PREFIX + timeTemp; String suffixNumber = getSuffixNumber(prefix); orderNo = prefix + suffixNumber; return orderNo; } private static String getSuffixNumber(String prefix){ Integer suffixNumberInt; String suffixNumber = "0001"; if(redisService.hasKey(prefix)){ suffixNumberInt = redisService.getCacheObject(prefix); suffixNumber = toFillZeroSuffixNumber(suffixNumberInt); suffixNumberInt = suffixNumberInt + 1; redisService.setCacheObject(prefix, suffixNumberInt, 24L, TimeUnit.HOURS); }else{ redisService.setCacheObject(prefix, 1, 24L, TimeUnit.HOURS); } return suffixNumber; } private static String toFillZeroSuffixNumber(Integer suffixNumberInt){ String suffixNumberStr = suffixNumberInt.toString(); int length = suffixNumberStr.length(); int fillLength = 4 - length; StringBuilder idsbs = new StringBuilder(); for (int i = 0; i < fillLength; i++) { idsbs.append("0"); } return idsbs.append(suffixNumberStr).toString(); } /** * 0补位 * ruoyi-modules/ruoyi-order/src/main/resources/bootstrap.yml
@@ -15,9 +15,11 @@ discovery: # 服务注册地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 config: # 配置中心地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 # 配置文件格式 file-extension: yml # 共享配置 ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -222,7 +222,7 @@ AND toc.order_status = #{param.orderStatus} </if> <if test="param.keyword != null and param.keyword != ''"> AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR tog.goods_name LIKE CONCAT('%',#{param.keyword},'%')) AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR tg.goods_name LIKE CONCAT('%',#{param.keyword},'%')) </if> ORDER BY toc.create_time DESC </select> @@ -277,7 +277,7 @@ AND toc.order_status = 3 </if> <if test="param.keyword != null and param.keyword != ''"> AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR tog.goods_name LIKE CONCAT('%',#{param.keyword},'%')) AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR tg.goods_name LIKE CONCAT('%',#{param.keyword},'%')) </if> ORDER BY toc.create_time DESC </select> ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ShoppingCartMapper.xml
@@ -72,7 +72,7 @@ update t_shopping_cart set del_flag = 1 where id = #{id} </delete> <delete id="deleteShoppingCartByIds" parameterType="String"> <delete id="deleteShoppingCartByIds"> update t_shopping_cart set del_flag = 1 where id in <foreach item="id" collection="ids" open="(" separator="," close=")"> #{id} @@ -100,7 +100,7 @@ INNER JOIN t_goods tg ON tsc.goods_id = tg.goods_id LEFT JOIN t_goods_file tgf ON tg.goods_id = tgf.goods_id AND tgf.del_flag = 0 AND tgf.file_type = 1 LEFT JOIN t_shop_goods tsg ON tg.goods_id = tsg.goods_id AND tsg.shop_id = #{shopId} WHERE tg.del_flag = 0 AND tsc.shop_id = #{shopId} AND tsc.user_id = #{userId} AND tg.del_flag = 0 AND tg.goods_status = 1 AND tg.recommend_flag = 1 WHERE tsc.del_flag = 0 AND tg.del_flag = 0 AND tsc.shop_id = #{shopId} AND tsc.user_id = #{userId} AND tg.del_flag = 0 AND tg.goods_status = 1 AND tg.recommend_flag = 1 ORDER BY tg.create_time DESC </select> </mapper> ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MerAgencyPageDto.java
@@ -20,5 +20,15 @@ @ApiModelProperty(value = "搜索关键词") private String keyword ; @ApiModelProperty(value = "商户进度1.准店铺2.开业中3.停业中") private Integer shopSchedule ; @ApiModelProperty(value = "合作开始时间") private String startCooperDate; @ApiModelProperty(value = "合作结束时间") private String endCooperDate; @ApiModelProperty(value = "商户状态1.正常0.已冻结2.已到期") private Integer shopStatus ; } ruoyi-modules/ruoyi-shop/src/main/resources/bootstrap.yml
@@ -15,9 +15,11 @@ discovery: # 服务注册地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 config: # 配置中心地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 # 配置文件格式 file-extension: yml # 共享配置 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/conslole/ConfigController.java
@@ -24,7 +24,11 @@ @Resource private SysTagService sysTagService; /** * 获取系统标签 * @param sysTagId * @return */ @PostMapping("/getSysTag") public R<SysTag> getSysTag(@RequestBody Long sysTagId) { @@ -32,6 +36,11 @@ return R.ok(sysTag); } /** * 获取系统标签列表 * @param tagType * @return */ @PostMapping("/listSysTag") public R<List<SysTag>> listSysTag(@RequestBody Integer tagType) { ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/sys/SysUserController.java
@@ -156,7 +156,7 @@ public R<QwH5LoginVo> qwH5Login(@RequestBody QwUserDetailDto qwUserDetail) { String mobile = qwUserDetail.getMobile(); SysUser sysUser = userService.selectUserByPhoneNumber(mobile); SysUser sysUser = userService.selectUserByPhoneNumber(mobile,"01"); Optional.ofNullable(sysUser).orElseThrow(() -> new ServiceException("登录失败,未查询到用户")); // 构造登录返回信息 @@ -370,9 +370,9 @@ return R.ok(sysUser); } @PostMapping("/getSysUserBYmobile") public R<SysUser> getSysUserBYmobile(@RequestBody String mobile){ SysUser sysUser = userService.getSysUserBYmobile(mobile); @PostMapping("/getSysUserByMobile") public R<SysUser> getSysUserByMobile(@RequestBody String mobile){ SysUser sysUser = userService.getSysUserByMobile(mobile); return R.ok(sysUser); } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/config/SysTagService.java
@@ -16,14 +16,14 @@ public interface SysTagService extends IService<SysTag> { /** * * 通过id获取系统标签 * @param tagId * @return */ SysTag getByTagId(Long tagId); /** * * 通过type获取系统标签列表 * @param tagType * @return */ ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/SysTagServiceImpl.java
@@ -23,7 +23,7 @@ /** * * 通过id获取系统标签 * @param tagId * @return */ @@ -33,7 +33,7 @@ } /** * * 通过type获取系统标签列表 * @param tagType * @return */ ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/sys/SysUserServiceImpl.java
@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.system.api.domain.dto.AppEditUserDto; import com.ruoyi.system.api.domain.poji.config.SysTag; import com.ruoyi.system.api.domain.poji.member.Member; import com.ruoyi.system.domain.pojo.coupon.Coupon; import com.ruoyi.system.mapper.coupon.CouponMapper; @@ -86,13 +87,17 @@ } @Override public SysUser selectUserByPhoneNumber(String phoneNumber) { public SysUser selectUserByPhoneNumber(String phoneNumber,String userType) { SysUser sysUser = new SysUser(); sysUser.setPhonenumber(phoneNumber); List<SysUser> userList = this.selectUserList(sysUser); SysUser queryUser = null; if(!userList.isEmpty()){ queryUser = userList.get(0); for(SysUser sysUser1 : userList){ if(sysUser1.getUserType().equals(userType)){ queryUser = sysUser1; } } } return queryUser; } @@ -308,8 +313,8 @@ * @return */ @Override public SysUser getSysUserBYmobile(String mobile){ SysUser sysUser = this.selectUserByPhoneNumber(mobile); public SysUser getSysUserByMobile(String mobile){ SysUser sysUser = this.selectUserByPhoneNumber(mobile,"00"); return sysUser; } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/sys/ISysUserService.java
@@ -26,7 +26,7 @@ * 通过电话号码查询用户 * */ public SysUser selectUserByPhoneNumber(String phonenumber); public SysUser selectUserByPhoneNumber(String phonenumber,String userType); /** * 根据条件分页查询已分配用户角色列表 @@ -135,7 +135,7 @@ * @param mobile * @return */ SysUser getSysUserBYmobile(String mobile); SysUser getSysUserByMobile(String mobile); /** * 修改用户信息 ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
@@ -15,9 +15,11 @@ discovery: # 服务注册地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 config: # 配置中心地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 # 配置文件格式 file-extension: yml # 共享配置 ruoyi-modules/ruoyi-system/src/main/resources/mapper/sys/SysUserMapper.xml
@@ -11,6 +11,7 @@ <result property="nickName" column="nick_name" /> <result property="email" column="email" /> <result property="phonenumber" column="phonenumber" /> <result property="userType" column="user_type" /> <result property="sex" column="sex" /> <result property="avatar" column="avatar" /> <result property="password" column="password" /> @@ -47,7 +48,7 @@ </resultMap> <sql id="selectUserVo"> select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, select u.user_id, u.dept_id, u.user_name,u.user_type, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status from sys_user u @@ -57,7 +58,7 @@ </sql> <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult"> select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u select u.user_id, u.dept_id, u.nick_name, u.user_name,u.user_type, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u left join sys_dept d on u.dept_id = d.dept_id where u.del_flag = '0' <if test="userId != null and userId != 0"> @@ -86,7 +87,7 @@ </select> <select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult"> select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time select distinct u.user_id, u.dept_id, u.user_name,u.user_type, u.nick_name, u.email, u.phonenumber, u.status, u.create_time from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id @@ -103,7 +104,7 @@ </select> <select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult"> select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time select distinct u.user_id, u.dept_id, u.user_name,u.user_type, u.nick_name, u.email, u.phonenumber, u.status, u.create_time from sys_user u left join sys_dept d on u.dept_id = d.dept_id left join sys_user_role ur on u.user_id = ur.user_id ruoyi-visual/ruoyi-monitor/src/main/resources/bootstrap.yml
@@ -15,9 +15,11 @@ discovery: # 服务注册地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 config: # 配置中心地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 # 配置文件格式 file-extension: yml # 共享配置