Pu Zhibing
2 天以前 af6456c60aa0d3cc931d3c85f652fa7e47d003e3
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -1,37 +1,66 @@
package com.ruoyi.shop.service.impl.shop;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
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.github.binarywang.wxpay.bean.ecommerce.ApplymentsResult;
import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsStatusResult;
import com.github.binarywang.wxpay.bean.ecommerce.ProfitSharingReceiverRequest;
import com.github.binarywang.wxpay.bean.ecommerce.ProfitSharingReceiverResult;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.ruoyi.common.core.constant.CacheConstants;
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.StringUtils;
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.utils.SecurityUtils;
import com.ruoyi.shop.domain.dto.*;
import com.ruoyi.shop.domain.pojo.shop.*;
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.*;
import com.ruoyi.shop.service.task.MemberTaskService;
import com.ruoyi.shop.service.task.ShopFileService;
import com.ruoyi.shop.util.CodeFactoryUtil;
import com.ruoyi.system.api.service.RemoteConfigService;
import com.ruoyi.system.api.service.RemoteMemberService;
import com.ruoyi.system.api.service.RemoteOrderService;
import com.ruoyi.system.api.service.RemoteUserService;
import com.ruoyi.system.api.domain.dto.AppMemberBindingDto;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import com.ruoyi.shop.service.task.ShopTaskService;
import com.ruoyi.shop.util.HuiFuTianXiaUtil;
import com.ruoyi.shop.util.WechatPayUtils;
import com.ruoyi.shop.util.map.MapUtil;
import com.ruoyi.shop.util.map.vo.TencentDistanceMatrix;
import com.ruoyi.shop.util.map.vo.TencentDistanceMatrixElements;
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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo;
import com.ruoyi.common.core.utils.StringUtils;
import org.springframework.beans.BeanUtils;
import com.ruoyi.system.api.domain.vo.*;
import com.ruoyi.system.api.service.*;
import lombok.extern.log4j.Log4j2;
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.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.StringJoiner;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
 * <p>
@@ -42,6 +71,7 @@
 * @since 2023-04-25
 */
