Newer
Older
alarm / WebRoot / WEB-INF / classes / com / casic / dma / model / manager / DMAInfoManager.java
zhout on 2 Mar 2022 6 KB first commit
package com.casic.dma.model.manager;

import com.casic.core.hibernate.HibernateEntityDao;
import com.casic.core.page.Page;
import com.casic.dma.model.domain.DMAArea;
import com.casic.dma.model.domain.DMAInfo;
import com.casic.dma.model.domain.PosDMA;
import com.casic.dma.model.domain.PositionInfo;
import com.casic.dma.model.dto.WaterPipelineRegionForm;
import com.casic.dma.model.json.WaterPipelineRegionDataJSON;
import org.hibernate.Criteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class DMAInfoManager extends HibernateEntityDao<DMAInfo> {

    @Resource
    private PosDMAManager posDMAManager;

    @Resource
    private DevPosManager devPosManager;

    @Resource
    private DMAAreaManager dmaAreaManager;

    @Resource
    private DMASaleWaterManager dmaSaleWaterManager;

    public Criteria getCriteria() {
        return getSession().createCriteria(DMAInfo.class);
    }

    /**
     * DMA模型管理
     * 获取DMA模型分区结构,要求分区active===true
     * @return
     */
    public List<DMAInfo> findAllActiveDmaInfo() {
        Criteria criteria = getSession().createCriteria(DMAInfo.class);
        criteria.addOrder(Order.desc("id"));
        criteria.add(Restrictions.eq("active", true));
        return criteria.list();
    }

    /**
     * 根据父区域NO.获取子分区信息
     * @param parentNo
     * @param pageNum
     * @param rows
     * @return
     */
    public Map<String, Object> querySubDMAByID(Long parentNo, int pageNum, int rows) {
        Criteria criteria = getSession().createCriteria(DMAInfo.class);
        criteria.addOrder(Order.desc("ID"));
        criteria.add(Restrictions.eq("active", true));
        criteria.add(Restrictions.eq("BDataParent_DMA", parentNo.toString()));
        Page page = pagedQuery(criteria, pageNum, rows);
        List<DMAInfo> dmaList = (List<DMAInfo>) page.getResult();
        List<WaterPipelineRegionDataJSON> jsons = new ArrayList<WaterPipelineRegionDataJSON>();
        for (DMAInfo dmaInfo : dmaList) {
            jsons.add(new WaterPipelineRegionDataJSON(dmaInfo));
        }
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("total", page.getTotalCount());
        map.put("rows", jsons);
        return map;
    }

    /**
     * 根据DMA分区NO获取DMAInfo
     * @param dmaid
     * @return
     */
    public DMAInfo getDMAByID(Long dmaid) {
        Criteria criteria = getSession().createCriteria(DMAInfo.class);
        criteria.add(Restrictions.eq("active", true));
        criteria.add(Restrictions.eq("ID", dmaid));
        return (DMAInfo)criteria.setMaxResults(1).uniqueResult();
    }

    /**
     * 删除分区
     * @param dmaID
     * @return
     */
    @Transactional
    public Map<String, Object> removeModel(Long dmaID) {
        Map<String, Object> map = new HashMap<String, Object>();
        Criteria criteria = getCriteria();
        criteria.add(Restrictions.eq("active", true));
        criteria.add(Restrictions.eq("ID", dmaID));
        DMAInfo dmaInfo = (DMAInfo)criteria.setMaxResults(1).uniqueResult();
        if (hasChildren(dmaInfo)) {
            map.put("success", false);
            map.put("msg", "请先删除子分区!");
            return map;
        }
        if(null != dmaInfo){
            for (PosDMA pos : dmaInfo.getPosInDmaList()) {
                deletePosInfo(pos.getPositionInfo());
            }
            dmaAreaManager.removeByDma(dmaInfo);
            dmaSaleWaterManager.removeByDma(dmaInfo);
            dmaInfo.setActive(false);
            save(dmaInfo);
        }
        map.put("success",true);
        map.put("msg","删除成功!");
        return map;
    }

    private boolean hasChildren(DMAInfo dmaInfo) {
        if (null != dmaInfo) {
            Criteria criteria = getCriteria();
            criteria.add(Restrictions.eq("active", true));
            criteria.add(Restrictions.eq("BDataParent_DMA", dmaInfo.getID().toString()));
            if (criteria.list().size() > 0) {
                return true;
            }
        }
        return false;
    }

    @Transactional
    private void deletePosInfo(PositionInfo positionInfo) {
        Map<String, Object> map = new HashMap<String, Object>();
        String hql = "delete from PosDMA where positionInfo=:pos";
        map.put("pos", positionInfo);
        posDMAManager.batchUpdate(hql, map);
    }

    /**
     * 增加分区信息
     * @param model
     * @return
     */
    @Transactional
    public Map<String, Object> saveModel(WaterPipelineRegionForm model) {
        Map<String, Object> map = new HashMap<String, Object>();
        if (isExist(model)) {
            map.put("success", false);
            map.put("msg", "分区编号或分区编码重复!");
            return map;
        }
        DMAInfo dma = new DMAInfo();
        dma.setName(model.getName());
        dma.setNO(model.getNo());
        dma.setBDataParent_DMA(model.getBDataParent_DMA());
        dma.setIcf(model.getIcf());
        dma.setLeakControlRate(model.getLeakControlRate());
        dma.setNormalWater(model.getNormalWater());
        dma.setPipeLeng(model.getPipeLeng());
        dma.setPipeLinks(model.getPipeLinks());
        dma.setSaleWater(model.getSaleWater());
        dma.setUserCount(model.getUserCount());
        dma.setUserPipeLeng(model.getUserPipeLeng());
        save(dma);

        DMAArea dmaArea = new DMAArea();
        dmaArea.setActive(true);
        dmaArea.setDmaInfo(dma);
        dmaArea.setRegionErea(model.getRegion());
        dmaAreaManager.save(dmaArea);
        map.put("success", true);
        map.put("msg", "保存成功!");
        return map;
    }

    public boolean isExist(WaterPipelineRegionForm model) {
        Criteria criteria = getCriteria();
        criteria.add(Restrictions.eq("active", true));
        criteria.add(Restrictions.or(Restrictions.eq("NO", model.getNo()), Restrictions.eq("name", model.getName())));
        if (criteria.list().size() > 0) {
            return true;
        }
        return false;
    }

}