DeviceChargingServiceImpl.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. package com.xy.service;
  2. import cn.hutool.json.JSONUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.xy.collections.list.JArrayList;
  7. import com.xy.collections.list.JList;
  8. import com.xy.collections.map.JHashMap;
  9. import com.xy.collections.map.JMap;
  10. import com.xy.device.*;
  11. import com.xy.dto.DeviceAlgorithmChargingDto;
  12. import com.xy.dto.DeviceChargingConfigDto;
  13. import com.xy.dto.DeviceChargingDto;
  14. import com.xy.dto.DeviceInfoDto;
  15. import com.xy.entity.*;
  16. import com.xy.mapper.DeviceChargingMapper;
  17. import com.xy.utils.*;
  18. import io.swagger.annotations.Api;
  19. import io.swagger.annotations.ApiOperation;
  20. import lombok.AllArgsConstructor;
  21. import lombok.extern.slf4j.Slf4j;
  22. import org.springframework.context.annotation.Lazy;
  23. import org.springframework.stereotype.Service;
  24. import org.springframework.validation.annotation.Validated;
  25. import org.springframework.web.bind.annotation.PostMapping;
  26. import org.springframework.web.bind.annotation.RequestBody;
  27. import javax.validation.constraints.NotEmpty;
  28. import java.math.BigDecimal;
  29. import java.time.LocalDateTime;
  30. import java.util.ArrayList;
  31. import java.util.HashMap;
  32. import java.util.List;
  33. import java.util.Map;
  34. import static com.xy.utils.PlusBeans.toIPage;
  35. import static com.xy.utils.PlusBeans.toPageBean;
  36. /**
  37. * <p>
  38. * 设备计费表 服务实现类
  39. * </p>
  40. *
  41. * @author lijin
  42. * @since 2023-04-14
  43. */
  44. @Slf4j
  45. @Service
  46. @Api(tags = "设备计费表")
  47. @AllArgsConstructor(onConstructor_ = @Lazy)
  48. public class DeviceChargingServiceImpl extends ServiceImpl<DeviceChargingMapper, DeviceCharging> implements DeviceChargingService {
  49. private DeviceChargingHistoryServiceImpl deviceChargingHistoryService;
  50. private DeviceInfoServiceImpl deviceInfoService;
  51. private DeviceTypeAlgorithmBeforConfigServiceImpl deviceTypeAlgorithmBeforConfigService;
  52. private DeviceChargingConfigServiceImpl deviceChargingConfigService;
  53. private DeviceAlgorithmChargingServiceImpl deviceAlgorithmChargingService;
  54. private DeviceStatusServiceImpl deviceStatusService;
  55. @PostMapping("init")
  56. @ApiOperation("初始化")
  57. public R init() {
  58. String timeout = DataTime.getStringAround(0, 0, 365, 0, 0, 0);
  59. LocalDateTime localDateTime = LocalDateTime.now();
  60. List<DeviceInfo> list = deviceInfoService.list(new LambdaQueryWrapper<DeviceInfo>().eq(DeviceInfo::getActiveState, 1));
  61. List<DeviceCharging> deviceChargings = new ArrayList<>(list.size());
  62. for (DeviceInfo deviceInfo : list) {
  63. DeviceCharging deviceCharging = new DeviceCharging()
  64. .setDeviceId(deviceInfo.getDeviceId())
  65. .setTimeout(DataTime.toLocal(timeout))
  66. .setCreateTime(localDateTime);
  67. deviceChargings.add(deviceCharging);
  68. }
  69. saveBatch(deviceChargings);
  70. return R.ok();
  71. }
  72. @PostMapping("del")
  73. @ApiOperation("删除")
  74. public R del(@RequestBody @Validated DeviceChargingDto.Del del) {
  75. removeBatchByIds(del.getDeviceId());
  76. return R.ok();
  77. }
  78. @PostMapping("payCheck")
  79. @ApiOperation("购买反显")
  80. public R<Map<Long, DeviceChargingDto.PayCheckVo>> payCheck(@RequestBody @Validated DeviceChargingDto.PayCheck payCheck) {
  81. Map<Long, DeviceChargingDto.PayCheckVo> result = new HashMap<>();
  82. List<Long> deviceIds = payCheck.getDeviceId();
  83. List<DeviceInfo> list = deviceInfoService.list(new LambdaQueryWrapper<DeviceInfo>()
  84. .in(DeviceInfo::getDeviceId, deviceIds)
  85. );
  86. if (!Emptys.check(list)) {
  87. return R.fail("设备不存在");
  88. }
  89. JList<DeviceInfo> deviceInfos = new JArrayList<>(list);
  90. JMap<Integer, DeviceInfo> cover = deviceInfos.toMap(DeviceInfo::getDeviceType).cover();
  91. if (cover.size() > 1) {
  92. return R.fail("设备类型必须一致");
  93. }
  94. //查询设备状态信息
  95. List<DeviceStatus> deviceStatuses = deviceStatusService.list(new LambdaQueryWrapper<DeviceStatus>().in(DeviceStatus::getDeviceId, deviceIds));
  96. JMap<Long, DeviceStatus> deviceStatusesJMaps = new JArrayList<>(deviceStatuses).toMap(DeviceStatus::getDeviceId).cover();
  97. List<String> mercCodes = new ArrayList<>();
  98. deviceAlgorithmChargingService.getMercCodes(list.get(0).getMercCode(), mercCodes);
  99. //查询设备计费配置表
  100. List<DeviceChargingConfig> deviceChargingConfigs = deviceChargingConfigService.list(new LambdaQueryWrapper<DeviceChargingConfig>()
  101. .in(DeviceChargingConfig::getMercCode, mercCodes)
  102. .eq(DeviceChargingConfig::getType, SysDictUtils.getValue(EnumDeviceChargingConfigType.Code.CODE.getCode(), EnumDeviceChargingConfigType.N_2.getCode(), Integer.class))
  103. .eq(DeviceChargingConfig::getDeviceType, list.get(0).getDeviceType())
  104. .orderByDesc(DeviceChargingConfig::getMercCode)
  105. );
  106. //有则使用,无则使用默认字典
  107. int standard = Emptys.check(deviceChargingConfigs) ? deviceChargingConfigs.get(0).getConfigValue()
  108. : SysDictUtils.getValue(EnumDeviceCharging.Code.CODE.getCode(), String.valueOf(list.get(0).getDeviceType()), Integer.class);
  109. String deviceTypeName = SysDictUtils.get(EnumDeviceType.Code.CODE.getCode(), String.valueOf(list.get(0).getDeviceType())).getMsg();
  110. //查询算法预充配置
  111. JList<DeviceInfo> values = cover.getValues();
  112. List<DeviceTypeAlgorithmBeforConfig> deviceTypeAlgorithmBeforConfigs = deviceTypeAlgorithmBeforConfigService.list(new LambdaQueryWrapper<DeviceTypeAlgorithmBeforConfig>()
  113. .eq(DeviceTypeAlgorithmBeforConfig::getDeviceType, list.get(0).getDeviceType())
  114. .eq(DeviceTypeAlgorithmBeforConfig::getMercId, list.get(0).getMercId())
  115. .in(DeviceTypeAlgorithmBeforConfig::getAlgorithmId, values.getProperty(DeviceInfo::getAlgorithmId))
  116. );
  117. JMap<Long, DeviceTypeAlgorithmBeforConfig> deviceTypeAlgorithmBeforConfigsJMaps = Emptys.check(deviceTypeAlgorithmBeforConfigs) ? new JArrayList<>(deviceTypeAlgorithmBeforConfigs).toMap(DeviceTypeAlgorithmBeforConfig::getAlgorithmId).cover()
  118. : new JHashMap<>();
  119. //查询默认算法信息
  120. JList<Long> algorithmIds = deviceInfos.getProperty(DeviceInfo::getAlgorithmId);
  121. Map<Long, String> moonAlgorithmTypesMap = new HashMap<>();
  122. Map<Long, String> algorithmPayConfigMap = new HashMap<>();
  123. for (Long algorithmId : algorithmIds) {
  124. SysDictRedis moonAlgorithmTypes = SysDictUtils.get(EnumAlgorithmTypes.Code.CODE.getCode(), String.valueOf(algorithmId));
  125. SysDictRedis algorithmPayConfig = SysDictUtils.get(EnumAlgorithmPayConfig.Code.CODE.getCode(), String.valueOf(algorithmId));
  126. if (Emptys.check(moonAlgorithmTypes)) {
  127. moonAlgorithmTypesMap.put(algorithmId, moonAlgorithmTypes.getMsg());
  128. }
  129. if (Emptys.check(algorithmPayConfig)) {
  130. algorithmPayConfigMap.put(algorithmId, algorithmPayConfig.getValue());
  131. }
  132. }
  133. for (DeviceInfo deviceInfo : list) {
  134. //封装设备信息
  135. DeviceChargingDto.PayCheckVo payCheckVo = new DeviceChargingDto.PayCheckVo();
  136. DeviceStatus deviceStatus = deviceStatusesJMaps.get(deviceInfo.getDeviceId());
  137. DeviceChargingDto.PayCheckVo.DeviceInfo deviceInfoObj = Beans.copy(Beans.copy(DeviceChargingDto.PayCheckVo.DeviceInfo.class, deviceInfo), deviceStatus)
  138. .setDeviceTypeName(deviceTypeName)
  139. .setStandard(BigDecimal.valueOf(standard).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_DOWN).doubleValue() + "元/年")
  140. .setMoney(standard);
  141. //封装算法购买信息
  142. DeviceTypeAlgorithmBeforConfig deviceTypeAlgorithmBeforConfig = deviceTypeAlgorithmBeforConfigsJMaps.get(deviceInfo.getAlgorithmId());
  143. String algorithmName = moonAlgorithmTypesMap.get(deviceInfo.getAlgorithmId());
  144. String algorithmPayConfig = algorithmPayConfigMap.get(deviceInfo.getAlgorithmId());
  145. DeviceAlgorithmChargingDto.AlgorithmMoonConfig algorithmMoonConfig = JSONUtil.parseObj(algorithmPayConfig).toBean(DeviceAlgorithmChargingDto.AlgorithmMoonConfig.class);
  146. DeviceAlgorithmChargingDto.AlgorithmMoonConfig.Inf inf = algorithmMoonConfig.getInf();
  147. DeviceChargingDto.PayCheckVo.DeviceAlgorithmCharging infDeviceAlgorithmCharging = Beans.copy(DeviceChargingDto.PayCheckVo.DeviceAlgorithmCharging.class, deviceInfo)
  148. .setDeviceTypeName(deviceTypeName)
  149. .setAlgorithmId(deviceInfo.getAlgorithmId())
  150. .setAlgorithmName(algorithmName)
  151. .setStandard(BigDecimal.valueOf(algorithmMoonConfig.getPrice()).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_DOWN).doubleValue() + "元/每笔(" + inf.getSize() + "笔)")
  152. .setMoney(deviceTypeAlgorithmBeforConfig == null ? inf.getMoney() : deviceTypeAlgorithmBeforConfig.getMoney());
  153. //封装算法包月信息
  154. DeviceAlgorithmChargingDto.AlgorithmMoonConfig.Moon moon = algorithmMoonConfig.getMoon();
  155. DeviceChargingDto.PayCheckVo.DeviceAlgorithmCharging moonDeviceAlgorithmCharging = Beans.copy(DeviceChargingDto.PayCheckVo.DeviceAlgorithmCharging.class, deviceInfo)
  156. .setDeviceTypeName(deviceTypeName)
  157. .setAlgorithmId(deviceInfo.getAlgorithmId())
  158. .setAlgorithmName(algorithmName)
  159. .setStandard(BigDecimal.valueOf(algorithmMoonConfig.getPrice()).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_DOWN).doubleValue() + "元/包月(" + moon.getSize() + "笔)")
  160. .setMoney(moon.getMoney());
  161. payCheckVo.setDeviceInfo(deviceInfoObj)
  162. .setInfDeviceAlgorithmCharging(infDeviceAlgorithmCharging)
  163. .setMoonDeviceAlgorithmCharging(moonDeviceAlgorithmCharging);
  164. result.put(deviceInfo.getDeviceId(), payCheckVo);
  165. }
  166. return R.ok(result);
  167. }
  168. @PostMapping("check")
  169. @ApiOperation("检查")
  170. public R check(@RequestBody @Validated DeviceChargingDto.Check check) {
  171. LocalDateTime now = LocalDateTime.now();
  172. DeviceCharging deviceCharging = getById(check.getDeviceId());
  173. //不存在则新增
  174. if (deviceCharging == null) {
  175. //查询设备计费配置表
  176. DeviceInfoDto.Vo deviceInfo = deviceInfoService.obj(new DeviceInfoDto.Obj().setDeviceId(check.getDeviceId())).getData();
  177. List<String> mercCodes = new ArrayList<>();
  178. deviceAlgorithmChargingService.getMercCodes(deviceInfo.getMercCode(), mercCodes);
  179. List<DeviceChargingConfig> deviceChargingConfigs = deviceChargingConfigService.list(new LambdaQueryWrapper<DeviceChargingConfig>()
  180. .in(DeviceChargingConfig::getMercCode, mercCodes)
  181. .eq(DeviceChargingConfig::getType, SysDictUtils.getValue(EnumDeviceChargingConfigType.Code.CODE.getCode(), EnumDeviceChargingConfigType.N_1.getCode(), Integer.class))
  182. .eq(DeviceChargingConfig::getDeviceType, deviceInfo.getDeviceType())
  183. .orderByDesc(DeviceChargingConfig::getMercCode)
  184. );
  185. //有则使用,无则使用默认字典
  186. int chargingX = Emptys.check(deviceChargingConfigs) ? deviceChargingConfigs.get(0).getConfigValue()
  187. : SysDictUtils.getValue(EnumDeviceCharging.Code.CODE.getCode(), EnumDeviceCharging.N_X.getCode(), Integer.class);
  188. //新增
  189. String timeout = DataTime.getStringAround(0, 0, chargingX, 0, 0, 0);
  190. deviceCharging = new DeviceCharging()
  191. .setDeviceId(check.getDeviceId())
  192. .setTimeout(DataTime.toLocal(timeout))
  193. .setCreateTime(now);
  194. save(deviceCharging);
  195. }
  196. //验证过期时间
  197. int contrast = DataTime.stringContrast(DataTime.toString(deviceCharging.getTimeout()), DataTime.toString(now));
  198. if (contrast <= 0) {
  199. return R.fail(R.Enum.CHARGING.getCode(), R.Enum.CHARGING.getMsg());
  200. }
  201. return R.ok();
  202. }
  203. @PostMapping("page")
  204. @ApiOperation("分页查询")
  205. public R<PageBean<DeviceChargingDto.PageVo>> page(@RequestBody DeviceChargingDto.Page page) {
  206. Integer value = SysDictUtils.getValue(EnumDeviceCharging.Code.CODE.getCode(), EnumDeviceCharging.N_200.getCode(), Integer.class);
  207. Integer prep = SysDictUtils.getValue(EnumDeviceChargingConfigType.Code.CODE.getCode(), EnumDeviceChargingConfigType.N_2.getCode(), Integer.class);
  208. String theTime = DataTime.getStringAround(0, 0, value, 0, 0, 0);
  209. page.setThisTime(LocalDateTime.now()).setTheTime(DataTime.toLocal(theTime));
  210. IPage<DeviceChargingDto.PageVo> iPage = baseMapper.page(toIPage(page.getPage()), page);
  211. List<DeviceChargingDto.PageVo> records = iPage.getRecords();
  212. if (Emptys.check(records)) {
  213. Map<String, SysDictRedis> stringSysDictRedisMap = SysDictUtils.get(EnumDeviceCharging.Code.CODE.getCode());
  214. for (DeviceChargingDto.PageVo record : records) {
  215. //封装过期状态说明
  216. String timeoutStatus;
  217. DeviceChargingDto.Vo deviceCharging = record.getDeviceCharging();
  218. LocalDateTime timeout = deviceCharging.getTimeout();
  219. long s = DataTime.diff(page.getThisTime(), timeout, "s");
  220. if (s <= 0) {
  221. timeoutStatus = "欠费(" + (~(s / 86400 - 1)) + "天)";
  222. } else {
  223. timeoutStatus = s <= value * 86400 ? "即将到期(" + s / 86400 + "天)" : "正常(" + s / 86400 + "天)";
  224. }
  225. record.getDeviceCharging().setTimeoutStatus(timeoutStatus);
  226. DeviceInfoDto.Vo deviceInfo = record.getDeviceInfo();
  227. //查询设备计费配置
  228. DeviceChargingConfigDto.SelectList selectList = new DeviceChargingConfigDto.SelectList()
  229. .setDeviceType(deviceInfo.getDeviceType())
  230. .setMercId(deviceInfo.getMercId());
  231. selectList.setType(prep);
  232. List<DeviceChargingConfigDto.Vo> deviceChargingConfigs = deviceChargingConfigService.list2(selectList).getData();
  233. if (Emptys.check(deviceChargingConfigs)) {
  234. //获取自定义配置计费标准
  235. DeviceChargingConfigDto.Vo deviceChargingConfig = deviceChargingConfigs.get(0);
  236. record.setChargingMoney(deviceChargingConfig.getConfigValue());
  237. } else {
  238. //获取默认计费标准
  239. SysDictRedis sysDictRedis = stringSysDictRedisMap.get(deviceInfo.getDeviceType().toString());
  240. if (sysDictRedis != null) {
  241. record.setChargingMoney(Integer.valueOf(sysDictRedis.getValue()));
  242. }
  243. }
  244. }
  245. }
  246. return R.ok(toPageBean(iPage));
  247. }
  248. @Override
  249. @ApiOperation("购买")
  250. public R pay(DeviceChargingDto.Pay pay) {
  251. JList<DeviceChargingDto.Pay.DeviceCharging> deviceChargings = new JArrayList<>(pay.getDeviceChargings());
  252. Integer payType = pay.getPayType();
  253. LocalDateTime now = LocalDateTime.now();
  254. JList<DeviceChargingHistory> deviceChargingHistories = new JArrayList<>();
  255. deviceChargings.forEach(deviceCharging -> {
  256. DeviceChargingHistory deviceChargingHistory = new DeviceChargingHistory()
  257. .createId()
  258. .setMercId(pay.getMercId())
  259. .setOrderId(pay.getOrderId())
  260. .setDeviceId(deviceCharging.getDeviceId())
  261. .setChargingSize(deviceCharging.getNum())
  262. .setChargingMoney(deviceCharging.getChargingMoney())
  263. .setChargingType(payType)
  264. .setCreateTime(now)
  265. .setUpdateTime(now)
  266. .setNote(pay.getNote());
  267. deviceChargingHistories.add(deviceChargingHistory);
  268. });
  269. if (!Emptys.check(deviceChargingHistories)) {
  270. return R.fail();
  271. }
  272. //添加设备计费历史表
  273. deviceChargingHistoryService.saveBatch(deviceChargingHistories);
  274. return R.ok();
  275. }
  276. @Override
  277. @ApiOperation("购买回调")
  278. public R payNotice(DeviceChargingDto.PayNotice payNotice) {
  279. //查询设备计费历史表
  280. List<DeviceChargingHistory> list = deviceChargingHistoryService.list(new LambdaQueryWrapper<DeviceChargingHistory>().eq(DeviceChargingHistory::getOrderId, payNotice.getOrderId()));
  281. if (!Emptys.check(list)) {
  282. return R.ok();
  283. }
  284. LocalDateTime now = LocalDateTime.now();
  285. JList<DeviceChargingHistory> deviceChargingHistories = new JArrayList<>(list);
  286. //查询设备信息
  287. List<DeviceInfo> deviceInfos = deviceInfoService.list(new LambdaQueryWrapper<DeviceInfo>().in(DeviceInfo::getDeviceId, deviceChargingHistories.getProperty(DeviceChargingHistory::getDeviceId)));
  288. JMap<Long, DeviceInfo> deviceInfoJMap = new JArrayList<>(deviceInfos).toMap(DeviceInfo::getDeviceId).cover();
  289. //查询设备计费表
  290. List<DeviceCharging> deviceChargings = list(new LambdaQueryWrapper<DeviceCharging>().in(DeviceCharging::getDeviceId, deviceChargingHistories.getProperty(DeviceChargingHistory::getDeviceId)));
  291. JMap<Long, DeviceCharging> deviceChargingsJMaps = new JArrayList<>(deviceChargings).toMap(DeviceCharging::getDeviceId).cover();
  292. //获取已支付字典
  293. Integer status = SysDictUtils.getValue(EnumDeviceChargingHistoryStatus.Code.CODE.getCode(), EnumDeviceChargingHistoryStatus.N_2.getCode(), Integer.class);
  294. JList<DeviceCharging> updateDeviceCharging = new JArrayList<>();
  295. JList<DeviceInfoDto.Update> updateDeviceInfos = new JArrayList<>();
  296. JList<DeviceChargingHistory> updateDeviceChargingHistory = new JArrayList<>();
  297. for (DeviceChargingHistory deviceChargingHistory : deviceChargingHistories) {
  298. DeviceCharging deviceCharging = deviceChargingsJMaps.get(deviceChargingHistory.getDeviceId())
  299. .setLastChargingPayType(deviceChargingHistory.getChargingType())
  300. .setLastChargingMoney(deviceChargingHistory.getChargingMoney())
  301. .setLastChargingTime(now);
  302. Integer chargingSize = deviceChargingHistory.getChargingSize();
  303. boolean fal = false;
  304. //设备计费历史完成
  305. deviceChargingHistory.setStatus(status);
  306. String timeout = DataTime.getStringAround(chargingSize, 0, 0, 0, 0, 0, DataTime.toString(deviceCharging.getTimeout()));
  307. deviceCharging.setChargingSumMoney(deviceCharging.getChargingSumMoney() + deviceChargingHistory.getChargingMoney())
  308. .setTimeout(DataTime.toLocal(timeout));
  309. //过期时间大于当前时间
  310. if (DataTime.stringContrast(timeout, DataTime.toString(now)) > 0) {
  311. fal = true;
  312. }
  313. if (fal) {
  314. //解冻设备
  315. DeviceInfoDto.Update updateDeviceInfo = new DeviceInfoDto.Update()
  316. .setDeviceId(deviceChargingHistory.getDeviceId());
  317. updateDeviceInfo.setFreezeStatus(1);
  318. updateDeviceInfo.setBusyState(1);
  319. //激活设备
  320. if (deviceChargingHistory.getChargingType() != 100) {
  321. DeviceInfo deviceInfo = deviceInfoJMap.get(deviceChargingHistory.getDeviceId());
  322. if (deviceInfo.getActiveState() == 2) {
  323. updateDeviceInfo.setActiveState(1);
  324. }
  325. if (!Emptys.check(deviceInfo.getActiveTime())) {
  326. updateDeviceInfo.setActiveTime(now);
  327. }
  328. }
  329. updateDeviceInfos.add(updateDeviceInfo);
  330. }
  331. updateDeviceCharging.add(deviceCharging);
  332. updateDeviceChargingHistory.add(deviceChargingHistory);
  333. }
  334. int size = 50;
  335. //修改设备计费记录
  336. if (Emptys.check(updateDeviceCharging)) {
  337. JList<JList<DeviceCharging>> partition = updateDeviceCharging.partition(size);
  338. partition.forEach(data -> updateBatchById(data));
  339. }
  340. //修改设备计费历史记录
  341. if (Emptys.check(updateDeviceChargingHistory)) {
  342. JList<JList<DeviceChargingHistory>> partition = updateDeviceChargingHistory.partition(size);
  343. partition.forEach(data -> deviceChargingHistoryService.updateBatchById(data));
  344. }
  345. //修改设备
  346. if (Emptys.check(updateDeviceInfos)) {
  347. JList<JList<DeviceInfoDto.Update>> partition = updateDeviceInfos.partition(size);
  348. partition.forEach(data -> deviceInfoService.updateBatch(data));
  349. }
  350. return R.ok();
  351. }
  352. }