Ver código fonte

1.校区信息变更要同步更新区域表,挂在区域的根目录下面
2.如果校区下面挂了下级区域数据就不允许删除

bing 1 mês atrás
pai
commit
5208b5d9bf

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

@@ -1,5 +1,10 @@
1 1
 package org.dromara.backstage.basics.service.impl;
2 2
 
3
+import cn.hutool.core.collection.CollectionUtil;
4
+import org.dromara.backstage.basics.domain.PtArea;
5
+import org.dromara.backstage.basics.domain.bo.PtAreaBo;
6
+import org.dromara.backstage.basics.domain.vo.PtAreaVo;
7
+import org.dromara.common.core.exception.ServiceException;
3 8
 import org.dromara.common.core.utils.MapstructUtils;
4 9
 import org.dromara.common.core.utils.StringUtils;
5 10
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -31,6 +36,8 @@ public class PtCampusServiceImpl implements IPtCampusService {
31 36
 
32 37
     private final PtCampusMapper baseMapper;
33 38
 
39
+    private final PtAreaServiceImpl areaService;
40
+
34 41
     /**
35 42
      * 查询校区信息
36 43
      *
@@ -89,6 +96,22 @@ public class PtCampusServiceImpl implements IPtCampusService {
89 96
         boolean flag = baseMapper.insert(add) > 0;
90 97
         if (flag) {
91 98
             bo.setCampusId(add.getCampusId());
99
+            //校区作为学校的下一级数据,在创建校区时同步要在区域表中增加一条区域数据,区域Id就是校区Id,parent_id对应校区所属的school_id,区域类型固定为校区(见区域类型字典表)
100
+            // 一个租户就是一个学校,一个学校就是一个单位,区域的最大的父节点为学校,只会有一个,默认取一个即可
101
+            PtAreaBo ptArea = new PtAreaBo();
102
+            ptArea.setParentId(0L); // 根节点
103
+            ptArea.setAreaType("01"); //学校
104
+            List<PtAreaVo> ptAreaVos = areaService.queryList(ptArea);
105
+            if(ptAreaVos.size()>0){
106
+                PtAreaBo ptAreaBo = new PtAreaBo();
107
+                ptAreaBo.setAreaId(add.getCampusId());
108
+                ptAreaBo.setAreaName(add.getCampusName());
109
+                ptAreaBo.setAreaCode(ptAreaVos.get(0).getAreaCode()+"-"+add.getCampusCode());
110
+                ptAreaBo.setAncestors(0+","+add.getCampusId());
111
+                ptAreaBo.setAreaType("02");
112
+                areaService.insertByBo(ptAreaBo);
113
+            }
114
+
92 115
         }
93 116
         return flag;
94 117
     }
@@ -110,7 +133,14 @@ public class PtCampusServiceImpl implements IPtCampusService {
110 133
      * 保存前的数据校验
111 134
      */
112 135
     private void validEntityBeforeSave(PtCampus entity){
113
-        //TODO 做一些数据校验,如唯一约束
136
+        LambdaQueryWrapper<PtCampus> queryWrapper = Wrappers.lambdaQuery();
137
+        queryWrapper.eq(PtCampus::getSchoolId, entity.getSchoolId());
138
+        queryWrapper.eq(PtCampus::getCampusName, entity.getCampusName());
139
+        queryWrapper.ne(entity.getCampusId() !=null, PtCampus::getCampusId, entity.getCampusId());
140
+        if(baseMapper.exists(queryWrapper)){
141
+            throw new ServiceException("校区名称已存在");
142
+        }
143
+
114 144
     }
115 145
 
116 146
     /**
@@ -123,7 +153,13 @@ public class PtCampusServiceImpl implements IPtCampusService {
123 153
     @Override
124 154
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
125 155
         if(isValid){
126
-            //TODO 做一些业务上的校验,判断是否需要校验
156
+            //查询校区下是否有区域数据,有区域数据,不允许删除
157
+            for (Long id : ids) {
158
+                PtAreaVo ptAreaVo = areaService.queryById(id);
159
+                if(ptAreaVo!=null){
160
+                    throw new ServiceException("该校区有区域数据,请先删除区域数据后再操作");
161
+                }
162
+            }
127 163
         }
128 164
         return baseMapper.deleteByIds(ids) > 0;
129 165
     }