FeatureServiceImpl.java 6.26 KB
package com.objecteye.service.impl;

import cn.hutool.core.date.DateUtil;
import com.objecteye.entity.FeatureResultMsg;
import com.objecteye.entity.PageResult;
import com.objecteye.entity.SyFeature;
import com.objecteye.entity.SyPersonnel;
import com.objecteye.service.DeployService;
import com.objecteye.service.FeatureService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.*;

/**
 * 服务实现层
 *
 * @author Administrator
 */
@Service
public class FeatureServiceImpl implements FeatureService {

    @Autowired
    private DeployService deployService;
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public List<SyFeature> findAll() {
        return mongoTemplate.find(Query.query(Criteria.where("isDelete").is(0).and("isSingle").is(0)), SyFeature.class);
    }

    /**
     * 按分页查询
     */
    @Override
    public PageResult findPage(int pageNum, int pageSize) {
        List<SyFeature> result = mongoTemplate.find(Query.query(Criteria.where("isDelete").is(0).and("isSingle").is(0))
                .limit(pageSize).skip((pageNum - 1) * pageSize), SyFeature.class);
        long count = mongoTemplate.count(Query.query(Criteria.where("isDelete").is(0).and("isSingle").is(0)), SyFeature.class);

        List<FeatureResultMsg> featureResultMsgs = new ArrayList<>();
        for (SyFeature feature : result) {
            FeatureResultMsg featureResultMsg = new FeatureResultMsg();
            featureResultMsg.setId(feature.getId());
            featureResultMsg.setName(feature.getName());
            featureResultMsg.setCount(feature.getCount());
            featureResultMsg.setCreateDate(feature.getCreateDate());
            featureResultMsgs.add(featureResultMsg);
        }
        return new PageResult<>((long) Math.ceil((double) count / pageSize), featureResultMsgs);
    }

    /**
     * 增加
     *
     * @return
     */
    @Override
    public String add(SyFeature feature) {
        String strDate = DateUtil.now();
        feature.setCount(0);
        feature.setCreateDate(strDate);
        feature.setUpdateDate(strDate);
        feature.setIsDelete(0);
        feature.setIsSingle(0);
        feature = mongoTemplate.insert(feature);
        return feature.getId();
    }


    /**
     * 修改
     *
     * @return
     */
    @Override
    public String update(SyFeature feature) {
        String now = DateUtil.now();
        feature.setUpdateDate(now);
        mongoTemplate.save(feature);
        return feature.getId();
    }

    /**
     * 根据ID获取实体
     *
     * @param id
     * @return
     */
    @Override
    public SyFeature findOne(String id) {
        return mongoTemplate.findOne(Query.query(Criteria.where("id").is(id)), SyFeature.class);
    }

    /**
     * 批量删除
     *
     * @param ids
     */
    @Override
    public void delete(List<String> ids) {
        for (String id : ids) {
            List<String> deployList = deployService.getDeployListByLibAndDeployType(id, 2);
            List<SyPersonnel> syPersonnels = mongoTemplate.find(Query.query(Criteria.where("fid").is(id)), SyPersonnel.class);
            mongoTemplate.updateMulti(Query.query(Criteria.where("fid").is(id)), Update.update("status", 1), SyPersonnel.class);
            if (syPersonnels.size() > 0) {
                for (SyPersonnel syPersonnel : syPersonnels) {
                    redisTemplate.opsForHash().delete("personUrl", syPersonnel.getId());
                }
            }
            if (deployList != null && deployList.size() > 0) {
                for (String deployId : deployList) {
                    String key = deployId + "|" + id;
                    redisTemplate.opsForHash().delete(key);
                    String[] deploy = {deployId};
                    deployService.delete(Arrays.asList(deploy));
                }
            }
        }
        mongoTemplate.updateMulti(Query.query(Criteria.where("id").in(ids)), Update.update("isDelete", 1), SyFeature.class);
    }


    @Override
    public PageResult findPage(SyFeature feature, int pageNum, int pageSize) {
        Criteria criteria = Criteria.where("isDelete").is(0);
        if (feature != null) {
            if (feature.getName() != null && feature.getName().length() > 0) {
                criteria.and("name").regex(".*" + feature.getName() + ".*");
            }
            if (feature.getCreateDate() != null && feature.getCreateDate().length() > 0) {
                criteria.and("createDate").regex(".*" + feature.getCreateDate() + ".*");
            }
            if (feature.getUpdateDate() != null && feature.getUpdateDate().length() > 0) {
                criteria.and("updateDate").regex(".*" + feature.getUpdateDate() + ".*");
            }
            if (feature.getDescription() != null && feature.getDescription().length() > 0) {
                criteria.and("description").regex(".*" + feature.getDescription() + ".*");
            }
        }
        List<SyFeature> syFeatures = mongoTemplate.find(Query.query(criteria).limit(pageSize).skip((pageNum - 1) * pageSize), SyFeature.class);
        long total = mongoTemplate.count(Query.query(criteria), SyFeature.class);
        return new PageResult<>((long) Math.ceil((double) total / pageSize), syFeatures);
    }

    /**
     * @param feature
     * @return
     */
    @Override
    public String updateCountById(SyFeature feature) {
        mongoTemplate.save(feature);
        return feature.getId();
    }

    @Override
    public List<Map<String, String>> findAllName() {
        List<Map<String, String>> list = new ArrayList<>();
        List<SyFeature> syFeatures = findAll();
        for (SyFeature feature : syFeatures) {
            Map<String, String> map = new HashMap<>(16);
            String name = feature.getName();
            String id = feature.getId();
            map.put("value", id + "");
            map.put("name", name);
            list.add(map);
        }
        return list;
    }
}