@Service
@Log4j2
public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements ShopService {
    @Resource
@@ -71,8 +101,64 @@
    @Resource
    private RemoteOrderService remoteOrderService;
    @Resource
    private ShopStaffService shopStaffService;
    @Resource
    private ShopAccountService shopAccountService;
    @Resource
    private ShopAuthenticationService shopAuthenticationService;
    @Resource
    private ShopAuthenticationHftxService shopAuthenticationHftxService;
    @Resource
    private ShopProportionService shopProportionService;
    @Resource
    private RemoteConfigService remoteConfigService;
    @Resource
    private ShopTotalService shopTotalService;
    @Resource
    private MemberTaskService memberTaskService;
    @Resource
    private ShopTransferRecordService shopTransferRecordService;
    @Resource
    private RemoteSysStaffService remoteSysStaffService;
    @Resource
    private RemoteFileService remoteFileService;
    @Resource
    private ShopTaskService shopTaskService;
    @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;
    /**
     * 获取商户详情
     *
     * @param shopId
     * @return
     */
@@ -105,37 +191,108 @@
        }
        return appShopInfoVo;
    }
    /**
     * 创建商户
     * @param MGTEditShopDto
     *
     * @param mgtEditShopDto
     */
    @Override
    public void createShop(MgtEditShopDto MGTEditShopDto){
    public void createShop(MgtEditShopDto mgtEditShopDto) {
        Shop shop = new Shop();
        if(MGTEditShopDto.getShopId()!=null){
            shop = this.getById(MGTEditShopDto.getShopId());
        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);
//                    }
//                }
//            }
//
//        }
        //验证商户名唯一
        //Shop shopSame = this.getOne(new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag,0).eq(Shop::getShopName,mgtEditShopDto.getShopName()));
        if (mgtEditShopDto.getShopId() != null) {
            //取消验重
            /*if(shopSame!=null&&!Objects.equals(shopSame.getShopId(),mgtEditShopDto.getShopId())){
                throw new ServiceException(AppErrorConstant.SHOP_DOUBLE);
            }*/
            shop = this.getById(mgtEditShopDto.getShopId());
            shop.setUpdateTime(new Date());
            shop.setUpdateUserId(MGTEditShopDto.getUserId());
            shop.setUpdateUserId(mgtEditShopDto.getUserId());
            shop.setShopTags(null);
            //清空关联记录
            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())){
                MgtMemberShopNameDto mgtMemberShopNameDto = new MgtMemberShopNameDto();
                mgtMemberShopNameDto.setShopId(mgtEditShopDto.getShopId());
                mgtMemberShopNameDto.setShopName(mgtEditShopDto.getShopName());
                remoteMemberService.updateMemberShopName(mgtMemberShopNameDto);
            }
        }else{
            shop.setShopStatus(2);
            //取消验重
            /*if(shopSame!=null){
                throw new ServiceException(AppErrorConstant.SHOP_DOUBLE);
            }*/
            shop.setDelFlag(0);
            shop.setShopStatus(3);
            shop.setCreateTime(new Date());
            shop.setCreateUserId(MGTEditShopDto.getUserId());
            shop.setCreateUserId(mgtEditShopDto.getUserId());
            shop.setFrozenFlag(0);
            shop.setCooperativeFlag(1);
            shop.setAuthFlag(0);
            shop.setAccountFlag(0);
            newShop = true;
        }
        BeanUtils.copyProperties(MGTEditShopDto,shop);
        this.saveOrUpdate(shop);
        BeanUtils.copyProperties(mgtEditShopDto,shop);
        String shopDetail = shop.getShopDetail();
        if(StringUtils.isNotBlank(shopDetail)){
            byte[] decodedBytes = Base64.getDecoder().decode(shopDetail);
            shopDetail = new String(decodedBytes, StandardCharsets.UTF_8);
            shop.setShopDetail(shopDetail);
        }
        //商户编号
        if(MGTEditShopDto.getShopId()==null){
            String shopNo = CodeFactoryUtil.getShopNo(shop.getShopId());
        /*if(mgtEditShopDto.getShopId()==null){
            String shopNo = CodeFactoryUtil.getShopNo();
            shop.setShopNumber(shopNo);
        }
        }*/
        this.saveOrUpdate(shop);
        //商户标签
        String shopTagIds = MGTEditShopDto.getShopTagIds();
        String shopTagIds = mgtEditShopDto.getShopTagIds();
        if(StringUtils.isNotBlank(shopTagIds)){
            String[] shopTagIdArray = shopTagIds.split(",");
            ShopRelTag shopRelTag;
@@ -155,9 +312,15 @@
            shop.setShopTags(shopTagSj.toString());
            this.saveOrUpdate(shop);
        }
        //商户归属员工
        /*if(shop.getBelongUserId()!=null){
            SysUser belongSysUser = sysUserService.getSysUser(shop.getBelongUserId()).getData();
            handleShopStaff(shop.getShopId(),belongSysUser);
        }*/
        //商户关联人员
        String relUserIds = MGTEditShopDto.getRelUserIds();
        String[] openIds = mgtEditShopDto.getRelUserOpenIds().split(",");//开启默认登录账号
        if(StringUtils.isNotBlank(relUserIds)){
            shopStaffService.clearShopStaffRelation(shop.getShopId());
            String[] relUserIdArray = relUserIds.split(",");
            ShopRelUser shopRelUser;
            Long userId;
@@ -172,19 +335,21 @@
                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);
            }
        }
        //商户封面
        ShopFile shopFile = new ShopFile();
        shopFile.setDelFlag(0);
        shopFile.setFileType(1);
        shopFile.setFileUrl(MGTEditShopDto.getShopPicture());
        shopFile.setFileUrl(mgtEditShopDto.getShopPicture());
        shopFile.setShopId(shop.getShopId());
        shopFileService.save(shopFile);
        //商户banner
        if(StringUtils.isNotBlank(MGTEditShopDto.getShopBanners())){
            String shopBanners= MGTEditShopDto.getShopBanners();
        if(StringUtils.isNotBlank(mgtEditShopDto.getShopBanners())){
            String shopBanners= mgtEditShopDto.getShopBanners();
            String[] shopBannerArray = shopBanners.split(",");
            for(String str : shopBannerArray){
                shopFile = new ShopFile();
@@ -195,7 +360,170 @@
                shopFileService.save(shopFile);
            }
        }
        if(newShop){
            //生成商户关联记录
            initNewShop(shop,mgtEditShopDto.getUserId());
            CodeGetDto codeGetDto = new CodeGetDto();
            String url = "https://wxapp.hhhrt.cn/mini/shop?id="+shop.getShopId();
            codeGetDto.setUrl(url);
            codeGetDto.setFileName("shop-"+shop.getShopId());
            String codeUrl = remoteFileService.getAppOrderTotal(codeGetDto).getData();
            shop.setShopCode(codeUrl);
            this.saveOrUpdate(shop);
        }
    }
    /**
     * @description  商户关联类初始化
     * @author  jqs
     * @date    2023/7/7 11:25
     * @param shop
     * @param userId
     * @return  void
     */
    private void initNewShop(Shop shop,Long userId){
        BigDecimal zeroBig = new BigDecimal("0.00");
        //商户账户信息初始化
        ShopAccount shopAccount = new ShopAccount();
        shopAccount.setShopId(shop.getShopId());
        shopAccount.setDelFlag(0);
        shopAccount.setTotalIncome(new BigDecimal("0"));
        shopAccount.setTotalDisburse(new BigDecimal("0"));
        shopAccount.setTotalRefund(new BigDecimal("0"));
        shopAccount.setTotalProfitsharing(new BigDecimal("0"));
        shopAccount.setTotalMoney(new BigDecimal("0"));
        shopAccountService.save(shopAccount);
        //商户认证信息初始化
        String authId = IdUtils.simpleUUID();
        ShopAuthentication shopAuthentication = new ShopAuthentication();
        shopAuthentication.setAuthId(authId);
        shopAuthentication.setDelFlag(0);
        shopAuthentication.setShopId(shop.getShopId());
        shopAuthentication.setAuditStatus(0);
        shopAuthentication.setSignState(1);
        shopAuthenticationService.save(shopAuthentication);
        //商户分成信息初始化
        ShopProportion shopProportion = new ShopProportion();
        shopProportion.setDelFlag(0);
        shopProportion.setShopId(shop.getShopId());
        shopProportion.setShopType(shop.getShopType());
        String proportionPercentStr = redisService.getCacheObject(SecurityConstant.SHOP_COMMON_PROPORTION);
        BigDecimal proportionPercent = new BigDecimal(proportionPercentStr);
        if(proportionPercent==null){
            proportionPercent = new BigDecimal("30");
        }
        shopProportion.setProportionPercent(proportionPercent);
        shopProportion.setUpdateTime(new Date());
        shopProportion.setUpdateUserId(userId);
        shopProportionService.save(shopProportion);
        //商户统计
        ShopTotal shopTotal = new ShopTotal();
        shopTotal.setShopId(shop.getShopId());
        shopTotal.setDelFlag(0);
        shopTotal.setLastPayMoney(zeroBig);
        shopTotal.setTotalActivityCount(0);
        shopTotal.setTotalOrder(0);
        shopTotal.setTotalCycleOrder(0);
        shopTotal.setTotalExperienceOrder(0);
        shopTotal.setTotalServiceOrder(0);
        shopTotal.setTotalGoodsOrder(0);
        shopTotal.setTotalServiceCount(0);
        shopTotal.setUsedServiceCount(0);
        shopTotal.setUseableServiceCount(0);
        shopTotal.setTotalCycleService(0);
        shopTotal.setUsedCycleService(0);
        shopTotal.setUseableCycleService(0);
        shopTotal.setTotalCyclePerson(0);
        shopTotal.setUseableCyclePerson(0);
        shopTotal.setTotalServiceService(0);
        shopTotal.setUsedServiceService(0);
        shopTotal.setUseableServiceService(0);
        shopTotal.setTotalServicePerson(0);
        shopTotal.setUseableServicePerson(0);
        shopTotal.setTotalExperienceService(0);
        shopTotal.setUsedExperienceService(0);
        shopTotal.setUseableExperienceService(0);
        shopTotal.setTotalExperiencePerson(0);
        shopTotal.setUseableExperiencePerson(0);
        shopTotal.setTotalOrderMoney(zeroBig);
        shopTotal.setTotalCycleMoney(zeroBig);
        shopTotal.setTotalExperienceMoney(zeroBig);
        shopTotal.setTotalServiceMoney(zeroBig);
        shopTotal.setTotalGoodsMoney(zeroBig);
        shopTotalService.save(shopTotal);
    }
    /**
     * @description  终止合作
     * @author  jqs
     * @date    2023/6/20 12:01
     * @param mgtTerminateCooperationDto
     * @return  void
     */
    @Override
    public void terminateMgtCooperation(MgtTerminateCooperationDto mgtTerminateCooperationDto){
        Shop shop = this.getById(mgtTerminateCooperationDto.getShopId());
        if(mgtTerminateCooperationDto.getCooperativeFlag()==1){
            /*Date coopStartDate = shop.getCooperationStartTime();
            Date coopEndDate = shop.getCooperationEndTime();
            Date nowTime = new Date();
            //判断合作时间 没在时间内不能开启
            if(coopStartDate.compareTo(nowTime)>0&&coopEndDate.compareTo(nowTime)<0){
                 throw new ServiceException(AppErrorConstant.COOPERATION_TIME_ERROR);
            }*/
            shop.setCooperativeFlag(1);
        }else{
            shop.setCooperativeFlag(0);
        }
        shop.setShopStatus(handelShopStatus(null,shop.getCooperativeFlag(), null));
        shop.setUpdateTime(new Date());
        shop.setUpdateUserId(mgtTerminateCooperationDto.getUserId());
        this.saveOrUpdate(shop);
    }
    /**
     * @description  冻结商户
     * @author  jqs
     * @date    2023/7/15 13:56
     * @param mgtFrozenShopDto
     * @return  void
     */
    @Override
    public void frozenMgtShop(MgtFrozenShopDto mgtFrozenShopDto){
        Shop shop = this.getById(mgtFrozenShopDto.getShopId());
        if(mgtFrozenShopDto.getFrozenFlag()==1){
            shop.setFrozenFlag(1);
        }else{
            shop.setFrozenFlag(0);
        }
        shop.setShopStatus(handelShopStatus(shop.getFrozenFlag(), null, null));
        this.saveOrUpdate(shop);
    }
    /**
     * @description  处理商户状态
     * @author  jqs
     * @date    2023/7/15 14:09
     * @param
     * @return  Integer
     */
    private Integer handelShopStatus(Integer frozenFlag, Integer cooperativeFlag, Integer authFlag){
        Integer shopStatus = 1;
        if(null != frozenFlag && frozenFlag == 1){
            shopStatus = 0;
            return shopStatus;
        }
        if(null != cooperativeFlag && cooperativeFlag == 0){
            shopStatus = 2;
            return shopStatus;
        }
        if(null != authFlag && authFlag == 0){
            shopStatus = 3;
            return shopStatus;
        }
        return shopStatus;
    }
    /**
     * 修改合作时间
@@ -204,28 +532,30 @@
    @Override
    public void changeCooperationTime(MgtChangeCoopDto mgtChangeCoopDto){
        Shop shop = this.getById(mgtChangeCoopDto.getShopId());
        String coopStartTime = mgtChangeCoopDto.getCoopStartTime();
        String coopEndTime = mgtChangeCoopDto.getCoopEndTime();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date coopStartDate = null;
        Date coopEndDate = null;
        try {
            Date coopStartDate = simpleDateFormat.parse(coopStartTime);
            Date coopEndDate = simpleDateFormat.parse(coopEndTime);
            Date nowTime = new Date();
            shop.setCooperationStartTime(coopStartDate);
            shop.setCooperationEndTime(coopEndDate);
            Boolean inTime = false;
            if(coopStartDate.compareTo(nowTime)<0&&coopEndDate.compareTo(nowTime)>0){
                inTime = true;
            }
            if(shop.getShopStatus()==2&&inTime){
                shop.setShopStatus(1);
            }
            shop.setUpdateTime(nowTime);
            shop.setUpdateUserId(mgtChangeCoopDto.getUserId());
            this.saveOrUpdate(shop);
            coopStartDate = DateUtils.parseDate(mgtChangeCoopDto.getCoopStartTime(),"yyyy-MM-dd");
            coopEndDate = DateUtils.parseDate(mgtChangeCoopDto.getCoopEndTime(),"yyyy-MM-dd");
        } catch (ParseException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        Date nowTime = new Date();
        shop.setCooperationStartTime(coopStartDate);
        shop.setCooperationEndTime(coopEndDate);
        Boolean inTime = false;
        if(coopStartDate.compareTo(nowTime)<=0&&coopEndDate.compareTo(nowTime)>=0){
            inTime = true;
            shop.setCooperativeFlag(1);
        }else{
            shop.setCooperativeFlag(0);
        }
        if(shop.getShopStatus()==2&&inTime){
            shop.setShopStatus(1);
        }
        shop.setUpdateTime(nowTime);
        shop.setUpdateUserId(mgtChangeCoopDto.getUserId());
        this.saveOrUpdate(shop);
    }
    /**
@@ -235,8 +565,64 @@
     * @return
     */
    @Override
    public List<MgtShopPageVo> pageShop(Page page, MgtShopPageDto mgtShopPageDto){
        List<MgtShopPageVo> mgtShopPageVoList = shopMapper.pageShop(page, mgtShopPageDto);
    public List<MgtShopPageVo> pageMgtShop(Page page, MgtShopPageDto mgtShopPageDto,List<Long> scope){
        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, associatedAccount);
        // 如果查询结果不为空
        if (!mgtShopPageVoList.isEmpty()) {
            // 创建签约用户ID集合和所属用户ID集合
            HashSet<Long> signUserIdSet = new HashSet<>();
            HashSet<Long> belongUserIdSet = new HashSet<>();
            // 遍历查询结果,将签约用户和所属用户添加到对应的集合中
            for (MgtShopPageVo shopPageVo : mgtShopPageVoList) {
                if (shopPageVo.getSignUserId() != null) {
                    signUserIdSet.add(shopPageVo.getSignUserId());
                }
                if (shopPageVo.getBelongUserId() != null) {
                    belongUserIdSet.add(shopPageVo.getBelongUserId());
                }
            }
            MgtBaseBathDto mgtBaseBathDto;
            Map<Long, MgtSysSimpleUserVo> signUserMap = null;
            Map<Long, MgtSysSimpleUserVo> belongUserMap = null;
            if(signUserIdSet!=null&&!signUserIdSet.isEmpty()){
                String signUserString = String.join(",", signUserIdSet.stream().map(Object::toString).collect(Collectors.toList()));
                mgtBaseBathDto = new MgtBaseBathDto();
                mgtBaseBathDto.setIds(signUserString);
                List<MgtSysSimpleUserVo> signUserVoList = remoteConfigService.listSimpleUserVo(mgtBaseBathDto).getData();
                signUserMap = signUserVoList.stream()
                        .collect(Collectors.toMap(MgtSysSimpleUserVo::getUserId, Function.identity()));
            }
            if(belongUserIdSet!=null&&!belongUserIdSet.isEmpty()){
                // 将签约用户ID集合和所属用户ID集合转为字符串
                String belongUserString = String.join(",", belongUserIdSet.stream().map(Object::toString).collect(Collectors.toList()));
                // 查询签约用户和所属用户的详细信息
                mgtBaseBathDto = new MgtBaseBathDto();
                mgtBaseBathDto.setIds(belongUserString);
                List<MgtSysSimpleUserVo> belongUserVoList = remoteConfigService.listSimpleUserVo(mgtBaseBathDto).getData();
                belongUserMap = belongUserVoList.stream()
                        .collect(Collectors.toMap(MgtSysSimpleUserVo::getUserId, Function.identity()));
            }
            // 遍历查询结果,将签约用户和所属用户的详细信息添加到商铺信息中
            for (MgtShopPageVo shopPageVo : mgtShopPageVoList) {
                if (signUserMap!=null&&!signUserMap.isEmpty()&&shopPageVo.getSignUserId() != null) {
                    shopPageVo.setSignUser(signUserMap.get(shopPageVo.getSignUserId()).getNickName());
                }
                if (belongUserMap!=null&&!belongUserMap.isEmpty()&&shopPageVo.getBelongUserId() != null) {
                    MgtSysSimpleUserVo mgtSysSimpleUserVo = belongUserMap.get(shopPageVo.getBelongUserId());
                    shopPageVo.setBelongUser(null == mgtSysSimpleUserVo ? "" : mgtSysSimpleUserVo.getNickName());
                    shopPageVo.setBelongDept(null == mgtSysSimpleUserVo ? "" : mgtSysSimpleUserVo.getDeptName());
                }
            }
        }
        // 返回商铺信息
        return mgtShopPageVoList;
    }
