1-贵州集约化项目-数据网业务梳理

应用规划

1.保存应用规划的业务逻辑

  1. 新增应用规划,从下拉框的树形表格中,选择IP段与应用规划进行关联(可以多选)
1-贵州集约化项目-数据网业务梳理_第1张图片
  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 copyOldIpSegments = new ArrayList<>(oldIpSegments);
现在规划的IP段集合: List copyNewIpSegments = new ArrayList<>(ipSegments);

1-贵州集约化项目-数据网业务梳理_第2张图片
          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);
2.删除应用规划的业务逻辑

  1.从前端页面选择需要删除的应用规划

1-贵州集约化项目-数据网业务梳理_第3张图片

  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);

你可能感兴趣的:(贵州集约化项目记录)