package com.doumee.service.business.impl; 
 | 
  
 | 
  
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 
 | 
import com.baomidou.mybatisplus.core.metadata.IPage; 
 | 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 
 | 
import com.doumee.biz.system.SystemDictDataBiz; 
 | 
import com.doumee.core.constants.ResponseStatus; 
 | 
import com.doumee.core.exception.BusinessException; 
 | 
import com.doumee.core.model.LoginUserInfo; 
 | 
import com.doumee.core.model.PageData; 
 | 
import com.doumee.core.model.PageWrap; 
 | 
import com.doumee.core.utils.Constants; 
 | 
import com.doumee.core.utils.Utils; 
 | 
import com.doumee.dao.business.CompanyMapper; 
 | 
import com.doumee.dao.business.join.CompanyJoinMapper; 
 | 
import com.doumee.dao.business.model.Company; 
 | 
import com.doumee.dao.business.model.dto.CompanyCreatOrUpdateRequest; 
 | 
import com.doumee.dao.system.SystemUserMapper; 
 | 
import com.doumee.dao.system.SystemUserRoleMapper; 
 | 
import com.doumee.dao.system.model.SystemDictData; 
 | 
import com.doumee.dao.system.model.SystemUser; 
 | 
import com.doumee.dao.system.model.SystemUserRole; 
 | 
import com.doumee.service.business.CompanyService; 
 | 
import com.github.yulichang.wrapper.MPJLambdaWrapper; 
 | 
import org.apache.commons.lang3.RandomStringUtils; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.apache.shiro.SecurityUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
import org.springframework.util.CollectionUtils; 
 | 
  
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
import java.util.Objects; 
 | 
  
 | 
/** 
 | 
 * 系统-企业信息表Service实现 
 | 
 * @author AA 
 | 
 * @since 2023/09/08 10:27 
 | 
 */ 
 | 
@Service 
 | 
public class CompanyServiceImpl implements CompanyService { 
 | 
  
 | 
    @Autowired 
 | 
    private CompanyMapper companyMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private CompanyJoinMapper companyJoinMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private SystemUserMapper systemUserMapper; 
 | 
  
 | 
  
 | 
    @Autowired 
 | 
    private SystemUserRoleMapper systemUserRoleMapper; 
 | 
  
 | 
  
 | 
    @Autowired 
 | 
    private SystemDictDataBiz systemDictDataBiz; 
 | 
  
 | 
    @Transactional(rollbackFor = {Exception.class,BusinessException.class}) 
 | 
    @Override 
 | 
    public Integer create(CompanyCreatOrUpdateRequest company) { 
 | 
        LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
  
 | 
        if (StringUtils.isBlank(company.getManagerUserName())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"登录账号不允许为空"); 
 | 
        } 
 | 
        if (Objects.isNull(company.getOepnValidDate())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"有效期不允许为空"); 
 | 
        } 
 | 
        if (Objects.isNull(company.getUserNum())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"主播账号数量不允许为空"); 
 | 
        } 
 | 
        QueryWrapper<Company> wrapper = new QueryWrapper<>(); 
 | 
        wrapper.lambda() 
 | 
                .eq(Company::getDeleted,Boolean.FALSE) 
 | 
                .eq(Company::getName,company.getName()); 
 | 
  
 | 
        Company company1 = companyMapper.selectOne(wrapper); 
 | 
        if (Objects.nonNull(company1)){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"企业已存在请重新输入"); 
 | 
        } 
 | 
        if(StringUtils.isNotBlank(company.getCreditCode())){ 
 | 
            wrapper.clear(); 
 | 
            wrapper.lambda() 
 | 
                    .eq(Company::getDeleted,Boolean.FALSE) 
 | 
                    .eq(Company::getCreditCode,company.getCreditCode()); 
 | 
            Company company2 = companyMapper.selectOne(wrapper); 
 | 
            if (Objects.nonNull(company2)){ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"企业统一社会信用代码已存在请重新输入"); 
 | 
            } 
 | 
        } 
 | 
        Company insert = new Company(); 
 | 
        insert.setDeleted((byte)Constants.ZERO); 
 | 
        insert.setCreateUser(userInfo.getId()); 
 | 
        insert.setCreateTime(new Date()); 
 | 
        insert.setUpdateUser(userInfo.getId()); 
 | 
        insert.setUpdateTime(new Date()); 
 | 
        insert.setName(company.getName()); 
 | 
        insert.setShortName(company.getShortName()); 
 | 
        insert.setRemark(company.getRemark()); 
 | 
