PersonnelServiceImpl.java 9.55 KB

package com.objecteye.service.impl;

import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.objecteye.entity.PageResult;
import com.objecteye.entity.PersonnelResultMsg;
import com.objecteye.entity.SyFeature;
import com.objecteye.entity.SyPersonnel;
import com.objecteye.service.DeployService;
import com.objecteye.service.FeatureService;
import com.objecteye.service.PersonnelService;
import com.objecteye.utils.GlobalUtil;
import com.objecteye.utils.VehicleEngine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
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.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * 服务实现层
 *
 * @author Administrator
 */

@Service
public class PersonnelServiceImpl implements PersonnelService {

    @Autowired
    private FeatureService featureService;
    @Autowired
    private VehicleEngine vehicleEngine;
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private DeployService deployService;
    @Autowired
    private MongoTemplate mongoTemplate;

    @Value("${picture.url}")
    private String picIpAndPort;
    @Value("${addUrlToDeployDb}")
    private String addUrlToDeployDb;


    /**
     * 查询全部
     */

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

    /**
     * 按分页查询
     */

    @Override
    public PageResult findPage(int pageNum, int pageSize) {
        List<SyPersonnel> syPersonnels = mongoTemplate
                .find(Query.query(Criteria.where("status").is(0)).limit(pageSize).skip((pageNum - 1) * pageSize), SyPersonnel.class);
        long count = mongoTemplate.count(Query.query(Criteria.where("status").is(0)), SyPersonnel.class);
        return new PageResult<>((long) Math.ceil((double) count / pageSize), syPersonnels);
    }


    /**
     * 增加
     *
     * @return
     */

    @Override
    public String add(SyPersonnel personnel) {
        String now = DateUtil.now();
        personnel.setCreateDate(now);
        personnel.setUpdateDate(now);
        personnel.setStatus(0);
        personnel.setConreason(null);
        personnel = mongoTemplate.insert(personnel);
        return personnel.getId();
    }


    /**
     * 修改
     */

    @Override
    public void update(SyPersonnel personnel) {
        String now = DateUtil.now();
        personnel.setStatus(0);
        personnel.setUpdateDate(now);
        mongoTemplate.save(personnel);
    }


    /**
     * 根据ID获取实体
     *
     * @param id
     * @return
     */

    @Override
    public SyPersonnel findOne(String id) {
        return mongoTemplate.findOne(Query.query(Criteria.where("id").is(id)), SyPersonnel.class);
    }


    /**
     * 批量删除
     *
     * @param ids
     */

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void delete(String[] ids) {
        for (String id : ids) {
            SyPersonnel syPersonnel = mongoTemplate.findOne(Query.query(Criteria.where("id").is(id)), SyPersonnel.class);
            syPersonnel.setStatus(1);
            mongoTemplate.save(syPersonnel);
            String fid = syPersonnel.getFid();
            long personCountByFid = findPersonCountByFid(fid);
            SyFeature syFeature = mongoTemplate.findOne(Query.query(Criteria.where("id").is(fid)), SyFeature.class);
            syFeature.setCount((int) personCountByFid);
            mongoTemplate.save(syFeature);
            List<String> deployListByLibAndDeployType = deployService.getDeployListByLibAndDeployType(fid, 2);
            if (deployListByLibAndDeployType != null && deployListByLibAndDeployType.size() > 0) {
                for (String s : deployListByLibAndDeployType) {
                    String key = s + "|" + fid;
                    if (redisTemplate.opsForHash().hasKey(key, id)) {
                        redisTemplate.opsForHash().delete(key, id);
                    }
                }
            }
            String imageUrl = syPersonnel.getImageUrl();
            String key = id + "&" + fid + "&" + imageUrl;
            HashMap<String, Object> map = new HashMap<>();
            map.put("retrieveKey", key);
            redisTemplate.opsForHash().delete("personUrl", id);
            vehicleEngine.deleteDataFromDeployDb(map);
        }
    }


