package com.doumee.service.business.impl; import com.alibaba.fastjson.JSONArray; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.Constants; import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.iPass.IPass; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Utils; import com.doumee.dao.business.CategoryMapper; import com.doumee.dao.business.MultifileMapper; import com.doumee.dao.business.model.Category; import com.doumee.dao.business.model.Multifile; import com.doumee.dao.system.model.SystemUser; import com.doumee.dao.vo.ZhanQuVO; import com.doumee.service.business.CategoryService; 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.github.yulichang.base.MPJBaseMapper; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.lang3.StringUtils; import org.apache.commons.math3.analysis.function.Log; import org.apache.shiro.SecurityUtils; import org.checkerframework.checker.units.qual.C; 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.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** * 分类信息表Service实现 * @author 江蹄蹄 * @date 2025/07/09 12:00 */ @Service public class CategoryServiceImpl implements CategoryService { @Autowired private CategoryMapper categoryMapper; @Autowired private MultifileMapper multifileMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @Override @Transactional(rollbackFor = {Exception.class,BusinessException.class}) public Integer create(Category category) { // 类型:0=战区;1=商业化;2=擅长领域;3=讲师等级; if(Objects.isNull(category) || Objects.isNull(category.getType()) || Objects.isNull(category.getName()) || (Constants.equalsInteger(category.getType(),Constants.ZERO)&& StringUtils.isBlank(category.getDetail())) ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(Constants.equalsInteger(category.getType(),Constants.ZERO)){ if(categoryMapper.selectCount(new QueryWrapper().lambda() .eq(Category::getType,Constants.ZERO) .eq(Category::getDetail,category.getDetail()) .eq(Category::getDeleted,Constants.ZERO) )>Constants.ZERO){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"该战区编码已存在"); } } category.setDeleted(Constants.ZERO); category.setCreateTime(new Date()); category.setCreateUser(loginUserInfo.getId()); category.setUpdateTime(new Date()); category.setUpdateUser(loginUserInfo.getId()); categoryMapper.insert(category); dealBatchMultiFiles(category, category.getFileList(), loginUserInfo,false); return category.getId(); } public void dealBatchMultiFiles(Category category, List fileList, LoginUserInfo user,boolean update) { Date today = new Date(); //清空原有的 if(update){ multifileMapper.delete(new UpdateWrapper().lambda() .eq(Multifile::getIsdeleted,Constants.ZERO) .eq(Multifile::getObjType,Constants.ZERO) .eq(Multifile::getObjId,category.getId())); } if(fileList!=null && fileList.size()>0){ List multifileList = new ArrayList<>(); fileList.stream().forEach(s -> { if(StringUtils.isNotBlank(s.getFileurl())){ s.setIsdeleted(Constants.ZERO); s.setCreator(user.getId()); s.setCreateDate(today); s.setObjId(category.getId()); s.setType(Constants.ZERO); s.setObjType(Constants.ZERO); multifileList.add(s); } }); if(multifileList.size()>0){ multifileMapper.insert(multifileList); } } } @Override public void deleteById(Integer id) { categoryMapper.update(new UpdateWrapper().lambda().set(Category::getDeleted,Constants.ONE).eq(Category::getId,id)); } @Override public void delete(Category category) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(category); categoryMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } categoryMapper.deleteBatchIds(ids); } @Override @Transactional(rollbackFor = {Exception.class,BusinessException.class}) public void updateById(Category category) { if(Objects.isNull(category) || Objects.isNull(category.getId()) || Objects.isNull(category.getType()) || Objects.isNull(category.getName()) ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } if(Constants.equalsInteger(category.getType(),Constants.ZERO)){ if(categoryMapper.selectCount(new QueryWrapper().lambda() .eq(Category::getType,Constants.ZERO) .eq(Category::getDetail,category.getDetail()) .eq(Category::getDeleted,Constants.ZERO) .ne(Category::getId,category.getId()) )>Constants.ZERO){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"该战区编码已存在"); } } LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); category.setUpdateTime(new Date()); category.setIsFixed(null); category.setUpdateUser(loginUserInfo.getId()); categoryMapper.updateById(category); if(Objects.isNull(category.getSortnum())){ categoryMapper.update(null,new UpdateWrapper().lambda() .set(Category::getSortnum,null) .eq(Category::getId,category.getId()) ); } dealBatchMultiFiles(category, category.getFileList(), loginUserInfo,true); } @Override public void updateStatus(Category category) { if(Objects.isNull(category) || Objects.isNull(category.getId())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); category.setUpdateTime(new Date()); category.setIsFixed(null); category.setUpdateUser(loginUserInfo.getId()); categoryMapper.updateById(category); } @Override public void updateByIdInBatch(List categorys) { if (CollectionUtils.isEmpty(categorys)) { return; } for (Category category: categorys) { this.updateById(category); } } @Override public Category findById(Integer id) { Category category = categoryMapper.selectById(id); if(Objects.isNull(category)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } if(StringUtils.isNotBlank(category.getIcon())){ String path = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH).getCode() +systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.CATEGORY_FILES).getCode(); category.setIconFull(path + category.getIcon()); } return category; } @Override public Category findOne(Category category) { QueryWrapper wrapper = new QueryWrapper<>(category); return categoryMapper.selectOne(wrapper); } @Override public List findList(Category category) { category.setDeleted(Constants.ZERO); QueryWrapper wrapper = new QueryWrapper<>(category); wrapper.lambda().orderByAsc(Category::getSortnum); wrapper.lambda().orderByAsc(Category::getId); return categoryMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); pageWrap.getModel().setDeleted(Constants.ZERO); queryWrapper.selectAll(Category.class) .selectAs(SystemUser::getRealname, Category::getUpdateUserName) .leftJoin(SystemUser.class,SystemUser::getId,Category::getUpdateUser); if (pageWrap.getModel().getId() != null) { queryWrapper.eq(Category::getId, pageWrap.getModel().getId()); } if (pageWrap.getModel().getDeleted() != null) { queryWrapper.eq(Category::getDeleted, pageWrap.getModel().getDeleted()); } if (pageWrap.getModel().getStatus() != null) { queryWrapper.eq(Category::getStatus, pageWrap.getModel().getStatus()); } if (pageWrap.getModel().getCreateUser() != null) { queryWrapper.eq(Category::getCreateUser, pageWrap.getModel().getCreateUser()); } if (pageWrap.getModel().getCreateTime() != null) { queryWrapper.ge(Category::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime())); queryWrapper.le(Category::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime())); } if (pageWrap.getModel().getUpdateUser() != null) { queryWrapper.eq(Category::getUpdateUser, pageWrap.getModel().getUpdateUser()); } if (pageWrap.getModel().getUpdateTime() != null) { queryWrapper.ge(Category::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime())); queryWrapper.le(Category::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime())); } if (pageWrap.getModel().getRemark() != null) { queryWrapper.eq(Category::getRemark, pageWrap.getModel().getRemark()); } if (pageWrap.getModel().getName() != null) { queryWrapper.like(Category::getName, pageWrap.getModel().getName()); } if (pageWrap.getModel().getType() != null) { queryWrapper.eq(Category::getType, pageWrap.getModel().getType()); } if (pageWrap.getModel().getDetail() != null) { queryWrapper.eq(Category::getDetail, pageWrap.getModel().getDetail()); } if (pageWrap.getModel().getIcon() != null) { queryWrapper.eq(Category::getIcon, pageWrap.getModel().getIcon()); } if (pageWrap.getModel().getIsFixed() != null) { queryWrapper.eq(Category::getIsFixed, pageWrap.getModel().getIsFixed()); } queryWrapper.orderByAsc(Category::getSortnum); queryWrapper.orderByAsc(Category::getId); PageData result =PageData.from(categoryMapper.selectJoinPage(page, Category.class,queryWrapper)); if(result!=null && result.getRecords()!=null){ String path = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH).getCode() +systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.CATEGORY_FILES).getCode(); for(Category cate : result.getRecords()){ if(Constants.equalsInteger(cate.getType(),Constants.ONE) ){ initMultifileList(cate); } if(StringUtils.isNotBlank(cate.getIcon())){ cate.setIconFull(path + cate.getIcon()); } } } return result; } private void initMultifileList(Category cate) { String path = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.CATEGORY_FILES).getCode(); Multifile find = new Multifile(); find.setObjId(cate.getId()); find.setObjType(Constants.ZERO); find.setIsdeleted(Constants.ZERO); List fileList= multifileMapper.selectList(new QueryWrapper<>(find)); if(fileList!=null){ for(Multifile f : fileList){ if(StringUtils.isNotBlank(f.getFileurl())){ f.setUrl(path+f.getFileurl()); } } } cate.setFileList(fileList); } @Override public long count(Category category) { QueryWrapper wrapper = new QueryWrapper<>(category); return categoryMapper.selectCount(wrapper); } @Override public List getCategoryList(Integer type,Integer rank){ List categoryList = categoryMapper.selectList(new QueryWrapper().lambda().eq(Category::getDeleted,Constants.ZERO).eq(Category::getStatus,Constants.ZERO) .eq(Objects.nonNull(type),Category::getType,type) .apply(Objects.nonNull(rank)&&Constants.equalsInteger(rank,Constants.ONE)," id in ( " + " select m.obj_id from multifile m where m.ISDELETED = 0 and m.OBJ_TYPE = 0 " + " ) ") .orderByAsc(Category::getSortnum) .orderByAsc(Category::getId) ); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(categoryList)){ for(Category cate : categoryList){ if(Constants.equalsInteger(cate.getType(),Constants.ONE) ){ initMultifileList(cate); } } } return categoryList; } @Override @Transactional(rollbackFor = {Exception.class,BusinessException.class}) public void syncZhanQu() throws IOException { LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); IPass iPass = new IPass(); List l = iPass.getIPassZhanquList(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.IPASS_LOGIN_ACCOUNT).getCode(), systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.IPASS_LOGIN_PSD).getCode(), systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.IPASS_TOKEN_URL).getCode(), systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.IPASS_ZHANQU_URL).getCode() ); List categoryList = categoryMapper.selectList(new QueryWrapper().lambda() .eq(Category::getType,Constants.ZERO) .eq(Category::getDeleted,Constants.ZERO) ); List updList = new ArrayList<>(); List addList = new ArrayList<>(); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(l)){ for (ZhanQuVO zhanQuVO:l) { Category category = this.vaildData(zhanQuVO,categoryList,loginUserInfo); if(Objects.isNull(category.getId())){ addList.add(category); }else{ updList.add(category); } } } if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(addList)) { categoryMapper.insertOrUpdate(addList); } if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(updList)){ categoryMapper.insertOrUpdate(updList); } } public Category vaildData(ZhanQuVO zhanQuVO , List categoryList, LoginUserInfo userInfo) { Category returnData = new Category(); for (Category category:categoryList) { returnData.setUpdateUser(userInfo.getId()); returnData.setUpdateTime(new Date()); if(category.getDetail().equals(zhanQuVO.getNodeCode())){ returnData = category ; returnData.setName(zhanQuVO.getNodeName()); return returnData; } } returnData.setDetail(zhanQuVO.getNodeCode()); returnData.setCreateTime(new Date()); returnData.setDeleted(Constants.ZERO); returnData.setStatus(zhanQuVO.getNodeStatus().equals("Y")?Constants.ZERO:Constants.ONE); returnData.setName(zhanQuVO.getNodeName()); returnData.setCreateUser(userInfo.getId()); returnData.setType(Constants.ZERO); returnData.setIsFixed(Constants.ZERO); return returnData; } }