Pu Zhibing
2 天以前 af6456c60aa0d3cc931d3c85f652fa7e47d003e3
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);
            }
@@ -462,7 +475,7 @@
        }else{
            shop.setCooperativeFlag(0);
        }
        shop.setShopStatus(handelShopStatus(shop.getFrozenFlag(),shop.getCooperativeFlag(),shop.getAuthFlag()));
        shop.setShopStatus(handelShopStatus(null,shop.getCooperativeFlag(), null));
        shop.setUpdateTime(new Date());
        shop.setUpdateUserId(mgtTerminateCooperationDto.getUserId());
        this.saveOrUpdate(shop);
@@ -483,7 +496,7 @@
        }else{
            shop.setFrozenFlag(0);
        }
        shop.setShopStatus(handelShopStatus(shop.getFrozenFlag(),shop.getCooperativeFlag(),shop.getAuthFlag()));
        shop.setShopStatus(handelShopStatus(shop.getFrozenFlag(), null, null));
        this.saveOrUpdate(shop);
    }
@@ -496,16 +509,16 @@
     */
    private Integer handelShopStatus(Integer frozenFlag, Integer cooperativeFlag, Integer authFlag){
        Integer shopStatus = 1;
        if(frozenFlag == 1){
        if(null != frozenFlag && frozenFlag == 1){
            shopStatus = 0;
            return shopStatus;
        }
        if(authFlag == 0){
            shopStatus = 3;
        if(null != cooperativeFlag && cooperativeFlag == 0){
            shopStatus = 2;
            return shopStatus;
        }
        if(cooperativeFlag == 0){
            shopStatus = 2;
        if(null != authFlag && authFlag == 0){
            shopStatus = 3;
            return shopStatus;
        }
        return shopStatus;
@@ -556,9 +569,12 @@
        if (StringUtils.isNotBlank(mgtShopPageDto.getShopTags())) {
            mgtShopPageDto.setShopTags(mgtShopPageDto.getShopTags().replace(",", "|"));
        }
        List<Integer> associatedAccount = null;
        if(StringUtils.isNotEmpty(mgtShopPageDto.getAssociatedAccount())){
            associatedAccount = Arrays.asList(mgtShopPageDto.getAssociatedAccount().split(",")).stream().map(Integer::valueOf).collect(Collectors.toList());
        }
        // 分页查询商铺信息
        List<MgtShopPageVo> mgtShopPageVoList = shopMapper.pageMgtShop(page, mgtShopPageDto,scope);
        List<MgtShopPageVo> mgtShopPageVoList = shopMapper.pageMgtShop(page, mgtShopPageDto,scope, associatedAccount);
        // 如果查询结果不为空
        if (!mgtShopPageVoList.isEmpty()) {
            // 创建签约用户ID集合和所属用户ID集合
@@ -655,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);
@@ -915,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();
@@ -952,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;
    }
@@ -1249,7 +1273,7 @@
                userIdList.add(mgtBasePlatformDto.getUserId());
            } else {
                MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept();
                mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getUserId());
                mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getDeptId());
                mgtUserIdByDept = configService.getUserIdByDept(mgtUserIdByDept).getData();
                userIdList = mgtUserIdByDept.getUserIdList();
            }
@@ -1259,13 +1283,15 @@
        }
        //数据权限
        List<Long> userIds = remoteUserService.getScopeOfAuthorityUserId();
        List<Long> userIdList = mgtBasePlatformDto.getUserIdList();
        if(null != userIdList){
            userIdList.addAll(userIds);
        }else{
            userIdList = userIds;
        if(null != userIds){
            List<Long> userIdList = mgtBasePlatformDto.getUserIdList();
            if(null != userIdList){
                userIdList.addAll(userIds);
            }else{
                userIdList = userIds;
            }
            mgtBasePlatformDto.setUserIdList(userIdList);
        }
        mgtBasePlatformDto.setUserIdList(userIdList);
        //获取基础统计
        MgtPlTotalShopTotalVo plTotalShopTotalVo = shopMapper.getPlTotalShopTotal(userIds);
@@ -1449,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);
    }
@@ -1722,7 +1748,7 @@
    private void applySuccessUpdateShopStatus(Long shopId){
        // 更新商户状态为正常
        Shop shop = this.getById(shopId);
        Integer shopStatus = handelShopStatus(shop.getFrozenFlag(), shop.getCooperativeFlag(), 1);
        Integer shopStatus = handelShopStatus(null, null, 1);
        LambdaUpdateWrapper<Shop> updateWrapper = Wrappers.lambdaUpdate();
        updateWrapper.eq(Shop::getShopId, shopId)
                .set(Shop::getShopStatus, shopStatus)
@@ -1854,7 +1880,7 @@
                ProfitSharingReceiverResult result = wechatPayUtils.addProfitSharingReceiver(request);
                if(StringUtils.isNotBlank(result.getAccount())){
                    shop.setAccountFlag(1);
                    shop.setShopStatus(handelShopStatus(shop.getFrozenFlag(),shop.getCooperativeFlag(),shop.getAuthFlag()));
                    shop.setShopStatus(handelShopStatus(null , null,shop.getAuthFlag()));
                    this.saveOrUpdate(shop);
                }
            }
@@ -1936,10 +1962,97 @@
     */
    @Override
    public List<Shop> getShopBySysUserIds(List<Long> userIds) {
        if(userIds.size() == 0){
            userIds.add(0L);
        if(null == userIds || userIds.size() == 0){
            return new ArrayList<>();
        }
        List<Shop> list = this.list(new QueryWrapper<Shop>().eq("del_flag", 0).ne("shop_status", -1).in("belong_user_id", userIds));
        QueryWrapper<Shop> queryWrapper = new QueryWrapper<Shop>().eq("del_flag", 0).ne("shop_status", -1);
        if(null != userIds && userIds.size() > 0){
            queryWrapper.in("belong_user_id", userIds);
        }
        List<Shop> list = this.list(queryWrapper);
        return list;
    }
    @Override
    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();
    }
}