Przeglądaj źródła

bugfix:校区信息-未同步更新区域信息,无法删除校区信息等

bing 1 rok temu
rodzic
commit
cd870e3783

+ 37 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/BuildAreaTypeEnum.java

@@ -0,0 +1,37 @@
+package org.dromara.common.core.enums;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 建筑物区域类型
+ */
+public enum BuildAreaTypeEnum {
+    XX("01","学校"),
+    XQ("02","校区"),
+    LD("03","楼栋"),
+    LC("04","楼层");
+
+    private final String code;
+    private final String name;
+
+    BuildAreaTypeEnum(String code, String message) {
+        this.code = code;
+        this.name = message;
+    }
+
+    public String code() {
+        return this.code;
+    }
+
+    public String message() {
+        return this.name;
+    }
+
+
+    @Override
+    public String toString() {
+        return this.name();
+    }
+
+}

+ 1 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/domain/bo/PtAreaBo.java

@@ -35,7 +35,7 @@ public class PtAreaBo extends BaseEntity {
     /**
      * 祖级列表
      */
-    @NotBlank(message = "祖级列表不能为空", groups = { AddGroup.class, EditGroup.class })
+//    @NotBlank(message = "祖级列表不能为空", groups = {  EditGroup.class })
     private String ancestors;
 
     /**

+ 14 - 2
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/service/impl/PtAreaServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.map.MapUtil;
 import org.dromara.backstage.basics.domain.PtRoom;
 import org.dromara.backstage.basics.mapper.PtRoomMapper;
+import org.dromara.common.core.enums.BuildAreaTypeEnum;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
@@ -98,6 +99,7 @@ public class PtAreaServiceImpl implements IPtAreaService {
         lqw.like(StringUtils.isNotBlank(bo.getAreaName()), PtArea::getAreaName, bo.getAreaName());
         lqw.eq(StringUtils.isNotBlank(bo.getAreaType()), PtArea::getAreaType, bo.getAreaType());
         lqw.eq(StringUtils.isNotBlank(bo.getAreaCode()), PtArea::getAreaCode, bo.getAreaCode());
+        lqw.eq(bo.getParentId() !=null, PtArea::getParentId, bo.getParentId());
         return lqw;
     }
 
@@ -161,8 +163,18 @@ public class PtAreaServiceImpl implements IPtAreaService {
         //父节点不能是楼层 04
         if(entity.getParentId()!=null){
             PtArea ptArea = baseMapper.selectById(entity.getParentId());
-            if(ptArea!=null && "04".equals(ptArea.getAreaType())){
-                throw new ServiceException("楼层不能作为父节点");
+            if(ptArea!=null){
+                if(BuildAreaTypeEnum.LC.code().equals(ptArea.getAreaType())){
+                    throw new ServiceException("楼层不能作为父节点");
+                }else if(BuildAreaTypeEnum.LD.code().equals(ptArea.getAreaType())){
+                    if(!BuildAreaTypeEnum.LC.code().equals(entity.getAreaType())){
+                        throw new ServiceException("楼栋下只能是楼层");
+                    }
+                }else if(BuildAreaTypeEnum.XQ.code().equals(ptArea.getAreaType())){
+                    if(BuildAreaTypeEnum.XQ.code().equals(entity.getAreaType())){
+                        throw new ServiceException("校区下不能有校区");
+                    }
+                }
             }
         }
     }

+ 54 - 9
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/service/impl/PtCampusServiceImpl.java

@@ -4,6 +4,9 @@ import cn.hutool.core.collection.CollectionUtil;
 import org.dromara.backstage.basics.domain.PtArea;
 import org.dromara.backstage.basics.domain.bo.PtAreaBo;
 import org.dromara.backstage.basics.domain.vo.PtAreaVo;
+import org.dromara.backstage.basics.domain.vo.PtSchoolVo;
+import org.dromara.backstage.basics.service.IPtSchoolService;
+import org.dromara.common.core.enums.BuildAreaTypeEnum;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
@@ -21,9 +24,7 @@ import org.dromara.backstage.basics.mapper.PtCampusMapper;
 import org.dromara.backstage.basics.service.IPtCampusService;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.List;
-import java.util.Map;
-import java.util.Collection;
+import java.util.*;
 
 /**
  * 校区信息Service业务层处理
@@ -39,6 +40,8 @@ public class PtCampusServiceImpl implements IPtCampusService {
 
     private final PtAreaServiceImpl areaService;
 
+    private final IPtSchoolService ptSchoolService;
+
     /**
      * 查询校区信息
      *
@@ -60,6 +63,7 @@ public class PtCampusServiceImpl implements IPtCampusService {
     @Override
     public TableDataInfo<PtCampusVo> queryPageList(PtCampusBo bo, PageQuery pageQuery) {
         LambdaQueryWrapper<PtCampus> lqw = buildQueryWrapper(bo);
+        lqw.orderByDesc(PtCampus::getCreateTime);
         Page<PtCampusVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
         return TableDataInfo.build(result);
     }
@@ -102,15 +106,37 @@ public class PtCampusServiceImpl implements IPtCampusService {
             // 一个租户就是一个学校,一个学校就是一个单位,区域的最大的父节点为学校,只会有一个,默认取一个即可
             PtAreaBo ptArea = new PtAreaBo();
             ptArea.setParentId(0L); // 根节点
-            ptArea.setAreaType("01"); //学校
+            ptArea.setAreaType(BuildAreaTypeEnum.XX.code()); //学校
+            ptArea.setAreaId(add.getSchoolId());
             List<PtAreaVo> ptAreaVos = areaService.queryList(ptArea);
             if(ptAreaVos.size()>0){
                 PtAreaBo ptAreaBo = new PtAreaBo();
                 ptAreaBo.setAreaId(add.getCampusId());
                 ptAreaBo.setAreaName(add.getCampusName());
                 ptAreaBo.setAreaCode(ptAreaVos.get(0).getAreaCode()+"-"+add.getCampusCode());
-                ptAreaBo.setAncestors(0+","+add.getCampusId());
-                ptAreaBo.setAreaType("02");
+                ptAreaBo.setAncestors(0+","+ptAreaVos.get(0).getAreaId()+","+add.getCampusId());
+                ptAreaBo.setAreaType(BuildAreaTypeEnum.XQ.code());
+                ptAreaBo.setParentId(add.getSchoolId());
+                areaService.insertByBo(ptAreaBo);
+            }else{
+                // 新建学校再新建校区
+                PtSchoolVo ptSchoolVo = ptSchoolService.queryById(add.getSchoolId());
+                if(ptSchoolVo !=null){
+                    ptArea.setAreaCode(ptSchoolVo.getSchoolCode());
+                    ptArea.setAreaName(ptSchoolVo.getSchoolName());
+                    ptArea.setAreaId(ptSchoolVo.getSchoolId());
+                    ptArea.setAreaType(BuildAreaTypeEnum.XX.code());
+                }else{
+                    throw new ServiceException("学校不存在");
+                }
+                areaService.insertByBo(ptArea);
+                PtAreaBo ptAreaBo = new PtAreaBo();
+                ptAreaBo.setAreaId(add.getCampusId());
+                ptAreaBo.setAreaName(add.getCampusName());
+                ptAreaBo.setAreaCode(ptArea.getAreaCode()+"-"+add.getCampusCode());
+                ptAreaBo.setAncestors(0+","+ptArea.getAreaId()+","+add.getCampusId());
+                ptAreaBo.setAreaType(BuildAreaTypeEnum.XQ.code());
+                ptAreaBo.setParentId(add.getSchoolId());
                 areaService.insertByBo(ptAreaBo);
             }
 
@@ -125,10 +151,25 @@ public class PtCampusServiceImpl implements IPtCampusService {
      * @return 是否修改成功
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean updateByBo(PtCampusBo bo) {
         PtCampus update = MapstructUtils.convert(bo, PtCampus.class);
         validEntityBeforeSave(update);
-        return baseMapper.updateById(update) > 0;
+        boolean flag = baseMapper.updateById(update) > 0;
+        if(flag){
+            // 同步修改区域表为校区的信息
+            PtAreaBo ptAreaBo = new PtAreaBo();
+            ptAreaBo.setAreaId(update.getCampusId());
+            ptAreaBo.setAreaName(update.getCampusName());
+            PtSchoolVo ptSchoolVo = ptSchoolService.queryById(bo.getSchoolId());
+            if(ptSchoolVo ==null){
+                throw new ServiceException("学校不存在");
+            }
+            ptAreaBo.setAreaCode(update.getCampusCode());
+            Optional.ofNullable(ptSchoolVo.getSchoolCode()).ifPresent(e -> ptAreaBo.setAreaCode(e+"-"+update.getCampusCode()));
+            areaService.updateByBo(ptAreaBo);
+        }
+        return flag;
     }
 
     /**
@@ -153,14 +194,18 @@ public class PtCampusServiceImpl implements IPtCampusService {
      * @return 是否删除成功
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
         if(isValid){
             //查询校区下是否有区域数据,有区域数据,不允许删除
             for (Long id : ids) {
-                PtAreaVo ptAreaVo = areaService.queryById(id);
-                if(ptAreaVo!=null){
+                PtAreaBo bo = new PtAreaBo();
+                bo.setParentId(id);
+                List<PtAreaVo> list = areaService.queryList(bo);
+                if(list !=null && list.size()>0){
                     throw new ServiceException("该校区有区域数据,请先删除区域数据后再操作");
                 }
+                areaService.deleteWithValidByIds(Collections.singleton(id), false);
             }
         }
         return baseMapper.deleteByIds(ids) > 0;