//        insert.setManagerId(company.getManagerId()); 
 | 
        insert.setLinkname(company.getLinkname()); 
 | 
        insert.setLinkephone(company.getLinkephone()); 
 | 
        insert.setCreditCode(company.getCreditCode()); 
 | 
        insert.setUserNum(company.getUserNum()); 
 | 
        insert.setOepnValidDate(company.getOepnValidDate()); 
 | 
        insert.setOepnType(company.getOepnType()); 
 | 
        insert.setSalesmanId(company.getSalesmanId()); 
 | 
        insert.setStatus(Constants.ZERO); 
 | 
        companyMapper.insert(insert); 
 | 
        //创建企业用户 
 | 
        SystemUser companyUser = createCompanyUser(company, insert.getId()); 
 | 
        Company update = new Company(); 
 | 
        update.setId(insert.getId()); 
 | 
        update.setManagerId(companyUser.getId()); 
 | 
        companyMapper.updateById(update); 
 | 
  
 | 
        SystemDictData dictData = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.COMPANY_MANAGE_ROLE); 
 | 
        SystemUserRole systemUserRole = new SystemUserRole(); 
 | 
        systemUserRole.setUserId(companyUser.getId()); 
 | 
        systemUserRole.setRoleId(Integer.valueOf(dictData.getCode())); 
 | 
        systemUserRole.setCreateTime(new Date()); 
 | 
        systemUserRole.setUpdateTime(new Date()); 
 | 
        systemUserRole.setCreateUser(userInfo.getId()); 
 | 
        systemUserRole.setUpdateUser(userInfo.getId()); 
 | 
        systemUserRole.setDeleted(Boolean.FALSE); 
 | 
        systemUserRoleMapper.insert(systemUserRole); 
 | 
        return company.getId(); 
 | 
    } 
 | 
  
 | 
    private SystemUser createCompanyUser(CompanyCreatOrUpdateRequest company, Integer companyId){ 
 | 
  
 | 
        QueryWrapper<SystemUser> query = new QueryWrapper<>(); 
 | 
        query.lambda() 
 | 
                .eq(SystemUser::getType,Constants.ONE) 
 | 
                .eq(SystemUser::getDeleted,Boolean.FALSE) 
 | 
                .eq(SystemUser::getUsername,company.getManagerUserName()); 
 | 
        Integer integer = systemUserMapper.selectCount(query); 
 | 
        if (integer > Constants.ZERO){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"账号已存在请重新输入账号"); 
 | 
        } 
 | 
  
 | 
        LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        SystemDictData dictDataPassword = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.DEFAULT_PASSWORD); 
 | 
        String salt = RandomStringUtils.randomAlphabetic(6); 
 | 
        SystemUser user = new SystemUser(); 
 | 
        user.setUsername(company.getManagerUserName()); 
 | 
        user.setPassword(Utils.Secure.encryptPassword(dictDataPassword.getCode(), salt)); 
 | 
        user.setSalt(salt); 
 | 
        user.setCompanyId(companyId); 
 | 
        user.setMobile(company.getLinkephone()); 
 | 
        user.setRealname(company.getLinkname()); 
 | 
        user.setType(Constants.ONE); 
 | 
        user.setCreateTime(new Date()); 
 | 
        user.setUpdateTime(new Date()); 
 | 
        user.setCreateUser(userInfo.getId()); 
 | 
        user.setUpdateUser(userInfo.getId()); 
 | 
        user.setDeleted(Boolean.FALSE); 
 | 
        user.setStatus(Constants.ZERO); 
 | 
        systemUserMapper.insert(user); 
 | 
        return user; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteById(Integer id) { 
 | 
        companyMapper.deleteById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void delete(Company company) { 
 | 
        UpdateWrapper<Company> deleteWrapper = new UpdateWrapper<>(company); 
 | 
        companyMapper.delete(deleteWrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteByIdInBatch(List<Integer> ids) { 
 | 
        if (CollectionUtils.isEmpty(ids)) { 
 | 
            return; 
 | 
        } 
 | 
        companyMapper.deleteBatchIds(ids); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateById(CompanyCreatOrUpdateRequest company) { 
 | 
        UpdateWrapper<Company> wrapper = new UpdateWrapper<>(); 
 | 
        wrapper.lambda().eq(Company::getId,company.getId()) 
 | 
                        .set(Company::getName,company.getName()) 
 | 
                        .set(Company::getShortName,company.getShortName()) 
 | 
                        .set(Company::getCreditCode,company.getCreditCode()) 
 | 
                        .set(Company::getSalesmanId,company.getSalesmanId()) 
 | 
                        .set(company.getOepnValidDate()!=null,Company::getOepnValidDate,company.getOepnValidDate()) 
 | 
                        .set(company.getUserNum()!=null,Company::getUserNum,company.getUserNum()) 
 | 
                        .set(Company::getLinkname,company.getLinkname()) 
 | 
                        .set(Company::getLinkephone,company.getLinkephone()); 
 | 
        companyMapper.update(null,wrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateById(Company company) { 
 | 
        companyMapper.updateById(company); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateByIdInBatch(List<Company> companys) { 
 | 
        if (CollectionUtils.isEmpty(companys)) { 
 | 
            return; 
 | 
        } 
 | 
        for (Company company: companys) { 
 | 
            this.updateById(company); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Company findById(Integer id) { 
 | 
        return companyMapper.selectById(id); 
 | 
    } 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public Company findPlatformById(Integer id) { 
 | 
  
 | 
        QueryWrapper<Company> wrapper = new QueryWrapper<>(); 
 | 
        wrapper.select("company.*," + 
 | 
                "(select su1.USERNAME from system_user su1 where  su1.id = company.MANAGER_ID) as managerUserName," + 
 | 
                "(select su2.REALNAME from system_user su2 where  su2.id = company.SALESMAN_ID) as salesmanRealName") 
 | 
                .lambda().eq(Company::getId,id); 
 | 
        return companyMapper.selectOne(wrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Company findOne(Company company) { 
 | 
        QueryWrapper<Company> wrapper = new QueryWrapper<>(company); 
 | 
        return companyMapper.selectOne(wrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<Company> findList(Company company) { 
 | 
        QueryWrapper<Company> wrapper = new QueryWrapper<>(company); 
 | 
        return companyMapper.selectList(wrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public PageData<Company> findPage(PageWrap<Company> pageWrap) { 
 | 
        IPage<Company> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        QueryWrapper<Company> queryWrapper = new QueryWrapper<>(); 
 | 
        Utils.MP.blankToNull(pageWrap.getModel()); 
 | 
        queryWrapper.lambda() 
 | 
                .eq(pageWrap.getModel().getId() != null, Company::getId, pageWrap.getModel().getId()) 
 | 
                .eq(pageWrap.getModel().getDeleted() != null, Company::getDeleted, pageWrap.getModel().getDeleted()) 
 | 
                .eq(pageWrap.getModel().getCreateUser() != null, Company::getCreateUser, pageWrap.getModel().getCreateUser()) 
 | 
                .ge(pageWrap.getModel().getCreateTime() != null, Company::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime())) 
 | 
                .le(pageWrap.getModel().getCreateTime() != null, Company::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime())) 
 | 
                .eq(pageWrap.getModel().getUpdateUser() != null, Company::getUpdateUser, pageWrap.getModel().getUpdateUser()) 
 | 
                .ge(pageWrap.getModel().getUpdateTime() != null, Company::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime())) 
 | 
                .le(pageWrap.getModel().getUpdateTime() != null, Company::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime())) 
 | 
                .eq(pageWrap.getModel().getName() != null, Company::getName, pageWrap.getModel().getName()) 
 | 
                .eq(pageWrap.getModel().getShortName() != null, Company::getShortName, pageWrap.getModel().getShortName()) 
 | 
                .eq(pageWrap.getModel().getRemark() != null, Company::getRemark, pageWrap.getModel().getRemark()) 
 | 
                .eq(pageWrap.getModel().getManagerId() != null, Company::getManagerId, pageWrap.getModel().getManagerId()) 
 | 
                .eq(pageWrap.getModel().getLinkname() != null, Company::getLinkname, pageWrap.getModel().getLinkname()) 
 | 
                .eq(pageWrap.getModel().getLinkephone() != null, Company::getLinkephone, pageWrap.getModel().getLinkephone()) 
 | 
                .eq(pageWrap.getModel().getCreditCode() != null, Company::getCreditCode, pageWrap.getModel().getCreditCode()) 
 | 
                .eq(pageWrap.getModel().getUserNum() != null, Company::getUserNum, pageWrap.getModel().getUserNum()) 
 | 
                .ge(pageWrap.getModel().getOepnValidDate() != null, Company::getOepnValidDate, Utils.Date.getStart(pageWrap.getModel().getOepnValidDate())) 
 | 
                .le(pageWrap.getModel().getOepnValidDate() != null, Company::getOepnValidDate, Utils.Date.getEnd(pageWrap.getModel().getOepnValidDate())) 
 | 
                .eq(pageWrap.getModel().getOepnType() != null, Company::getOepnType, pageWrap.getModel().getOepnType()) 
 | 
                .eq(pageWrap.getModel().getSalesmanId() != null, Company::getSalesmanId, pageWrap.getModel().getSalesmanId()) 
 | 
        ; 
 | 
        for(PageWrap.SortData sortData: pageWrap.getSorts()) { 
 | 
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { 
 | 
                queryWrapper.orderByDesc(sortData.getProperty()); 
 | 
            } else { 
 | 
                queryWrapper.orderByAsc(sortData.getProperty()); 
 | 
            } 
 | 
        } 
 | 
        return PageData.from(companyMapper.selectPage(page, queryWrapper)); 
 | 
    } 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public PageData<Company> findPlatformPage(PageWrap<Company> pageWrap) { 
 | 
        IPage<Company> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        MPJLambdaWrapper<Company> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        Utils.MP.blankToNull(pageWrap.getModel()); 
 | 
        queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,Company::getManagerId); 
 | 
        queryWrapper.selectAll(Company.class) 
 | 
                    .selectAs(SystemUser::getUsername,Company::getManagerUserName); 
 | 
        queryWrapper.select( 
 | 
                "(select su1.USERNAME from system_user su1 where   su1.id = t.MANAGER_ID) as managerUserName," + 
 | 
                "(select su2.REALNAME from system_user su2 where  su2.id = t.SALESMAN_ID) as salesmanRealName," + 
 | 
                "(select count(su3.id) from system_user su3 where su3.deleted=0 and su3.COMPANY_ID = t.ID and su3.TYPE = 2) as anchorUserNum," + 
 | 
                "(select count(su4.id) from system_user su4 where su4.deleted=0 and su4.COMPANY_ID = t.ID and su4.TYPE = 1) as empUserNum," + 
 | 
                "(select count(g.id) from goods g   where g.isdeleted=0 and  g.COMPANY_ID = t.ID )goodsNum"); 
 | 
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()),Company::getName,pageWrap.getModel().getName()) 
 | 
                    .like(StringUtils.isNotBlank(pageWrap.getModel().getManagerUserName()),SystemUser::getUsername,pageWrap.getModel().getManagerUserName()) 
 | 
                    .eq(Objects.nonNull(pageWrap.getModel().getStatus()),Company::getStatus,pageWrap.getModel().getStatus()) 
 | 
                    .between((Objects.nonNull(pageWrap.getModel().getOepnValidDateStart()) && Objects.nonNull(pageWrap.getModel().getOepnValidDateEnd())), 
 | 
                            Company::getOepnValidDate,pageWrap.getModel().getOepnValidDateStart(),pageWrap.getModel().getOepnValidDateEnd()) 
 | 
                .orderByDesc(Company::getCreateTime); 
 | 
        return PageData.from(companyJoinMapper.selectJoinPage(page,Company.class,queryWrapper)); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public long count(Company company) { 
 | 
        QueryWrapper<Company> wrapper = new QueryWrapper<>(company); 
 | 
        return companyMapper.selectCount(wrapper); 
 | 
    } 
 | 
} 
 |