package com.fdkankan.ucenter.service.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fdkankan.common.constant.SceneConstant; import com.fdkankan.common.exception.BusinessException; import com.fdkankan.common.util.AesUtil; import com.fdkankan.common.util.FileUtils; import com.fdkankan.ucenter.common.FileUtil; import com.fdkankan.ucenter.common.RSAEncrypt; import com.fdkankan.ucenter.common.Result; import com.fdkankan.ucenter.common.constants.ConstantFilePath; import com.fdkankan.ucenter.common.constants.NacosProperty; import com.fdkankan.ucenter.constant.CameraConstant; import com.fdkankan.ucenter.constant.LoginConstant; import com.fdkankan.ucenter.entity.VaildCameras; import com.fdkankan.ucenter.mapper.IVaildCamerasMapper; import com.fdkankan.ucenter.service.IVaildCamerasService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; /** *

* 代理商可用相机表 服务实现类 *

* * @author * @since 2022-11-02 */ @Service public class VaildCamerasServiceImpl extends ServiceImpl implements IVaildCamerasService { @Override public Result getVaildCameras(String file, String companyName) throws Exception { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(VaildCameras::getCompanyName,companyName); List vaildCamerasEntityList = this.list(wrapper); if(vaildCamerasEntityList == null || vaildCamerasEntityList.size() <= 0){ throw new BusinessException(CameraConstant.FAILURE_CODE_6011, CameraConstant.FAILURE_MSG_6011); } //生成需要加密的文件 UUID uuid = UUID.randomUUID(); String key = uuid.toString().replace("-","").substring(0,16); JSONArray array = new JSONArray(); JSONObject object = null; for(VaildCameras vaildCamerasEntity: vaildCamerasEntityList){ object = new JSONObject(); object.put("Devicemac", vaildCamerasEntity.getDevicemac()); array.add(object); } String aesData = AesUtil.encryptAES(array.toString(), key, key); String dataPath = ConstantFilePath.AGENT_PATH + companyName + File.separator + System.currentTimeMillis() + "_" + Math.random()*100 + "_key.txt"; FileUtils.writeFile(dataPath, key); String secretPath = ConstantFilePath.AGENT_PATH + companyName + "/secret/"; String fileName = System.currentTimeMillis() + "_public.pem"; File targetFile = new File(secretPath + fileName); if(!targetFile.getParentFile().exists()){ targetFile.getParentFile().mkdirs(); } FileUtils.writeFile(secretPath + fileName, file); if(!new File(secretPath + fileName).exists()){ throw new BusinessException(LoginConstant.FAILURE_CODE_3018, LoginConstant.FAILURE_MSG_3018); } byte[] data = RSAEncrypt.encrypt(RSAEncrypt.loadPublicKeyByStr(RSAEncrypt.loadPublicKeyByFile(secretPath + fileName)), FileUtil.toByteArray3(dataPath)); //加密后的文件地址 String resultPath = ConstantFilePath.AGENT_PATH + companyName + "/secretData/"; String resultName = System.currentTimeMillis() + "_data.txt"; FileUtils.writeFile(resultPath, resultName, data); Map map = new HashMap(); map.put("aecData", aesData); map.put("keyUrl", NacosProperty.getMainUrl() + "agent/" + companyName + "/secretData/" + resultName); return Result.success(map); } @Override public Result addVaildCameras(String macId, String companyName, String wifiName) { String regex = "^[a-z0-9A-Z#]+$"; if(!macId.matches(regex) || macId.length() != 25 || macId.indexOf("#") != 12){ throw new BusinessException(SceneConstant.FAILURE_CODE_5012, SceneConstant.FAILURE_MSG_5012); } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(VaildCameras::getCompanyName,companyName); wrapper.eq(VaildCameras::getDevicemac,macId); List vaildCamerasEntityList = this.list(wrapper); if(vaildCamerasEntityList.size()>0 ){ throw new BusinessException(CameraConstant.FAILURE_CODE_6001, CameraConstant.FAILURE_MSG_6001); } VaildCameras vaildCameras = new VaildCameras(); vaildCameras.setDevicemac(macId); vaildCameras.setWifiName(wifiName); vaildCameras.setCompanyName(companyName); this.save(vaildCameras); return Result.success(); } @Override public Result deleteVaildCameras(String macId, String companyName) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(VaildCameras::getCompanyName,companyName); wrapper.eq(VaildCameras::getDevicemac,macId); this.remove(wrapper); return Result.success(); } }