cloudroam
2024-12-10 6ee2a947a786edad9eb19a5401de7fcc456b90a6
src/main/java/com/mzl/flower/service/supplier/SupplierSubService.java
@@ -3,26 +3,41 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.base.cache.StringCacheClient;
import com.mzl.flower.config.GlobalSupplierVariables;
import com.mzl.flower.config.exception.ValidationException;
import com.mzl.flower.config.security.SecurityUtils;
import com.mzl.flower.constant.Constants;
import com.mzl.flower.dto.request.register.RegisterDTO;
import com.mzl.flower.dto.request.supplier.QuerySupplierSubDTO;
import com.mzl.flower.dto.request.supplier.SupplierSubDTO;
import com.mzl.flower.dto.response.current.CurrentUserDTO;
import com.mzl.flower.dto.response.supplier.SupplierDTO;
import com.mzl.flower.dto.response.supplier.SupplierSubVO;
import com.mzl.flower.dto.response.system.MenuTreeDTO;
import com.mzl.flower.entity.point.CustomerPoint;
import com.mzl.flower.entity.supplier.SupplierSub;
import com.mzl.flower.entity.system.Role;
import com.mzl.flower.entity.system.User;
import com.mzl.flower.entity.system.UserWechat;
import com.mzl.flower.mapper.point.CustomerPointMapper;
import com.mzl.flower.mapper.supplier.SupplierMapper;
import com.mzl.flower.mapper.supplier.SupplierSubMapper;
import com.mzl.flower.mapper.system.MenuMapper;
import com.mzl.flower.mapper.system.PartnerMenuMapper;
import com.mzl.flower.mapper.system.UserMapper;
import com.mzl.flower.mapper.system.UserWechatMapper;
import com.mzl.flower.service.BaseService;
import com.mzl.flower.service.customer.CustomerService;
import com.mzl.flower.service.partner.PartnerService;
import com.mzl.flower.service.system.RoleService;
import com.mzl.flower.utils.TreeBuilderUtil;
import com.mzl.flower.utils.UUIDGenerator;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
@@ -48,23 +63,38 @@
    public static final String SEPARATOR = ":";
    private final SupplierMapper supplierMapper;
    private final SupplierService supplierService;
    private final RoleService roleService;
    private final MenuMapper menuMapper;
    private final PartnerMenuMapper partnerMenuMapper;
    private final CustomerService customerService;
    private final CustomerPointMapper customerPointMapper;
    private final PartnerService partnerService;
    private final StationService stationService;
    private final UserWechatMapper wechatMapper;
    private final GlobalSupplierVariables globalSupplierVariables;
    public void addOrUpdateSupplier(SupplierSubDTO dto) {
        if(StringUtils.isEmpty(dto.getSmsCode())){
            throw new ValidationException("手机验证码为空");
        }
        String smsCode = dto.getSmsCode();
        //从缓存中获取验证码
        String smsCacheCode = stringCacheClient.get(SMS_CODE_KEY + SEPARATOR + Constants.USER_TYPE.supplier.name() + SEPARATOR + dto.getPhone());
        if (!org.apache.commons.lang3.StringUtils.equals(smsCode, smsCacheCode)) {
            throw new ValidationException("手机验证码不正确");
        if (StringUtils.isEmpty(dto.getType())) {
            if (StringUtils.isEmpty(dto.getSmsCode())) {
                throw new ValidationException("手机验证码为空");
            }
            String smsCode = dto.getSmsCode();
            //从缓存中获取验证码
            String smsCacheCode = stringCacheClient.get(SMS_CODE_KEY + SEPARATOR + Constants.USER_TYPE.supplier.name() + SEPARATOR + dto.getPhone());
            if (!org.apache.commons.lang3.StringUtils.equals(smsCode, smsCacheCode)) {
                throw new ValidationException("手机验证码不正确");
            }
        }
        SupplierSub supplierSub;
        if (dto.getId() == null) {
            SupplierDTO supplierDTO = supplierMapper.getCurrentSupplier(SecurityUtils.getUserId());
            SupplierDTO supplierDTO =  supplierService.getCurrentSupplier();
            if(ObjectUtils.isEmpty(supplierDTO)){
                throw new ValidationException("供应商信息不存在");
            }
@@ -81,6 +111,7 @@
            supplierSub = new SupplierSub();
            BeanUtils.copyProperties(dto, supplierSub, "id");
            supplierSub.setSupplierId(supplierDTO.getId());
            supplierSub.create(SecurityUtils.getUserId());
            supplierSub.setIsEnabled(true);
@@ -153,7 +184,7 @@
    private boolean checkExistName(String name, Long supplierId) {
        if (StringUtils.isEmpty(name)) {
        if (!StringUtils.isEmpty(name)) {
            LambdaQueryWrapper<SupplierSub> lambdaQueryWrapper = new LambdaQueryWrapper();
            lambdaQueryWrapper.eq(SupplierSub::getName, name).eq(SupplierSub::getSupplierId, supplierId);
            return supplierSubMapper.selectCount(lambdaQueryWrapper) > 0;
@@ -162,7 +193,7 @@
    }
    public Page<SupplierDTO> querySupplier(QuerySupplierSubDTO dto, Page page) {
    public Page<SupplierSubVO> querySupplier(QuerySupplierSubDTO dto, Page page) {
        List<SupplierSubVO> list = supplierSubMapper.querySupplierSub(dto, page);
        page.setRecords(list);
        return page;
@@ -219,4 +250,158 @@
            supplierSubMapper.deleteById(id);
        }
    }
    public List<SupplierSub> getSubSupplier() {
        List<SupplierSub> supplierSubs = new ArrayList<>();
        SupplierDTO supplierDTO = supplierMapper.getCurrentSupplier(SecurityUtils.getUserId());
        if (ObjectUtils.isEmpty(supplierDTO)) {
            throw new ValidationException("供应商信息不存在");
        }
        List<SupplierSub> subSupplier = supplierSubMapper.getSubSupplier(String.valueOf(supplierDTO.getId()));
        if (!CollectionUtils.isEmpty(subSupplier)) {
            subSupplier.forEach(s -> {
                s.setIsSub(true);
                s.setType(0);
            });
            supplierSubs.addAll(subSupplier);
        }
        return supplierSubs;
    }
    public SupplierSub getById(Long id) {
        return supplierSubMapper.selectById(id);
    }
    public CurrentUserDTO getSwitchById(Long id, int type) {
        String userId = "";
        if (type == 1) {
            userId = SecurityUtils.getUserId();
            SupplierDTO currentSupplier = supplierMapper.getCurrentSupplier(userId);
            //切换主账号
            String supplier = globalSupplierVariables.getSupplier(String.valueOf(currentSupplier.getId()));
            if (StringUtils.isEmpty(supplier)) {
                globalSupplierVariables.removeSupplier(String.valueOf(currentSupplier.getId()));
            }
        } else {
            SupplierSub supplierSub = supplierSubMapper.selectById(id);
            supplierSub.setType(0);
            userId = supplierSub.getUserId();
            //切换子账号
            String supplier = globalSupplierVariables.getSupplier(String.valueOf(supplierSub.getSupplierId()));
            if (StringUtils.isEmpty(supplier)) {
                globalSupplierVariables.removeSupplier(String.valueOf(supplierSub.getSupplierId()));
            }
            globalSupplierVariables.setSupplier(String.valueOf(supplierSub.getSupplierId()), userId);
        }
        CurrentUserDTO result = new CurrentUserDTO();
        //获取用户信息
        User user = getUserById(userId);
        if(user == null){
            throw new ValidationException("用户不存在");
        }
        result.setLoginName(user.getLoginName());
        result.setNickName(user.getNickName());
        result.setTel(user.getTel());
        result.setPicture(user.getPicture());
        result.setType(user.getType());
        //获取用户角色信息
        List<String> roleIds = new ArrayList<>();
        List<Role> roleList = roleService.getUserRoleList(userId);
        for (Role role : roleList) {
            roleIds.add(role.getId());
        }
        result.setRoles(roleIds);
        //根据用户角色获取用户菜单
        List<MenuTreeDTO> menus = null;
        if(Constants.USER_TYPE.admin.name().equals(user.getType())){
            if (roleIds.contains(Constants.ROLE_SYS_ADMIN)) {
                menus = menuMapper.selectListOrderBySeq();
            } else if (roleIds.size() > 0) {
                menus = menuMapper.selectOperationList(roleIds);
            }
        }else if(Constants.USER_TYPE.partner.name().equals(user.getType())){
            menus = partnerMenuMapper.selectListOrderBySeq();
        }
        if(menus != null) {
            for (MenuTreeDTO menu : menus) {
                menu.setPath(menu.getMenuHref());
                menu.setName(menu.getMenuName());
                menu.setLabel(menu.getMenuName());
            }
            menus = (List<MenuTreeDTO>) TreeBuilderUtil.buildListToTree(menus);
        }
        result.setMenus(menus);
        result.setId(userId);
        if(Constants.USER_TYPE.customer.name().equals(user.getType())){
            result.setCustomerDTO(customerService.getCurrentCustomer());
            //查询积分
            CustomerPoint customerPoint = customerPointMapper.selectOne(new LambdaQueryWrapper<CustomerPoint>()
                    .eq(CustomerPoint::getUserId, userId));
            if(customerPoint == null){
                result.setCurrentPoint(0);
            }else{
                Integer currentPoint =customerPoint.getTotalPoint()-customerPoint.getUsedPoint()-customerPoint.getExpiredPoint()-customerPoint.getDeductionPoint();
                result.setCurrentPoint(currentPoint>=0?currentPoint:0);
            }
        }else if(Constants.USER_TYPE.supplier.name().equals(user.getType())){
            result.setSupplierDTO(supplierService.getCurrentSupplier());
            SupplierSub sub = supplierSubMapper.getCurrentSupplier(userId);
            if (!ObjectUtils.isEmpty(sub)) {
                sub.setType(0);
                result.setIsSubSupplier(true);
                result.setSupplierSub(sub);
                result.setSwitchFlag(true);
            } else {
                result.setIsSubSupplier(false);
                result.setSupplierSub(null);
                result.setSwitchFlag(true);
            }
        }else if(Constants.USER_TYPE.partner.name().equals(user.getType())){
            result.setPartnerDTO(partnerService.getCurrentPartner());
        }else if (Constants.USER_TYPE.admin.name().equals(user.getType())){
            result.setMainWarehouse(stationService.getMainWarehouse(user.getId()));
        }
        result.setBindWechat(wechatMapper.selectCount(new LambdaQueryWrapper<UserWechat>()
                .eq(UserWechat::getUserId, userId)) > 0);
        return result;
    }
    public User getUserById(String id){
        return userMapper.selectById(id);
    }
    public List<SupplierSub> getAllSupplier() {
        List<SupplierSub> supplierSubs = new ArrayList<>();
        SupplierDTO supplierDTO = supplierMapper.getCurrentSupplier(SecurityUtils.getUserId());
        if (!ObjectUtils.isEmpty(supplierDTO)) {
            SupplierSub subParent = new SupplierSub();
            subParent.setId((long) -1);
            subParent.setUserId(supplierDTO.getUserId());
            subParent.setSupplierId(supplierDTO.getId());
            subParent.setName(supplierDTO.getName());
            subParent.setContact(supplierDTO.getContactName());
            subParent.setPhone(supplierDTO.getContactTel());
            subParent.setIsEnabled(supplierDTO.getIsEnabled());
            subParent.setIsSub(false);
            subParent.setType(1);
            supplierSubs.add(subParent);
        }
        List<SupplierSub> subSupplier = supplierSubMapper.getSubSupplier(String.valueOf(supplierDTO.getId()));
        if (!CollectionUtils.isEmpty(subSupplier)) {
            subSupplier.forEach(s->{
                s.setIsSub(true);
                s.setType(0);
            });
            supplierSubs.addAll(subSupplier);
        }
        return supplierSubs;
    }
}