From c5d38d650d2ac4101b1293a4f17346e7d5420076 Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期五, 04 七月 2025 20:39:58 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/2.0' into 2.0 --- ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java | 175 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 157 insertions(+), 18 deletions(-) diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java index 62a2f96..c8a2f2e 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java @@ -1,5 +1,5 @@ package com.ruoyi.member.service.impl.member; -import com.google.common.collect.Lists; + import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import com.alibaba.fastjson.JSONObject; @@ -8,6 +8,7 @@ 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.google.common.collect.Lists; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.DateUtils; @@ -15,13 +16,13 @@ import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.common.core.utils.uuid.IdUtils; import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.CodeFactoryUtil; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.member.domain.dto.*; import com.ruoyi.member.domain.pojo.member.IntegralRecord; import com.ruoyi.member.domain.pojo.member.MemberArchive; import com.ruoyi.member.domain.pojo.member.MemberTotal; -import com.ruoyi.member.domain.vo.MerMemberTotalVo; import com.ruoyi.member.domain.vo.*; import com.ruoyi.member.mapper.member.MemberMapper; import com.ruoyi.member.service.member.IntegralRecordService; @@ -37,21 +38,25 @@ import com.ruoyi.system.api.domain.poji.config.SysTag; import com.ruoyi.system.api.domain.poji.member.Member; import com.ruoyi.system.api.domain.poji.shop.Shop; +import com.ruoyi.system.api.domain.poji.sys.SysFile; import com.ruoyi.system.api.domain.poji.sys.SysUser; import com.ruoyi.system.api.domain.vo.*; import com.ruoyi.system.api.model.AppMiniLoginDto; import com.ruoyi.system.api.model.AppMiniLoginVo; -import com.ruoyi.system.api.service.RemoteConfigService; -import com.ruoyi.system.api.service.RemoteOrderService; -import com.ruoyi.system.api.service.RemoteShopService; -import com.ruoyi.system.api.service.RemoteUserService; +import com.ruoyi.system.api.service.*; +import io.jsonwebtoken.lang.Assert; import lombok.extern.log4j.Log4j2; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.http.HttpResponse; import org.apache.http.util.EntityUtils; import org.springframework.stereotype.Service; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Nullable; import javax.annotation.Resource; +import java.io.*; import java.math.BigDecimal; import java.time.LocalDate; import java.time.format.DateTimeFormatter; @@ -108,13 +113,23 @@ @Resource private MemberArchiveService memberArchiveService; - + @Resource private RemoteShopService remoteShopService; - + @Resource private RemoteOrderService remoteOrderService; - + + @Resource + private RemoteUserService remoteUserService; + + @Resource + private TokenService tokenService; + + @Resource + private RemoteFileService remoteFileService; + + /** * @description: TODO * @author jqs34 @@ -631,6 +646,7 @@ if (oldMember != null && oldMember.getBindingFlag() == 0) { oldMember.setRelationShopId(merMemberAddDto.getShopId()); oldMember.setBindingFlag(1); + oldMember.setBindingType(8); this.updateById(oldMember); return oldMember.getUserId(); } @@ -948,7 +964,11 @@ List<Long> userIds = sysUserService.getUserIdsByDept(sysUser.getUserId()).getData(); // 获取店铺ids List<Long> data = shopService.getShopIdsByUserIds(userIds).getData(); - scope.addAll(data); + if (data.size()==0){ + scope.add(0L); + }else{ + scope.addAll(data); + } break; case "5": // 仅个人数据 查询当前登陆人关联店铺下的用户 @@ -956,7 +976,12 @@ longs.add(sysUser.getUserId()); // 获取店铺ids List<Long> data1 = shopService.getShopIdsByUserIds(longs).getData(); - scope.addAll(data1); + if (data1.size()==0){ + scope.add(0L); + }else{ + scope.addAll(data1); + } + break; } } @@ -1226,6 +1251,13 @@ return memberMapper.listIdBySendType(sendType,shopId); } + + public List<Long> listIdBySendType2(Long shopId) { + //1.手动领取2.全部用户3.会员用户4非会员用户5自定义 + return memberMapper.listIdBySendType2(shopId); + } + + /** * @param userIds * @return List<MgtSimpleMemberVo> @@ -1266,10 +1298,10 @@ * @date 2023/6/18 16:45 */ @Override - public MgtBulletinBoardVo boardMemberTotal() { + public MgtBulletinBoardVo boardMemberTotal(List<Long> shopIds) { MgtBulletinBoardVo mgtBulletinBoardVo = new MgtBulletinBoardVo(); - mgtBulletinBoardVo.setMemberTotal(memberMapper.memberTotal()); - mgtBulletinBoardVo.setMemberToday(memberMapper.memberToday()); + mgtBulletinBoardVo.setMemberTotal(memberMapper.memberTotal(shopIds)); + mgtBulletinBoardVo.setMemberToday(memberMapper.memberToday(shopIds)); return mgtBulletinBoardVo; } @@ -1461,13 +1493,14 @@ plTotalMemberTotalVo.setShopMemberRankList(Lists.newArrayList()); Date nowDay = DateUtils.getNowDate(); //如果区域代码不为null获取对应的商户id + List<Long> list = new ArrayList<>(); if (StringUtils.isNotBlank(mgtBasePlatformDto.getShopProvinceCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopCityCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopAreaCode())) { MgtShopIdByCodeDto mgtShopIdByCodeDto = new MgtShopIdByCodeDto(); mgtShopIdByCodeDto.setShopProvinceCode(mgtBasePlatformDto.getShopProvinceCode()); mgtShopIdByCodeDto.setShopCityCode(mgtBasePlatformDto.getShopCityCode()); mgtShopIdByCodeDto.setShopAreaCode(mgtBasePlatformDto.getShopAreaCode()); MgtShopIdByCodeVo mgtShopIdByCodeVo = remoteShopService.getShopIdByCode(mgtShopIdByCodeDto).getData(); - List<Long> list = new ArrayList<>(); + if (StringUtils.isNotBlank(mgtShopIdByCodeVo.getShopIds())) { list = Arrays.stream(mgtShopIdByCodeVo.getShopIds().split(",")) .map(Long::valueOf) @@ -1475,8 +1508,17 @@ }else{ return plTotalMemberTotalVo; } - mgtBasePlatformDto.setShopIdList(list); } + //数据权限 + List<Long> userId = remoteUserService.getScopeOfAuthorityUserId(); + BoardMemberTotalDto boardMemberTotalDto = new BoardMemberTotalDto(); + boardMemberTotalDto.setUserIds(userId); + List<Shop> shops = remoteShopService.getShopBySysUserIds(boardMemberTotalDto); + List<Long> collect = shops.stream().map(Shop::getShopId).collect(Collectors.toList()); + list.addAll(collect); + mgtBasePlatformDto.setShopIdList(list); + + //获取基础统计 MgtPlTotalMemberTotalVo plTotalMemberTotalByDayVo = memberMapper.getPlTotalMemberTotal(mgtBasePlatformDto); plTotalMemberTotalVo.setMemberTotal(plTotalMemberTotalByDayVo.getMemberTotal()); @@ -2224,14 +2266,111 @@ List<Member> mobileList = memberMapper.listTodayBirthday(); if(mobileList!=null&&!mobileList.isEmpty()){ log.info("生日祝福发送短信---"+mobileList.toString()); - for(Member member : mobileList){ + for (Member member : mobileList) { try { String msg = "{\"name\":\"" + (StringUtils.isEmpty(member.getRealName()) ? member.getNickName() : member.getRealName()) + "\"}"; - MsgUtils.sendMsg(member.getMobile(),null, msg); + MsgUtils.sendMsg(member.getMobile(), null, msg); } catch (Exception e) { throw new RuntimeException(e); } } } } + + + /** + * 手动添加用户积分 + * + * @param integral + * @param userId + * @return + */ + @Override + public R addIntegralRecord(Integer integral, Long userId, String orderId) { + Member member = this.getByUserId(userId); + MemberTotal memberTotal = memberTotalService.getById(member.getMemberId()); + IntegralRecord integralRecord = new IntegralRecord(); + integralRecord.setDelFlag(0); + integralRecord.setUserId(userId); + integralRecord.setChangeType(6); + integralRecord.setChangeIntegral(integral); + integralRecord.setSurpIntegral(memberTotal.getUseableIntegral() + integral); + integralRecord.setCreateTime(new Date()); + integralRecord.setOrderId(orderId); + integralRecord.setChangeReason("抽奖活动获得"); + integralRecordService.save(integralRecord); + memberTotal.setTotalIntegral(memberTotal.getTotalIntegral() + integral); + memberTotal.setUseableIntegral(memberTotal.getUseableIntegral() + integral); + memberTotal.setPlSuggestFlag(1); + memberTotalService.saveOrUpdate(memberTotal); + return R.ok(); + } + + + @Override + public String getWeiXinQrCode(String scene, String path) { + try { + File file = wxMaService.getQrcodeService().createWxaCodeUnlimit(scene, path); + FileInputStream input = new FileInputStream(file); + MultipartFile multipartFile = new MyMultipartFile("file", file.getName(), "text/plain", IOUtils.toByteArray(input)); + + SysFile sysFile = remoteFileService.upload(multipartFile).getData(); + return sysFile.getUrl(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + public class MyMultipartFile implements MultipartFile { + private final String name; + private final byte[] content; + private String originalFilename; + @Nullable + private String contentType; + + + public MyMultipartFile(String name, @Nullable String originalFilename, @Nullable String contentType, @Nullable byte[] content) { + Assert.hasLength(name, "Name must not be null"); + this.name = name; + this.originalFilename = originalFilename != null ? originalFilename : ""; + this.contentType = contentType; + this.content = content != null ? content : new byte[0]; + } + + public String getName() { + return this.name; + } + + public String getOriginalFilename() { + return this.originalFilename; + } + + @Nullable + public String getContentType() { + return this.contentType; + } + + public boolean isEmpty() { + return this.content.length == 0; + } + + public long getSize() { + return (long) this.content.length; + } + + public byte[] getBytes() throws IOException { + return this.content; + } + + public InputStream getInputStream() throws IOException { + return new ByteArrayInputStream(this.content); + } + + public void transferTo(File dest) throws IOException, IllegalStateException { + FileCopyUtils.copy(this.content, dest); + } + } + } -- Gitblit v1.7.1