CameraServiceImpl.java 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763
  1. package com.fdkankan.manage.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  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.manage.common.*;
  8. import com.fdkankan.manage.constant.CameraOutTypeEnum;
  9. import com.fdkankan.manage.entity.*;
  10. import com.fdkankan.manage.exception.BusinessException;
  11. import com.fdkankan.common.util.DateUtil;
  12. import com.fdkankan.manage.constant.CameraConstant;
  13. import com.fdkankan.manage.mapper.ICameraMapper;
  14. import com.fdkankan.manage.service.*;
  15. import com.fdkankan.manage.util.DateUtils;
  16. import com.fdkankan.manage.vo.request.CameraInOutParam;
  17. import com.fdkankan.manage.vo.request.CameraParam;
  18. import com.fdkankan.manage.vo.response.CameraDetailVo;
  19. import com.fdkankan.rabbitmq.util.RabbitMqProducer;
  20. import lombok.extern.slf4j.Slf4j;
  21. import org.apache.commons.lang3.StringUtils;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.stereotype.Service;
  24. import java.util.*;
  25. import java.util.stream.Collectors;
  26. /**
  27. * <p>
  28. * 相机主表 服务实现类
  29. * </p>
  30. *
  31. * @author
  32. * @since 2022-06-16
  33. */
  34. @Service
  35. @Slf4j
  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. @Autowired
  52. IExcelService excelService;
  53. @Autowired
  54. IOrderService orderService;
  55. @Autowired
  56. ICameraWifiPrefixService cameraWifiPrefixService;
  57. @Autowired
  58. ICameraTypeService cameraTypeService;
  59. @Override
  60. public List<Camera> getListByCameraIdList(List<Long> cameraIdList) {
  61. LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
  62. wrapper.in(Camera::getId,cameraIdList);
  63. return this.list(wrapper);
  64. }
  65. @Override
  66. public Camera getBySnCode(String snCode) {
  67. LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
  68. wrapper.eq(Camera::getSnCode,snCode);
  69. List<Camera> list = this.list(wrapper);
  70. if(list == null || list.size() <=0 ){
  71. return null;
  72. }
  73. return list.get(0);
  74. }
  75. private List<Camera> getBySnCodes(List<String> snCodeList) {
  76. LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
  77. wrapper.in(Camera::getSnCode,snCodeList);
  78. return this.list(wrapper);
  79. }
  80. private List<Camera> getByOutSnCodes(List<String> snCodeList) {
  81. return this.getBaseMapper().getByOutSnCodes(snCodeList);
  82. }
  83. @Override
  84. public void unbindCamera(Long cameraId) {
  85. userIncrementService.unbindCamera(cameraId); //取消关联用户权益
  86. cameraDetailService.unbindCamera(cameraId); //取消相机用户关联
  87. sceneService.unbindCamera(cameraId); //取消关联场景
  88. sceneProService.unbindCamera(cameraId); //取消关联场景
  89. scenePlusService.unbindCamera(cameraId); //取消关联场景
  90. sceneResourceCameraService.unbindCamera(cameraId); //删除协作相机
  91. }
  92. @Override
  93. public PageInfo pageList(CameraParam param) {
  94. Page<CameraDetailVo> voPage = this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param);
  95. List<CameraType> list = cameraTypeService.list();
  96. HashMap<String,CameraType> typeHashMap = new HashMap<>();
  97. for (CameraType cameraType : list) {
  98. typeHashMap.put(cameraType.getCameraType().toString(),cameraType);
  99. }
  100. for (CameraDetailVo record : voPage.getRecords()) {
  101. record.setTypeStr(typeHashMap.get(record.getType()).getName());
  102. }
  103. return PageInfo.PageInfo(voPage);
  104. }
  105. @Override
  106. public synchronized void in(String wifiName) {
  107. if(StringUtils.isEmpty(wifiName) ){
  108. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  109. }
  110. List<CameraWifiPrefix> list = cameraWifiPrefixService.list();
  111. Set<String> wifiNamePrefixList = list.stream().map(CameraWifiPrefix::getWifiNamePrefix).collect(Collectors.toSet());
  112. if(!wifiName.contains("_")){
  113. throw new BusinessException(ResultCode.WIFI_NAME_ERROR);
  114. }
  115. String[] split = wifiName.split("_");
  116. String cameraPrefix = split[0] +"_";
  117. String snCode = split[1];
  118. if(!wifiNamePrefixList.contains(cameraPrefix)){
  119. throw new BusinessException(ResultCode.WIFI_NAME_ERROR);
  120. }
  121. HashMap<String,CameraWifiPrefix> cameraTypeMap = new HashMap<>();
  122. list.forEach(entity->cameraTypeMap.put(entity.getWifiNamePrefix(),entity));
  123. if(cameraTypeMap.get(cameraPrefix) == null){
  124. throw new BusinessException(ResultCode.WIFI_NAME_ERROR);
  125. }
  126. LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
  127. wrapper.eq(Camera::getSnCode,snCode);
  128. long count = this.count(wrapper);
  129. if(count > 0){
  130. throw new BusinessException(ResultCode.WIFI_NAME_REPEAT);
  131. }
  132. saveBatchCamera(Collections.singletonList(wifiName),cameraTypeMap);
  133. }
  134. private Integer saveBatchCamera(List<String> wifiNameList,HashMap<String,CameraWifiPrefix> cameraTypeMap){
  135. HashSet<String> wifiNameSet = new HashSet<>(wifiNameList);
  136. List<Camera> cameraList = new ArrayList<>();
  137. for (String wifiName : wifiNameSet) {
  138. String[] res = wifiName.split("_");
  139. if(res.length !=2 || StringUtils.isBlank(res[1])){
  140. throw new BusinessException(ResultCode.WIFI_NAME_ERROR);
  141. }
  142. if(cameraTypeMap.get(res[0] +"_") == null){
  143. throw new BusinessException(ResultCode.WIFI_NAME_ERROR);
  144. }
  145. Camera camera = new Camera();
  146. camera.setWifiName(wifiName);
  147. camera.setSnCode(res[1]);
  148. camera.setChildName(res[1]);
  149. camera.setWifiPassword(CameraConstant.WIFI_PASSWORD_VALUE);
  150. camera.setChildPassword(CameraConstant.CHILD_PASSWORD_VALUE);
  151. camera.setActivatedTime(DateUtil.date2String(new Date(),DateUtil.DEFAULT_DATE_FORMAT));
  152. cameraList.add(camera);
  153. }
  154. this.saveBatch(cameraList);
  155. List<CameraDetail> cameraDetailList = new ArrayList<>();
  156. for (Camera camera : cameraList) {
  157. CameraDetail cameraDetail = new CameraDetail();
  158. cameraDetail.setAgency(CameraConstant.DEFAULT_AGENT);
  159. cameraDetail.setCameraId(camera.getId());
  160. cameraDetail.setCountry(0);//默认中国
  161. String wifiNamePrix = camera.getWifiName().split("_")[0]+"_";
  162. CameraWifiPrefix cameraType = cameraTypeMap.get(wifiNamePrix);
  163. cameraDetail.setType(cameraType.getCameraType());
  164. cameraDetail.setTotalSpace(Long.valueOf(Constant.CAMERA_BASE_SPACE_VALUE));
  165. cameraDetail.setUsedSpace(0L);
  166. cameraDetail.setUnit(CacheUtil.cameraUnit);
  167. if(cameraDetail.getUnit().equals("SP")){
  168. cameraDetail.setTotalSpace(Long.valueOf(CacheUtil.cameraSpaceNum));
  169. }
  170. if("aws".equals(CacheUtil.uploadType)){
  171. cameraDetail.setCountry(1);//1-国外
  172. }
  173. Long goodId = null;
  174. if(cameraDetail.getType() == 1 || cameraDetail.getType() == 4){
  175. goodId = 4L;
  176. }
  177. if(cameraDetail.getType() == 9){
  178. goodId = 9L;
  179. }
  180. if(cameraDetail.getType() == 10){
  181. goodId = 10L;
  182. }
  183. cameraDetail.setGoodsId(goodId);
  184. if("local".equals(CacheUtil.uploadType)) { //本地版本 ,入库即出库,并且添加无限期会员权限
  185. cameraDetail.setCountry(2);
  186. cameraDetail.setOwn(2);
  187. cameraDetail.setOutTime(DateUtils.getDate(new Date()));
  188. }
  189. cameraDetailList.add(cameraDetail);
  190. }
  191. return cameraDetailService.saveBatch(cameraDetailList) ? cameraList.size() : 0;
  192. }
  193. @Override
  194. public Integer ins(List<String> wifiNameList){
  195. List<CameraWifiPrefix> cameraTypeList = cameraWifiPrefixService.list();
  196. Set<String> wifiNamePrefixList = cameraTypeList.stream().map(CameraWifiPrefix::getWifiNamePrefix).collect(Collectors.toSet());
  197. List<Integer> errorRow = getErrorRow(wifiNameList,wifiNamePrefixList);
  198. HashMap<String,CameraWifiPrefix> cameraTypeMap = new HashMap<>();
  199. cameraTypeList.forEach(entity->cameraTypeMap.put(entity.getWifiNamePrefix(),entity));
  200. excelService.toExcelError(errorRow);
  201. List<String> snCodeList = new ArrayList<>();
  202. for (String wifiName : wifiNameList) {
  203. snCodeList.add(wifiName.split("_")[1]);
  204. }
  205. LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
  206. wrapper.in(Camera::getSnCode,snCodeList);
  207. List<Camera> list = this.list(wrapper);
  208. if(list.size() >0){
  209. List<String> newList = list.parallelStream().map(Camera::getSnCode).collect(Collectors.toList());
  210. List<Integer> errorRow2 = getErrorRow(snCodeList, newList);
  211. excelService.toExcelError(errorRow2);
  212. }
  213. return saveBatchCamera(wifiNameList,cameraTypeMap);
  214. }
  215. private List<Integer> getErrorRow(List<String> wifiNameList,Set<String> wifiNamePrefixList){
  216. List<Integer> errorIndexList = new ArrayList<>();
  217. Set<String> wifiNameSet = new HashSet<>();
  218. Integer index = 0;
  219. List<String> snCodes = new ArrayList<>();
  220. for (String wifiName : wifiNameList) {
  221. index ++;
  222. if(StringUtils.isBlank(wifiName)){
  223. errorIndexList.add(index);
  224. continue;
  225. }
  226. if(wifiNameSet.contains(wifiName)){
  227. errorIndexList.add(index);
  228. continue;
  229. }
  230. if(!wifiName.contains("_")){
  231. errorIndexList.add(index);
  232. continue;
  233. }
  234. String[] split = wifiName.split("_");
  235. String cameraPrefix = split[0] +"_";
  236. String snCode = split[1];
  237. if(!wifiNamePrefixList.contains(cameraPrefix)){
  238. errorIndexList.add(index);
  239. continue;
  240. }
  241. if(snCodes.contains(snCode)){
  242. errorIndexList.add(index);
  243. continue;
  244. }
  245. snCodes.add(snCode);
  246. wifiNameSet.add(wifiName);
  247. }
  248. return errorIndexList;
  249. }
  250. private List<Integer> getErrorRow(List<String> wifiNameList,List<String> dbList){
  251. List<Integer> errorIndexList = new ArrayList<>();
  252. if(dbList.size() <=0){
  253. return errorIndexList;
  254. }
  255. Integer index = 0;
  256. for (String wifiName : wifiNameList) {
  257. index ++;
  258. if(dbList.contains(wifiName)){
  259. errorIndexList.add(index);
  260. }
  261. }
  262. return errorIndexList;
  263. }
  264. @Override
  265. public void out(CameraInOutParam param) {
  266. if(param.getOutType() == null || param.getId() == null){
  267. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  268. }
  269. if(StringUtils.isNotBlank(param.getCompanyName())){
  270. Company company = companyService.getCompanyByName(param.getCompanyName());
  271. if(company == null){
  272. throw new BusinessException(ResultCode.COMPANY_NAME_NOT_EXIST);
  273. }
  274. param.setCompanyId(company.getId());
  275. }
  276. Camera camera = this.getById(param.getId());
  277. if(camera == null){
  278. throw new BusinessException(ResultCode.CAMERA_NOT_EXIST);
  279. }
  280. CameraDetail detail = cameraDetailService.getByCameraId(camera.getId());
  281. if(detail ==null){
  282. throw new BusinessException(ResultCode.CAMERA_NOT_IN);
  283. }
  284. HashMap<Long,CameraDetail> detailMap = new HashMap<>();
  285. detailMap.put(detail.getCameraId(),detail);
  286. this.saveBatchDetail(detailMap, Collections.singletonList(param));
  287. }
  288. @Override
  289. public Integer outs(List<CameraInOutParam> params){
  290. setCompanyIdByDb(params);
  291. checkOrderSn(params);
  292. HashMap<String, Object> resultMap = getResultMap(params,1);
  293. HashMap<Long,CameraDetail> detailMap = (HashMap<Long, CameraDetail>) resultMap.get("detailMap");
  294. HashMap<String, Camera> snCodeMap = (HashMap<String, Camera>) resultMap.get("snCodeMap");
  295. for (CameraInOutParam param : params) {
  296. if(param.getId() == null){
  297. param.setId(snCodeMap.get(param.getSnCode()).getId());
  298. }
  299. }
  300. return this.saveBatchDetail(detailMap,params);
  301. }
  302. private void checkOrderSn(List<CameraInOutParam> params) {
  303. List<String> orderSnList = params.stream().map(CameraInOutParam::getOrderSn).collect(Collectors.toList());
  304. if(orderSnList.size() >0){
  305. List<Order> orders = orderService.getByOrderSnList(orderSnList);
  306. List<String> dbOrderSn = orders.stream().map(Order::getOrderSn).collect(Collectors.toList());
  307. List<Integer> errorList = new ArrayList<>();
  308. Integer index = 0;
  309. for (String sn : orderSnList) {
  310. index ++;
  311. if(StringUtils.isBlank(sn)){
  312. continue;
  313. }
  314. if(!dbOrderSn.contains(sn)){
  315. log.error("excel-export-error-->:订单号不存在不存在:index:{},orderSn:{}",index+3,sn);
  316. errorList.add(index);
  317. }
  318. }
  319. excelService.toExcelError(errorList);
  320. }
  321. }
  322. private Integer saveBatchDetail(HashMap<Long, CameraDetail> detailMap, List<CameraInOutParam> params){
  323. List<CameraDetail> cameraDetails = new ArrayList<>();
  324. for (CameraInOutParam param : params) {
  325. CameraDetail cameraDetail = detailMap.get(param.getId());
  326. if(cameraDetail == null){
  327. throw new BusinessException(ResultCode.CAMERA_NOT_IN);
  328. }
  329. cameraDetail.setAgentId(param.getAgentId());
  330. cameraDetail.setBuyDate(DateUtils.getDayDate(param.getBuyDate()));
  331. cameraDetail.setOrderSn(param.getOrderSn());
  332. cameraDetail.setOwn(param.getOutType());
  333. cameraDetail.setCompanyId(param.getCompanyId());
  334. cameraDetail.setOutTime(DateUtils.getDate(new Date()));
  335. cameraDetail.setUnit(CacheUtil.cameraUnit);
  336. if(cameraDetail.getUnit().equals("SP")){
  337. cameraDetail.setTotalSpace(Long.valueOf(CacheUtil.cameraSpaceNum));
  338. }
  339. cameraDetails.add(cameraDetail);
  340. }
  341. List<Long> cameraIds = cameraDetails.stream().map(CameraDetail::getCameraId).collect(Collectors.toList());
  342. if(!cameraIds.isEmpty()){
  343. HashMap<String,Object> map = new HashMap<>();
  344. map.put("cameraIds",cameraIds);
  345. rabbitMqProducer.sendByWorkQueue("camera-update-agent",map);
  346. }
  347. return cameraDetailService.saveOrUpdateBatch(cameraDetails) ? cameraDetails.size() : 0;
  348. }
  349. private void checkSnCode(List<String> snCodeList,List<String> dbSnCode) {
  350. HashMap<String,Integer> map = new HashMap<>();
  351. List<Integer> errorList = new ArrayList<>();
  352. Integer index = 0;
  353. for (String snCode : snCodeList) {
  354. index ++;
  355. if(StringUtils.isBlank(snCode)){
  356. log.error("excel-export-error-->:index:{},snCode不存在:snCode:{}",index+3,snCode);
  357. errorList.add(index);
  358. }
  359. if(map.get(snCode) == null){
  360. map.put(snCode,1);
  361. }else {
  362. map.put(snCode,2);
  363. log.error("excel-export-error-->:index:{},snCode已存在:snCode:{}",index+3,snCode);
  364. errorList.add(index);
  365. }
  366. }
  367. excelService.toExcelError(errorList);
  368. Integer index2 = 0;
  369. for (String snCode : snCodeList) {
  370. index2 ++;
  371. if(!dbSnCode.contains(snCode)){
  372. log.error("excel-export-error-->:index:{},snCode未入库:snCode:{}",index2+3,snCode);
  373. errorList.add(index2);
  374. }
  375. }
  376. excelService.toExcelError(errorList);
  377. }
  378. @Override
  379. public void updateCamera(CameraInOutParam param) {
  380. if(param.getId() == null|| param.getOutType() == null){
  381. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  382. }
  383. CameraDetail cameraDetail = cameraDetailService.getByCameraId(param.getId());
  384. if(cameraDetail == null){
  385. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  386. }
  387. LambdaUpdateWrapper<CameraDetail> wrapper = new LambdaUpdateWrapper<>();
  388. wrapper.eq(CameraDetail::getId,cameraDetail.getId());
  389. if(StringUtils.isNotBlank(param.getCompanyName())){
  390. Company company = companyService.getCompanyByName(param.getCompanyName());
  391. if(company == null){
  392. throw new BusinessException(ResultCode.COMPANY_NAME_NOT_EXIST);
  393. }
  394. wrapper.set(CameraDetail::getCompanyId,company.getId());
  395. }else {
  396. wrapper.set(CameraDetail::getCompanyId,null);
  397. }
  398. if(StringUtils.isNotBlank(param.getOrderSn())){
  399. Order orderSn = orderService.getByOrderSn(param.getOrderSn());
  400. if(orderSn == null ){
  401. throw new BusinessException(ResultCode.ORDER_SN_ERROR);
  402. }
  403. wrapper.set(CameraDetail::getOrderSn,orderSn.getOrderSn());
  404. }else {
  405. wrapper.set(CameraDetail::getOrderSn,null);
  406. }
  407. if(param.getAgentId() != null){
  408. wrapper.set(CameraDetail::getAgentId,param.getAgentId());
  409. }else {
  410. wrapper.set(CameraDetail::getAgentId,null);
  411. }
  412. wrapper.set(CameraDetail::getOwn,param.getOutType());
  413. cameraDetailService.update(wrapper);
  414. }
  415. @Override
  416. public void deleteCamera(Long id) {
  417. if(id == null){
  418. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  419. }
  420. CameraDetail cameraDetail = cameraDetailService.getByCameraId(id);
  421. if(cameraDetail !=null && cameraDetail.getUserId()!=null){
  422. this.unbindCamera(cameraDetail.getCameraId());
  423. }
  424. this.removeById(id);
  425. cameraDetailService.deleteByCameraId(id);
  426. }
  427. @Override
  428. public Integer updateCompany(List<CameraInOutParam> companyParams) {
  429. setCompanyIdByDb(companyParams);
  430. HashMap<String, Object> resultMap = getResultMap(companyParams,2);
  431. HashMap<Long, CameraDetail> detailMap = (HashMap<Long, CameraDetail>) resultMap.get("detailMap");
  432. HashMap<String, Camera> snCodeMap = (HashMap<String, Camera>) resultMap.get("snCodeMap");
  433. List<CameraDetail> updateDetailList = new ArrayList<>();
  434. for (CameraInOutParam companyParam : companyParams) {
  435. Camera camera = snCodeMap.get(companyParam.getSnCode());
  436. CameraDetail cameraDetail = detailMap.get(camera.getId());
  437. cameraDetail.setCompanyId(companyParam.getCompanyId());
  438. updateDetailList.add(cameraDetail);
  439. }
  440. return cameraDetailService.updateBatchById(updateDetailList) ? updateDetailList.size() : 0;
  441. }
  442. private void setCompanyIdByDb(List<CameraInOutParam> companyParams){
  443. List<String> companyNames = companyParams.parallelStream().map(CameraInOutParam::getCompanyName).collect(Collectors.toList());
  444. List<Company> companyList = companyService.getCompanyByNames(companyNames);
  445. HashMap<String,Long> companyNameMap = new HashMap<>();
  446. for (Company company : companyList) {
  447. companyNameMap.put(company.getCompanyName(),company.getId());
  448. }
  449. List<Integer> errorList = new ArrayList<>();
  450. Integer index = 0;
  451. for (CameraInOutParam companyParam : companyParams) {
  452. index ++;
  453. if(StringUtils.isNotBlank(companyParam.getCompanyName())){
  454. if(companyNameMap.get(companyParam.getCompanyName()) == null){
  455. log.error("outError-->出库错误:客户名称不存在:snCode:{},outType:{},companyName:{},orderSn:{},agentName:{}"
  456. ,companyParam.getSnCode(),companyParam.getOutType(),companyParam.getCompanyName(),companyParam.getOrderSn(),companyParam.getAgentId());
  457. errorList.add(index);
  458. }
  459. companyParam.setCompanyId(companyNameMap.get(companyParam.getCompanyName()));
  460. }
  461. }
  462. excelService.toExcelError(errorList);
  463. }
  464. private HashMap<String, Object> getResultMap(List<CameraInOutParam> params,Integer type){
  465. HashMap<String,Object> resultMap = new HashMap<>();
  466. List<String> snCodeList = params.parallelStream().map(CameraInOutParam::getSnCode).collect(Collectors.toList());
  467. List<Camera> cameraList = new ArrayList<>();
  468. if(type == 1){
  469. cameraList = this.getBySnCodes(snCodeList);
  470. }
  471. if(type == 2){
  472. cameraList = this.getByOutSnCodes(snCodeList);
  473. }
  474. checkSnCode(snCodeList,cameraList.stream().map(Camera::getSnCode).collect(Collectors.toList()));
  475. List<Long> cameraIds = cameraList.parallelStream().map(Camera::getId).collect(Collectors.toList());
  476. List<CameraDetail> cameraDetails = cameraDetailService.getByCameraIds(cameraIds);
  477. HashMap<Long,CameraDetail> detailMap = new HashMap<>();
  478. for (CameraDetail cameraDetail : cameraDetails) {
  479. detailMap.put(cameraDetail.getCameraId(),cameraDetail);
  480. }
  481. HashMap<String,Camera> snCodeMap = new HashMap<>();
  482. for (Camera camera : cameraList) {
  483. snCodeMap.put(camera.getSnCode(),camera);
  484. }
  485. List<Integer> errorList = new ArrayList<>();
  486. for (String snCode : snCodeList) {
  487. Camera camera = snCodeMap.get(snCode);
  488. if(camera == null || detailMap.get(camera.getId()) ==null){
  489. log.error("excel-export-error-->:相机未入库:snCode:{}",snCode);
  490. errorList.add(snCodeList.indexOf(snCode) );
  491. }
  492. }
  493. excelService.toExcelError(errorList);
  494. resultMap.put("detailMap",detailMap);
  495. resultMap.put("snCodeMap",snCodeMap);
  496. return resultMap;
  497. }
  498. @Autowired
  499. RabbitMqProducer rabbitMqProducer;
  500. @Override
  501. public void initAllCameraSpace(Long userId) {
  502. List<Long> cameraIds ;
  503. List<CameraDetail> cameraDetails;
  504. if(userId != null){
  505. cameraDetails = cameraDetailService.getByUserId(userId);
  506. }else {
  507. List<Camera> list = this.list();
  508. cameraIds = list.stream().map(Camera::getId).collect(Collectors.toList());
  509. cameraDetails = cameraDetailService.getByCameraIds(cameraIds);
  510. }
  511. if(cameraDetails == null || cameraDetails.size() <=0){
  512. return;
  513. }
  514. // for (CameraDetail cameraDetail : cameraDetails) {
  515. // ScenePayStatusVo scenePayStatusVo = new ScenePayStatusVo(cameraDetail.getCameraId());
  516. // rabbitMqProducer.sendByWorkQueue("scene-pay-status", JSONObject.toJSONString(scenePayStatusVo));
  517. // }
  518. HashMap<Long, Long> map = sceneProService.getSpaceGroupByCameraId();
  519. for (CameraDetail cameraDetail : cameraDetails) {
  520. Long space = map.get(cameraDetail.getCameraId());
  521. if(space != null){
  522. space = space > 0 ? space : 0;
  523. LambdaUpdateWrapper<CameraDetail> wrapper = new LambdaUpdateWrapper<>();
  524. wrapper.eq(CameraDetail::getId,cameraDetail.getId());
  525. wrapper.set(CameraDetail::getUsedSpace,space);
  526. cameraDetailService.update(wrapper);
  527. }
  528. }
  529. }
  530. @Override
  531. public void updateCameraType(CameraInOutParam param) {
  532. if(param.getId() == null || param.getCameraType() == null){
  533. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  534. }
  535. Camera camera = this.getById(param.getId());
  536. if(camera == null){
  537. throw new BusinessException(ResultCode.CAMERA_NOT_EXIST);
  538. }
  539. String wifiNamePrefix = null;
  540. if(StringUtils.isNotBlank(param.getWifiNamePrefix())){
  541. wifiNamePrefix = param.getWifiNamePrefix();
  542. }else {
  543. CameraType cameraType = cameraTypeService.getByType(param.getCameraType());
  544. if(cameraType == null){
  545. throw new BusinessException(ResultCode.CAMERA_TYPE_ERROR);
  546. }
  547. wifiNamePrefix = cameraType.getWifiNamePrefix();
  548. }
  549. LambdaUpdateWrapper<Camera> cameraLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
  550. cameraLambdaUpdateWrapper.eq(Camera::getId,param.getId());
  551. cameraLambdaUpdateWrapper.set(Camera::getWifiName,wifiNamePrefix+ camera.getSnCode());
  552. this.update(cameraLambdaUpdateWrapper);
  553. LambdaUpdateWrapper<CameraDetail> wrapper = new LambdaUpdateWrapper<>();
  554. wrapper.eq(CameraDetail::getCameraId,param.getId());
  555. wrapper.set(CameraDetail::getType,param.getCameraType());
  556. wrapper.set(CameraDetail::getGoodsId,param.getCameraType() == 1? 4: param.getCameraType());
  557. cameraDetailService.update(wrapper);
  558. }
  559. @Override
  560. public List<Camera> getLikeBySnCode(String snCode) {
  561. LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
  562. wrapper.like(Camera::getSnCode,snCode);
  563. return this.list(wrapper);
  564. }
  565. @Override
  566. public HashMap<Long, Camera> getByIds(List<Long> cameraIds) {
  567. HashMap<Long, Camera> map = new HashMap<>();
  568. if(cameraIds != null && !cameraIds.isEmpty()){
  569. List<Camera> cameraList = this.listByIds(cameraIds);
  570. cameraList.forEach(entity -> map.put(entity.getId(),entity));
  571. }
  572. return map;
  573. }
  574. @Override
  575. public List<Camera> getBySnCodes(Set<String> snCodes) {
  576. if(snCodes.isEmpty()){
  577. return new ArrayList<>();
  578. }
  579. LambdaQueryWrapper<Camera> wrapper = new LambdaQueryWrapper<>();
  580. wrapper.in(Camera::getSnCode,snCodes);
  581. return this.list(wrapper);
  582. }
  583. @Override
  584. public Integer insExcelList(List<HashMap<Integer, String>> excelRowList) {
  585. List<String> wifiNameList = new ArrayList<>();
  586. Integer index = 0;
  587. for (HashMap<Integer, String> map : excelRowList) {
  588. index ++;
  589. if(map.isEmpty()){
  590. continue;
  591. }
  592. if(index == 0 && !map.get(0).equals("设备入库模板")){
  593. throw new BusinessException(ResultCode.TEMPLATE_TYPE_ERROR);
  594. }
  595. if(index <4){ //从第四行开始
  596. continue;
  597. }
  598. String wifiName = map.get(0);
  599. wifiNameList.add(wifiName);
  600. }
  601. if(wifiNameList.size() <=0){
  602. throw new BusinessException(ResultCode.IN_TEMPLATE_EMPTY);
  603. }
  604. return this.ins(wifiNameList);
  605. }
  606. @Autowired
  607. IAgentNewService agentNewService;
  608. @Override
  609. public Integer outExcelList(List<HashMap<Integer, String>> excelRowList) {
  610. List<CameraInOutParam> params = new ArrayList<>();
  611. List<Integer> errorIndex = new ArrayList<>();
  612. Integer index = 0;
  613. for (HashMap<Integer, String> map : excelRowList) {
  614. index ++;
  615. if(map.isEmpty()){
  616. continue;
  617. }
  618. if(index == 0 && !map.get(0).equals("设备出库模板")){
  619. throw new BusinessException(ResultCode.TEMPLATE_TYPE_ERROR);
  620. }
  621. if(index <4){
  622. continue;
  623. }
  624. String snCode = map.get(0);
  625. String outTypeString = map.get(1);
  626. String companyName = map.get(2);
  627. String orderSn = map.get(3);
  628. String agentName = map.get(4);
  629. String buyDate = map.get(5);
  630. CameraOutTypeEnum outTypeEnum = CameraOutTypeEnum.getByMsg(outTypeString);
  631. if(outTypeEnum == null || StringUtils.isBlank(snCode) || StringUtils.isBlank(buyDate)){
  632. log.error("outError-->出库错误:出库类型为空或snCode为空:snCode:{},outType:{},companyName:{},orderSn:{},agentName:{}"
  633. ,snCode,outTypeString,companyName,orderSn,agentName);
  634. errorIndex.add(index -3);
  635. }
  636. CameraInOutParam param = new CameraInOutParam();
  637. if(outTypeEnum != null){
  638. int outType = outTypeEnum.getCode();
  639. param.setOutType(outType);
  640. }
  641. param.setBuyDate(buyDate);
  642. if(StringUtils.isNotBlank(agentName)){
  643. AgentNew agentNew = agentNewService.getByName(agentName);
  644. if(agentNew == null){
  645. log.error("outError-->出库错误:代理商不存在:snCode:{},outType:{},companyName:{},orderSn:{},agentName:{}"
  646. ,snCode,outTypeString,companyName,orderSn,agentName);
  647. errorIndex.add(index -3);
  648. }else {
  649. param.setAgentId(agentNew.getId());
  650. }
  651. }
  652. param.setCompanyName(companyName);
  653. param.setOrderSn(orderSn);
  654. param.setSnCode(snCode);
  655. params.add(param);
  656. }
  657. excelService.toExcelError(errorIndex);
  658. if(params.size() <=0){
  659. throw new BusinessException(ResultCode.OUT_TEMPLATE_EMPTY);
  660. }
  661. return this.outs(params);
  662. }
  663. @Override
  664. public Integer companyExcelList(List<HashMap<Integer, String>> excelRowList) {
  665. List<CameraInOutParam> companyParams = new ArrayList<>();
  666. List<Integer> errorIndex = new ArrayList<>();
  667. Integer index = 0;
  668. for (HashMap<Integer, String> map : excelRowList) {
  669. index ++;
  670. if(map.isEmpty()){
  671. continue;
  672. }
  673. if(index == 0 && !map.get(0).equals("客户关联模板")){
  674. throw new BusinessException(ResultCode.TEMPLATE_TYPE_ERROR);
  675. }
  676. if(index <4){
  677. continue;
  678. }
  679. CameraInOutParam param = new CameraInOutParam();
  680. param.setCompanyName(map.get(0));
  681. param.setSnCode(map.get(1));
  682. if(StringUtils.isBlank(param.getSnCode()) || StringUtils.isBlank(param.getCompanyName())){
  683. errorIndex.add(index -3 );
  684. }
  685. companyParams.add(param);
  686. }
  687. excelService.toExcelError(errorIndex);
  688. if( companyParams.size() <=0){
  689. throw new BusinessException(ResultCode.COMPANY_TEMPLATE_EMPTY);
  690. }
  691. return this.updateCompany(companyParams);
  692. }
  693. }