From 2fbd650997a807e5cf93e48350bfcb9aa0c4291b Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期五, 25 四月 2025 18:24:22 +0800
Subject: [PATCH] 工单业务
---
server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java | 420 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 413 insertions(+), 7 deletions(-)
diff --git a/server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java b/server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
index aa0f18f..85abc89 100644
--- a/server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
+++ b/server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
@@ -1,6 +1,6 @@
package com.doumee.service.business.impl;
-import com.doumee.core.constants.Constants;
+import com.doumee.core.annotation.excel.ExcelImporter;
import com.doumee.core.constants.Constants;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
@@ -10,13 +10,12 @@
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.CategoryMapper;
import com.doumee.dao.business.model.Category;
+import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.vo.CategoryDcaProblemDto;
import com.doumee.dao.business.vo.CompanyTree;
import com.doumee.dao.web.vo.CategoryVO;
import com.doumee.dao.web.vo.CategoryVOTree;
-import com.doumee.dao.business.model.Company;
-import com.doumee.dao.business.model.Managers;
import com.doumee.dao.business.vo.CategoryTree;
-import com.doumee.dao.business.vo.CompanyTree;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.CategoryService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -24,17 +23,25 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.CellType;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
-import java.util.UUID;
+import java.util.stream.Collectors;
/**
* 鍒嗙被淇℃伅琛⊿ervice瀹炵幇
@@ -44,6 +51,8 @@
@Service
public class CategoryServiceImpl implements CategoryService {
+ @Resource(name="sessionRedisTemplate")
+ private RedisTemplate<Object, Serializable> redisTemplate;
@Autowired
private CategoryMapper categoryMapper;
@@ -70,7 +79,10 @@
if(parent == null || Constants.equalsInteger(parent.getIsdeleted(),Constants.ONE)){
throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝鐖剁骇淇℃伅涓嶅瓨鍦▇");
}
-
+ if(Constants.equalsInteger(parent.getType(),Constants.FOUR) && parent.getParentId()!=null){
+ //濡傛灉鏄簩绾DA涓婚,鑷繁涓鸿瀵熼」
+ category.setType(Constants.SIX);
+ }
idPath = parent.getIdPath();
category.setIdPath(parent.getIdPath()+category.getId()+"/");
category.setNamePath(parent.getNamePath()+"/"+category.getName());
@@ -85,7 +97,7 @@
Category com = new Category();
com.setId(category.getId());
- com.setIdPath(idPath+category.getId()+"/");
+ com.setIdPath(idPath+"/"+category.getId()+"/");
categoryMapper.updateById(com);
return category.getId();
@@ -199,6 +211,7 @@
@Override
public List<Category> findList(Category category) {
+ category.setIsdeleted(Constants.ZERO);
MPJLambdaWrapper<Category> queryWrapper = new MPJLambdaWrapper<>();
queryWrapper.selectAll(Category.class);
queryWrapper.selectAs(SystemUser::getUsername,Category::getEditorName);
@@ -315,6 +328,41 @@
@Override
+ public List<CategoryVO> getCategoryVOForGCXTree(Integer categoryId){
+ List<Category> categoryList = categoryMapper.selectList(new QueryWrapper<Category>().lambda()
+ .eq(Category::getIsdeleted, Constants.ZERO)
+ .eq(Category::getType, Constants.FOUR)
+ .and( ms->ms.eq(Category::getId,categoryId).or().eq(Category::getParentId,categoryId))
+ .orderByAsc(Category::getSortnum,Category::getId)
+ );
+ if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(categoryList)){
+ categoryList.addAll(
+ categoryMapper.selectList(new QueryWrapper<Category>().lambda()
+ .eq(Category::getIsdeleted, Constants.ZERO)
+ .eq(Category::getType, Constants.SIX)
+ .in(Category::getParentId,categoryList.stream().map(i->i.getId()).collect(Collectors.toList()))
+ .orderByAsc(Category::getSortnum,Category::getId))
+ );
+ }
+ List<CategoryVO> categoryVOList = new ArrayList<>();
+ if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(categoryList)){
+ for (Category category:categoryList) {
+ CategoryVO categoryVO = new CategoryVO();
+ categoryVO.setId(category.getId());
+ categoryVO.setName(category.getName());
+ categoryVO.setParentId(category.getParentId());
+ categoryVOList.add(categoryVO);
+ }
+ CategoryVOTree treeBuild = new CategoryVOTree(categoryVOList);
+ categoryVOList = treeBuild.buildTree();
+ }
+ return categoryVOList;
+ }
+
+
+
+
+ @Override
public List<CategoryVO> getCategoryVOList(Integer categoryType,Integer isRoot){
List<Category> categoryList = categoryMapper.selectList(new QueryWrapper<Category>().lambda()
.eq(Category::getIsdeleted, Constants.ZERO)
@@ -334,8 +382,366 @@
}
return categoryVOList;
}
+ public List<Category> findAllListForDca() {
+ List<Category> categoryList = categoryMapper.selectList(new QueryWrapper<Category>().lambda()
+ .eq(Category::getIsdeleted, Constants.ZERO)
+ .in(Category::getType, Constants.FOUR, Constants.SIX)//涓婚鍜岃瀵熼」
+ .orderByAsc(Category::getSortnum)
+ );
+ return categoryList;
+ }
+ public List<Category> findListForDcaTree( List<Category> categoryList) {
+ if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(categoryList)) {
+ long index = 1;
+ List<Category> pList = new ArrayList<>();
+ for (Category category : categoryList) {
+ if (category.getParentId() == null) {
+ category.setChildList(new ArrayList<>());
+ for (Category cc : categoryList) {
+ if (Constants.equalsInteger(cc.getParentId(), category.getId())) {
+ cc.setChildList(new ArrayList<>());
+ for (Category ccc : categoryList) {
+ if (Constants.equalsInteger(ccc.getParentId(), cc.getId())) {
+ cc.getChildList().add(ccc);
+ }
+ }
+ category.getChildList().add(cc);
+ }
+ }
+ pList.add(category);
+ }
+ }
+ return pList;
+ }
+ return null;
+ }
+ public List<Category> findImportTreeForDca ( List<CategoryDcaProblemDto> categoryList,LoginUserInfo user, Date date) {
+ List<Category> pList = new ArrayList<>();
+ if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(categoryList)) {
+ Integer index = 1;
+ for (CategoryDcaProblemDto categoryDcaProblemDto : categoryList) {
+ if(StringUtils.isBlank(categoryDcaProblemDto.getProblem())
+ &&StringUtils.isBlank(categoryDcaProblemDto.getParentName())
+ &&StringUtils.isBlank(categoryDcaProblemDto.getTypeName()) ){
+ //鍘荤┖琛�
+ continue;
+ }
+ if(StringUtils.isBlank(categoryDcaProblemDto.getParentName())){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝琛ㄦ牸绗��"+(index + 1)+"銆戣涓�绾т富棰樹俊鎭笉鑳戒负绌猴紝璇疯繑鍥炴鏌ヨ〃鏍间俊鎭紒");
+ }
+ categoryDcaProblemDto.setProblem(StringUtils.defaultString(categoryDcaProblemDto.getProblem(),"").trim());
+ categoryDcaProblemDto.setTypeName(StringUtils.defaultString(categoryDcaProblemDto.getTypeName(),"").trim());
+ categoryDcaProblemDto.setParentName(StringUtils.defaultString(categoryDcaProblemDto.getParentName(),"").trim());
+ Category first = getNewCateFromListByName(categoryDcaProblemDto.getParentName(), pList);
+ if(first == null){
+ first = new Category();
+ first.setIsdeleted(Constants.ZERO);
+ first.setCreateDate(date);
+ first.setCreator(user.getId());
+ first.setIsdeleted(Constants.ZERO);
+ first.setStatus(Constants.ZERO);
+ first.setEditDate(date);
+ first.setEditor(user.getId());
+ first.setName(categoryDcaProblemDto.getParentName());
+ first.setType(Constants.FOUR);//涓婚
+ first.setSortnum(index++);
+ first.setChildList(new ArrayList<>());
+ pList.add(first);
+ List<Category> childList = getSecondListFromImport(first,0,categoryList);
+ first.setChildList(childList);
+ }
+ }
+ }
+ return pList;
+ }
+
+ private List<Category> getSecondListFromImport(Category parent,int type, List<CategoryDcaProblemDto> categoryList) {
+ List<Category> pList = new ArrayList<>();
+ Integer index = 1;
+ for (CategoryDcaProblemDto categoryDcaProblemDto : categoryList) {
+ if(type ==0 && (StringUtils.isBlank(categoryDcaProblemDto.getTypeName()) || StringUtils.isBlank(categoryDcaProblemDto.getProblem()))){
+ //鍘荤┖琛�
+ continue;
+ }
+ if(type ==1 &&(StringUtils.isBlank(categoryDcaProblemDto.getProblem()))){
+ //鍘荤┖琛�
+ continue;
+ }
+ if(type ==0 && StringUtils.isBlank(categoryDcaProblemDto.getTypeName())){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝琛ㄦ牸绗��"+(index + 1)+"銆戣浜岀骇涓婚淇℃伅涓嶈兘涓虹┖锛岃杩斿洖妫�鏌ヨ〃鏍间俊鎭紒");
+ }
+ if(type == 0 && !StringUtils.equals(categoryDcaProblemDto.getParentName(),parent.getName())){
+ //鍙鐞嗗瓙绾�
+ continue;
+ }
+ if(type == 1 && !StringUtils.equals(categoryDcaProblemDto.getTypeName(),parent.getName())){
+ //鍙鐞嗗瓙绾�
+ continue;
+ }
+ Category model = getNewCateFromListByName(type == 0 ?categoryDcaProblemDto.getTypeName():categoryDcaProblemDto.getProblem(), pList);
+ if(model == null){
+ model = new Category();
+ model.setIsdeleted(Constants.ZERO);
+ model.setCreateDate(parent.getCreateDate());
+ model.setCreator(parent.getCreator());
+ model.setIsdeleted(Constants.ZERO);
+ model.setStatus(Constants.ZERO);
+ model.setEditDate(parent.getCreateDate());
+ model.setEditor(parent.getCreator());
+ model.setName(type == 0 ?categoryDcaProblemDto.getTypeName():categoryDcaProblemDto.getProblem());
+ model.setType(type == 0 ? Constants.FOUR:Constants.SIX);//
+ model.setSortnum(index++);
+ model.setChildList(new ArrayList<>());
+ pList.add(model);
+ }
+ if(type == 0){
+ //濡傛灉鏄簩绾т富棰樺鐞嗚幏鍙栧瓙闆嗛儴闂�
+ List<Category> childList = getSecondListFromImport(model,1,categoryList);
+ model.setChildList(childList);
+ }
+ }
+ return pList;
+ }
+
+ private Category getNewCateFromListByName(String parentName, List<Category> pList) {
+ if(pList ==null){
+ return null;
+ }
+ for(Category cate : pList){
+ if(StringUtils.equals(parentName,cate.getName())){
+ return cate;
+ }
+ }
+ return null;
+ }
+ private Category getNewCateFromListByNameAndParent(String parentName,int type,boolean isRoot, List<Category> pList) {
+ for(Category cate : pList){
+ if(StringUtils.equals(parentName,cate.getName()) && Constants.equalsInteger(cate.getType(),type)){
+ if(isRoot && cate.getParentId()==null){
+ return cate;
+ }else if(isRoot && cate.getParentId()==null){
+ return cate;
+ }
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public List<CategoryDcaProblemDto> findListForDca(Category param){
+ long index =1;
+ List<CategoryDcaProblemDto> categoryVOList = new ArrayList<>();
+ List<Category> pList = findListForDcaTree( findAllListForDca());
+ for (Category category:pList) {
+ if(category.getChildList().size() ==0){
+ CategoryDcaProblemDto categoryVO = new CategoryDcaProblemDto();
+ categoryVO.setIndex(index);
+ categoryVO.setParentName(category.getName());
+ index++;
+ categoryVOList.add(categoryVO);
+ }else{
+ for (Category cc:category.getChildList()) {
+ if(cc.getChildList().size() ==0){
+ CategoryDcaProblemDto categoryVO = new CategoryDcaProblemDto();
+ categoryVO.setIndex(index);
+ categoryVO.setParentName(category.getName());
+ categoryVO.setTypeName(cc.getName());
+ index++;
+ categoryVOList.add(categoryVO);
+ }else{
+ for (Category ccc:cc.getChildList()) {
+ CategoryDcaProblemDto categoryVO = new CategoryDcaProblemDto();
+ categoryVO.setIndex(index);
+ categoryVO.setParentName(category.getName());
+ categoryVO.setTypeName(cc.getName());
+ categoryVO.setProblem(ccc.getName());
+ index++;
+ categoryVOList.add(categoryVO);
+
+ }
+ }
+ }
+ }
+ }
+ return categoryVOList;
+ }
+ @Override
+ @PostConstruct
+ public String initRedis(){
+ redisTemplate.delete(Constants.RedisKeys.IMPORTING_CATEGORY);
+ return "";
+ }
+ @Override
+ @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+ public String importDcaBatch(MultipartFile file){
+ Boolean importing = (Boolean) redisTemplate.opsForValue().get(Constants.RedisKeys.IMPORTING_CATEGORY);
+ if(importing!=null && importing){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝宸插瓨鍦ㄥ憳宸ュ鍏ヤ换鍔℃鍦ㄦ墽琛屼腑锛岃绋嶅悗鍐嶈瘯锛�");
+ }
+ redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_CATEGORY,true);
+ try {
+ ExcelImporter ie = null;
+ List<CategoryDcaProblemDto> dataList =null;
+ try {
+ ie = new ExcelImporter(file,0,0, CellType.STRING); // 纭繚鍗曞厓鏍肩被鍨嬩负瀛楃涓�);
+ dataList = ie.getDataList(CategoryDcaProblemDto.class,null);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ if(dataList == null || dataList.size() ==0){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏁版嵁涓虹┖锛�");
+ }
+ Date date = new Date();
+ LoginUserInfo user = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
+ List<Category> treeImportList = findImportTreeForDca(dataList,user,date);//鏌ヨ鐜版湁鐨勫叏閮ㄤ富棰樿瀵熼」鏁版嵁
+ if(treeImportList == null || treeImportList.size() ==0){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鐨勬湁鏁堟暟鎹负绌猴紒");
+ }
+ //鏌ヨ鐜版湁鐨勫叏閮ㄤ富棰樿瀵熼」鏁版嵁
+ List<Category> list = categoryMapper.selectJoinList(Category.class,new MPJLambdaWrapper<Category>()
+ .selectAll(Category.class)
+// .select("t1.name",Category::getParentName)
+// .select("t2.name",Category::getRootName)
+// .leftJoin(Category.class,Category::getId,Category::getParentId)
+// .leftJoin( "category t2 on t1.parent_id=t2.id")
+ .eq(Category::getIsdeleted, Constants.ZERO)
+ .in(Category::getType, Constants.FOUR, Constants.SIX)//涓婚鍜岃瀵熼」
+ .orderByAsc(Category::getSortnum)
+ ) ;
+ List<Category> treeList = findListForDcaTree(list);//鏌ヨ鐜版湁鐨勫叏閮ㄤ富棰樿瀵熼」鏁版嵁
+ List<Integer> allUpdateIds = new ArrayList<>();
+ dealImportNewOrUpdateBiz(treeList,treeImportList,allUpdateIds);
+ dealDeletedList(list,allUpdateIds,user,date);//澶勭悊鍒犻櫎鐨勬暟鎹俊鎭�
+ dealTreePathInfo(treeImportList);
+ return "瀵煎叆鎴愬姛";
+ }catch (BusinessException e){
+ throw e;
+ }catch (Exception e){
+ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"鍛樺伐淇℃伅瀵煎叆澶辫触锛岃绋嶅悗閲嶈瘯");
+ }finally {
+ redisTemplate.delete(Constants.RedisKeys.IMPORTING_CATEGORY);
+ }
+ }
+ private void dealImportNewOrUpdateBiz(List<Category> treeList, List<Category> treeImportList, List<Integer> allUpdateIds) {
+ List<Category> newList = new ArrayList<>();
+ List<Category> updateList = new ArrayList<>();
+ for(Category tmodel :treeImportList){
+
+ //澶勭悊涓�绾т富棰樺鏀归�昏緫
+ //鏌ヨ鏄惁瀛樺湪鍚嶇О鐩稿悓鐨勪竴绾т富棰橈紝瀛樺湪鍒欐洿鏂帮紝涓嶅瓨鍦ㄥ垯鏂板
+ Category first = getNewCateFromListByName(tmodel.getName(),treeList);
+ if(first!=null){
+ tmodel.setId(first.getId());
+ tmodel.setChildMatchList(first.getChildList());
+ allUpdateIds.add(first.getId());
+ updateList.add(tmodel);
+ }else{
+ newList.add(tmodel);
+ }
+ }
+
+ //鍏堟壒閲忓鐞嗕竴绾т富棰樼殑澧炴敼鏁版嵁锛屽埛鏂颁竴绾т富棰樺璞$殑缂栫爜
+ if(newList.size() >0){
+ categoryMapper.insert(newList);
+ }
+ if( updateList.size() >0){
+ for(Category update :updateList){
+ categoryMapper.updateById(update);
+ }
+ }
+ dealSecChildList(newList,updateList,allUpdateIds,1);//澶勭悊浜岀骇鏁版嵁
+ }
+
+ private void dealDeletedList(List<Category> list, List<Integer> allUpdateIds, LoginUserInfo user, Date date) {
+ List<Integer> deleteList = new ArrayList<>();
+ for(Category cate : list){
+ for(Integer nowId : allUpdateIds){
+ if(Constants.equalsInteger(cate.getId(),nowId)){
+ continue;
+ }
+ deleteList.add(cate.getId());
+ }
+ }
+ if(deleteList.size() >0){
+ //鍒犻櫎涓嶅瓨鍦ㄧ殑
+ categoryMapper.update(null,new UpdateWrapper<Category>().lambda()
+ .set(Category::getIsdeleted,Constants.ONE)
+ .set(Category::getEditor,user.getId())
+ .set(Category::getEditDate,date)
+ .in(Category::getId,deleteList));
+ }
+ }
+
+ private void dealSecChildList(List<Category> newList, List<Category> updateList,List<Integer> allUpdateIds,int level) {
+ List<Category> childNewList = new ArrayList<>();
+ List<Category> childUpdateList = new ArrayList<>();
+ if(newList.size() >0 || updateList.size()>0) {
+ for(Category c : newList){
+ if(c.getChildList()!=null && c.getChildList().size()>0){
+ for(Category sec : c.getChildList()){
+ sec.setParentId(c.getId());
+ }
+ childNewList.addAll(c.getChildList());
+ }
+ }
+ for(Category c : updateList){
+ if(c.getChildList()!=null && c.getChildList().size()>0){
+ List<Category> tList = c.getChildMatchList();
+ for(Category sec : c.getChildList()){
+ sec.setParentId(c.getId());
+ Category mmodel = getNewCateFromListByName(sec.getName(),tList);
+ if(mmodel!=null){
+ sec.setId(mmodel.getId());
+ sec.setChildMatchList(mmodel.getChildList());
+ allUpdateIds.add(mmodel.getId());
+ childUpdateList.add(sec);
+ }else{
+ childNewList.add(sec);
+ }
+ }
+ }
+ }
+ }
+ if(childNewList.size() >0){
+ categoryMapper.insert(childNewList);
+ }
+ if( childUpdateList.size() >0){
+ for(Category update :childUpdateList){
+ categoryMapper.updateById(update);
+ }
+ }
+ if(level == 1){
+ dealSecChildList(childNewList,childUpdateList,allUpdateIds,2);//澶勭悊涓夌骇绾ф暟鎹�
+ }
+ }
+ private void dealTreePathInfo(List<Category> tree) {
+ if(tree!=null || tree.size()>0){
+ for(Category t : tree){
+ t.setIdPath(t.getId()+"/");
+ t.setNamePath(t.getName());
+ categoryMapper.updateById(t);
+ dealChildParentId(t,t.getChildList());
+ }
+ }
+ }
+
+ private void dealChildParentId(Category t, List<Category> childList) {
+ if(childList ==null || childList.size()==0){
+ return;
+ }
+ for(Category c : childList){
+ c.setParentId(t.getId());
+ c.setIdPath(t.getIdPath()+c.getId()+"/");
+ c.setNamePath(t.getNamePath()+"/"+c.getName());
+ categoryMapper.updateById(c);
+ if(t.getChildList()!=null || t.getChildList().size()==0){
+ //閫掑綊澶勭悊瀛愰泦
+ dealChildParentId(c,c.getChildList());
+ }
+ }
+ }
}
--
Gitblit v1.9.3