Newer
Older
alarm / WebRoot / WEB-INF / classes / com / casic / dma / model / manager / PosDMAManager.java
zhout on 2 Mar 2022 4 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.DMAInfo;
import com.casic.dma.model.domain.PosDMA;
import com.casic.dma.model.domain.PositionInfo;
import com.casic.dma.model.dto.PositionForm;
import com.casic.dma.model.json.PositionInfoJSON;
import org.hibernate.Criteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.*;

@Service
public class PosDMAManager extends HibernateEntityDao<PosDMA> {

    @Resource
    private PositionInfoManager positionInfoManager;

    @Resource
    private DMAInfoManager dmaInfoManager;

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

    /**
     * 获取DMA子分区区域下的所有监测点
     * @param dmaInfoID
     * @param pageNum
     * @param rows
     * @return
     */
    public Map<String, Object> findPositionDTOByDma(Long dmaInfoID, int pageNum, int rows) {
        Criteria criteria = getCriteria();
        criteria.setProjection(Projections.property("positionInfo"));
        criteria.add(Restrictions.eq("active", true));
        criteria.createAlias("dmaInfo", "dmaInfo");
        criteria.add(Restrictions.eq("dmaInfo.ID", dmaInfoID));
        criteria.createAlias("positionInfo", "positionInfo");
        criteria.add(Restrictions.eq("positionInfo.active", true));
        criteria.addOrder(Order.asc("positionInfo.id"));
        Page page = pagedQuery(criteria, pageNum, rows);
        List<PositionInfoJSON> jsons = new ArrayList<PositionInfoJSON>();
        List<PositionInfo> pos = (List<PositionInfo>) page.getResult();
        for (PositionInfo p : pos) {
            jsons.add(new PositionInfoJSON(p));
        }
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("total", page.getTotalCount());
        map.put("rows", jsons);
        return map;
    }

    /**
     * 删除子区域绑定的监测点{@link com.casic.simulation.dma.model.domain.PosDMA}
     * @param dmaInfo
     */
    @Transactional
    public void removeByDma(DMAInfo dmaInfo) {
        String hql = "delete from PosDMA posDma where dmaInfo=:dma";
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("dma", dmaInfo);
        batchUpdate(hql, map);
    }

    /**
     * 增加新的监测点PositionInfo&PosDMA信息
     * @param model
     * @return
     */
    public Map<String, Object> addNewPosition(PositionForm model) {
        PositionInfo positionInfo = new PositionInfo();
        positionInfo.setActive(true);
        positionInfo.setBDataPosType(model.getBDataPosType());
        positionInfo.setComment(model.getComment());
        positionInfo.setIsUse(model.getIsUse());
        positionInfo.setLatitude(model.getLatitude());
        positionInfo.setLongitude(model.getLongitude());
        positionInfo.setName(model.getName());
        positionInfo.setOperator(model.getOperator());
        positionInfo.setOperateTime(new Date());
        positionInfo.setSortCode(model.getSortCode());
        positionInfoManager.save(positionInfo);

        DMAInfo dmaInfo = dmaInfoManager.get(model.getDmaID());

        PosDMA posDma = new PosDMA();
        posDma.setDmaInfo(dmaInfo);
        posDma.setPositionInfo(positionInfo);
        posDma.setDirection(model.getDirection());
        posDma.setActive(true);
        save(posDma);

        Map<String,Object> map = new HashMap<String, Object>();
        map.put("success",true);
        map.put("msg","新建成功!");
        return map;
    }

    /**
     * 关联已有监测点
     * @param model
     * @return
     */
    public Map<String, Object> appendPosition(PositionForm model) {
        Map<String,Object> map = new HashMap<String, Object>();
        PositionInfo pos = positionInfoManager.get(model.getID());
        DMAInfo dmaInfo = dmaInfoManager.getDMAByID(model.getDmaID());
        if (pos == null || dmaInfo == null) {
            map.put("success", false);
            map.put("msg", "监测点或分区已删除!");
            return map;
        }

        Criteria criteria = getCriteria();
        criteria.add(Restrictions.eq("dmaInfo", dmaInfo));
        criteria.add(Restrictions.eq("positionInfo", pos));
        PosDMA pd = (PosDMA) criteria.setMaxResults(1).uniqueResult();
        if(null == pd) {
            pd = new PosDMA();
            pd.setDmaInfo(dmaInfo);
            pd.setActive(true);
            pd.setPositionInfo(pos);
        }
        pd.setDirection(model.getDirection());
        save(pd);
        map.put("success",true);
        map.put("msg","添加成功!");
        return map;
    }
}