    @Override
    public PageResult findPage(int fid, String name, int pageNum, int pageSize) {
        ArrayList<PersonnelResultMsg> list = new ArrayList<>();
        Criteria criteria = Criteria.where("status").is(0).and("fid").is(fid);
        if (!name.equals("")) {
            criteria.and("name").regex(".*" + name + ".*");
        }
        Criteria criteria1 = Criteria.where("status").is(0).and("fid").is(fid);

        if (!name.equals("")) {
            criteria1.and("createDate").regex(".*" + name + ".*");
        }
        criteria.orOperator(criteria1);

        List<SyPersonnel> result = mongoTemplate.find(Query.query(criteria).skip((pageNum - 1) * pageSize).limit(pageSize), SyPersonnel.class);
        long count = mongoTemplate.count(Query.query(criteria), SyPersonnel.class);
        int size = result.size();
        if (size > 0) {
            for (SyPersonnel syPersonnel : result) {
                String personnelId = syPersonnel.getId();
                int alarmNum = 0;
                PersonnelResultMsg personnelResultMsg = new PersonnelResultMsg(personnelId, syPersonnel.getName(), syPersonnel.getCreateDate(), syPersonnel.getConreason(), alarmNum, syPersonnel.getImageUrl(), syPersonnel.getIndentity());

                list.add(personnelResultMsg);
            }
        }
        return new PageResult<>((long) Math.ceil((double) count / pageSize), list);
    }

    @Override
    public long findPersonCountByFid(String fid) {
        return mongoTemplate.count(Query.query(Criteria.where("status").is(0).and("fid").is(fid)), SyPersonnel.class);
    }


    @Override
    public List<SyPersonnel> findPersonIdByFid(String fid) {
        return mongoTemplate.find(Query.query(Criteria.where("status").is(0).and("fid").is(fid)), SyPersonnel.class);
    }

    /**
     * 上传人像到人像库
     *
     * @param uploadFiles
     * @param featureId
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public String uploadFiles(MultipartFile[] uploadFiles, String featureId) {
        int count = 0;
        SyFeature one = featureService.findOne(featureId);
        System.out.println(one.getCreateDate());
        List<String> deployListByLibAndDeployType = deployService.getDeployListByLibAndDeployType(featureId, 2);

        if (uploadFiles.length > 0) {
            int len = uploadFiles.length;
            for (MultipartFile multipartFile : uploadFiles) {
                String fileName = multipartFile.getOriginalFilename();
                System.out.println(fileName);
                fileName = fileName.replaceAll("\\\\", "/");
                String personName = fileName.split("\\_")[0];
                if (personName.contains("/")) {
                    String[] personNameArray = personName.split("/");
                    personName = personNameArray[personNameArray.length - 1];
                }
                String personIndentity = fileName.split("\\_")[1].split("\\.")[0];
                String picPath = GlobalUtil.dbPath1() + File.separator + "picture" + File.separator + fileName;
                String imageUrl = picIpAndPort + fileName;
                File newFile = new File(picPath);
                try {
                    multipartFile.transferTo(newFile);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                SyPersonnel syPersonnel = new SyPersonnel();
                syPersonnel.setName(personName);
                syPersonnel.setIndentity(personIndentity);
                syPersonnel.setImageUrl(imageUrl);
                syPersonnel.setFid(featureId);
                String addId = add(syPersonnel);
                String personnelId = syPersonnel.getId();
                String key = personnelId + "&" + featureId + "&" + imageUrl;
                Map<String, Object> map = new HashMap<>(16);
                map.put("TPXX", imageUrl);
                map.put("retrieveKey", key);
                String s = vehicleEngine.addUrlToDeployDb(map);
                for (String deployId : deployListByLibAndDeployType) {
                    String key1 = deployId + "|" + featureId;
                    redisTemplate.opsForHash().put(key1, personnelId, 0);
                }
                redisTemplate.opsForHash().put("personUrl", personnelId, imageUrl);
                String code = JSONObject.parseObject(s).getString("code");
                if ("0".equals(code)) {
                    if (addId != null) {
                        count++;
                    }
                }
            }
            Integer count1 = one.getCount();
            one.setCount(count + count1);
            featureService.updateCountById(one);
            return "上传的文件共有" + len + ",成功上传的个数为: " + count;
        }
        return null;
    }
}