@@ -251,6 +637,12 @@
        Shop shop = this.getById(shopId);
        //基本信息拷贝
        BeanUtils.copyProperties(shop,mgtShopInfoVo);
        String shopDetail = mgtShopInfoVo.getShopDetail();
        if(StringUtils.isNotBlank(shopDetail)){
            byte[] encodedBytes = Base64.getEncoder().encode(shopDetail.getBytes(StandardCharsets.UTF_8));
            shopDetail = new String(encodedBytes, StandardCharsets.UTF_8);
            mgtShopInfoVo.setShopDetail(shopDetail);
        }
        //商户标签
        List<ShopRelTag> shopRelTagList = shopRelTagService.listShopRelTagByShopId(shopId);
        if(shopRelTagList!=null&&!shopRelTagList.isEmpty()){
@@ -260,17 +652,36 @@
            }
            mgtShopInfoVo.setShopTagIds(shopTagJs.toString());
        }
        //归属员工
        if(mgtShopInfoVo.getBelongUserId()!=null){
            SysUser sysUser = sysUserService.getSysUser(mgtShopInfoVo.getBelongUserId()).getData();
            if(sysUser!=null){
                mgtShopInfoVo.setBelongUserName(sysUser.getNickName());
            }
        }
        //归属商户
        if(mgtShopInfoVo.getBelongShopId()!=null){
            Shop belongShop = this.getByShopId(mgtShopInfoVo.getBelongShopId());
            if(belongShop!=null){
                mgtShopInfoVo.setBelongShopName(belongShop.getShopName());
            }
        }
        //商户关联用户
        List<ShopRelUser> shopRelUserList = shopRelUserService.listByShopId(shopId);
        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);
@@ -325,6 +736,42 @@
        this.saveOrUpdate(shop);
    }
    /**
     * @description  转移客户
     * @author  jqs
     * @date    2023/6/28 16:36
     * @param mgtTransferShopDto
     * @return  void
     */
    @Override
    public void transferMgtShop(MgtTransferShopDto mgtTransferShopDto){
        Shop shop = this.getByShopId(mgtTransferShopDto.getShopId());
        if(shop.getBelongUserId()!=null){
            if(shop.getBelongUserId().equals(mgtTransferShopDto.getUserId())){
                throw new ServiceException(AppErrorConstant.TRANS_NOT_MYSELF);
            }
            ShopTransferRecord shopTransferRecord = new ShopTransferRecord();
            shopTransferRecord.setDelFlag(0);
            shopTransferRecord.setShopId(shop.getShopId());
            shopTransferRecord.setBeforeUserId(shop.getBelongUserId());
            shopTransferRecord.setAfterUserId(mgtTransferShopDto.getTransferUserId());
            shopTransferRecord.setTransferRemark(mgtTransferShopDto.getTransferRemark());
            shopTransferRecordService.save(shopTransferRecord);
        }
        shop.setBelongUserId(mgtTransferShopDto.getTransferUserId());
        this.saveOrUpdate(shop);
        /*ShopRelUser shopRelUser = new ShopRelUser();
        shopRelUser.setDelFlag(0);
        shopRelUser.setShopId(shop.getShopId());
        shopRelUser.setUserId(mgtTransferShopDto.getTransferUserId());
        SysUser sysUser = remoteUserService.getSysUser(mgtTransferShopDto.getTransferUserId()).getData();
        shopRelUser.setUserMobile(sysUser.getPhonenumber());
        shopRelUser.setUserDeptId(sysUser.getDeptId());
        shopRelUser.setUserName(sysUser.getNickName());
        shopRelUserService.save(shopRelUser);*/
    }
    /**
     * 获取附近门店
     * @param appNearbyShopDto
@@ -339,18 +786,57 @@
            //获取绑定商户
            shop = this.getById(member.getRelationShopId());
        }else if(StringUtils.isNotBlank(appNearbyShopDto.getLatitude())&&StringUtils.isNotBlank(appNearbyShopDto.getLongitude())){
            AppNearShopVo appNearShopVo = shopMapper.getNearbyShop(appNearbyShopDto);
            shop = this.getById(appNearShopVo.getShopId());
            List<AppNearShopVo> appNearShopVos = shopMapper.getNearbyShops(appNearbyShopDto);
            if(appNearShopVos.size() > 0){
                log.info("候选店铺:{}", JSON.toJSONString(appNearShopVos));
                StringBuffer to = new StringBuffer();
                for (AppNearShopVo appNearShopVo : appNearShopVos) {
                    to.append(appNearShopVo.getLatitude() + "," + appNearShopVo.getLongitude() + ";");
                }
                String form = appNearbyShopDto.getLatitude() + "," + appNearbyShopDto.getLongitude();
                R<List<TencentDistanceMatrix>> r = MapUtil.tencentDistanceMatrix(form, to.substring(0, to.length() - 1), "walking");
                if(r.getCode() != 200){
                    throw new ServiceException(r.getMsg());
                }
                List<TencentDistanceMatrix> data = r.getData();
                //存储最短距离
                BigDecimal dis = new BigDecimal(0);
                AppNearShopVo appNearShopVo = null;
                List<TencentDistanceMatrixElements> elements = data.get(0).getElements();
                for (int i = 0; i < elements.size(); i++) {
                    TencentDistanceMatrixElements matrix = elements.get(i);
                    if(i == 0 || dis.compareTo(new BigDecimal(matrix.getDistance())) > 0){
                        dis = new BigDecimal(matrix.getDistance());
                        appNearShopVo = appNearShopVos.get(i);
                    }
                }
                shop = this.getById(appNearShopVo.getShopId());
            }
        }else{
            return appNearbyShopVo;
        }
        if(member!=null&&member.getBindingFlag()!=1){
            AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto();
            appMemberBindingDto.setShopId(shop.getShopId());
            appMemberBindingDto.setShopName(shop.getShopName());
            appMemberBindingDto.setUserId(member.getUserId());
            appMemberBindingDto.setBindingFlag(0);
            remoteMemberService.updateMemberBinding(appMemberBindingDto);
        }
        //商品图片
        List<ShopFile> shopFileList = shopFileService.listShopFileByShopId(shop.getShopId());
        String shopPicture = null;
        StringJoiner shopBanners = new StringJoiner(",");
        if(shopFileList!=null&&!shopFileList.isEmpty()){
            for(ShopFile shopFile : shopFileList){
                if(shopFile.getFileType()==1){
                    shopPicture = shopFile.getFileUrl();
                }else{
                    shopBanners.add(shopFile.getFileUrl());
                }
            }
        }
        appNearbyShopVo.setShopPicture(shopPicture);
        appNearbyShopVo.setShopId(shop.getShopId());
        appNearbyShopVo.setShopName(shop.getShopName());
        appNearbyShopVo.setShopAddress(shop.getShopAreaName()+shop.getShopAddress());
@@ -372,22 +858,129 @@
        return shop;
    }
    /**
     * 获取获取员工端首页统计
     * @param userId
     * @return
     */
    @Override
    public MerHomeShopTotalVo getMerHomeTotal(Long userId){
    public StaffHomeShopTotalVo getStaffHomeTotal(Long userId){
        List<Long> userIds = new ArrayList<>();
        List<Long> shopIds = new ArrayList<>();
        //如果是leader 查询leader下面所有的员工下的所有shopId
//        if(remoteSysStaffService.isLeader()){
//            userIds = sysUserService.getUserIdsByDept(userId).getData();
//            //根据用户所有id查询关联的商户id
//            MgtBasePlatformDto mgtBasePlatformDto = new MgtBasePlatformDto();
//            mgtBasePlatformDto.setUserIdList(userIds);
//            shopIds = shopMapper.listShopIdByTotal(mgtBasePlatformDto);
//            List<Shop> shopList = this.getShopByBelongUserId(userId);
//            if(shopList!=null&&!shopList.isEmpty()){
//                for(Shop shop : shopList){
//                    shopIds.add(shop.getShopId());
//                }
//                userIds.add(userId);
//            }
//        }else {
//            //普通员工查询商户归属的shopId
//            List<Shop> shopList = this.getShopByBelongUserId(userId);
//            if(shopList!=null&&!shopList.isEmpty()){
//                for(Shop shop : shopList){
//                    shopIds.add(shop.getShopId());
//                }
//                userIds.add(userId);
//            }
//        }
        // TODO: 2023/12/5 统一改成使用权限来控制数据
        R<SysUser> sysUser = sysUserService.getSysUser(userId);
        if(sysUser.getCode() != 200){
            throw new RuntimeException(sysUser.getMsg());
        }
        //员工端数据权限(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限)
        //2/4暂未使用
        String dataScopeEmployee = sysUser.getData().getDataScopeEmployee();
        if(dataScopeEmployee.equals("1")){
            userIds = null;
            shopIds = null;
        }
        if(dataScopeEmployee.equals("3")){
            userIds = sysUserService.getUserIdsByDept(userId).getData();
            //根据用户所有id查询关联的商户id
            MgtBasePlatformDto mgtBasePlatformDto = new MgtBasePlatformDto();
            mgtBasePlatformDto.setUserIdList(userIds);
            shopIds = shopMapper.listShopIdByTotal(mgtBasePlatformDto);
            List<Shop> shopList = this.getShopByBelongUserId(userId);
            if(shopList!=null&&!shopList.isEmpty()){
                for(Shop shop : shopList){
                    shopIds.add(shop.getShopId());
                }
                userIds.add(userId);
            }
        }
        if(dataScopeEmployee.equals("5")){
            List<Shop> shopList = this.getShopByBelongUserId(userId);
            if(shopList!=null&&!shopList.isEmpty()){
                for(Shop shop : shopList){
                    shopIds.add(shop.getShopId());
                }
                userIds.add(userId);
            }
        }
        //分别查询
        StaffHomeShopTotalVo staffHomeShopTotalVo = shopMapper.getStaffHomeTotal(userIds);
        Integer shopTaskCount = shopTaskService.getShopIngTotal(shopIds);
        staffHomeShopTotalVo.setFollowMember(0);
        staffHomeShopTotalVo.setNewMember(0);
        staffHomeShopTotalVo.setShopTask(shopTaskCount);
        return staffHomeShopTotalVo;
    }
    /**
     * 获取商户端
     *
     * @param merBaseDto
     * @return
     */
    @Override
    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);
