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.mongodb.core.query.Update; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; 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 findAll() { return mongoTemplate.find(Query.query(Criteria.where("status").is(0)), SyPersonnel.class); } /** * 按分页查询 */ @Override public PageResult findPage(int pageNum, int pageSize) { List 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 public void delete(List ids) { for (String id : ids) { SyPersonnel syPersonnel = mongoTemplate.findOne(Query.query(Criteria.where("id").is(id)), SyPersonnel.class); if (syPersonnel == null) { continue; } mongoTemplate.updateMulti(Query.query(Criteria.where("id").is(id)), Update.update("status", 1), SyPersonnel.class); String fid = syPersonnel.getFid(); int personCountByFid = (int) findPersonCountByFid(fid); mongoTemplate.updateMulti(Query.query(Criteria.where("id").is(fid)), Update.update("count", personCountByFid), SyFeature.class); List 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 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 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 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 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 public String uploadFiles(MultipartFile[] uploadFiles, String featureId) { int count = 0; SyFeature one = featureService.findOne(featureId); System.out.println(one.getCreateDate()); List 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 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; } }