huliguo
2 天以前 07fb617c686699435cde29e8147f11a125d7d618
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;
@@ -29,6 +26,7 @@
import com.ruoyi.shop.domain.pojo.task.ShopFile;
import com.ruoyi.shop.domain.pojo.task.ShopTask;
import com.ruoyi.shop.domain.vo.*;
import com.ruoyi.shop.domain.vo.MgtShopPageVo;
import com.ruoyi.shop.enums.WxApplyMentStateEnum;
import com.ruoyi.shop.mapper.shop.ShopMapper;
import com.ruoyi.shop.service.shop.*;
@@ -43,23 +41,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.ShopAppointableTime;
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 +139,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 +191,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 +245,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 +318,7 @@
            handleShopStaff(shop.getShopId(),belongSysUser);
        }*/
        //商户关联人员
        String[] openIds = mgtEditShopDto.getRelUserOpenIds().split(",");//开启默认登录账号
        if(StringUtils.isNotBlank(relUserIds)){
            shopStaffService.clearShopStaffRelation(shop.getShopId());
            String[] relUserIdArray = relUserIds.split(",");
@@ -323,6 +335,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 +671,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 +936,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 +974,8 @@
        merHomeShopTotalVo.setExplorationSurp(orderVo.getExplorationSurp());
        merHomeShopTotalVo.setPlatformBirthdayFlag(shop.getPlatformBirthdayFlag());
        merHomeShopTotalVo.setPlatformCouponFlag(shop.getPlatformCouponFlag());
        int unHandleReserve = shopAppointableTimeService.count(new LambdaQueryWrapper<ShopAppointableTime>().eq(ShopAppointableTime::getShopId, shopId).eq(ShopAppointableTime::getStatus, 1));
        merHomeShopTotalVo.setUnHandleReserve(unHandleReserve);
        return merHomeShopTotalVo;
    }
@@ -1454,19 +1475,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 +1977,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();
    }
}