From 7755e9ba6ca8ce58cc0a58578ddc1d965aba380a Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期三, 14 八月 2024 18:13:23 +0800 Subject: [PATCH] 最新版本 --- server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java | 321 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 313 insertions(+), 8 deletions(-) diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java index 4e05b11..bf185ed 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java @@ -2,16 +2,15 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.aliyun.tea.TeaException; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.haikang.model.HKConstants; import com.doumee.core.haikang.model.param.BaseListPageResponse; import com.doumee.core.haikang.model.param.BaseResponse; -import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest; -import com.doumee.core.haikang.model.param.request.AcsDeviceStatusListRequest; -import com.doumee.core.haikang.model.param.request.DoorsListRequest; -import com.doumee.core.haikang.model.param.request.ParkListRequest; +import com.doumee.core.haikang.model.param.request.*; import com.doumee.core.haikang.model.param.respose.*; import com.doumee.core.haikang.service.HKService; import com.doumee.core.utils.Constants; @@ -46,7 +45,7 @@ */ @Override // @Async - public String syncHkDevices(AcsDeviceListRequest param){ + public String syncHkDevices(Device param){ if(Constants.DEALING_HK_SYNCDEVICE){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍚屾浠诲姟姝e湪鎵ц鍝︼紝璇风◢鍚庢煡鐪嬬粨鏋滐紒") ; } @@ -57,13 +56,14 @@ List<Device> editList = new ArrayList<>(); Date date = new Date(); //鏌ヨ鍏ㄩ儴闂ㄧ璁惧鏁版嵁 - List<Device> allList = deviceMapper.selectList(null); + List<Device> allList = deviceMapper.selectList(new QueryWrapper<Device>().lambda() + .eq(Device::getType,Constants.ZERO)); List<DoorsInfoResponse> allDoors = getAllDoorList(); List<AcsDeviceInfoResponse> allHkList = getAllDeViceList(); /** * 鑾峰彇澧炲垹鏀规暟鎹泦鍚� */ - getDataChangeList(allList,allDoors,allHkList,addList,editList,deleteList,date); + getDataChangeList(allList,allDoors,allHkList,addList,editList,deleteList,date ); if(deleteList.size()>0){ //閫昏緫鍒犻櫎 for(Device d : deleteList){ @@ -86,6 +86,146 @@ Constants.DEALING_HK_SYNCDEVICE =false; } } + /** + * 鍚屾娴峰悍闂ㄧ璁惧鏁版嵁 + * @param param + * @return + */ + @Override +// @Async + public String syncHkLed(Device param){ + if(Constants.DEALING_HK_SYNCDEVICE){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍚屾浠诲姟姝e湪鎵ц鍝︼紝璇风◢鍚庢煡鐪嬬粨鏋滐紒") ; + } + Constants.DEALING_HK_SYNCDEVICE =true; + try { + List<Device> deleteList = new ArrayList<>(); + List<Device> addList = new ArrayList<>(); + List<Device> editList = new ArrayList<>(); + Date date = new Date(); + //鏌ヨ鍏ㄩ儴闂ㄧ璁惧鏁版嵁 + List<Device> allList = deviceMapper.selectList(new QueryWrapper<Device>().lambda() + .eq(Device::getType,Constants.TWO)); + List<LedRecordsInfoResponse> allHkList = getAllLedList(); + /** + * 鑾峰彇澧炲垹鏀规暟鎹泦鍚� + */ + getLedDataChangeList(allList,allHkList,addList,editList,deleteList,date); + if(deleteList.size()>0){ + //閫昏緫鍒犻櫎 + for(Device d : deleteList){ + deviceMapper.updateById(d); + } + } + if(addList.size()>0){ + deviceMapper.insert(addList); + } + if(editList.size()>0){ + for(Device d : editList){ + deviceMapper.updateById(d); + } + } + return "鍚屾鏁版嵁锛氭柊澧炪��"+addList.size()+"銆戞潯锛屾洿鏂般��"+editList.size()+"銆戞潯锛屽垹闄ゃ��"+deleteList.size()+"銆戞潯"; + }catch (Exception e){ + e.printStackTrace(); + throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "鍚屾澶辫触锛�"); + }finally { + Constants.DEALING_HK_SYNCDEVICE =false; + } + } + + private void getLedDataChangeList(List<Device> allList, List<LedRecordsInfoResponse> allHkList, List<Device> addList, List<Device> editList, List<Device> deleteList, Date date) { + if(allHkList!=null && allHkList.size()>0){ + //鑾峰彇娴峰悍鍏ㄩ儴闂ㄧ缁勬暟鎹� + for(LedRecordsInfoResponse device : allHkList){ + Device model = getExistedLed(device,allList); + if(model !=null){ + //濡傛灉宸插瓨鍦紝鍒欐洿鏂版暟鎹� + model = initLedDataByHkData(model,device,date); + editList.add(model); + }else{ + //濡傛灉涓嶅瓨鍦紝鍒欐柊澧炴暟鎹� + model = new Device(); + model = initLedDataByHkData(model,device,date); + model.setIsEntrance(Constants.ZERO); + addList.add(model); + } + } + } + //鍒ゆ柇鑾峰彇鍒犻櫎鐨勯棬绂佽澶囷紝閫昏緫鍒犻櫎 + getDeleteLedList(allList,allHkList,deleteList,date); + } + + /** + * 鍚屾娴峰悍闂ㄧ璁惧鏁版嵁 + * @param param + * @return + */ + @Override +// @Async + public String syncHkBroadcast(Device param){ + if(Constants.DEALING_HK_SYNCDEVICE){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍚屾浠诲姟姝e湪鎵ц鍝︼紝璇风◢鍚庢煡鐪嬬粨鏋滐紒") ; + } + Constants.DEALING_HK_SYNCDEVICE =true; + try { + List<Device> deleteList = new ArrayList<>(); + List<Device> addList = new ArrayList<>(); + List<Device> editList = new ArrayList<>(); + Date date = new Date(); + //鏌ヨ鍏ㄩ儴骞挎挱鐐硅澶囨暟鎹� + List<Device> allList = deviceMapper.selectList(new QueryWrapper<Device>().lambda() + .eq(Device::getType,Constants.THREE)); + List<FetchAudioChannelInfoResponse> allHkList = getAllBroadcastList(); + /** + * 鑾峰彇澧炲垹鏀规暟鎹泦鍚� + */ + getBroadcastDataChangeList(allList,allHkList,addList,editList,deleteList,date); + if(deleteList.size()>0){ + //閫昏緫鍒犻櫎 + for(Device d : deleteList){ + deviceMapper.updateById(d); + } + } + if(addList.size()>0){ + deviceMapper.insert(addList); + } + if(editList.size()>0){ + for(Device d : editList){ + deviceMapper.updateById(d); + } + } + return "鍚屾鏁版嵁锛氭柊澧炪��"+addList.size()+"銆戞潯锛屾洿鏂般��"+editList.size()+"銆戞潯锛屽垹闄ゃ��"+deleteList.size()+"銆戞潯"; + }catch (Exception e){ + e.printStackTrace(); + throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "鍚屾澶辫触锛�"); + }finally { + Constants.DEALING_HK_SYNCDEVICE =false; + } + } + + private void getBroadcastDataChangeList(List<Device> allList, List<FetchAudioChannelInfoResponse> allHkList, List<Device> addList, List<Device> editList, List<Device> deleteList, Date date) { + if(allHkList!=null && allHkList.size()>0){ + //鑾峰彇娴峰悍鍏ㄩ儴闂ㄧ缁勬暟鎹� + for(FetchAudioChannelInfoResponse device : allHkList){ + Device model = getExistedBroadcast(device,allList); + if(model !=null){ + //濡傛灉宸插瓨鍦紝鍒欐洿鏂版暟鎹� + model = initBroadcastDataByHkData(model,device,date); + editList.add(model); + }else{ + //濡傛灉涓嶅瓨鍦紝鍒欐柊澧炴暟鎹� + model = new Device(); + model = initBroadcastDataByHkData(model,device,date); + model.setIsEntrance(Constants.ZERO); + addList.add(model); + } + } + } + //鍒ゆ柇鑾峰彇鍒犻櫎鐨勯棬绂佽澶囷紝閫昏緫鍒犻櫎 + getDeleteBroadcastList(allList,allHkList,deleteList,date); + } + @Override // @Async public void getAscDeviceStatus(){ @@ -177,6 +317,73 @@ } return allDoorList; } + + /** + * 鑾峰彇鍏ㄩ儴骞挎挱鐐规暟鎹� + * @return + */ + public List<FetchAudioChannelInfoResponse> getAllBroadcastList(){ + List<FetchAudioChannelInfoResponse> allDoorList = new ArrayList<>(); + Date date = new Date(); + boolean hasNext = true; + int curTotal = 0; + int curPage = 1; + while (hasNext){ + //鍒嗛〉閬嶅巻寰幆鏌ヨ鎵�鏈夐棬绂佽澶囨暟鎹� + FetchAudioChannelRequest param = new FetchAudioChannelRequest(); + param.setPageNo(curPage); + param.setPageSize(100); + BaseResponse<BaseListPageResponse<FetchAudioChannelInfoResponse>> response = HKService.fetchAudioChannel(param); + if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ + throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝娴峰悍鍚屾鏁版嵁澶辫触~"); + } + BaseListPageResponse<FetchAudioChannelInfoResponse> r = response.getData(); + curTotal += 100; + if(curTotal >= r.getTotal()){ + hasNext = false; + } + if(r.getList() == null || r.getList().size()==0){ + hasNext =false; + }else{ + allDoorList.addAll(r.getList()); + } + curPage++; + } + return allDoorList; + } + /** + * 鑾峰彇鍏ㄩ儴LED鏁版嵁 + * @return + */ + public List<LedRecordsInfoResponse> getAllLedList(){ + List<LedRecordsInfoResponse> allDoorList = new ArrayList<>(); + Date date = new Date(); + boolean hasNext = true; + int curTotal = 0; + int curPage = 1; + while (hasNext){ + //鍒嗛〉閬嶅巻寰幆鏌ヨ鎵�鏈夐棬绂佽澶囨暟鎹� + LedRecordsRequest param = new LedRecordsRequest(); + param.setPageNo(curPage); + param.setPageSize(100); + BaseResponse<BaseListPageResponse<LedRecordsInfoResponse>> response = HKService.ledRecords(param); + if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ + throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝娴峰悍鍚屾鏁版嵁澶辫触~"); + } + BaseListPageResponse<LedRecordsInfoResponse> r = response.getData(); + curTotal += 100; + if(curTotal >= r.getTotal()){ + hasNext = false; + } + if(r.getList() == null || r.getList().size()==0){ + hasNext =false; + }else{ + allDoorList.addAll(r.getList()); + } + curPage++; + } + return allDoorList; + } public List<AscDeviceStatusInfoResponse> getAllDeviceStatusList(){ List<AscDeviceStatusInfoResponse> allDoorList = new ArrayList<>(); Date date = new Date(); @@ -207,7 +414,13 @@ return allDoorList; } - private void getDataChangeList(List<Device> allList, List<DoorsInfoResponse> hkDoorList , List<AcsDeviceInfoResponse> allHkList, List<Device> addList, List<Device> editList,List<Device> deleteList, Date date) { + private void getDataChangeList(List<Device> allList, + List<DoorsInfoResponse> hkDoorList , + List<AcsDeviceInfoResponse> allHkList, + List<Device> addList, + List<Device> editList, + List<Device> deleteList, + Date date ) { if(hkDoorList!=null && hkDoorList.size()>0){ //鑾峰彇娴峰悍鍏ㄩ儴闂ㄧ缁勬暟鎹� for(DoorsInfoResponse device : hkDoorList){ @@ -229,6 +442,30 @@ getDeleteDoorList(allList,hkDoorList,deleteList,date); } + private Device initLedDataByHkData(Device model, LedRecordsInfoResponse door, Date date) { + model.setIsdeleted(Constants.ZERO); + model.setHkId(door.getIndexCode()); + model.setHkDate(date); + model.setHkStatus(Constants.ONE); + model.setType(Constants.TWO); + model.setRemark(JSONObject.toJSONString(door)); + model.setDoorId(door.getIndexCode()); + return model; + } + private Device initBroadcastDataByHkData(Device model, FetchAudioChannelInfoResponse device, Date date) { + model.setIsdeleted(Constants.ZERO); + model.setHkDate(date); + model.setHkId(device.getAudioChannelIndexCode()); + model.setName(device.getAudioChannelName()); + model.setHkStatus(Constants.ONE); + model.setType(Constants.THREE); + model.setChannelNo(device.getChannelNo()); + model.setChannelInfo(device.getChannelType()); + model.setResourceType(device.getAudioChannelType()); + model.setStatus(device.getState()); + model.setRegionName(device.getRegionName()); + return model; + } private Device initDoorDataByHkData(Device model, DoorsInfoResponse door, Date date, List<AcsDeviceInfoResponse> allHkList) { AcsDeviceInfoResponse device = getDeviceByDoorid(door.getParentIndexCode(),allHkList); model.setIsdeleted(Constants.ZERO); @@ -356,6 +593,28 @@ } return null; } + private Device getExistedLed(LedRecordsInfoResponse device, List<Device> allList) { + if(allList.size()>0){ + for(Device r : allList){ + if(StringUtils.equals(r.getHkId(), device.getIndexCode())){ + //琛ㄧず鏈垹闄� + return r; + } + } + } + return null; + } + private Device getExistedBroadcast(FetchAudioChannelInfoResponse device, List<Device> allList) { + if(allList.size()>0){ + for(Device r : allList){ + if(StringUtils.equals(r.getHkId(), device.getAudioChannelIndexCode())){ + //琛ㄧず鏈垹闄� + return r; + } + } + } + return null; + } private Device getExistedDevice(AcsDeviceInfoResponse device, List<Device> allList) { if(allList.size()>0){ for(Device r : allList){ @@ -390,6 +649,28 @@ } } } + private void getDeleteLedList(List<Device> allList, List<LedRecordsInfoResponse> allHkList,List<Device> deleteList ,Date date) { + if(allList!=null && allList.size()>0){ + for(Device device : allList){ + if(isDeletedLedDevice(device,allHkList)){ + device.setIsdeleted(Constants.ONE); + device.setEditDate(date); + deleteList.add(device); + } + } + } + } + private void getDeleteBroadcastList(List<Device> allList, List<FetchAudioChannelInfoResponse> allHkList,List<Device> deleteList ,Date date) { + if(allList!=null && allList.size()>0){ + for(Device device : allList){ + if(isDeletedBroadcastDevice(device,allHkList)){ + device.setIsdeleted(Constants.ONE); + device.setEditDate(date); + deleteList.add(device); + } + } + } + } private boolean isDeletedDoorDevice(Device device, List<DoorsInfoResponse> allHkList) { if(allHkList.size()>0){ @@ -403,6 +684,30 @@ return true; } + private boolean isDeletedLedDevice(Device device, List<LedRecordsInfoResponse> allHkList) { + if(allHkList.size()>0){ + for(LedRecordsInfoResponse r : allHkList){ + if(StringUtils.equals(device.getDoorId(), r.getIndexCode())){ + //琛ㄧず鏈垹闄� + return false; + } + } + } + return true; + + } + private boolean isDeletedBroadcastDevice(Device device, List<FetchAudioChannelInfoResponse> allHkList) { + if(allHkList.size()>0){ + for(FetchAudioChannelInfoResponse r : allHkList){ + if(StringUtils.equals(device.getDoorId(), r.getAudioChannelIndexCode())){ + //琛ㄧず鏈垹闄� + return false; + } + } + } + return true; + + } private boolean isDeletedDevice(Device device, List<AcsDeviceInfoResponse> allHkList) { if(allHkList.size()>0){ for(AcsDeviceInfoResponse r : allHkList){ -- Gitblit v1.9.3