CameraServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. package com.fdkankan.manage.service.impl;
  2. import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.fdkankan.common.constant.Constant;
  7. import com.fdkankan.common.constant.ErrorCode;
  8. import com.fdkankan.common.exception.BusinessException;
  9. import com.fdkankan.common.response.PageInfo;
  10. import com.fdkankan.common.util.DateUtil;
  11. import com.fdkankan.manage.common.CameraTypeEnum;
  12. import com.fdkankan.manage.constant.CameraConstant;
  13. import com.fdkankan.manage.entity.Camera;
  14. import com.fdkankan.manage.entity.CameraDetail;
  15. import com.fdkankan.manage.entity.Company;
  16. import com.fdkankan.manage.mapper.ICameraMapper;
  17. import com.fdkankan.manage.service.*;
  18. import com.fdkankan.manage.vo.request.CameraInOutParam;
  19. import com.fdkankan.manage.vo.request.CameraParam;
  20. import com.fdkankan.manage.vo.response.CameraDetailVo;
  21. import org.apache.commons.lang3.StringUtils;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.beans.factory.annotation.Value;
  24. import org.springframework.stereotype.Service;
  25. import java.util.*;
  26. import java.util.stream.Collectors;
  27. /**
  28. * <p>
  29. * 相机主表 服务实现类
  30. * </p>
  31. *
  32. * @author
  33. * @since 2022-06-16
  34. */
  35. @Service
  36. public class CameraServiceImpl extends ServiceImpl<ICameraMapper, Camera> implements ICameraService {
  37. @Autowired
  38. ICameraDetailService cameraDetailService;
  39. @Autowired
  40. ISceneService sceneService;
  41. @Autowired
  42. ISceneProService sceneProService;
  43. @Autowired
  44. IUserIncrementService userIncrementService;
  45. @Autowired
  46. ISceneResourceCameraService sceneResourceCameraService;
  47. @Autowired
  48. IScenePlusService scenePlusService;
  49. @Autowired
  50. ICompanyService companyService;
  51. @Value("${upload.type}")
  52. private String ossType;
  53. @Override
  54. public List<Camera> getListByCameraIdList(List<Long> cameraIdList) {
  55. LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
  56. wrapper.in(Camera::getId,cameraIdList);
  57. return this.list(wrapper);
  58. }
  59. @Override
  60. public Camera getBySnCode(String snCode) {
  61. LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
  62. wrapper.eq(Camera::getSnCode,snCode);
  63. List<Camera> list = this.list(wrapper);
  64. if(list == null || list.size() <=0 ){
  65. return null;
  66. }
  67. return list.get(0);
  68. }
  69. private List<Camera> getBySnCodes(List<String> snCodeList) {
  70. LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
  71. wrapper.in(Camera::getSnCode,snCodeList);
  72. return this.list(wrapper);
  73. }
  74. @Override
  75. public void unbindCamera(Long cameraId) {
  76. cameraDetailService.unbindCamera(cameraId); //取消相机用户关联
  77. userIncrementService.unbindCamera(cameraId); //取消关联用户权益
  78. sceneService.unbindCamera(cameraId); //取消关联场景
  79. sceneProService.unbindCamera(cameraId); //取消关联场景
  80. scenePlusService.unbindCamera(cameraId); //取消关联场景
  81. sceneResourceCameraService.unbindCamera(cameraId); //删除协作相机
  82. }
  83. @Override
  84. public PageInfo pageList(CameraParam param) {
  85. Page<CameraDetailVo> voPage = this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param);
  86. return PageInfo.PageInfo(voPage);
  87. }
  88. @Override
  89. public void in(String wifiName) {
  90. if(StringUtils.isEmpty(wifiName) ){
  91. throw new BusinessException(ErrorCode.MISSING_REQUIRED_PARAMETERS);
  92. }
  93. if( !wifiName.contains("_") || !wifiName.contains("4D")){
  94. throw new BusinessException(-1,"wifi名称格式错误");
  95. }
  96. LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
  97. wrapper.eq(Camera::getWifiName,wifiName);
  98. long count = this.count(wrapper);
  99. if(count > 0){
  100. throw new BusinessException(-1,"设备wifi名称重复");
  101. }
  102. saveBatchCamera(Collections.singletonList(wifiName));
  103. }
  104. private Integer saveBatchCamera(List<String> wifiNameList){
  105. HashSet<String> wifiNameSet = new HashSet<>(wifiNameList);
  106. List<Camera> cameraList = new ArrayList<>();
  107. for (String wifiName : wifiNameSet) {
  108. String[] res = wifiName.split("_");
  109. Camera camera = new Camera();
  110. camera.setWifiName(wifiName);
  111. camera.setSnCode(res[1]);
  112. camera.setChildName(res[1]);
  113. camera.setWifiPassword(CameraConstant.WIFI_PASSWORD_VALUE);
  114. camera.setChildPassword(CameraConstant.CHILD_PASSWORD_VALUE);
  115. camera.setActivatedTime(DateUtil.date2String(new Date(),DateUtil.DEFAULT_DATE_FORMAT));
  116. camera.setIsOut(0);
  117. cameraList.add(camera);
  118. }
  119. this.saveBatch(cameraList);
  120. List<CameraDetail> cameraDetailList = new ArrayList<>();
  121. for (Camera camera : cameraList) {
  122. String wifiName = camera.getWifiName();
  123. Integer type = CameraTypeEnum.getTypeByWifiNamePrefix(wifiName.substring(0,wifiName.lastIndexOf("_") +1));
  124. CameraDetail cameraDetail = new CameraDetail();
  125. cameraDetail.setAgency(CameraConstant.DEFAULT_AGENT);
  126. cameraDetail.setCameraId(camera.getId());
  127. cameraDetail.setCountry(0);//默认中国
  128. if("aws".equals(ossType)){
  129. cameraDetail.setCountry(1);//1-国外
  130. }
  131. cameraDetail.setType(type);
  132. if (1 == cameraDetail.getType() || 9 == cameraDetail.getType() || 10 == cameraDetail.getType()){
  133. cameraDetail.setTotalSpace(Long.valueOf(Constant.CAMERA_BASE_SPACE_VALUE));
  134. cameraDetail.setUsedSpace(0L);
  135. }
  136. if(type != 9 && type != 10){
  137. type = type == 0 ? 1: 4;
  138. }
  139. cameraDetail.setGoodsId(Long.valueOf(type));
  140. cameraDetailList.add(cameraDetail);
  141. }
  142. return cameraDetailService.saveBatch(cameraDetailList) ? cameraList.size() : 0;
  143. }
  144. @Override
  145. public Integer ins(List<String> wifiNameList){
  146. List<Integer> errorRow = getErrorRow(wifiNameList, null);
  147. getResultIn(errorRow);
  148. LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
  149. wrapper.in(Camera::getWifiName,wifiNameList);
  150. List<Camera> list = this.list(wrapper);
  151. if(list.size() >0){
  152. List<String> newList = list.parallelStream().map(Camera::getWifiName).collect(Collectors.toList());
  153. List<Integer> errorRow2 = getErrorRow(wifiNameList, newList);
  154. getResultIn(errorRow2);
  155. }
  156. return saveBatchCamera(wifiNameList);
  157. }
  158. private void getResultIn(List<Integer> errorList){
  159. if(errorList.size() <=0){
  160. return;
  161. }
  162. StringBuilder res = new StringBuilder("第");
  163. for (Integer index : errorList) {
  164. res.append(index).append(",");
  165. }
  166. res.deleteCharAt(res.lastIndexOf(","));
  167. res.append("行存在错误");
  168. throw new BusinessException(-1, res.toString());
  169. }
  170. private List<Integer> getErrorRow(List<String> wifiNameList, List<String> newList){
  171. List<Integer> errorIndexList = new ArrayList<>();
  172. boolean bo = false;
  173. if(newList == null){
  174. newList = wifiNameList;
  175. bo = true;
  176. }
  177. for (String wifiName : newList) {
  178. int index = wifiNameList.indexOf(wifiName) + 3;
  179. if(bo){
  180. if( !wifiName.contains("_") || !wifiName.contains("4D")){
  181. errorIndexList.add(index);
  182. }
  183. }else {
  184. errorIndexList.add(index);
  185. }
  186. }
  187. return errorIndexList;
  188. }
  189. @Override
  190. public void out(CameraInOutParam param) {
  191. if(param.getOutType() == null || param.getCompanyName() == null || param.getId() == null){
  192. throw new BusinessException(ErrorCode.MISSING_REQUIRED_PARAMETERS);
  193. }
  194. Company company = companyService.getCompanyByName(param.getCompanyName());
  195. if(company == null){
  196. throw new BusinessException(-1,"客户名称不存在");
  197. }
  198. param.setCompanyId(company.getId());
  199. Camera camera = this.getById(param.getId());
  200. if(camera == null){
  201. throw new BusinessException(-1,"相机不存在");
  202. }
  203. CameraDetail detail = cameraDetailService.getByCameraId(camera.getId());
  204. if(detail ==null){
  205. throw new BusinessException(-1,"该相机未入库");
  206. }
  207. HashMap<String,CameraDetail> detailMap = new HashMap<>();
  208. detailMap.put(detail.getCameraId().toString(),detail);
  209. this.saveBatchDetail(detailMap, Collections.singletonList(param));
  210. }
  211. @Override
  212. public Integer outs(List<CameraInOutParam> params){
  213. setCompanyIdByDb(params);
  214. HashMap<String, Object> resultMap = getResultMap(params);
  215. HashMap<String,CameraDetail> detailMap = (HashMap<String, CameraDetail>) resultMap.get("detailMap");
  216. return this.saveBatchDetail(detailMap,params);
  217. }
  218. private Integer saveBatchDetail(HashMap<String, CameraDetail> detailMap, List<CameraInOutParam> params){
  219. List<CameraDetail> cameraDetails = new ArrayList<>();
  220. for (CameraInOutParam param : params) {
  221. CameraDetail cameraDetail = detailMap.get(param.getId().toString());
  222. cameraDetail.setOrderSn(param.getOrderSn());
  223. cameraDetail.setOwn(param.getOutType());
  224. cameraDetail.setCompanyId(param.getCompanyId());
  225. cameraDetails.add(cameraDetail);
  226. }
  227. return cameraDetailService.saveBatch(cameraDetails) ? cameraDetails.size() : 0;
  228. }
  229. private void checkSnCode(List<String> snCodeList) {
  230. HashMap<String,Integer> map = new HashMap<>();
  231. for (String snCode : snCodeList) {
  232. if(map.get(snCode) == null){
  233. map.put(snCode,1);
  234. }else {
  235. map.put(snCode,2);
  236. }
  237. }
  238. List<String> errorSnCode = new ArrayList<>();
  239. for (String snCode : map.keySet()) {
  240. if(map.get(snCode) > 1){
  241. errorSnCode.add(snCode);
  242. }
  243. }
  244. if(errorSnCode.size() >0){
  245. throw new BusinessException(-1,"存在重复的snCode:"+errorSnCode);
  246. }
  247. }
  248. @Override
  249. public void updateCamera(CameraInOutParam param) {
  250. if(param.getId() == null|| param.getOutType() == null){
  251. throw new BusinessException(ErrorCode.MISSING_REQUIRED_PARAMETERS);
  252. }
  253. CameraDetail cameraDetail = cameraDetailService.getByCameraId(param.getId());
  254. if(cameraDetail == null){
  255. throw new BusinessException(ErrorCode.MISSING_REQUIRED_PARAMETERS);
  256. }
  257. if(StringUtils.isNotBlank(param.getCompanyName())){
  258. Company company = companyService.getCompanyByName(param.getCompanyName());
  259. if(company !=null){
  260. cameraDetail.setCompanyId(company.getId());
  261. }
  262. }
  263. cameraDetail.setOwn(param.getOutType());
  264. cameraDetail.setOrderSn(param.getOrderSn());
  265. cameraDetailService.updateById(cameraDetail);
  266. }
  267. @Override
  268. public void deleteCamera(Long id) {
  269. if(id == null){
  270. throw new BusinessException(ErrorCode.MISSING_REQUIRED_PARAMETERS);
  271. }
  272. CameraDetail cameraDetail = cameraDetailService.getByCameraId(id);
  273. if(cameraDetail !=null && cameraDetail.getUserId()!=null){
  274. throw new BusinessException(-1,"相机已绑定,请先解绑后删除");
  275. }
  276. this.removeById(id);
  277. cameraDetailService.deleteByCameraId(id);
  278. }
  279. @Override
  280. public Integer updateCompany(List<CameraInOutParam> companyParams) {
  281. setCompanyIdByDb(companyParams);
  282. HashMap<String, Object> resultMap = getResultMap(companyParams);
  283. HashMap<Long, CameraDetail> detailMap = (HashMap<Long, CameraDetail>) resultMap.get("detailMap");
  284. HashMap<String, Camera> snCodeMap = (HashMap<String, Camera>) resultMap.get("snCodeMap");
  285. List<CameraDetail> updateDetailList = new ArrayList<>();
  286. for (CameraInOutParam companyParam : companyParams) {
  287. Camera camera = snCodeMap.get(companyParam.getSnCode());
  288. CameraDetail cameraDetail = detailMap.get(camera.getId());
  289. cameraDetail.setCompanyId(companyParam.getCompanyId());
  290. updateDetailList.add(cameraDetail);
  291. }
  292. return cameraDetailService.updateBatchById(updateDetailList) ? updateDetailList.size() : 0;
  293. }
  294. private void setCompanyIdByDb(List<CameraInOutParam> companyParams){
  295. List<String> companyNames = companyParams.parallelStream().map(CameraInOutParam::getCompanyName).collect(Collectors.toList());
  296. List<Company> companyList = companyService.getCompanyByNames(companyNames);
  297. List<String> dbCompanyNames = companyList.parallelStream().map(Company::getCompanyName).collect(Collectors.toList());
  298. List<Integer> errorRow = this.getErrorRow(companyNames, dbCompanyNames);
  299. getResultIn(errorRow);
  300. HashMap<String,Long> companyNameMap = new HashMap<>();
  301. for (Company company : companyList) {
  302. companyNameMap.put(company.getCompanyName(),company.getId());
  303. }
  304. for (CameraInOutParam companyParam : companyParams) {
  305. companyParam.setCompanyId(companyNameMap.get(companyParam.getCompanyName()));
  306. }
  307. }
  308. private HashMap<String, Object> getResultMap(List<CameraInOutParam> params){
  309. HashMap<String,Object> resultMap = new HashMap<>();
  310. List<String> snCodeList = params.parallelStream().map(CameraInOutParam::getSnCode).collect(Collectors.toList());
  311. checkSnCode(snCodeList);
  312. List<Camera> cameraList = this.getBySnCodes(snCodeList);
  313. List<Long> cameraIds = cameraList.parallelStream().map(Camera::getId).collect(Collectors.toList());
  314. List<CameraDetail> cameraDetails = cameraDetailService.getByCameraIds(cameraIds);
  315. HashMap<Long,CameraDetail> detailMap = new HashMap<>();
  316. for (CameraDetail cameraDetail : cameraDetails) {
  317. detailMap.put(cameraDetail.getCameraId(),cameraDetail);
  318. }
  319. HashMap<String,Camera> snCodeMap = new HashMap<>();
  320. for (Camera camera : cameraList) {
  321. snCodeMap.put(camera.getSnCode(),camera);
  322. }
  323. List<Integer> errorList = new ArrayList<>();
  324. for (String snCode : snCodeList) {
  325. Camera camera = snCodeMap.get(snCode);
  326. if(camera == null || detailMap.get(camera.getId()) !=null){
  327. errorList.add(snCodeList.indexOf(snCode) +3);
  328. }
  329. }
  330. getResultIn(errorList);
  331. resultMap.put("detailMap",detailMap);
  332. resultMap.put("snCodeMap",snCodeMap);
  333. return resultMap;
  334. }
  335. }