package com.xcong.farmer.cms.modules.system.service.Impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xcong.farmer.cms.common.contants.AppContants; import com.xcong.farmer.cms.common.response.Result; import com.xcong.farmer.cms.conversion.ColumnConversion; import com.xcong.farmer.cms.modules.system.dto.AdminAddColumnDto; import com.xcong.farmer.cms.modules.system.dto.AdminColumnDto; import com.xcong.farmer.cms.modules.system.dto.AdminDeleteDto; import com.xcong.farmer.cms.modules.system.dto.AdminUpdateColumnDto; import com.xcong.farmer.cms.modules.system.entity.*; import com.xcong.farmer.cms.modules.system.mapper.ArticleMapper; import com.xcong.farmer.cms.modules.system.mapper.ColumnMapper; import com.xcong.farmer.cms.modules.system.mapper.CompanyMapper; import com.xcong.farmer.cms.modules.system.service.IColumnService; import com.xcong.farmer.cms.modules.system.util.LoginUserUtil; import com.xcong.farmer.cms.modules.system.vo.AdminColumnVo; import com.xcong.farmer.cms.modules.system.vo.AdminSeeColumnInfoVo; import com.xcong.farmer.cms.modules.system.vo.WebColumnVo; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.ObjectUtil; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; @Service @Slf4j public class ColumnServiceImpl extends ServiceImpl implements IColumnService { @Autowired private ArticleMapper articleMapper; @Autowired private CompanyMapper companyMapper; @Override public Result getColumnInPage(AdminColumnDto adminColumnDto) { UserEntity userlogin = LoginUserUtil.getLoginUser(); long companyId = userlogin.getCompanyId() == null ? UserEntity.USER_BELONG_TOP : userlogin.getCompanyId(); Page page = new Page<>(adminColumnDto.getPageNum(), adminColumnDto.getPageSize()); ColumnEntity columnEntity = new ColumnEntity(); columnEntity.setCompanyId(companyId); columnEntity.setParentId(ColumnEntity.PARENTID_DEFAULT); IPage list = this.baseMapper.selectAdminColumnVoInPage(page,columnEntity); List records = list.getRecords(); if(CollUtil.isNotEmpty(records)){ for(AdminColumnVo adminColumnVo : records){ Long id = adminColumnVo.getId(); QueryWrapper objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("parent_id",id); objectQueryWrapper.eq("company_id",companyId); List columnEntities = this.baseMapper.selectList(objectQueryWrapper); List adminColumnVoChilds = new ArrayList<>(); if(CollUtil.isNotEmpty(columnEntities)){ for(ColumnEntity columnEntityChild : columnEntities){ AdminColumnVo child = new AdminColumnVo(); child.setId(columnEntityChild.getId()); child.setColumnName(columnEntityChild.getColumnName()); child.setColumnCode(columnEntityChild.getColumnCode()); child.setRemark(columnEntityChild.getRemark()); child.setPic(columnEntityChild.getPic()); child.setOrderNum(columnEntityChild.getOrderNum()); adminColumnVoChilds.add(child); } } adminColumnVo.setChild(adminColumnVoChilds); } } return Result.ok(list); } @Override @Transactional public Result addColumn(AdminAddColumnDto adminAddColumnDto) { UserEntity userlogin = LoginUserUtil.getLoginUser(); long companyId = userlogin.getCompanyId() == null ? UserEntity.USER_BELONG_TOP : userlogin.getCompanyId(); ColumnEntity columnEntity = new ColumnEntity(); columnEntity.setCompanyId(companyId); String columnName = adminAddColumnDto.getColumnName(); columnEntity.setColumnName(columnName); String columnCode = adminAddColumnDto.getColumnCode(); QueryWrapper objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("column_code",columnCode); if(UserEntity.USER_BELONG_TOP != companyId){ objectQueryWrapper.eq("company_id",companyId); } List columnEntities = this.baseMapper.selectList(objectQueryWrapper); if(CollUtil.isNotEmpty(columnEntities)){ return Result.fail("栏目编码不能重复"); } columnEntity.setColumnCode(columnCode); String remark = adminAddColumnDto.getRemark(); columnEntity.setRemark(remark); String pic = adminAddColumnDto.getPic(); columnEntity.setPic(pic); Integer orderNum = adminAddColumnDto.getOrderNum(); if(ObjectUtil.isNotEmpty(orderNum)){ columnEntity.setOrderNum(orderNum); } Long parentId = adminAddColumnDto.getParentId(); if(ObjectUtil.isEmpty(parentId)){ columnEntity.setParentId(ColumnEntity.PARENTID_DEFAULT); columnEntity.setPath("/" + columnEntity.getColumnCode()); }else{ columnEntity.setParentId(parentId); ColumnEntity parent = this.baseMapper.selectById(parentId); columnEntity.setPath(parent.getPath() + "/" + columnEntity.getColumnCode()); } columnEntity.setListTemplate(adminAddColumnDto.getListTemplate()); columnEntity.setArticleTemplate(adminAddColumnDto.getArticleTemplate()); columnEntity.setType(adminAddColumnDto.getType()); columnEntity.setTargetType(adminAddColumnDto.getTargetType()); columnEntity.setTargetUrl(adminAddColumnDto.getTargetUrl()); columnEntity.setIsNav(adminAddColumnDto.getIsNav()); columnEntity.setContentType(adminAddColumnDto.getContentType()); this.baseMapper.insert(columnEntity); return Result.ok("添加成功", columnEntity.getId()); } @Override @Transactional public Result deleteColumn(Long id) { ColumnEntity columnEntity = this.baseMapper.selectById(id); if(ObjectUtil.isEmpty(columnEntity)){ return Result.fail("栏目不存在"); } QueryWrapper objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("parent_id",id); List columnEntities = this.baseMapper.selectList(objectQueryWrapper); if(CollUtil.isNotEmpty(columnEntities)){ return Result.fail("请先清空它的二级栏目"); } this.baseMapper.deleteById(id); return Result.ok("删除成功"); } @Override public Result seeColumnInfo(Long id) { ColumnEntity columnEntity = this.baseMapper.selectById(id); if(ObjectUtil.isEmpty(columnEntity)){ return Result.fail("栏目不存在"); } AdminSeeColumnInfoVo adminSeeColumnInfoVo = new AdminSeeColumnInfoVo(); adminSeeColumnInfoVo.setId(columnEntity.getId()); adminSeeColumnInfoVo.setColumnName(columnEntity.getColumnName()); adminSeeColumnInfoVo.setColumnCode(columnEntity.getColumnCode()); adminSeeColumnInfoVo.setRemark(columnEntity.getRemark()); adminSeeColumnInfoVo.setParentId(columnEntity.getParentId()); adminSeeColumnInfoVo.setOrderNum(columnEntity.getOrderNum()); adminSeeColumnInfoVo.setPic(columnEntity.getPic()); adminSeeColumnInfoVo.setListTemplate(columnEntity.getListTemplate()); adminSeeColumnInfoVo.setArticleTemplate(columnEntity.getArticleTemplate()); adminSeeColumnInfoVo.setIsNav(columnEntity.getIsNav()); adminSeeColumnInfoVo.setType(columnEntity.getType()); adminSeeColumnInfoVo.setTargetType(columnEntity.getTargetType()); adminSeeColumnInfoVo.setContentType(columnEntity.getContentType()); CompanyEntity companyEntity = companyMapper.selectById(LoginUserUtil.getCompanyId()); if (columnEntity.getType() == 2) { if (columnEntity.getTargetType() == 1) { ArticleEntity articleEntity = articleMapper.selectById(Long.parseLong(columnEntity.getTargetUrl())); adminSeeColumnInfoVo.setTargetName(articleEntity.getTitle()); adminSeeColumnInfoVo.setUrl(companyEntity.getWebAddress() + columnEntity.getPath() + "/" + columnEntity.getTargetUrl() + ".html"); } else if (columnEntity.getTargetType() == 2) { ColumnEntity column = this.baseMapper.selectByCodeAndCompanyId(columnEntity.getTargetUrl(), LoginUserUtil.getCompanyId()); adminSeeColumnInfoVo.setTargetName(column.getColumnName()); adminSeeColumnInfoVo.setUrl(companyEntity.getWebAddress() + column.getPath()); } } else { adminSeeColumnInfoVo.setUrl(companyEntity.getWebAddress() + columnEntity.getPath()); } adminSeeColumnInfoVo.setTargetUrl(columnEntity.getTargetUrl()); return Result.ok(adminSeeColumnInfoVo); } @Override @Transactional public Result updateColumn(AdminUpdateColumnDto adminUpdateColumnDto) { Long companyId = LoginUserUtil.getCompanyId(); ColumnEntity columnEntity = this.baseMapper.selectById(adminUpdateColumnDto.getId()); if(ObjectUtil.isEmpty(columnEntity)){ return Result.fail("栏目不存在"); } String columnCode = adminUpdateColumnDto.getColumnCode(); ColumnEntity updateEntity = ColumnConversion.INSTANCE.updateDtoToEntity(adminUpdateColumnDto); ColumnEntity hasExist = this.baseMapper.selectByCodeAndCompanyId(columnCode, companyId); if(ObjectUtil.isNotEmpty(hasExist)){ return Result.fail("栏目编码不能重复"); } Long parentId = adminUpdateColumnDto.getParentId(); if(ObjectUtil.isEmpty(parentId)){ updateEntity.setParentId(ColumnEntity.PARENTID_DEFAULT); updateEntity.setPath("/" + updateEntity.getColumnCode()); }else{ updateEntity.setParentId(parentId); ColumnEntity parent = this.baseMapper.selectById(parentId); updateEntity.setPath(parent.getPath() + "/" + updateEntity.getColumnCode()); } // 若编码进行了修改且该栏目为父栏目,则需要同步修改子栏目的path。 if (!columnEntity.getColumnCode().equals(columnCode) && "-1".equals(columnEntity.getColumnCode())) { updateEntity.setBeforeColumnCode(columnCode); if (adminUpdateColumnDto.getParentId() == 0L) { List childColumn = this.baseMapper.selectColumnByParentId(columnEntity.getId(), companyId, 2); if (CollUtil.isNotEmpty(childColumn)) { for (ColumnEntity child : childColumn) { child.setPath(updateEntity.getPath() + "/" + child.getColumnCode()); this.baseMapper.updateById(child); } } } } // 栏目修改时,需判断父级ID及栏目编码的修改。若栏目父级ID修改了,则需记录原父级ID,在发布时,需连同原父级栏目同时编译 if (!parentId.equals(columnEntity.getParentId()) && columnEntity.getBeforeParentId() == -1) { updateEntity.setBeforeParentId(columnEntity.getParentId()); } this.baseMapper.updateById(updateEntity); return Result.ok("更新成功"); } @Override public Result getColumnInList() { UserEntity userlogin = LoginUserUtil.getLoginUser(); long companyId = userlogin.getCompanyId() == null ? UserEntity.USER_BELONG_TOP : userlogin.getCompanyId(); List records = this.baseMapper.selectColumnInListByParentId(ColumnEntity.PARENTID_DEFAULT,companyId); if(CollUtil.isNotEmpty(records)){ for(AdminColumnVo adminColumnVo : records){ Long id = adminColumnVo.getId(); QueryWrapper objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("parent_id",id); objectQueryWrapper.eq("company_id",companyId); List columnEntities = this.baseMapper.selectList(objectQueryWrapper); List adminColumnVoChilds = new ArrayList<>(); if(CollUtil.isNotEmpty(columnEntities)){ for(ColumnEntity columnEntityChild : columnEntities){ AdminColumnVo child = new AdminColumnVo(); child.setId(columnEntityChild.getId()); child.setColumnName(columnEntityChild.getColumnName()); child.setColumnCode(columnEntityChild.getColumnCode()); child.setRemark(columnEntityChild.getRemark()); child.setPic(columnEntityChild.getPic()); child.setOrderNum(columnEntityChild.getOrderNum()); child.setContentType(columnEntityChild.getContentType()); adminColumnVoChilds.add(child); } } adminColumnVo.setChild(adminColumnVoChilds); } } return Result.ok(records); } @Override public Result delObjs(AdminDeleteDto adminDeleteDto) { String ids = adminDeleteDto.getIds(); if(StrUtil.isNotEmpty(ids)){ String[] columnIds = ids.split(StringPool.COMMA); for(String columnIdStr : columnIds){ Long columnId = Long.valueOf(columnIdStr); QueryWrapper objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("parent_id",columnId); this.baseMapper.delete(objectQueryWrapper); this.baseMapper.deleteById(columnId); } } return Result.ok("删除成功"); } @Override public Result getWebColumnInList(HttpServletRequest request) { String website = request.getHeader(AppContants.WEBSITE_HEADER); Long companyId = getCompanyIdFromWebsite(website); List records = this.baseMapper.selectWebColumnInListByParentId(ColumnEntity.PARENTID_DEFAULT,companyId); if(CollUtil.isNotEmpty(records)){ for(WebColumnVo webColumnVo : records){ Long id = webColumnVo.getId(); QueryWrapper objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("parent_id",id); objectQueryWrapper.eq("company_id",companyId); List columnEntities = this.baseMapper.selectList(objectQueryWrapper); List adminColumnVoChilds = new ArrayList<>(); if(CollUtil.isNotEmpty(columnEntities)){ for(ColumnEntity columnEntityChild : columnEntities){ WebColumnVo child = new WebColumnVo(); child.setId(columnEntityChild.getId()); child.setColumnName(columnEntityChild.getColumnName()); child.setColumnCode(columnEntityChild.getColumnCode()); adminColumnVoChilds.add(child); } } webColumnVo.setChild(adminColumnVoChilds); } } return Result.ok(records); } private Long getCompanyIdFromWebsite(String website){ List companyEntities = companyMapper.selectList(new QueryWrapper<>()); Long companyId = 0L; if(CollUtil.isNotEmpty(companyEntities)){ for(CompanyEntity companyEntity : companyEntities){ boolean contains = StrUtil.contains(companyEntity.getWebAddress(), website); if(contains){ companyId = companyEntity.getId(); } } } return companyId; } }