package com.ruoyi.sy.service.impl; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Predicate; import java.util.stream.Collectors; import com.alibaba.fastjson.JSON; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.common.websocket.util.WebSocketUtils; import com.ruoyi.device.hiksdk.config.MinioClientSingleton; import com.ruoyi.device.hiksdk.util.minio.MinioUtils; import com.ruoyi.sy.domain.ArdSyUser; import com.ruoyi.sy.gps31.PositionContainer; import com.ruoyi.sy.mapper.ArdSyUserMapper; import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.mapper.SysConfigMapper; import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.utils.httpclient.SYCarClient; import com.ruoyi.utils.result.Constants; import com.ruoyi.utils.result.Results; import io.minio.GetPresignedObjectUrlArgs; import io.minio.ListObjectsArgs; import io.minio.PutObjectArgs; import io.minio.Result; import io.minio.http.Method; import io.minio.messages.Contents; import io.minio.messages.Item; import org.springframework.stereotype.Service; import com.ruoyi.sy.mapper.ArdSyCarMapper; import com.ruoyi.sy.domain.ArdSyCar; import com.ruoyi.sy.service.IArdSyCarService; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import static com.ruoyi.common.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS; /** * 三一车辆Service业务层处理 * * @author ard * @date 2023-06-26 */ @Service public class ArdSyCarServiceImpl implements IArdSyCarService { @Resource private ArdSyCarMapper ardSyCarMapper; @Resource private SysConfigMapper sysConfigMapper; @Resource private ArdSyUserMapper ardSyUserMapper; @Resource private SysUserMapper userMapper; /** * 查询三一车辆 * * @param id 三一车辆主键 * @return 三一车辆 */ @Override public ArdSyCar selectArdSyCarById(String id) { return ardSyCarMapper.selectArdSyCarById(id); } /** * 查询三一车辆列表 * * @param ardSyCar 三一车辆 * @return 三一车辆 */ @Override public List selectArdSyCarList(ArdSyCar ardSyCar) { return ardSyCarMapper.selectArdSyCarList(ardSyCar); } /** * 新增三一车辆 * * @param ardSyCar 三一车辆 * @return 结果 */ @Override public int insertArdSyCar(ArdSyCar ardSyCar) { return ardSyCarMapper.insertArdSyCar(ardSyCar); } /** * 修改三一车辆 * * @param ardSyCar 三一车辆 * @return 结果 */ @Override public int updateArdSyCar(ArdSyCar ardSyCar) { return ardSyCarMapper.updateArdSyCar(ardSyCar); } /** * 批量删除三一车辆 * * @param ids 需要删除的三一车辆主键 * @return 结果 */ @Override public int deleteArdSyCarByIds(String[] ids) { List result = ardSyCarMapper.selectArdSyCarByIds(ids); List objectNames = new ArrayList(); for(ArdSyCar ardSyCar : result){ if(ardSyCar.getCarPicture() != null && !ardSyCar.getCarPicture().equals("")){ objectNames.add(ardSyCar.getCarPicture().split("/sycar/")[1]); } } MinioUtils.removeObjects("sycar", objectNames); return ardSyCarMapper.deleteArdSyCarByIds(ids); } /** * 删除三一车辆信息 * * @param id 三一车辆主键 * @return 结果 */ @Override public int deleteArdSyCarById(String id) { return ardSyCarMapper.deleteArdSyCarById(id); } /** * 获取未挂接权限的三一车辆 */ @Override public Map getArdSyCarNoRight(String userId) { SysConfig config = new SysConfig(); config.setConfigKey("syCarPT"); List sysConfigResult = sysConfigMapper.selectConfigList(config); String syURL = ""; Map result = new HashMap(); if(sysConfigResult.size() == 0){ result.put("data","三一车辆url没有录入"); result.put("code","500"); return result; }else{ syURL = sysConfigResult.get(0).getConfigValue(); ArdSyUser ardSyUserPara = new ArdSyUser(); ardSyUserPara.setSysUserId(userId); List ardSyUserList = ardSyUserMapper.selectArdSyUserList(ardSyUserPara); if(ardSyUserList.size() == 0){ result.put("data","用户未挂接三一车辆"); result.put("code","500"); return result; }else{ ArdSyUser ardSyUser = ardSyUserList.get(0); Map LogInResult = SYCarClient.logIn(syURL,ardSyUser.getUserId(), ardSyUser.getPassword()); String sessionId = (String) LogInResult.get("sessionId"); Map carListMap = SYCarClient.getCarList(syURL,sessionId); if(((String)carListMap.get("rspCode")).equals("1")){ List> list = (List>) carListMap.get("list"); ArdSyCar ardSyCar = new ArdSyCar(); List ardSyCarList = ardSyCarMapper.selectArdSyCarList(ardSyCar); List carIdList = new ArrayList(); for(ArdSyCar innerArdSyCar : ardSyCarList){ carIdList.add(innerArdSyCar.getCarId()); } List> carList = list.stream().filter(new Predicate>(){ @Override public boolean test(Map map) { return !carIdList.contains((String)map.get("carId")); } }).collect(Collectors.toList()); result.put("data",carList); result.put("code","200"); return result; }else{ result.put("data","三一车辆平台出错"); result.put("code","500"); return result; } } } } @Override public Map getArdSyCarAll(String userId) { SysConfig config = new SysConfig(); config.setConfigKey("syCarPT"); List sysConfigResult = sysConfigMapper.selectConfigList(config); String syURL = ""; Map result = new HashMap(); if(sysConfigResult.size() == 0){ result.put("data","三一车辆url没有录入"); result.put("code","500"); return result; }else{ syURL = sysConfigResult.get(0).getConfigValue(); ArdSyUser ardSyUserPara = new ArdSyUser(); ardSyUserPara.setSysUserId(userId); List ardSyUserList = ardSyUserMapper.selectArdSyUserList(ardSyUserPara); if(ardSyUserList.size() == 0){ result.put("data","用户未挂接三一车辆"); result.put("code","500"); return result; }else{ ArdSyUser ardSyUser = ardSyUserList.get(0); Map LogInResult = SYCarClient.logIn(syURL,ardSyUser.getUserId(), ardSyUser.getPassword()); String sessionId = (String) LogInResult.get("sessionId"); Map carListMap = SYCarClient.getCarList(syURL,sessionId); if(((String)carListMap.get("rspCode")).equals("1")){ List> list = (List>) carListMap.get("list"); /*ArdSyCar ardSyCar = new ArdSyCar(); List ardSyCarList = ardSyCarMapper.selectArdSyCarList(ardSyCar); List carIdList = new ArrayList(); for(ArdSyCar innerArdSyCar : ardSyCarList){ carIdList.add(innerArdSyCar.getCarId()); } List> carList = list.stream().filter(new Predicate>(){ @Override public boolean test(Map map) { return !carIdList.contains((String)map.get("carId")); } }).collect(Collectors.toList()); result.put("data",carList);*/ result.put("data",list); result.put("code","200"); return result; }else{ result.put("data","三一车辆平台出错"); result.put("code","500"); return result; } } } } @Override public List> getAllCarModel() { boolean exsit = MinioUtils.exitsBucket("sycar"); if (exsit) { List> listObjetcName = new ArrayList<>(); try { ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder().prefix("carmodel/").bucket("sycar").build(); Iterable> myObjects = MinioClientSingleton.getMinioClient().listObjects(listObjectsArgs); for (Result result : myObjects) { Item item = result.get(); Map map = new HashMap(); map.put("carModel","sycar/" + item.objectName()); switch(item.objectName()){ case "carmodel/aodi.glb":map.put("carType","奥迪");break; case "carmodel/baolai.glb":map.put("carType","宝来");break; case "carmodel/bieke.glb":map.put("carType","别克");break; case "carmodel/bus1.glb":map.put("carType","大客车");break; case "carmodel/car.glb":map.put("carType","小型车");break; case "carmodel/fire(1).glb":map.put("carType","消防车");break; case "carmodel/fute.glb":map.put("carType","福特");break; case "carmodel/jingche_a.glb":map.put("carType","警车");break; case "carmodel/jiuhu.glb":map.put("carType","救护车");break; case "carmodel/oil.glb":map.put("carType","油罐车");break; case "carmodel/truck.glb":map.put("carType","工程用车");break; case "carmodel/van1.glb":map.put("carType","大货车");break; default: break; } listObjetcName.add(map); } return listObjetcName; } catch (Exception ex) { //log.error("minio获取桶下对象异常:" + ex.getMessage()); } } return null; } @Override public String uploadCarPicture(String id, MultipartFile carPicture) { if(id != null && !id.equals("")){//id为非必要 ArdSyCar ardSyCarr = ardSyCarMapper.selectArdSyCarById(id); List objectNames = new ArrayList(); if(ardSyCarr.getCarPicture() != null || !ardSyCarr.getCarPicture().equals("")){ String objectName = ardSyCarr.getCarPicture().split("/sycar/")[1]; objectNames.add(objectName); MinioUtils.removeObjects("sycar", objectNames); } } //判断文件是否为空 if (null == carPicture || 0 == carPicture.getSize()) { return ""; } boolean exsit = MinioUtils.exitsBucket("sycar"); if (!exsit) { boolean bucket = MinioUtils.createBucket("sycar"); } //文件名 String originalFilename = carPicture.getOriginalFilename(); //新的文件名 String fileName = "carpicture/" + IdUtils.fastSimpleUUID()+"_"+ originalFilename; try { InputStream inputStream = carPicture.getInputStream(); /*上传对象*/ PutObjectArgs putObjectArgs = PutObjectArgs .builder() .bucket("sycar") .object(fileName) .stream(inputStream, carPicture.getSize(), -1) .contentType(carPicture.getContentType()) .build(); MinioClientSingleton.getMinioClient().putObject(putObjectArgs); inputStream.close(); /*获取url*/ GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs .builder() .bucket("sycar") .object(fileName) .method(Method.GET) .build(); String presignedObjectUrl = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs); String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?")); if(id != null && !id.equals("")){//id为非必要 ArdSyCar ardSyCar = new ArdSyCar(); ardSyCar.setId(id); ardSyCar.setCarPicture(ObjectUrl); ardSyCarMapper.updateArdSyCar(ardSyCar); } return ObjectUrl; } catch (Exception ex) { return ""; } } // @Override // public List getArdSyCarWithRightByCarIdList(List carIdList) { // List result = ardSyCarMapper.getArdSyCarWithRightByCarIdList(carIdList); // return result; // } @Override public Results carListById(String id) { try { List list = ardSyCarMapper.carListById(id); if(list.size()>0){ ArdSyCar ardSyCar = list.get(0); return Results.succeed(ardSyCar); }else { return Results.succeed(); } } catch (Exception e) { return Results.error(e.toString()); } } @Override public Map getArdSyCarAndDeptByCarId(String carId) { Map result = ardSyCarMapper.getArdSyCarAndDeptByCarId(carId); return result; } @Override public void sendArdSyCarPosition() { for(String key : ONLINE_USER_SESSIONS.keySet()){ SysUser sysUser = userMapper.selectUserById(key); String deptId = String.valueOf(sysUser.getDeptId()); Map> map = PositionContainer.getDeptPositionMap().get(deptId); System.out.println("/////////////"); System.out.println(PositionContainer.getDeptPositionMap()); Map data = new HashMap(); data.put(30000, map.values()); WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(data)); } } }