|
@@ -0,0 +1,188 @@
|
|
|
+package com.rongwei.zhsw.system.service.impl;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.rongwe.zhsw.system.domain.SwMonthlyMeterReadingRecordDo;
|
|
|
+import com.rongwe.zhsw.system.domain.SwUserManagementDo;
|
|
|
+import com.rongwe.zhsw.system.domain.SwWaterUsageEntryDo;
|
|
|
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
|
|
|
+import com.rongwei.rwcommon.base.R;
|
|
|
+import com.rongwei.rwcommon.utils.SecurityUtil;
|
|
|
+import com.rongwei.zhsw.system.dao.SwMonthlyMeterReadingRecordDao;
|
|
|
+import com.rongwei.zhsw.system.service.SwMonthlyMeterReadingRecordService;
|
|
|
+import com.rongwei.zhsw.system.service.SwWaterUsageEntryService;
|
|
|
+import com.rongwei.zhsw.system.utils.ZHSWCommonUtils;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneId;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class SwMonthlyMeterReadingRecordServiceImpl extends ServiceImpl<SwMonthlyMeterReadingRecordDao, SwMonthlyMeterReadingRecordDo>
|
|
|
+ implements SwMonthlyMeterReadingRecordService {
|
|
|
+
|
|
|
+ private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SwMonthlyMeterReadingRecordService swMonthlyMeterReadingRecordService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SwWaterUsageEntryService swWaterUsageEntryService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SwUserManagementServiceImpl swUserManagementService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private BillGenerationServiceImpl billGenerationService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R receiveMonthlyMeterReading(List<SwMonthlyMeterReadingRecordDo> list) throws Exception {
|
|
|
+
|
|
|
+ //1. 校验传入参数是否为空,并且校验 RECORDID 是否唯一
|
|
|
+ validExistenceOrUniqueness(list);
|
|
|
+
|
|
|
+ LocalDateTime localDateTime =null;
|
|
|
+ for (SwMonthlyMeterReadingRecordDo recordDo:list){
|
|
|
+ recordDo.setId(SecurityUtil.getUUID());
|
|
|
+ // 转换为LocalDateTime
|
|
|
+ localDateTime = recordDo.getCurrentReadingDate().toInstant()
|
|
|
+ .atZone(ZoneId.systemDefault())
|
|
|
+ .toLocalDateTime();
|
|
|
+ recordDo.setYear(localDateTime.getYear());
|
|
|
+ recordDo.setMonth(localDateTime.getMonthValue());
|
|
|
+ recordDo.setStatus("0");
|
|
|
+ }
|
|
|
+
|
|
|
+ //2.批量保存
|
|
|
+ swMonthlyMeterReadingRecordService.saveBatch(list,200);
|
|
|
+
|
|
|
+ Thread td = new Thread(() -> generateWaterRecordAter(list));
|
|
|
+ td.start();
|
|
|
+
|
|
|
+ return R.ok("数据接收成功");
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //保存后生成抄表记录
|
|
|
+ private void generateWaterRecordAter(List<SwMonthlyMeterReadingRecordDo> list) {
|
|
|
+
|
|
|
+ log.info("保存后生成抄表记录");
|
|
|
+
|
|
|
+ List<SwMonthlyMeterReadingRecordDo> updateList = new ArrayList<>();
|
|
|
+ List<SwWaterUsageEntryDo> saveList = new ArrayList<>();
|
|
|
+
|
|
|
+ //2.参数按照 username 分组
|
|
|
+ Map<String, List<SwMonthlyMeterReadingRecordDo>> collect = list.stream().
|
|
|
+ collect(Collectors.groupingBy(SwMonthlyMeterReadingRecordDo::getUserNumber));
|
|
|
+
|
|
|
+
|
|
|
+ //1.获取所有的用户信息
|
|
|
+ List<SwUserManagementDo> users = swUserManagementService.list(new LambdaQueryWrapper<SwUserManagementDo>()
|
|
|
+ .eq(SwUserManagementDo::getDeleted,"0")
|
|
|
+ .in(SwUserManagementDo::getUsernumber, collect.keySet()));
|
|
|
+
|
|
|
+
|
|
|
+ Map<String, SwUserManagementDo> userMap = users.stream()
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
+ SwUserManagementDo::getUsernumber,
|
|
|
+ Collectors.collectingAndThen(
|
|
|
+ Collectors.toList(),
|
|
|
+ v -> v.get(0) // 取列表中的第一个元素
|
|
|
+ )
|
|
|
+ ));
|
|
|
+
|
|
|
+ //填充数据
|
|
|
+ fillData(userMap,collect,saveList,updateList);
|
|
|
+
|
|
|
+ if (!saveList.isEmpty()){
|
|
|
+ swWaterUsageEntryService.saveBatch(saveList,200);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!updateList.isEmpty()){
|
|
|
+ swMonthlyMeterReadingRecordService.saveOrUpdateBatch(updateList,200);
|
|
|
+ }
|
|
|
+
|
|
|
+ billGenerationService.generateBill(saveList,userMap);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void fillData( Map<String, SwUserManagementDo> userMap , Map<String, List<SwMonthlyMeterReadingRecordDo>> collect,
|
|
|
+ List<SwWaterUsageEntryDo> saveList, List<SwMonthlyMeterReadingRecordDo> updateList){
|
|
|
+
|
|
|
+ SysUserVo currentUser = ZHSWCommonUtils.getCurrentUser();
|
|
|
+ SwWaterUsageEntryDo swWaterUsageEntryDo = null;
|
|
|
+
|
|
|
+ for (String usernumber:collect.keySet()){
|
|
|
+
|
|
|
+ //用户的最后一次读表时间大于 参数 读表时间 跳过
|
|
|
+ if (userMap.get(usernumber).getLastmeterreaddate().getTime() > collect.get(usernumber).get(0).getCurrentReadingDate().getTime()){
|
|
|
+ log.error("本次抄表日期:{}小于用户表最后一次抄表日期:{}", userMap.get(usernumber).getLastmeterreaddate(), collect.get(usernumber).get(0).getCurrentReadingDate());
|
|
|
+ continue;
|
|
|
+ };
|
|
|
+ //填充数据
|
|
|
+ swWaterUsageEntryDo = new SwWaterUsageEntryDo();
|
|
|
+ swWaterUsageEntryDo.setId(SecurityUtil.getUUID());
|
|
|
+ ZHSWCommonUtils.initModelGeneralParameters(swWaterUsageEntryDo,currentUser);
|
|
|
+ swWaterUsageEntryDo.setUserid(userMap.get(usernumber).getId());
|
|
|
+ swWaterUsageEntryDo.setUsernumber(userMap.get(usernumber).getUsernumber());
|
|
|
+ swWaterUsageEntryDo.setUsername(userMap.get(usernumber).getUsername());
|
|
|
+ swWaterUsageEntryDo.setThisreading(collect.get(usernumber).get(0).getThisReading());
|
|
|
+ swWaterUsageEntryDo.setCurrentreadingdate(collect.get(usernumber).get(0).getCurrentReadingDate());
|
|
|
+ swWaterUsageEntryDo.setLastreading(userMap.get(usernumber).getLastmeterreading());
|
|
|
+ swWaterUsageEntryDo.setLastreadingdate(userMap.get(usernumber).getLastmeterreaddate());
|
|
|
+ swWaterUsageEntryDo.setCommunitycode(userMap.get(usernumber).getVolumeno());
|
|
|
+ swWaterUsageEntryDo.setCommunityname(userMap.get(usernumber).getVillagename());
|
|
|
+ swWaterUsageEntryDo.setAddress(userMap.get(usernumber).getAddress());
|
|
|
+ swWaterUsageEntryDo.setReadingsource("2"); // 默认2 在线抄表
|
|
|
+ swWaterUsageEntryDo.setYear(collect.get(usernumber).get(0).getYear());
|
|
|
+ swWaterUsageEntryDo.setMonth(collect.get(usernumber).get(0).getMonth());
|
|
|
+ swWaterUsageEntryDo.setState("0");
|
|
|
+ swWaterUsageEntryDo.setWaterusage(swWaterUsageEntryDo.getThisreading().subtract(swWaterUsageEntryDo.getLastreading()));
|
|
|
+ saveList.add(swWaterUsageEntryDo);
|
|
|
+
|
|
|
+ collect.get(usernumber).get(0).setWaterusageentryid(swWaterUsageEntryDo.getId());
|
|
|
+ collect.get(usernumber).get(0).setStatus("1");
|
|
|
+ updateList.add(collect.get(usernumber).get(0));
|
|
|
+ };
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验传入参数是否为空,并且校验 RECORDID 是否唯一
|
|
|
+ *
|
|
|
+ * @param list
|
|
|
+ * @return
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ private void validExistenceOrUniqueness(List<SwMonthlyMeterReadingRecordDo> list) throws Exception {
|
|
|
+ // 判空
|
|
|
+ if (list == null || list.isEmpty()) {
|
|
|
+ throw new Exception("传入参数 list 为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ Set<String> recordIdSet = new HashSet<>();
|
|
|
+
|
|
|
+ for (SwMonthlyMeterReadingRecordDo dto:list){
|
|
|
+ recordIdSet.add(dto.getRecordId());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (recordIdSet.size() < list.size()) {
|
|
|
+ throw new Exception("传入参数 list RECORDID 重复");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+// if(!swMonthlyMeterReadingRecordService.list(new LambdaQueryWrapper<SwMonthlyMeterReadingRecordDo>()
|
|
|
+// .eq(SwMonthlyMeterReadingRecordDo::getDeleted, "0")
|
|
|
+// .in(SwMonthlyMeterReadingRecordDo::getRecordId, recordIdSet)).isEmpty()){
|
|
|
+// throw new Exception("传入参数 RECORDID 以重复发送");
|
|
|
+//
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+}
|