//        }
        merHomeShopTotalVo.setShopId(shopId);
        Shop shop = this.getById(shopId);
        if (shop.getFrozenFlag() == 1) {
            String userKey = SecurityUtils.getUserKey();
            redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + userKey);
            throw new ServiceException("商户已被冻结,请联系管理员", 401);
        }
        merHomeShopTotalVo.setShopType(shop.getShopType());
        Integer task = 0;
        merHomeShopTotalVo.setTask(task);
        merHomeShopTotalVo = remoteOrderService.getMerHomeTotal(merHomeShopTotalVo).getData();
        MerHomeShopTotalVo orderVo = remoteOrderService.getMerHomeTotal(merHomeShopTotalVo).getData();
        merHomeShopTotalVo.setShopId(shopId);
        merHomeShopTotalVo.setShopType(shop.getShopType());
        merHomeShopTotalVo.setTodayShop(orderVo.getTodayShop());
        merHomeShopTotalVo.setUnHandleOrder(orderVo.getUnHandleOrder());
        Integer taskCount = memberTaskService.getMemberIngTotal(shopId);
        merHomeShopTotalVo.setTask(taskCount);
        merHomeShopTotalVo.setShopTurnover(orderVo.getShopTurnover());
        merHomeShopTotalVo.setCycleSurp(orderVo.getCycleSurp());
        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;
    }
    /**
     *
     * 获取商户绑定代理商
     * @param page
     * @param merAgencyPageDto
     * @return
@@ -398,5 +991,1068 @@
        return merAgencyPageVoList;
    }
    /**
     * 处理商户员工
     * @param shopId
     * @param sysUser
     */
    private void handleShopStaff(Long shopId,SysUser sysUser){
        ShopStaff shopStaff = shopStaffService.getByUserId(sysUser.getUserId());
        if(shopStaff!=null){
            shopStaff.setShopId(shopId);
        }else{
            String staffId = IdUtils.simpleUUID();
            shopStaff = new ShopStaff();
            shopStaff.setStaffId(staffId);
            shopStaff.setDelFlag(0);
            shopStaff.setUserId(sysUser.getUserId());
            shopStaff.setShopId(shopId);
            shopStaff.setStaffName(sysUser.getNickName());
            shopStaff.setStaffMobile(sysUser.getPhonenumber());
            shopStaff.setStaffGender(Integer.valueOf(sysUser.getSex()));
            shopStaff.setStaffAvatar(sysUser.getAvatar());
        }
        shopStaffService.saveOrUpdate(shopStaff);
    }
    /**
     * @description  平台获取商户分成列表
     * @author  jqs
     * @date    2023/6/8 9:25
     * @param page
     * @param mgtShopProportionPageDto
     * @return  List<MgtShopProportionPageVo>
     */
    @Override
    public List<MgtShopProportionPageVo> pageMgtShopProportion(Page page, MgtShopProportionPageDto mgtShopProportionPageDto){
        return shopMapper.pageMgtShopProportion(page,mgtShopProportionPageDto);
    }
    /**
     * @description  删除商户标签
     * @author  jqs
     * @date    2023/6/8 15:53
     * @param shopTag
     * @return  void
     */
    @Override
    public void deleteShopTag(String shopTag){
        shopMapper.deleteShopTag(shopTag);
    }
    /**
     * @description  通过code获取shopId
     * @author  jqs
     * @date    2023/6/9 16:40
     * @param mgtShopIdByCodeDto
     * @return  MgtShopIdByCodeVo
     */
    @Override
    public MgtShopIdByCodeVo getShopIdByCode(MgtShopIdByCodeDto mgtShopIdByCodeDto){
        MgtShopIdByCodeVo mgtShopIdByCodeVo = new MgtShopIdByCodeVo();
        List<Long> shopIdList = shopMapper.getShopIdByCode(mgtShopIdByCodeDto);
        if(shopIdList!=null&&!shopIdList.isEmpty()){
            String shopIdStr = shopIdList.stream()
                    .map(Object::toString)
                    .collect(Collectors.joining(","));
            mgtShopIdByCodeVo.setShopIds(shopIdStr);
        }
        return mgtShopIdByCodeVo;
    }
    /**
     * @description  获取商户list
     * @author  jqs
     * @date    2023/6/12 14:37
     * @param mgtShopListDto
     * @return  List<MgtShopListSimpleVo>
     */
    @Override
    public List<MgtShopListSimpleVo> listMgtShopSimpleVo(MgtShopListDto mgtShopListDto,List<Long> scope){
        return shopMapper.listMgtShopSimpleVo(mgtShopListDto,scope);
    }
    /**
     * @description  通过id获取商户列表
     * @author  jqs
     * @date    2023/6/14 17:53
     * @param shopIds
     * @return  List<MgtShopListSimpleVo>
     */
    @Override
    public List<MgtSimpleShopVo> listShopSimpleVoByIds(String shopIds){
        return shopMapper.listShopSimpleVoByIds(shopIds);
    }
    /**
     * @description pageMgtShopByCityCode
     * @param page
     * @param mgtShopByCodePageDto
     * @return List<MgtSimpleShopVo>
     * @author jqs34
     * @date 2023/6/14 20:56
     */
    @Override
    public List<MgtSimpleShopVo> pageMgtShopByCityCode(Page page, MgtShopByCodePageDto mgtShopByCodePageDto){
        return shopMapper.pageMgtShopByCityCode(page, mgtShopByCodePageDto);
    }
    /**
     * @description pageMgtShopAuth
     * @param page
     * @param mgtShopAuthPageDto
     * @return List<MgtShopAuthPageVo>
     * @author jqs34
     * @date 2023/6/14 23:01
     */
    @Override
    public List<MgtShopAuthPageVo> pageMgtShopAuth(Page page,  MgtShopAuthPageDto mgtShopAuthPageDto,List<Long> scope){
        return shopMapper.pageMgtShopAuth(page, mgtShopAuthPageDto,scope);
    }
    /**
     * 商户进件列表数据(汇付天下)
     * @param page
     * @param mgtShopAuthPageDto
     * @return
     */
    @Override
    public List<MgtShopHFTXAuthPageVo> pageMgtShopHFTXAuth(Page page, MgtShopHFTXAuthPageDto mgtShopAuthPageDto,
                                                           List<Long> scope) {
        return shopMapper.pageMgtShopHFTXAuth(page, mgtShopAuthPageDto,scope);
    }
    /**
     * @description boardShopTotal
     * @param
     * @return MgtBulletinBoardVo
     * @author jqs34
     * @date 2023/6/18 16:59
     */
    @Override
    public MgtBulletinBoardVo boardShopTotal(List<Long> userIds){
        MgtBulletinBoardVo mgtBulletinBoardVoShop = shopMapper.shopTotal(userIds);
        return mgtBulletinBoardVoShop;
    }
    /**
     * @description  商户进件
     * @author  jqs
     * @date    2023/6/19 11:02
     * @param mgtShopAuthDto
     * @return  void
     */
    @Override
    public void mgtShopAuth(MgtShopAuthDto mgtShopAuthDto) {
        ShopAuthentication shopAuthentication = shopAuthenticationService.getById(mgtShopAuthDto.getAuthId());
        Shop shop = this.getByShopId(shopAuthentication.getShopId());
        if(mgtShopAuthDto.getBlBusinessFoeverFlag()!=null&&mgtShopAuthDto.getBlBusinessFoeverFlag()==1){
            mgtShopAuthDto.setBlBusinessDeanline("长期");
        }
        if(mgtShopAuthDto.getLpIcForeverFlag()!=null&&mgtShopAuthDto.getLpIcForeverFlag()==1){
            mgtShopAuthDto.setLpIcEndDate("长期");
        }
        BeanUtils.copyProperties(mgtShopAuthDto , shopAuthentication);
        String applyNumber = shopAuthentication.getApplyNumber();
        if(StringUtils.isBlank(applyNumber)){
            applyNumber = IdUtils.simpleUUID();
            shopAuthentication.setApplyNumber(applyNumber);
        }
        ApplymentsResult applymentsResult;
        try {
            applymentsResult = wechatPayUtils.ecommerceApply(shopAuthentication,applyNumber,shop);
        } catch (Exception e) {
            log.debug("-----"+shop.getShopId()+":进件异常-----");
            throw new ServiceException(e.getMessage());
        }
        shopAuthentication.setAuditStatus(3);
        shopAuthentication.setApplymentId(applymentsResult.getApplymentId());
        shopAuthenticationService.saveOrUpdate(shopAuthentication);
    }
    /**
     * 商户进件(汇付天下)
     * @param mgtShopHFTXAuthDto
     */
    @Override
    public void mgtShopHFTXAuth(MgtShopHFTXAuthDto mgtShopHFTXAuthDto) {
        ShopAuthenticationHftx shopAuthenticationHftx = shopAuthenticationHftxService.getOne(new QueryWrapper<ShopAuthenticationHftx>()
                .eq("shop_id", mgtShopHFTXAuthDto.getShopId()).eq("is_delete", 0));
        if(null != shopAuthenticationHftx && Arrays.asList("U", "Y").contains(shopAuthenticationHftx.getAuditStatus())){
            throw new ServiceException("不能重复进件");
        }
        if(null == shopAuthenticationHftx){
            shopAuthenticationHftx = new ShopAuthenticationHftx();
            shopAuthenticationHftx.setIsDelete(0);
            shopAuthenticationHftx.setInsertTime(new Date());
        }
        String auditStatus = shopAuthenticationHftx.getAuditStatus();
        BeanUtils.copyProperties(mgtShopHFTXAuthDto, shopAuthenticationHftx);
        shopAuthenticationHftx.setReqSeqId(IdUtils.simpleUUID());
        shopAuthenticationHftx.setAuditStatus("");
        shopAuthenticationHftx.setAuditDesc("");
        /**
         * 开始调起进件接口
         */
        R<MerchantBasicdataVo> r = null;
        //用户(重新提交)
        if((StringUtils.isEmpty(auditStatus) || "N".equals(auditStatus) || "F".equals(auditStatus)) && mgtShopHFTXAuthDto.getType() == 1){
            r = HuiFuTianXiaUtil.merchantBasicdataIndv(mgtShopHFTXAuthDto, shopAuthenticationHftx, callback_path + "/shop/mgt/shop/merchantBasicdataNotify");
        }
        //企业进件(重新提交)
        if((StringUtils.isEmpty(auditStatus) || "N".equals(auditStatus) || "F".equals(auditStatus)) && mgtShopHFTXAuthDto.getType() == 2){
            r = HuiFuTianXiaUtil.merchantBasicdataEnt(mgtShopHFTXAuthDto, shopAuthenticationHftx, callback_path + "/shop/mgt/shop/merchantBasicdataNotify");
        }
        //修改资料
        if("Y".equals(auditStatus)){
            r = HuiFuTianXiaUtil.merchantBasicdataModify(mgtShopHFTXAuthDto, shopAuthenticationHftx, callback_path + "/shop/mgt/shop/merchantBasicdataNotify");
        }
        if(null == r){
            throw new ServiceException("参数异常");
        }
        if(r.getCode() == 200){
            MerchantBasicdataVo data = r.getData();
            shopAuthenticationHftx.setAuditStatus("U");
            shopAuthenticationHftx.setHuifuId(data.getHuifuId());
            shopAuthenticationHftx.setTokenNo(data.getTokenNo());
            shopAuthenticationHftx.setApplyNo(data.getApplyNo());
            shopAuthenticationHftxService.saveOrUpdate(shopAuthenticationHftx);
        }else{
            throw new ServiceException(r.getMsg());
        }
    }
    /**
     * 商户进件异步通知
     * @return
     */
    @Override
    public R<String> merchantBasicdataNotify(MerchantBasicDataNotifyDto dto) {
        R<MerchantBasicdataVo> merchantBasicdataVoR = HuiFuTianXiaUtil.merchantBasicDataNotify(dto);
        if(merchantBasicdataVoR.getCode() != 200){
            return R.fail(merchantBasicdataVoR.getMsg());
        }
        MerchantBasicdataVo data = merchantBasicdataVoR.getData();
        ShopAuthenticationHftx shopAuthenticationHftx = shopAuthenticationHftxService.getOne(new QueryWrapper<ShopAuthenticationHftx>().eq("req_seq_id", data.getReqSeqId()));
        if("U".equals(shopAuthenticationHftx.getAuditStatus())){
            shopAuthenticationHftx.setAuditStatus(data.getAuditStatus());
            shopAuthenticationHftx.setAuditDesc(data.getAuditDesc());
            shopAuthenticationHftx.setHuifuId(data.getHuifuId());
            shopAuthenticationHftx.setTokenNo(data.getTokenNo());
            shopAuthenticationHftx.setApplyNo(data.getApplyNo());
            shopAuthenticationHftxService.updateById(shopAuthenticationHftx);
            if("Y".equals(data.getAuditStatus())){
                Shop shop = this.getByShopId(shopAuthenticationHftx.getShopId());
                shop.setShopStatus(1);
                shop.setAuthFlag(1);
                this.updateById(shop);
            }
        }
        return R.ok(data.getReqSeqId());
    }
    /**
     * @description  获取平台商户统计
     * @author  jqs
     * @date    2023/6/21 16:25
     * @param mgtBasePlatformDto
     * @return  MgtPlTotalShopTotalVo
     */
    @Override
    public MgtPlTotalShopTotalVo getPlTotalShopTotal(MgtBasePlatformDto mgtBasePlatformDto) {
        //获取需要关联的用户id集合
        if (mgtBasePlatformDto.getDeptId() != null) {
            List<Long> userIdList = new ArrayList<>();
            if (mgtBasePlatformDto.getUserId() != null) {
                userIdList.add(mgtBasePlatformDto.getUserId());
            } else {
                MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept();
                mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getDeptId());
                mgtUserIdByDept = configService.getUserIdByDept(mgtUserIdByDept).getData();
                userIdList = mgtUserIdByDept.getUserIdList();
            }
            if (!userIdList.isEmpty()) {
                mgtBasePlatformDto.setUserIdList(userIdList);
            }
        }
        //数据权限
        List<Long> userIds = remoteUserService.getScopeOfAuthorityUserId();
        if(null != userIds){
            List<Long> userIdList = mgtBasePlatformDto.getUserIdList();
            if(null != userIdList){
                userIdList.addAll(userIds);
            }else{
                userIdList = userIds;
            }
            mgtBasePlatformDto.setUserIdList(userIdList);
        }
        //获取基础统计
        MgtPlTotalShopTotalVo plTotalShopTotalVo = shopMapper.getPlTotalShopTotal(userIds);
        plTotalShopTotalVo.setSignTotal(0);
        List<Long> shopIdList = shopMapper.listShopIdByTotal(mgtBasePlatformDto);
        if (!shopIdList.isEmpty()) {
            MgtShopTotalMemberVo shopTotalMemberVo = remoteMemberService.getUserTotalByShopId(shopIdList).getData();
            plTotalShopTotalVo.setManTotal(shopTotalMemberVo.getManTotal());
            plTotalShopTotalVo.setWomenTotal(shopTotalMemberVo.getWomenTotal());
            plTotalShopTotalVo.setAgeKey(shopTotalMemberVo.getAgeKey());
            plTotalShopTotalVo.setAgeValue(shopTotalMemberVo.getAgeValue());
        }
        //获取商户类型
        List<MgtMapIntTotalVo> shopTypeTotal = shopMapper.listShopTypeTotal(mgtBasePlatformDto);
        if (shopTypeTotal != null && shopTypeTotal.size() > 0) {
            shopTypeTotal = listRemoveNull(shopTypeTotal);
            plTotalShopTotalVo.setShopTypeVos(shopTypeTotal);
        }
        //获取商户状态
        List<MgtMapIntTotalVo> shopStatusTotal = shopMapper.listShopStatusTotal(mgtBasePlatformDto);
        if (shopStatusTotal != null && shopStatusTotal.size() > 0) {
            shopStatusTotal = listRemoveNull(shopStatusTotal);
            plTotalShopTotalVo.setShopStatusVos(shopStatusTotal);
        }
        //获取区域排名
        List<MgtMapIntTotalVo> shopAreaRank = shopMapper.listShopAreaRank(mgtBasePlatformDto);
        if (shopAreaRank != null && shopAreaRank.size() > 0) {
            shopAreaRank = listRemoveNull(shopAreaRank);
            plTotalShopTotalVo.setAreaRankVos(shopAreaRank);
        }
        //获取销售排名
        List<MgtMapBigTotalVo> shopSalesRank = remoteOrderService.shopSalesRank(shopIdList).getData();
        if (shopSalesRank != null && shopSalesRank.size() > 0) {
            String[] shopSalesKey = new String[shopSalesRank.size()];
            BigDecimal[] shopSalesValue = new BigDecimal[shopSalesRank.size()];
            // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组
            Long shopId;
            Shop shop;
            for (int i = 0; i < shopSalesRank.size(); i++) {
                shopId = Long.valueOf(shopSalesRank.get(i).getMapKey());
                shop = this.getByShopId(shopId);
                shopSalesKey[i] = shop.getShopName();
                shopSalesValue[i] = shopSalesRank.get(i).getMapValue();
            }
            plTotalShopTotalVo.setShopSalesRankKey(shopSalesKey);
            plTotalShopTotalVo.setShopSalesRankValue(shopSalesValue);
        }
        //获取推荐
        List<MgtMapIntTotalVo> shopRecommendRank = shopMapper.listShopRecommendRank(mgtBasePlatformDto);
        if (shopRecommendRank != null && shopRecommendRank.size() > 0) {
            shopRecommendRank = listRemoveNull(shopRecommendRank);
            plTotalShopTotalVo.setShopRecommendVos(shopRecommendRank);
        }
        return plTotalShopTotalVo;
    }
    /**
     * @description  去除空字符串
     * @author  jqs
     * @date    2023/6/27 17:35
     * @param MgtMapIntTotalVos
     * @return  List<MgtMapIntTotalVo>
     */
    private List<MgtMapIntTotalVo> listRemoveNull(List<MgtMapIntTotalVo> MgtMapIntTotalVos){
        for (int i = 0; i < MgtMapIntTotalVos.size(); i++) {
            if(StringUtils.isBlank(MgtMapIntTotalVos.get(i).getMapKey())){
                MgtMapIntTotalVos.remove(i);
            }
        }
        return MgtMapIntTotalVos;
    }
    /**
     * @description 获取平台统计shopId
     * @param mgtBasePlatformDto
     * @return List<Long>
     * @author jqs34
     * @date 2023/6/23 14:12
     */
    @Override
    public List<Long> listShopIdByPlTotal(MgtBasePlatformDto mgtBasePlatformDto){
        List<Long> shopIdList = shopMapper.listShopIdByPlTotal(mgtBasePlatformDto);
        return shopIdList;
    }
    /**
     * @description  获取商户审核资料
     * @author  jqs
     * @date    2023/6/25 10:37
     * @param authId
     * @return  MgtShopAuthGetVo
     */
    @Override
    public MgtShopAuthGetVo getMgtShopAuth(String authId){
        MgtShopAuthGetVo shopAuthGetVo = new MgtShopAuthGetVo();
        ShopAuthentication shopAuthentication = shopAuthenticationService.getById(authId);
        BeanUtils.copyProperties(shopAuthentication, shopAuthGetVo);
        if(shopAuthGetVo.getBlBusinessDeanline()!=null){
            if(shopAuthGetVo.getBlBusinessDeanline().equals("长期")){
                shopAuthGetVo.setBlBusinessFoeverFlag(1);
            }else{
                shopAuthGetVo.setBlBusinessFoeverFlag(0);
            }
        }
        if(shopAuthGetVo.getLpIcEndDate()!=null){
            if(shopAuthGetVo.getLpIcEndDate().equals("长期")){
                shopAuthGetVo.setLpIcForeverFlag(1);
            }else{
                shopAuthGetVo.setLpIcForeverFlag(0);
            }
        }
        return shopAuthGetVo;
    }
    /**
     * 获取商户审核资料(汇付天下)
     * @param shopId
     * @return
     */
    @Override
    public MgtShopHFTXAuthGetVo getMgtShopHFTXAuthInfo(Long shopId) {
        ShopAuthenticationHftx shopAuthenticationHftx = shopAuthenticationHftxService.getOne(new QueryWrapper<ShopAuthenticationHftx>().eq("shop_id", shopId));
        MgtShopHFTXAuthGetVo mgtShopHFTXAuthGetVo = new MgtShopHFTXAuthGetVo();
        if(null == shopAuthenticationHftx){
            return mgtShopHFTXAuthGetVo;
        }
        BeanUtils.copyProperties(shopAuthenticationHftx, mgtShopHFTXAuthGetVo);
        return mgtShopHFTXAuthGetVo;
    }
    /**
     * @description  获取商户验证信息
     * @author  jqs
     * @date    2023/6/26 10:38
     * @param authId
     * @return  MgtShopAuthCodeVo
     */
    @Override
    public MgtShopAuthCodeVo getMgtShopAuthCode(String authId){
        MgtShopAuthCodeVo mgtShopAuthCodeVo = new MgtShopAuthCodeVo();
        ShopAuthentication shopAuthentication = shopAuthenticationService.getById(authId);
        mgtShopAuthCodeVo.setSignUrl(shopAuthentication.getSignUrl());
        mgtShopAuthCodeVo.setLegalValidationUrl(shopAuthentication.getLegalValidationUrl());
        return mgtShopAuthCodeVo;
    }
    /**
     * @description  获取商户下属代理商
     * @author  jqs
     * @date    2023/7/3 17:27
     * @param shopId
     * @return  List<Long>
     */
    @Override
    public List<Long> listShopIdByShopId(Long shopId){
        List<Long> shopIds = shopMapper.selectList(
                new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag, 0).eq(Shop::getBelongShopId, shopId)
        ).stream().map(Shop::getShopId).collect(Collectors.toList());
        return shopIds;
    }
    /**
     * @description  获取商户下属代理商
     * @author  jqs
     * @date    2023/7/3 18:18
     * @param shopId
     * @return  List<MgtSimpleShopVo>
     */
    @Override
    public List<MgtSimpleShopVo> listShopByShop(Long shopId){
        List<MgtSimpleShopVo> simpleShopVoList = shopMapper.selectList(
                new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag, 0).eq(Shop::getBelongShopId, shopId)).
                stream().map(shop->{
                    MgtSimpleShopVo simpleShopVo = new MgtSimpleShopVo();
                    simpleShopVo.setShopId(shop.getShopId());
                    simpleShopVo.setShopName(shop.getShopName());
                    return simpleShopVo;
                }).collect(Collectors.toList());
        return simpleShopVoList;
    }
    /**
     * @param userId
     * @return Shop
     * @description 获取用户管理商户
     * @author jqs
     * @date 2023/7/14 10:00
     */
    @Override
    public List<Shop> getShopByBelongUserId(Long userId) {
        LambdaQueryWrapper<Shop> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Shop::getDelFlag, 0);
        queryWrapper.eq(Shop::getBelongUserId, userId);
        return this.list(queryWrapper);
    }
    /**
     * @description  员工端获取商户列表
     * @author  jqs
     * @date    2023/7/14 15:26
     * @param page
     * @param staffShopPageDto
     * @return  List<StaffShopPageVo>
     */
    @Override
    public List<StaffShopPageVo> pageStaffShop(Page page, StaffShopPageDto staffShopPageDto){
        List<StaffShopPageVo> staffShopPageVoList = shopMapper.pageStaffShop(page, staffShopPageDto);
        return staffShopPageVoList;
    }
    /**
     * @description  获取员工端商户数量统计
     * @author  jqs
     * @date    2023/7/14 15:51
     * @param userId
     * @return  StaffShopSimpleTotalVo
     */
    @Override
    public StaffShopSimpleTotalVo getStaffSimpleTotal(Long userId){
        List<Long> userIdList = new ArrayList<>();
//        if(remoteSysStaffService.isLeader()){
//            userIdList = sysUserService.getUserIdsByDept(userId).getData();
//            userIdList.add(userId);
//        }else {
//            userIdList.add(userId);
//        }
        // TODO: 2023/12/5 统一改成使用权限来控制数据
        R<SysUser> sysUser = sysUserService.getSysUser(userId);
        if(sysUser.getCode() != 200){
            throw new RuntimeException(sysUser.getMsg());
        }
        //员工端数据权限(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限)
        //2/4暂未使用
        String dataScopeEmployee = sysUser.getData().getDataScopeEmployee();
        if(dataScopeEmployee.equals("1")){
            userIdList = null;
        }
        if(dataScopeEmployee.equals("3")){
            userIdList = sysUserService.getUserIdsByDept(userId).getData();
            userIdList.add(userId);
        }
        if(dataScopeEmployee.equals("5")){
            userIdList.add(userId);
        }
        StaffShopSimpleTotalVo shopTotal = shopMapper.getStaffSimpleTotal(1,userIdList);
        StaffShopSimpleTotalVo agencyTotal = shopMapper.getStaffSimpleTotal(2,userIdList);
        shopTotal.setAgencyTotal(agencyTotal.getShopTotal());
        shopTotal.setOpenAgencyTotal(agencyTotal.getOpenShopTotal());
        shopTotal.setCloseAgencyTotal(agencyTotal.getCloseShopTotal());
        return shopTotal;
    }
    /**
     * @description  员工端获取商户详情
     * @author  jqs
     * @date    2023/7/14 18:32
     * @param shopId
     * @return  StaffShopInfoGetVo
     */
    @Override
    public StaffShopInfoGetVo getStaffShopInfo(Long shopId) {
        // 创建员工商店信息对象
        StaffShopInfoGetVo staffShopInfoGetVo = new StaffShopInfoGetVo();
        // 通过商店ID获取商店信息
        Shop shop = this.getByShopId(shopId);
        // 获取商店文件列表
        List<ShopFile> shopFileList = shopFileService.listShopFileByShopId(shopId);
        // 初始化商店图片
        String shopPicture = null;
        // 遍历商店文件列表,获取商店图片
        if (shopFileList != null && !shopFileList.isEmpty()) {
            for (ShopFile shopFile : shopFileList) {
                if (shopFile.getFileType() == 1) {
                    shopPicture = shopFile.getFileUrl();
                    break;
                }
            }
        }
        // 创建商店总览对象,并设置商店ID
        MerHomeShopTotalVo merHomeShopTotalVo = new MerHomeShopTotalVo();
        merHomeShopTotalVo.setShopId(shopId);
        // 通过远程订单服务获取商店总览信息
        MerHomeShopTotalVo orderVo = remoteOrderService.getMerHomeTotal(merHomeShopTotalVo).getData();
        // 获取商店任务计数
        Integer taskCount = memberTaskService.getMemberIngTotal(shopId);
        // 设置员工商店信息对象的属性
        staffShopInfoGetVo.setTodayReservation(0);
        staffShopInfoGetVo.setUnHandleOrder(orderVo.getUnHandleOrder());
        staffShopInfoGetVo.setShopTask(taskCount);
        staffShopInfoGetVo.setShopTurnover(orderVo.getShopTurnover());
        staffShopInfoGetVo.setCycleSurp(orderVo.getCycleSurp());
        staffShopInfoGetVo.setExplorationSurp(orderVo.getExplorationSurp());
        staffShopInfoGetVo.setShopId(shopId);
        staffShopInfoGetVo.setShopName(shop.getShopName());
        staffShopInfoGetVo.setShopType(shop.getShopType());
        staffShopInfoGetVo.setShopPicture(shopPicture);
        staffShopInfoGetVo.setBusinessStartTime(shop.getBusinessStartTime());
        staffShopInfoGetVo.setBusinessEndTime(shop.getBusinessEndTime());
        staffShopInfoGetVo.setShopownerName(shop.getShopownerName());
        staffShopInfoGetVo.setShopownerPhone(shop.getShopownerPhone());
        staffShopInfoGetVo.setShopAddress(shop.getShopAreaName() + shop.getShopAddress());
        staffShopInfoGetVo.setShopCustomStatus(shop.getShopCustomStatus());
        staffShopInfoGetVo.setShopTags(shop.getShopTags());
        staffShopInfoGetVo.setSupportingCapacityFlag(shop.getSupportingCapacityFlag());
        staffShopInfoGetVo.setOperationPersonFlag(shop.getOperationPersonFlag());
        staffShopInfoGetVo.setExecutiveForceFlag(shop.getExecutiveForceFlag());
        staffShopInfoGetVo.setPatternFlag(shop.getPatternFlag());
        staffShopInfoGetVo.setConnectionFlag(shop.getConnectionFlag());
        staffShopInfoGetVo.setEconomicAbilityFlag(shop.getEconomicAbilityFlag());
        staffShopInfoGetVo.setRelationPartner(shop.getRelationPartner());
        staffShopInfoGetVo.setBusinessHistory(shop.getBusinessHistory());
        staffShopInfoGetVo.setNewAreaMember(0);
        staffShopInfoGetVo.setAreaTurnover(BigDecimal.ZERO);
        staffShopInfoGetVo.setFrozenFlag(shop.getFrozenFlag());
        // 如果商店类型为1,则获取该商店ID列表的新区域成员和总订单金额
        if (shop.getShopType() == 1) {
            List<Long> shopIdList = this.listShopIdByShopId(shop.getShopId());
            if (shopIdList != null && !shopIdList.isEmpty()) {
                Integer count = remoteMemberService.getAreaNewMember(shopIdList).getData();
                staffShopInfoGetVo.setNewAreaMember(count);
                AgencyTotalVo agencyTotalVo = remoteOrderService.getAgencyTotalVo(shopIdList).getData();
                staffShopInfoGetVo.setAreaTurnover(agencyTotalVo.getAreaTurnover());
            }
        }
        // 如果商店的扩展联系方式不为空,则设置员工商店信息对象的扩展联系方式列表
        String extendContacts = shop.getExtendContacts();
        if (StringUtils.isNotBlank(extendContacts)) {
            List<ExtendContactsVo> extendContactsVoList = JSON.parseArray(extendContacts, ExtendContactsVo.class);
            staffShopInfoGetVo.setExtendContactsVoList(extendContactsVoList);
        }
        // 返回员工商店信息对象
        return staffShopInfoGetVo;
    }
    /**
     * @description  修改商户评估
     * @author  jqs
     * @date    2023/7/15 10:18
     * @param staffShopEstimateEditDto
     * @return  void
     */
    @Override
    public void editShopEstimate(StaffShopEstimateEditDto staffShopEstimateEditDto){
        Shop shop = new Shop();
        shop.setShopId(staffShopEstimateEditDto.getShopId());
        shop.setSupportingCapacityFlag(staffShopEstimateEditDto.getSupportingCapacityFlag());
        shop.setOperationPersonFlag(staffShopEstimateEditDto.getOperationPersonFlag());
        shop.setExecutiveForceFlag(staffShopEstimateEditDto.getExecutiveForceFlag());
        shop.setPatternFlag(staffShopEstimateEditDto.getPatternFlag());
        shop.setConnectionFlag(staffShopEstimateEditDto.getConnectionFlag());
        shop.setEconomicAbilityFlag(staffShopEstimateEditDto.getEconomicAbilityFlag());
        shop.setRelationPartner(staffShopEstimateEditDto.getRelationPartner());
        shop.setBusinessHistory(staffShopEstimateEditDto.getBusinessHistory());
        shop.setUpdateUserId(staffShopEstimateEditDto.getUserId());
        shop.setUpdateTime(new Date());
        shopMapper.updateShop(shop);
    }
    /**
     * @description  修改店铺扩展联系人
     * @author  jqs
     * @date    2023/7/15 11:06
     * @param staffShopECEditDto
     * @return  void
     */
    @Override
    public void editExtendContacts(StaffShopECEditDto staffShopECEditDto){
        Shop shop = new Shop();
        String extendContacts = null;
        List<ExtendContactsVo> extendContactsVoList = staffShopECEditDto.getExtendContactsVoList();
        if(extendContactsVoList!=null&&!extendContactsVoList.isEmpty()){
            extendContacts = JSON.toJSONString(extendContactsVoList);
        }else{
            extendContacts = "";
        }
        shop.setExtendContacts(extendContacts);
        shop.setShopId(staffShopECEditDto.getShopId());
        shop.setUpdateUserId(staffShopECEditDto.getUserId());
        shop.setUpdateTime(new Date());
        shopMapper.updateExtendContacts(shop);
    }
    /**
     * @description  修改店铺状态
     * @author  jqs
     * @date    2023/7/15 11:51
     * @param staffShopCCEditDto
     * @return  void
     */
    @Override
    public void editShopCustomStatus(StaffShopCCEditDto staffShopCCEditDto){
        Shop shop = new Shop();
        shop.setShopCustomStatus(staffShopCCEditDto.getShopCustomStatus());
        shop.setShopId(staffShopCCEditDto.getShopId());
        shop.setUpdateUserId(staffShopCCEditDto.getUserId());
        shop.setUpdateTime(new Date());
        shopMapper.updateShop(shop);
    }
    @Override
    public void queryEcommerceApplyMentsStatus() {
        log.info("开始获取微信二级商户待检查列表");
        List<ShopAuthentication> list = shopAuthenticationService.getShopAuthNeedUpdateStatus();
        log.info("定时检查微信二级商户"+list.toString());
        list.forEach(item -> queryApplyStatusByApplymentId(item.getApplymentId(), item.getShopId()));
        List<ShopAuthenticationHftx> list1 = shopAuthenticationHftxService.list(new QueryWrapper<ShopAuthenticationHftx>().eq("audit_status", "U").eq("is_delete", 0));
        for (ShopAuthenticationHftx shopAuthenticationHftx : list1) {
            R<MerchantBasicdataVo> r = HuiFuTianXiaUtil.queryMerchantBasicdata(IdUtils.simpleUUID(), shopAuthenticationHftx.getHuifuId());
            if(r.getCode() == 200){
                MerchantBasicdataVo data = r.getData();
                if(org.springframework.util.StringUtils.hasLength(data.getTokenNo())){
                    shopAuthenticationHftx.setTokenNo(data.getTokenNo());
                    shopAuthenticationHftx.setAuditStatus("Y");
                    shopAuthenticationHftx.setAuditDesc("成功");
                    Shop shop = this.getByShopId(shopAuthenticationHftx.getShopId());
                    shop.setShopStatus(1);
                    this.updateById(shop);
                    shopAuthenticationHftxService.updateById(shopAuthenticationHftx);
                }
            }
        }
    }
    /**
     * 调用微信接口查询申请审核状态
     * @param applymentId
     */
    private void queryApplyStatusByApplymentId(String applymentId, Long shopId) {
        try {
            log.debug("定时检查微信二级商户applymentId"+applymentId);
            if (StringUtils.isNotBlank(applymentId)) {
                ApplymentsStatusResult result = wechatPayUtils.queryApplyStatusByApplymentId(applymentId);
                shopAuthenticationService.updateAuditStatusByApplymentId(applymentId, result);
                String applymentState = result.getApplymentState();
                if(WxApplyMentStateEnum.FINISH.getText().equals(applymentState)){
                    applySuccessUpdateShopStatus(shopId);
                }
            }
        } catch (WxPayException e) {
            e.printStackTrace();
        }
    }
    /**
     * 商户进件审核完成,更新商户状态
     * @param shopId
     */
    private void applySuccessUpdateShopStatus(Long shopId){
        // 更新商户状态为正常
        Shop shop = this.getById(shopId);
        Integer shopStatus = handelShopStatus(null, null, 1);
        LambdaUpdateWrapper<Shop> updateWrapper = Wrappers.lambdaUpdate();
        updateWrapper.eq(Shop::getShopId, shopId)
                .set(Shop::getShopStatus, shopStatus)
                .set(Shop::getAuthFlag, 1);
        this.update(updateWrapper);
    }
    /**
     * @description
     * @author  jqs
     * @date    2023/8/10 22:53
     * @param cityCodes
     * @return  List<Long>
     */
    @Override
    public List<Long> listShopIdByCityCode(List<String> cityCodes){
        return shopMapper.listShopIdByCityCode(cityCodes);
    }
    @Override
    public void authShop(){
        ShopAuthentication shopAuthentication = shopAuthenticationService.getById("8c23fa423beb4673a0edc641a1ca0c23");
        Shop shop = this.getByShopId(shopAuthentication.getShopId());
        try {
            wechatPayUtils.ecommerceApply(shopAuthentication,shopAuthentication.getApplyNumber(),shop);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * @description  修改店铺详细资料
     * @author  jqs
     * @date    2023/8/22 14:51
     * @param staffShopDetailDto
     * @return  void
     */
    @Override
    public void editShopDetail(StaffShopDetailDto staffShopDetailDto){
        ShopDetail shopDetail = shopDetailService.getById(staffShopDetailDto.getShopId());
        if(shopDetail == null){
            shopDetail = new ShopDetail();
            shopDetail.setDelFlag(0);
        }
        BeanUtils.copyProperties(staffShopDetailDto, shopDetail);
        List<StaffCustomerDto> staffCustomerDtoList = staffShopDetailDto.getStaffCustomerDtoList();
        if(staffCustomerDtoList!=null&&!staffCustomerDtoList.isEmpty()){
            StringJoiner customerNameSJ = new StringJoiner(",");
            StringJoiner customerMobileSJ = new StringJoiner(",");
            for(StaffCustomerDto staffCustomerDto : staffCustomerDtoList){
                customerNameSJ.add(staffCustomerDto.getCustomerName());
                customerMobileSJ.add(staffCustomerDto.getCustomerMobile());
            }
            shopDetail.setCustomerName(customerNameSJ.toString());
            shopDetail.setCustomerMobile(customerMobileSJ.toString());
        }
        shopDetailService.saveOrUpdate(shopDetail);
    }
    /**
     * @description  获取店铺详细资料
     * @author  jqs
     * @date    2023/8/22 16:15
     * @param shopId
     * @return  StaffShopDetailVo
     */
    @Override
    public StaffShopDetailVo getShopDetail(Long shopId){
        ShopDetail shopDetail = shopDetailService.getById(shopId);
        StaffShopDetailVo staffShopDetailVo = new StaffShopDetailVo();
        if(shopDetail!=null){
            BeanUtils.copyProperties(shopDetail, staffShopDetailVo);
            //处理联系人
            String customerName = shopDetail.getCustomerName();
            String customerMobile = shopDetail.getCustomerMobile();
            List<StaffCustomerDto> staffCustomerDtoList = new ArrayList<>();
            String[] customerNameArr = customerName.split(",");
            String[] customerMobileArr = customerMobile.split(",");
            staffShopDetailVo.setContactName(customerNameArr[0]);
            StaffCustomerDto staffCustomerDto;
            for(int i=0;i<customerNameArr.length;i++){
                staffCustomerDto = new StaffCustomerDto();
                staffCustomerDto.setCustomerName(customerNameArr[i]);
                staffCustomerDto.setCustomerMobile(customerMobileArr[i]);
                staffCustomerDtoList.add(staffCustomerDto);
            }
            staffShopDetailVo.setStaffCustomerDtoList(staffCustomerDtoList);
        }
        //归属客户
        Shop shop = this.getByShopId(shopId);
        Long belongUserId = shop.getBelongUserId();
        if(belongUserId!=null){
            SysUser sysUser = remoteUserService.getSysUser(belongUserId).getData();
            if(sysUser!=null){
                staffShopDetailVo.setBelongUser(sysUser.getNickName());
            }
        }
        //最近任务时间
        ShopTask shopTask = shopTaskService.getLastTask(shopId);
        if(shopTask!=null){
            staffShopDetailVo.setNextTaskDate(shopTask.getTaskDate());
        }
        staffShopDetailVo.setShopId(shopId);
        return staffShopDetailVo;
    }
    /**
     * @description  添加分账方
     * @author  jqs
     * @date    2023/8/23 9:44
     * @param
     * @return  void
     */
    @Override
    public void addProfitSharingReceiver(MgtShopAuthGetDto mgtShopAuthGetDto){
        try {
            ShopAuthentication shopAuthentication = shopAuthenticationService.getById(mgtShopAuthGetDto.getAuthId());
            Shop shop = this.getByShopId(shopAuthentication.getShopId());
            if(shopAuthentication!=null&&shopAuthentication.getAuditStatus()==6){
                ProfitSharingReceiverRequest request = new ProfitSharingReceiverRequest();
                request.setAccount(shopAuthentication.getSubMchid());
                request.setName(shopAuthentication.getBlShopName());
                ProfitSharingReceiverResult result = wechatPayUtils.addProfitSharingReceiver(request);
                if(StringUtils.isNotBlank(result.getAccount())){
                    shop.setAccountFlag(1);
                    shop.setShopStatus(handelShopStatus(null , null,shop.getAuthFlag()));
                    this.saveOrUpdate(shop);
                }
            }
        } catch (WxPayException e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * @description
     * @author  jqs
     * @date    2023/8/29 14:33
     * @param
     * @return  List<MgtUserTaskMsgVo>
     */
    @Override
    public List<MgtUserTaskMsgVo> getTaskMsgList(){
        return shopMapper.getTaskMsgList();
    }
    /**
     * 设置商户分账比例
     * @param mgtShopShareRatioSetDto
     * @return
     */
    @Override
    public R setMgtShopShareRatio(MgtShopShareRatioSetDto mgtShopShareRatioSetDto) {
        ShopAuthenticationHftx shopAuthenticationHftx = shopAuthenticationHftxService.getOne(new QueryWrapper<ShopAuthenticationHftx>()
                .eq("shop_id", mgtShopShareRatioSetDto.getShopId()).eq("is_delete", 0));
        shopAuthenticationHftx.setShareRatio(mgtShopShareRatioSetDto.getShareRatio());
        shopAuthenticationHftxService.updateById(shopAuthenticationHftx);
        return R.ok();
    }
    /**
     * 查询结算记录
     * @param merchantBasicdataSettlementDto
     * @return
     */
    @Override
    public R<List<MerchantBasicdataSettlementVo>> getMerchantBasicDataSettlement(MerchantBasicdataSettlementDto merchantBasicdataSettlementDto) {
        ShopAuthenticationHftx shopAuthenticationHftx = shopAuthenticationHftxService.getOne(new QueryWrapper<ShopAuthenticationHftx>()
                .eq("shop_id", merchantBasicdataSettlementDto.getShopId()).eq("is_delete", 0));
        if(null == shopAuthenticationHftx){
            return R.ok(new ArrayList<>());
        }
        String huifuId = shopAuthenticationHftx.getHuifuId();
        String startTime = merchantBasicdataSettlementDto.getStartTime();
        String endTime = merchantBasicdataSettlementDto.getEndTime();
        Integer pageNum = merchantBasicdataSettlementDto.getPageNum();
        Integer pageSize = merchantBasicdataSettlementDto.getPageSize();
        return HuiFuTianXiaUtil.getMerchantBasicdataSettlement(IdUtils.simpleUUID(), huifuId, startTime, endTime, pageNum.toString(), pageSize.toString());
    }
    /**
     * @description
     * @author  jqs
     * @date    2023/8/10 22:53
     * @param cityCodes
     * @return  List<Long>
     */
    @Override
    public List<Shop> listShopByCityCode(List<String> cityCodes){
        return shopMapper.listShopByCityCode(cityCodes);
    }
    /**
     * 根据员工id获取对应的门店
     * @param userIds
     * @return
     */
    @Override
    public List<Shop> getShopBySysUserIds(List<Long> userIds) {
        if(null == userIds || userIds.size() == 0){
            return new ArrayList<>();
        }
        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();
    }
}