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-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java | 220 +++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 159 insertions(+), 61 deletions(-) diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java index 4449ece..23dab3a 100644 --- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java +++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java @@ -1,6 +1,5 @@ package com.ruoyi.shop.service.impl.shop; -import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -8,7 +7,6 @@ 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.baomidou.mybatisplus.mapper.EntityWrapper; import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsResult; import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsStatusResult; import com.github.binarywang.wxpay.bean.ecommerce.ProfitSharingReceiverRequest; @@ -18,7 +16,6 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.DateUtils; -import com.ruoyi.common.core.utils.ExceptionUtil; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.common.core.utils.uuid.IdUtils; @@ -43,23 +40,23 @@ import com.ruoyi.system.api.constant.AppErrorConstant; import com.ruoyi.system.api.constant.SecurityConstant; import com.ruoyi.system.api.domain.dto.*; +import com.ruoyi.system.api.domain.poji.config.OneClinkSyncing; 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.shop.TShopAppointableTime; import com.ruoyi.system.api.domain.poji.sys.SysUser; import com.ruoyi.system.api.domain.vo.*; import com.ruoyi.system.api.service.*; import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; -import java.rmi.ServerException; import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -141,21 +138,23 @@ @Resource private RedisService redisService; - + @Resource private WechatPayUtils wechatPayUtils; - + @Resource private ShopDetailService shopDetailService; - + @Resource private RemoteUserService remoteUserService; - + + @Resource + private ShopAppointableTimeService shopAppointableTimeService; + @Value("${callback_path}") private String callback_path; - - - + + /** * 获取商户详情 * @@ -191,47 +190,48 @@ } return appShopInfoVo; } - + /** * 创建商户 + * * @param mgtEditShopDto */ @Override - public void createShop(MgtEditShopDto mgtEditShopDto){ + public void createShop(MgtEditShopDto mgtEditShopDto) { Shop shop = new Shop(); Boolean newShop = false; BigDecimal zeroBig = BigDecimal.ZERO; //验证关联账号唯一 String relUserIds = mgtEditShopDto.getRelUserIds(); - if(StringUtils.isNotBlank(relUserIds)) { - if(relUserIds.startsWith(",")){ - relUserIds = relUserIds.substring(1); - } - String[] relUserIdArray = relUserIds.split(","); - ShopRelUser shopRelUser; - Long userId; - if(mgtEditShopDto.getShopId()!=null){ - for (String str : relUserIdArray) { - userId = Long.valueOf(str); - shopRelUser = shopRelUserService.getByUserId(userId); - if(shopRelUser!=null&&!shopRelUser.getShopId().equals(mgtEditShopDto.getShopId())){ - throw new ServiceException(AppErrorConstant.SHOP_USER_DOUBLE); - } - } - }else { - for (String str : relUserIdArray) { - userId = Long.valueOf(str); - shopRelUser = shopRelUserService.getByUserId(userId); - if(shopRelUser!=null){ - throw new ServiceException(AppErrorConstant.SHOP_USER_DOUBLE); - } - } - } - - } +// if(StringUtils.isNotBlank(relUserIds)) { +// if(relUserIds.startsWith(",")){ +// relUserIds = relUserIds.substring(1); +// } +// String[] relUserIdArray = relUserIds.split(","); +// ShopRelUser shopRelUser; +// Long userId; +// if(mgtEditShopDto.getShopId()!=null){ +// for (String str : relUserIdArray) { +// userId = Long.valueOf(str); +// shopRelUser = shopRelUserService.getByUserId(userId); +// if(shopRelUser!=null&&!shopRelUser.getShopId().equals(mgtEditShopDto.getShopId())){ +// throw new ServiceException(AppErrorConstant.SHOP_USER_DOUBLE); +// } +// } +// }else { +// for (String str : relUserIdArray) { +// userId = Long.valueOf(str); +// shopRelUser = shopRelUserService.getByUserId(userId); +// if(shopRelUser!=null){ +// throw new ServiceException(AppErrorConstant.SHOP_USER_DOUBLE); +// } +// } +// } +// +// } //验证商户名唯一 //Shop shopSame = this.getOne(new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag,0).eq(Shop::getShopName,mgtEditShopDto.getShopName())); - if(mgtEditShopDto.getShopId()!=null){ + if (mgtEditShopDto.getShopId() != null) { //取消验重 /*if(shopSame!=null&&!Objects.equals(shopSame.getShopId(),mgtEditShopDto.getShopId())){ throw new ServiceException(AppErrorConstant.SHOP_DOUBLE); @@ -244,6 +244,16 @@ shopFileService.deleteByShopId(shop.getShopId()); shopRelTagService.deleteByShopId(shop.getShopId()); shopRelUserService.deleteByShopId(shop.getShopId()); + //默认登录账号开关 开启后原默认账号开关关闭 + List<Long> openIdList = Arrays.stream(mgtEditShopDto.getRelUserOpenIds().split(",")) + .map(String::trim) + .filter(StringUtils::isNotBlank) + .map(Long::valueOf) + .collect(Collectors.toList()); + if ( !openIdList.isEmpty()) { + shopRelUserService.setDefaultCloseByUserIdList(openIdList); + } + //清空归属 shopStaffService.clearShopStaffRelation(shop.getShopId()); if(!shop.getShopName().equals(mgtEditShopDto.getShopName())){ @@ -307,6 +317,7 @@ handleShopStaff(shop.getShopId(),belongSysUser); }*/ //商户关联人员 + String[] openIds = mgtEditShopDto.getRelUserOpenIds().split(",");//开启默认登录账号 if(StringUtils.isNotBlank(relUserIds)){ shopStaffService.clearShopStaffRelation(shop.getShopId()); String[] relUserIdArray = relUserIds.split(","); @@ -323,6 +334,7 @@ shopRelUser.setUserName(sysUser.getNickName()); shopRelUser.setUserMobile(sysUser.getPhonenumber()); shopRelUser.setUserDeptId(sysUser.getDeptId()); + shopRelUser.setIsDefault((openIds.length > 0 && Arrays.asList(openIds).contains(str)) ? 1 : 0); shopRelUserService.save(shopRelUser); handleShopStaff(shop.getShopId(),sysUser); } @@ -658,12 +670,17 @@ if(shopRelUserList!=null&&!shopRelUserList.isEmpty()){ StringJoiner shopUserJs = new StringJoiner(","); StringJoiner shopUserNameJs = new StringJoiner(","); + StringJoiner relUserOpenIds = new StringJoiner(","); for(ShopRelUser shopRelUser : shopRelUserList){ shopUserJs.add(shopRelUser.getUserId().toString()); shopUserNameJs.add(shopRelUser.getUserName()); + if (shopRelUser.getIsDefault()==1){ + relUserOpenIds.add(shopRelUser.getUserId().toString()); + } } mgtShopInfoVo.setRelUserIds(shopUserJs.toString()); mgtShopInfoVo.setRelUsers(shopUserNameJs.toString()); + mgtShopInfoVo.setRelUserOpenIds(relUserOpenIds.toString()); } //商户图片 List<ShopFile> shopFileList = shopFileService.listShopFileByShopId(shopId); @@ -918,29 +935,30 @@ staffHomeShopTotalVo.setShopTask(shopTaskCount); return staffHomeShopTotalVo; } + /** * 获取商户端 + * * @param merBaseDto * @return */ @Override - public MerHomeShopTotalVo getMerHomeTotal(MerBaseDto merBaseDto){ + public MerHomeShopTotalVo getMerHomeTotal(MerBaseDto merBaseDto) { Long userId = merBaseDto.getUserId(); MerHomeShopTotalVo merHomeShopTotalVo = new MerHomeShopTotalVo(); - ShopRelUser shopRelUser = shopRelUserService.getByUserId(userId); - Long shopId = shopRelUser.getShopId(); + Long shopId = merBaseDto.getShopId(); //如果商户变动刷新token - if(!shopId.equals(merBaseDto.getShopId())){ - String userKey = SecurityUtils.getUserKey(); - redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY+userKey); - throw new ServiceException("登录状态已过期",401); - } +// if(!shopId.equals(merBaseDto.getShopId())){ +// String userKey = SecurityUtils.getUserKey(); +// redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY+userKey); +// throw new ServiceException("登录状态已过期",401); +// } merHomeShopTotalVo.setShopId(shopId); Shop shop = this.getById(shopId); - if(shop.getFrozenFlag()==1){ + if (shop.getFrozenFlag() == 1) { String userKey = SecurityUtils.getUserKey(); - redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY+userKey); - throw new ServiceException("商户已被冻结,请联系管理员",401); + redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + userKey); + throw new ServiceException("商户已被冻结,请联系管理员", 401); } merHomeShopTotalVo.setShopType(shop.getShopType()); MerHomeShopTotalVo orderVo = remoteOrderService.getMerHomeTotal(merHomeShopTotalVo).getData(); @@ -955,6 +973,8 @@ merHomeShopTotalVo.setExplorationSurp(orderVo.getExplorationSurp()); merHomeShopTotalVo.setPlatformBirthdayFlag(shop.getPlatformBirthdayFlag()); merHomeShopTotalVo.setPlatformCouponFlag(shop.getPlatformCouponFlag()); + int unHandleReserve = shopAppointableTimeService.count(new LambdaQueryWrapper<TShopAppointableTime>().eq(TShopAppointableTime::getShopId, shopId).eq(TShopAppointableTime::getStatus, 1)); + merHomeShopTotalVo.setUnHandleReserve(unHandleReserve); return merHomeShopTotalVo; } @@ -1454,19 +1474,19 @@ }).collect(Collectors.toList()); return simpleShopVoList; } - + /** - * @description 获取用户管理商户 - * @author jqs - * @date 2023/7/14 10:00 * @param userId - * @return Shop + * @return Shop + * @description 获取用户管理商户 + * @author jqs + * @date 2023/7/14 10:00 */ @Override - public List<Shop> getShopByBelongUserId(Long userId){ + public List<Shop> getShopByBelongUserId(Long userId) { LambdaQueryWrapper<Shop> queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(Shop::getDelFlag,0); - queryWrapper.eq(Shop::getBelongUserId,userId); + queryWrapper.eq(Shop::getDelFlag, 0); + queryWrapper.eq(Shop::getBelongUserId, userId); return this.list(queryWrapper); } @@ -1956,4 +1976,82 @@ public List<Shop> getFranchiseeIdsBYDealerId(Long shopId) { return shopMapper.getFranchiseeIdsBYDealerId(shopId); } + + /** + * 修改商户类型 + * @param shopId + * @return + */ + @Override + public R<Void> changeShopType(Long shopId) { + Shop shop = shopMapper.selectById(shopId); + if(null == shop|| shop.getDelFlag() != 0){ + return R.fail("商户不存在"); + } + //商户修改类型 1-经销商 2-加盟商 + shop.setShopType(shop.getShopType()==1?2:1); + if (shop.getShopType()==2){ + //经销商转加盟商: 先解绑该经销商下所有加盟商 + shopMapper.setBelongShopIdNull(shopId); + } + shop.setUpdateUserId(SecurityUtils.getUserId()); + shopMapper.updateById(shop); + + return R.ok(); + } + + @Override + public Page<MgtOneClinkSyncingShopPageVo> getMgtShopPageVoByShopIds(MGtOneClinkSyncingShopPageDTO dto) { + Page<MgtOneClinkSyncingShopPageVo> page = new Page<>(); + page.setSize(dto.getPageSize()); + page.setCurrent(dto.getPageNum()); + List<MgtOneClinkSyncingShopPageVo> mgtShopPageVoList = shopMapper.getMgtShopPageVoByShopIds(page,dto.getShopIds()); + return page.setRecords(mgtShopPageVoList); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public R updateShopByOneClinkSyncing(OneClinkSyncing oneClinkSyncing) { + if (StringUtils.isBlank(oneClinkSyncing.getShopIds())) { + return R.fail("请选择要更新的门店"); + } + // 1. 转换门店ID列表 + List<Long> shopIdList = Arrays.stream(oneClinkSyncing.getShopIds().split(",")) + .map(String::trim) + .filter(StringUtils::isNotBlank) + .map(Long::parseLong) + .collect(Collectors.toList()); + // 批量删除封面和Banner图 + shopFileService.deleteBatchByShopIds(shopIdList); + //批量添加封面图 + List<ShopFile> coverUrlList = shopIdList.stream() + .map(shopId -> new ShopFile() + .setShopId(shopId) + .setFileType(1) + .setFileUrl(oneClinkSyncing.getCoverUrl()) + .setDelFlag(0)) + .collect(Collectors.toList()); + shopFileService.saveBatch(coverUrlList); + //批量添加banner图 + List<String> bannerUrlList = Arrays.stream(oneClinkSyncing.getDetailsPicture().split(",")) + .map(String::trim) + .filter(StringUtils::isNotBlank) + .collect(Collectors.toList()); + List<ShopFile> bannerList = new ArrayList<>(); + for (Long shopId : shopIdList) { + for (String bannerUrl : bannerUrlList) { + bannerList.add(new ShopFile() + .setShopId(shopId) + .setFileType(2) // Banner图 + .setFileUrl(bannerUrl) + .setDelFlag(0)); + } + } + shopFileService.saveBatch(coverUrlList); + + //批量修改门店信息 + oneClinkSyncing.setShopIdList(shopIdList); + shopMapper.updateShopByOneClinkSyncing(oneClinkSyncing); + return R.ok(); + } } -- Gitblit v1.7.1