1. 新增应用规划,从下拉框的树形表格中,选择IP段与应用规划进行关联
(可以多选)
2. 逻辑代码:
/**
* 方法说明:保存ApplicationPlan,会将ip段的planType和planId进行关联修改
* @author wangbin
* @date 2019/9/27 10:51
* @param applicationPlanVo
* @return com.sccl.framework.web.domain.AjaxResult
* @throws
*/
@Override
public AjaxResult saveApplicationPlan(ApplicationPlanVo applicationPlanVo) {
//获取所有的IP段ID
String[] ipSegmentIds = applicationPlanVo.getIpSegmentIds().split(",");
//查询IP段集合
List ipSegments = ipsegmentService.gets(Arrays.asList(ipSegmentIds));
ApplicationPlan applicationPlan = new ApplicationPlan();
BeanUtils.copyProperties(applicationPlanVo,applicationPlan);
applicationPlan.setCode(applicationPlan.getName());
if (StringUtils.isBlank(applicationPlan.getId())) {
// 设置应用规划属性
// 保存应用规划,id为空说明是新增
this.save(applicationPlan);
// 设置IP段关联的应用规划以及IP段status
ipsegmentService.updateIpSegmentPlanStatus(ipSegments,applicationPlan.getId(),0L,1L);
applicationPlanVo.setId(applicationPlan.getId());
}else {
// 修改
// 修改IP段的applicationPlanId以及status的值
Map params = new HashMap();
params.put("planId",applicationPlan.getId());
params.put("planType", 0L);
params.put("topoGraphKind", applicationPlan.getTopoGraphKind());
//params.put("topographid", applicationPlan.getTopographid());
//查询原来规划的IP段
List oldIpSegments = ipsegmentService.selectBy(params);
List copyOldIpSegments = new ArrayList<>(oldIpSegments);
//新规划的IP段
List copyNewIpSegments = new ArrayList<>(ipSegments);
// 得到上次存在,这次被删除的IP
// (原来的IP段集合与现在选择的IP段集合取交集后取反拿到这次需要从ipsegment表中
// 删除的IP段与应用规划的关联关系)
copyOldIpSegments.removeAll(copyNewIpSegments);
// 得到上次不在,这次新增的IP
//(现在选择的IP段集合与原来的IP段集合取交集后取反拿到这次需要从ipsegment表中
// 新增的IP段与应用规划的关联关系)
copyNewIpSegments.removeAll(oldIpSegments);
// 关联关系删除,将删除关联关系的IP段状态恢复
ipsegmentService.updateIpSegmentPlanStatus(copyOldIpSegments,null,null,0L);
// 新增的关联关系保存,并修改IP状态
ipsegmentService.updateIpSegmentPlanStatus(copyNewIpSegments,applicationPlan.getId(),0L,2L);
// 保存应用规划
this.save(applicationPlan);
}
return AjaxResult.success(applicationPlanVo);
3. 逻辑梳理:
3.1 根据在树形表格中选中的IP段ID集合,在t_da_ipsegment 表
中查询出这次需要关联的IP段集合
List ipSegments = ipsegmentService.gets(Arrays.asList(ipSegmentIds));
3.2 创建ApplicationPlan对象,将ApplicationPlanVo对象中的属性拷贝到ApplicationPlan对象中
BeanUtils.copyProperties(applicationPlanVo,applicationPlan);
3.3 判断ApplicationPlan的id是否为空,从而进行不同的业务处理
StringUtils.isBlank(applicationPlan.getId())
1.ID为空,说明是新增应用规划
1.调用this.save()方法保存应用规划的信息到应用规划表 t_da_application_plan
,此时id为空,会默认调用insert()方法
this.save(applicationPlan);
2.在t_da_ipsegment 表
中设置IP段集合与应用规划的关联id(planId
),并设置IP段关联的应用类型(palnType
)和IP段状态值(statusValue
)
// 设置IP段关联的应用规划以及IP段status
ipsegmentService.updateIpSegmentPlanStatus(ipSegments,applicationPlan.getId(),0L,1L);
2.ID不为空,说明是修改应用规划
1.修改应用规划,该应用规划关联的IP段集合也需要修改关联的应用规划id(applicationPlanId
),以及状态值(statusValue
)
2.准备查询参数
Map params = new HashMap();
params.put("planId",applicationPlan.getId());
params.put("planType", 0L);
params.put("topoGraphKind", applicationPlan.getTopoGraphKind());
通过上述参数,在t_da_ipsegment 表
中查询出该应用规划以前关联的IP段集合
List oldIpSegments = ipsegmentService.selectBy(params);
3.分别获取应用规划以前关联的IP段集合()与现在修改应用规划时从树形下拉框中选择的IP段集合()
原来规划的IP段集合: List
现在规划的IP段集合: List
1.原来的IP段集合中排除掉与现在的IP段集合的交集,即为此次需要从t_da_ipsegment 表中删除的IP段与应用规划的关联关系
,以及恢复对应IP段的状态值
// 得到上次存在,这次被删除的IP
// (原来的IP段集合与现在选择的IP段集合取交集后取反拿到这次需要从ipsegment表中
// 删除的IP段与应用规划的关联关系)
copyOldIpSegments.removeAll(copyNewIpSegments);
// IP段与应用规划的关联关系删除,将删除关联关系的IP段状态恢复
ipsegmentService.updateIpSegmentPlanStatus(copyOldIpSegments,null,null,0L);
2.现在的IP段集合中排除掉与原来的IP段集合的交集,即为此次需要向t_da_ipsegment 表中添加的IP段集合与应用规划的关联关系,
以及设置对应的IP段状态值
// 得到上次不在,这次新增的IP
//(现在选择的IP段集合与原来的IP段集合取交集后取反拿到这次需要从ipsegment表中
// 新增的IP段与应用规划的关联关系)
copyNewIpSegments.removeAll(oldIpSegments);
// 新增的关联关系保存,并修改IP状态
ipsegmentService.updateIpSegmentPlanStatus(copyNewIpSegments,applicationPlan.getId(),0L,2L);
3.保存应用规划,调用this.save()方法,由于id不为空,所以会调用update()方法,修改应用规划信息到t_da_application_plan 表
,最后返回 AjaxResult 即可
// 保存应用规划
this.save(applicationPlan);
1.从前端页面选择需要删除的应用规划
2. 逻辑代码:
/**
* 方法说明:删除applicationPlan,需要判断业务关系
* @author wangbin
* @date 2019/9/27 10:40
* @param id
* @return com.sccl.framework.web.domain.AjaxResult
* @throws
*/
@Override
public AjaxResult remove(String id) {
Map params = new HashMap();
// 判断是否关联业务
params.put("dataApplicationPlanId",id);
List businessPlans = businessPlanService.selectBy(params);
if (businessPlans.size() > 0) {
throw new BusinessException(HasBusinessPlanReference);
}else {
params.clear();
ApplicationPlan applicationPlan = this.get(id);
// 清空IP段中applicationPlanId字段
// 修改IP段status的runValue
params.put("planId",applicationPlan.getId());
params.put("planType", 0L);
params.put("topoGraphKind", applicationPlan.getTopoGraphKind());
List ipSegments = ipsegmentService.selectBy(params);
ipsegmentService.updateIpSegmentPlanStatus(ipSegments,null,null,0L);
// 删除自己
this.delete(id);
return AjaxResult.success(RemoveSuccess);
}
}
3. 逻辑梳理:
3.1 首先需要对删除的应用规划进行业务查询,查看该应用规划是否关联了业务,如果关联了业务就不能删除,反之就可以删除
// 判断是否关联业务
params.put("dataApplicationPlanId",id);
List businessPlans = businessPlanService.selectBy(params);
if (businessPlans.size() > 0) {
//有业务关联,抛异常不能删除
throw new BusinessException(HasBusinessPlanReference);
}else{
//无业务关联,可以进行删除操作
}
3.2 没有业务关联时进行应用规划的删除操作,
1.将查询参数先置空
,根据传入的id获取需要删除的应用规划实例,然后填入新的查询参数,查询出需要删除的应用规划关联的IP段集合
params.clear();
ApplicationPlan applicationPlan = this.get(id);
// 清空IP段中applicationPlanId字段
// 修改IP段status的runValue
params.put("planId",applicationPlan.getId());
params.put("planType", 0L);
params.put("topoGraphKind", applicationPlan.getTopoGraphKind());
List ipSegments = ipsegmentService.selectBy(params);
2.将查询出的IP段集合关联的应用规划id置空,应用规划类型置空,ip段的状态值置0L
ipsegmentService.updateIpSegmentPlanStatus(ipSegments,null,null,0L);
3.调用delete()方法删除应用规划,返回AJAXResult即可
// 删除自己
this.delete(id);
return AjaxResult.success(RemoveSuccess);