Browse Source

接受用户抄表接口,册号查询接口开发

huangpeng 1 month ago
parent
commit
a9f33120ec

+ 8 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/config/ZHSWWebConfig.java

@@ -1,4 +1,5 @@
 package com.rongwei.zhsw.system.config;
+import com.rongwei.zhsw.system.interceptor.MeterReadTokenInterceptor;
 import com.rongwei.zhsw.system.interceptor.WeChatTokenInterceptor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
@@ -17,9 +18,16 @@ public class ZHSWWebConfig implements WebMvcConfigurer {
     @Autowired
     private WeChatTokenInterceptor tokenInterceptor;
 
+    @Autowired
+    private MeterReadTokenInterceptor meterReadTokenInterceptor;
+
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(tokenInterceptor)
                 .addPathPatterns("/wechat/**"); // 拦截;
+
+        registry.addInterceptor(meterReadTokenInterceptor)
+                .addPathPatterns("/swMonthlyMeterReadingRecord/receiveMonthlyMeterReading")// 拦截;
+         .addPathPatterns("/swMonthlyMeterReadingRecord/receiveswbookmanagement"); // 拦截;
     }
 }

+ 18 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/dao/SwBookManagementDao.java

@@ -1,8 +1,12 @@
 package com.rongwei.zhsw.system.dao;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.rongwe.zhsw.system.domain.SwBookManagementDo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * 册号管理(SwBookManagement)表数据库访问层
@@ -14,5 +18,19 @@ import org.apache.ibatis.annotations.Mapper;
     @Mapper
     public interface SwBookManagementDao extends BaseMapper<SwBookManagementDo> {
 
+        @Select("SELECT\n" +
+                "\tID,\n" +
+                "\tBOOKNUMBER,\n" +
+                "\tVILLAGENAME,\n" +
+                "\tSTATUS,\n" +
+                "\tBELONGTOAREA,\n" +
+                "\tDELETED,\n" +
+                "\tCREATEDATE,\n" +
+                "\tMODIFYDATE \n" +
+                "FROM\n" +
+                "\tsw_book_management \n" +
+                "WHERE\n" +
+                "\tDELETED = '0'")
+    List<JSONObject> quertyData();
 }
 

+ 15 - 2
zhsw-common/src/main/java/com/rongwei/zhsw/system/dao/SwMonthlyMeterReadingRecordDao.java

@@ -2,8 +2,21 @@ package com.rongwei.zhsw.system.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.rongwe.zhsw.system.domain.SwMonthlyMeterReadingRecordDo;
-import org.apache.ibatis.annotations.Mapper;
+import com.rongwei.rwadmincommon.system.domain.SysDictDo;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
 
 @Mapper
+//@CacheNamespace(flushInterval = 0, size = 0) //禁用缓存和自动刷新
 public interface SwMonthlyMeterReadingRecordDao extends BaseMapper<SwMonthlyMeterReadingRecordDo> {
-}
+
+
+    List<SwMonthlyMeterReadingRecordDo> selectData(@Param("zzsrcsys") String zzsrcsys);
+
+    @Select("select ID FROM sys_dict WHERE  DELETED ='0' AND ID = #{id} AND VALUE =#{value}" )
+    List<SysDictDo> queryBookNumber(@Param("value") String value, @Param("id") String id);
+
+    @Options(useGeneratedKeys = true, keyProperty = "id")
+    int InsertBatch(@Param("list") List<SwMonthlyMeterReadingRecordDo> list);
+        }

+ 31 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/interceptor/MeterReadTokenInterceptor.java

@@ -0,0 +1,31 @@
+package com.rongwei.zhsw.system.interceptor;
+
+import com.rongwei.zhsw.system.config.ContextHolder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * WeChatTokenInterceptor class
+ *
+ * @author XH
+ * @date 2025/03/13
+ */
+@Component
+public class MeterReadTokenInterceptor implements  HandlerInterceptor {
+
+    private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        // 从请求头或请求参数中获取token
+        String clientId = request.getHeader("clientId"); // 假设token在Authorization头中
+        ContextHolder.setValue("dsKey", clientId);
+        return true;
+    }
+
+}

+ 11 - 1
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/SwMonthlyMeterReadingRecordService.java

@@ -2,12 +2,22 @@ package com.rongwei.zhsw.system.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.rongwe.zhsw.system.domain.SwMonthlyMeterReadingRecordDo;
+import com.rongwe.zhsw.system.dto.ReceiveMonthlyMeterReadingDTO;
 import com.rongwei.rwcommon.base.R;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
+import java.util.HashMap;
 import java.util.List;
 
 public interface SwMonthlyMeterReadingRecordService extends IService<SwMonthlyMeterReadingRecordDo> {
 
-    R receiveMonthlyMeterReading(@Valid List<SwMonthlyMeterReadingRecordDo> list) throws Exception;
+
+    R receiveMonthlyMeterReading(ReceiveMonthlyMeterReadingDTO receiveMonthlyMeterReadingDTO,   HttpServletRequest request) throws Exception;
+
+
+    R receiveswbookmanagement(HashMap<String, String> map, HttpServletRequest request) throws Exception;
+
+
+
 }

+ 7 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/BillGenerationServiceImpl.java

@@ -343,6 +343,13 @@ public class BillGenerationServiceImpl {
 
         swBillManagementUnpaidDo.setStatus(1 + "");
         ZHSWCommonUtils.initModelGeneralParameters(swBillManagementUnpaidDo, currentUser);
+       //没有获取到 token
+        if( currentUser ==null || currentUser.getId() ==null){
+            swBillManagementUnpaidDo.setCreateuserid(swWaterUsageEntryDo.getCreateuserid());
+            swBillManagementUnpaidDo.setCreateusername(swWaterUsageEntryDo.getCreateusername());
+            swBillManagementUnpaidDo.setModifyuserid(swWaterUsageEntryDo.getModifyuserid());
+            swBillManagementUnpaidDo.setModifyusername(swWaterUsageEntryDo.getModifyusername());
+        }
         swBillManagementUnpaidDo.setWaterusageid(swWaterUsageEntryDo.getId());
         return swBillManagementUnpaidDo;
     }

+ 263 - 69
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/SwMonthlyMeterReadingRecordServiceImpl.java

@@ -1,20 +1,30 @@
 package com.rongwei.zhsw.system.service.impl;
+import com.alibaba.fastjson.JSONObject;
 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.rongwe.zhsw.system.dto.ReceiveMonthlyMeterReadingDTO;
+import com.rongwei.commonservice.service.RedisService;
+import com.rongwei.rwadmincommon.system.domain.SysDictDo;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.base.exception.CustomException;
 import com.rongwei.rwcommon.utils.SecurityUtil;
+import com.rongwei.rwcommon.utils.StringUtils;
+import com.rongwei.zhsw.system.dao.SwBookManagementDao;
 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 org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletRequest;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.*;
@@ -26,6 +36,9 @@ public class SwMonthlyMeterReadingRecordServiceImpl extends ServiceImpl<SwMonthl
 
     private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
 
+    private final static String USERID="0";
+
+
     @Autowired
     private SwMonthlyMeterReadingRecordService swMonthlyMeterReadingRecordService;
 
@@ -38,38 +51,166 @@ public class SwMonthlyMeterReadingRecordServiceImpl extends ServiceImpl<SwMonthl
     @Autowired
     private BillGenerationServiceImpl billGenerationService;
 
+    @Autowired
+    private SwMonthlyMeterReadingRecordDao swMonthlyMeterReadingRecordDao;
+
+
+
+
+    @Autowired
+    private SwBookManagementDao swBookManagementDao;
+
+
+
+    @Override
+    @Transactional
+    public R receiveMonthlyMeterReading(ReceiveMonthlyMeterReadingDTO receiveMonthlyMeterReadingDTO,   HttpServletRequest request) throws Exception {
+
+        try {
+
+            //1. 授权校验
+            AuthorizationVerification(request, receiveMonthlyMeterReadingDTO.getZzsrcsys());
+
+
+            //1. 校验传入参数是否为空,并且校验 RECORDID 是否唯一
+            RequiredDuplicateVerification(receiveMonthlyMeterReadingDTO);
+
+            //插入数据
+
+            swMonthlyMeterReadingRecordDao.InsertBatch(receiveMonthlyMeterReadingDTO.getCbmx() );
+            // 数据插入后生成抄表纪录
+            generateWaterRecordAter( receiveMonthlyMeterReadingDTO.getZzsrcsys());
+
+        }catch (CustomException e){
+            log.error(e.getMessage());
+            throw e;
+        }catch (Exception e){
+            log.error(e.getMessage());
+            throw e; // 确保异常传播
+        }
+
+        return R.ok("数据接收成功");
+
+    }
+
+    /**
+     * 小区册号查询
+     * @param map
+     * @param request
+     * @return
+     */
     @Override
-    public R receiveMonthlyMeterReading(List<SwMonthlyMeterReadingRecordDo> list) throws Exception {
+    public R receiveswbookmanagement(HashMap<String, String> map, HttpServletRequest request) throws Exception {
+
+        try {
+            //校验
+            AuthorizationVerificationBookNumber(request,map);
+            //返回 册号
+            List<JSONObject> list = swBookManagementDao.quertyData();
+            return R.ok(list);
+        }catch (Exception e){
+            log.error("小区册号信息失败 {}",e.getMessage());
+            throw e; // 确保异常传播
+
+        }
+
+    }
+
+
+
+
+    private void RequiredDuplicateVerification(ReceiveMonthlyMeterReadingDTO receiveMonthlyMeterReadingDTO) {
+
+        List<SwMonthlyMeterReadingRecordDo> list = receiveMonthlyMeterReadingDTO.getCbmx();
+
+        // 判空
+        if (list == null || list.isEmpty()) {
+            throw new CustomException("抄表明细记录 list 为空");
+        }
 
-        //1. 校验传入参数是否为空,并且校验 RECORDID 是否唯一
-        validExistenceOrUniqueness(list);
+        Set<String> recordIdSet = new HashSet<>();
 
+        Set<String> sourceIds = new HashSet<>();
         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");
+
+
+        for (SwMonthlyMeterReadingRecordDo dto:list){
+            recordIdSet.add(dto.getRecordId());
+
+            if(StringUtils.isEmpty(dto.getRecordId())){
+                throw new CustomException("存在 记录ID 为空的数据 ");
+            }
+            if(StringUtils.isEmpty(dto.getUserNumber())){
+                sourceIds.add(dto.getRecordId());
+            }else {
+                //手动清理空格
+                dto.setUserNumber(dto.getUserNumber().trim());
+            }
+            if(dto.getThisReading() ==null){
+                sourceIds.add(dto.getRecordId());
+            }
+
+            if(dto.getCurrentReadingDate() ==null){
+                sourceIds.add(dto.getRecordId());
+            }
+
+            if(StringUtils.isEmpty(dto.getReadingSource())){
+                sourceIds.add(dto.getRecordId());
+            }
+
+            if (sourceIds.isEmpty()){
+                // 转换为LocalDateTime
+                try {
+                    localDateTime = dto.getCurrentReadingDate().toInstant()
+                            .atZone(ZoneId.systemDefault())
+                            .toLocalDateTime();
+                }catch (Exception e){
+                    throw  new CustomException("纪录ID 为{}的数据 的 本次抄表日期格式错误,请检查",dto.getRecordId());
+                }
+
+                dto.setYear(localDateTime.getYear());
+                dto.setMonth(localDateTime.getMonthValue());
+                dto.setStatus("0");
+                dto.setId(null);
+                dto.setZzsrcsys(receiveMonthlyMeterReadingDTO.getZzsrcsys());
+                dto.setCreateuserid(USERID);
+                dto.setCreateusername(receiveMonthlyMeterReadingDTO.getZzsrcsys());
+                dto.setModifyuserid(USERID);
+                dto.setModifyusername(receiveMonthlyMeterReadingDTO.getZzsrcsys());
+
+            }
+
         }
 
-        //2.批量保存
-        swMonthlyMeterReadingRecordService.saveBatch(list,200);
+        if (recordIdSet.size() < list.size()) {
+            throw new CustomException("传入参数 list RECORDID 重复");
+        }
 
-        Thread td = new Thread(() -> generateWaterRecordAter(list));
-        td.start();
+        StringBuilder errorMsg = new StringBuilder();
+        if (!sourceIds.isEmpty()){
+            errorMsg.append("存在字段必传未传或为null或空值,纪录ID 为"+String.join("、",sourceIds));
+        }
 
-        return R.ok("数据接收成功");
+        if(errorMsg.length()>0){
+            throw new CustomException(errorMsg.toString());
+        }
 
     }
 
+
     //保存后生成抄表记录
-    private void generateWaterRecordAter(List<SwMonthlyMeterReadingRecordDo> list) {
+    private void generateWaterRecordAter(String zzsrcsys) throws Exception {
 
         log.info("保存后生成抄表记录");
+        //查询所有已生成抄表的纪录
+        List<SwMonthlyMeterReadingRecordDo> list = swMonthlyMeterReadingRecordDao.selectData(zzsrcsys);
+
+        log.info("查询接受数据纪录"+list.size());
+
+        if(list.isEmpty()){
+            log.error("没有需要生成的抄表纪录");
+            return;
+        }
 
         List<SwMonthlyMeterReadingRecordDo> updateList = new ArrayList<>();
         List<SwWaterUsageEntryDo> saveList = new ArrayList<>();
@@ -84,6 +225,12 @@ public class SwMonthlyMeterReadingRecordServiceImpl extends ServiceImpl<SwMonthl
                 .eq(SwUserManagementDo::getDeleted,"0")
                 .in(SwUserManagementDo::getUsernumber, collect.keySet()));
 
+        if (users.isEmpty()){
+          //  throw new Exception("户号查询失败, 为"+String.join("、",collect.keySet()));
+            log.error("户号查询失败, 为"+String.join("、",collect.keySet()));
+            return;
+        }
+
 
         Map<String, SwUserManagementDo> userMap = users.stream()
                 .collect(Collectors.groupingBy(
@@ -102,7 +249,7 @@ public class SwMonthlyMeterReadingRecordServiceImpl extends ServiceImpl<SwMonthl
         }
 
         if (!updateList.isEmpty()){
-            swMonthlyMeterReadingRecordService.saveOrUpdateBatch(updateList,200);
+            swMonthlyMeterReadingRecordService.updateBatchById(updateList,200);
         }
 
         billGenerationService.generateBill(saveList,userMap);
@@ -112,40 +259,61 @@ public class SwMonthlyMeterReadingRecordServiceImpl extends ServiceImpl<SwMonthl
     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;
 
+        SwWaterUsageEntryDo swWaterUsageEntryDo = null;
+        Date date = new Date();
         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));
+            if( !collect.get(usernumber).isEmpty()){
+                for (int i=0;i<collect.get(usernumber).size();i++){
+                    if(userMap.get(usernumber)!=null && collect.get(usernumber).size()>0 && userMap.get(usernumber).getLastmeterreaddate()!=null && collect.get(usernumber).get(i).getCurrentReadingDate()!=null){
+                        //用户的最后一次读表时间大于 参数 读表时间 跳过
+                        if (userMap.get(usernumber).getLastmeterreaddate().getTime() > collect.get(usernumber).get(i).getCurrentReadingDate().getTime()){
+                            log.error("usernumber: {},recordid: {} 本次抄表日期:{}小于用户表最后一次抄表日期:{}",
+                                    usernumber, collect.get(usernumber).get(i).getRecordId(),
+                                    collect.get(usernumber).get(i).getCurrentReadingDate(), userMap.get(usernumber).getLastmeterreaddate());
+                            continue;
+                        };
+                        //填充数据
+                        swWaterUsageEntryDo = new SwWaterUsageEntryDo();
+                        swWaterUsageEntryDo.setId(SecurityUtil.getUUID());
+                    //    ZHSWCommonUtils.initModelGeneralParameters(swWaterUsageEntryDo,currentUser);
+                        swWaterUsageEntryDo.setCreateuserid(USERID);
+                        swWaterUsageEntryDo.setCreatedate(date);
+                        swWaterUsageEntryDo.setCreateusername(collect.get(usernumber).get(0).getZzsrcsys());
+                        swWaterUsageEntryDo.setModifyuserid(USERID);
+                        swWaterUsageEntryDo.setModifyusername(collect.get(usernumber).get(0).getZzsrcsys());
+                        swWaterUsageEntryDo.setModifydate(date);
+                        swWaterUsageEntryDo.setReadingsource(collect.get(usernumber).get(0).getZzsrcsys());
+
+                        swWaterUsageEntryDo.setUserid(userMap.get(usernumber).getId());
+                        swWaterUsageEntryDo.setUsernumber(userMap.get(usernumber).getUsernumber());
+                        swWaterUsageEntryDo.setUsername(userMap.get(usernumber).getUsername());
+                        swWaterUsageEntryDo.setThisreading(collect.get(usernumber).get(i).getThisReading());
+                        swWaterUsageEntryDo.setCurrentreadingdate(collect.get(usernumber).get(i).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.setYear(collect.get(usernumber).get(i).getYear());
+                        swWaterUsageEntryDo.setMonth(collect.get(usernumber).get(i).getMonth());
+                        swWaterUsageEntryDo.setState("0");
+                        swWaterUsageEntryDo.setIsds("0");
+                        swWaterUsageEntryDo.setWaterusage(swWaterUsageEntryDo.getThisreading().subtract(swWaterUsageEntryDo.getLastreading()));
+                        saveList.add(swWaterUsageEntryDo);
+
+                        collect.get(usernumber).get(i).setWaterusageentryid(swWaterUsageEntryDo.getId());
+                        collect.get(usernumber).get(i).setStatus("1");
+                        updateList.add(collect.get(usernumber).get(i));
+
+                    }
+                }
+            }
+
+
+
         };
 
     }
@@ -153,36 +321,62 @@ public class SwMonthlyMeterReadingRecordServiceImpl extends ServiceImpl<SwMonthl
 
 
     /**
-     * 校验传入参数是否为空,并且校验 RECORDID 是否唯一
+     * 授权校验
      *
-     * @param list
      * @return
-     * @throws Exception
      */
-    private void validExistenceOrUniqueness(List<SwMonthlyMeterReadingRecordDo> list) throws Exception {
-        // 判空
-        if (list == null || list.isEmpty()) {
-            throw new Exception("传入参数 list 为空");
+    private void AuthorizationVerification(HttpServletRequest request, String zzsrcsys) {
+        String clientId = request.getHeader("clientId");
+        String clientSecret = request.getHeader("client_secret");
+
+        if(StringUtils.isEmpty(clientId)){
+            throw new CustomException("clientId 为空");
+        }
+        if(StringUtils.isEmpty(clientSecret)){
+            throw new CustomException("client_secret 为空");
         }
 
-        Set<String> recordIdSet = new HashSet<>();
+        if (StringUtils.isEmpty(zzsrcsys)){
+            throw new CustomException("来源系统代码 不能为空");
+        }
 
-        for (SwMonthlyMeterReadingRecordDo dto:list){
-            recordIdSet.add(dto.getRecordId());
+
+
+        //查询用
+        //查询数据字典确认
+        List<SysDictDo> dicts =swMonthlyMeterReadingRecordDao.queryBookNumber(zzsrcsys,clientSecret);
+        if (dicts.isEmpty()){
+            throw new CustomException("授权信息错误");
         }
 
-        if (recordIdSet.size() < list.size()) {
-            throw new Exception("传入参数 list RECORDID 重复");
+    }
+
+
+    private void AuthorizationVerificationBookNumber(HttpServletRequest request, HashMap<String, String> map) throws Exception {
+        //1.切库校验
+        String value = map.getOrDefault("ZZSRCSYS","");
+        if(StringUtils.isEmpty(value)){
+            throw new CustomException("来源系统代码 不能为空");
         }
 
+        String clientId = request.getHeader("clientId");
+        String clientSecret = request.getHeader("client_secret");
 
-//        if(!swMonthlyMeterReadingRecordService.list(new LambdaQueryWrapper<SwMonthlyMeterReadingRecordDo>()
-//                .eq(SwMonthlyMeterReadingRecordDo::getDeleted, "0")
-//                .in(SwMonthlyMeterReadingRecordDo::getRecordId, recordIdSet)).isEmpty()){
-//            throw new Exception("传入参数 RECORDID 以重复发送");
-//
-//        }
+        if(StringUtils.isEmpty(clientId)){
+            throw new CustomException("clientId 为空");
+        }
+        if(StringUtils.isEmpty(clientSecret)){
+            throw new CustomException("client_secret 为空");
+        }
+        //查询数据 切库
+        request.setAttribute("schema", clientId);
 
+        //查询数据字典确认
+        List<SysDictDo> dicts =swMonthlyMeterReadingRecordDao.queryBookNumber(value,clientSecret);
+        if (dicts.isEmpty()){
+            throw new CustomException("授权信息错误");
+        }
 
     }
+
 }

+ 64 - 0
zhsw-common/src/main/resources/mybatis/zhsw/SwMonthlyMeterReadingRecordDao.xml

@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.rongwei.zhsw.system.dao.SwMonthlyMeterReadingRecordDao">
+
+
+
+    <insert id="InsertBatch" parameterType="java.util.List"  useGeneratedKeys="true" keyProperty="id" keyColumn="id" >
+        INSERT INTO sw_monthly_meter_reading_record (
+        RECORDID, USERNUMBER, WATERMETERCODE,
+        THISREADING, CURRENTREADINGDATE, READINGSOURCE, ZZSRCSYS,
+        YEAR, MONTH, WATERUSAGEENTRYID, STATUS,
+        CREATEDATE, CREATEUSERID, CREATEUSERNAME,
+        MODIFYDATE, MODIFYUSERID, MODIFYUSERNAME
+
+        ) VALUES
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.recordId},
+            #{item.userNumber},
+            #{item.waterMeterCode},
+            #{item.thisReading},
+            #{item.currentReadingDate},
+            #{item.readingSource},
+            #{item.zzsrcsys},
+            #{item.year},
+            #{item.month},
+            #{item.waterusageentryid},
+            #{item.status},
+            #{item.createdate},
+            #{item.createuserid},
+            #{item.createusername},
+            #{item.modifydate},
+            #{item.modifyuserid},
+            #{item.modifyusername}
+
+            )
+        </foreach>
+    </insert>
+    <select id="selectData"  resultType="com.rongwe.zhsw.system.domain.SwMonthlyMeterReadingRecordDo">
+
+
+        WITH ValidRecords AS (
+            SELECT *
+            FROM sw_monthly_meter_reading_record
+            WHERE ZZSRCSYS = #{zzsrcsys} AND DELETED = '0' AND STATUS = '0'
+              AND RECORDID NOT IN (
+                SELECT DISTINCT RECORDID
+                FROM sw_monthly_meter_reading_record
+                WHERE STATUS = '1' AND ZZSRCSYS = #{zzsrcsys} AND DELETED = '0'
+            )
+        ),
+             RankedRecords AS (
+                 SELECT *,
+                        ROW_NUMBER() OVER (PARTITION BY RECORDID ORDER BY id DESC) AS rn
+                 FROM ValidRecords
+             )
+        SELECT * FROM RankedRecords WHERE rn = 1;
+
+    </select>
+
+</mapper>
+

+ 26 - 40
zhsw-entity/src/main/java/com/rongwe/zhsw/system/domain/SwMonthlyMeterReadingRecordDo.java

@@ -1,8 +1,13 @@
 package com.rongwe.zhsw.system.domain;
 
 
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.rongwei.rwcommon.base.BaseDo;
 import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
@@ -14,12 +19,17 @@ import java.util.Date;
 
 @Data
 @TableName("sw_monthly_meter_reading_record")
-public class SwMonthlyMeterReadingRecordDo implements Serializable {
+public class SwMonthlyMeterReadingRecordDo extends BaseDo implements Serializable {
 
     /**
      * 主键ID
      */
-    private String id;
+//    @TableId(value = "id", type = IdType.INPUT)
+//    private Integer id;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
 
     /**
      * 租户ID
@@ -29,77 +39,53 @@ public class SwMonthlyMeterReadingRecordDo implements Serializable {
      * 扩展json格式配置
      */
     private String roption;
-    /**
-     * 是否删除Y/N
-     */
-    private String deleted;
-    /**
-     * 备注
-     */
-    private String remark;
-    /**
-     * 创建时间
-     */
-    private Date createdate;
-    /**
-     * 创建用户ID
-     */
-    private String createuserid;
-    /**
-     * 修改日期
-     */
-    private Date modifydate;
-    /**
-     * 修改用户ID
-     */
-    private String modifyuserid;
-    /**
-     * 创建人
-     */
-    private String createusername;
-    /**
-     * 修改人
-     */
-    private String modifyusername;
+
 
     /**
      * 记录ID
      */
-    @NotBlank(message = "RECORDID 不能为空")
+
     @JsonProperty("RECORDID")
     private String recordId;
     /**
      * 户号
      */
-    @NotBlank(message = "USERNUMBER 不能为空")
+
     @JsonProperty("USERNUMBER")
     private String userNumber;
     /**
      * 表号
      */
-    @NotBlank(message = "WATERMETERCODE 不能为空")
+
     @JsonProperty("WATERMETERCODE")
     private String waterMeterCode;
     /**
      * 本次抄表读数
      */
-    @NotNull(message = "THISREADING 不能为空")
+
     @JsonProperty("THISREADING")
     private BigDecimal thisReading;
     /**
      * 本次抄表日期
      */
-    @NotNull(message = "CURRENTREADINGDATE 不能为空")
+
     @JsonProperty("CURRENTREADINGDATE")
     private Date currentReadingDate;
     /**
      * 抄表来源
      */
-    @NotBlank(message = "READINGSOURCE 不能为空")
+
     @JsonProperty("READINGSOURCE")
     private String readingSource;
 
 
+    /**
+     * 来源系统
+     */
+    @JsonProperty("ZZSRCSYS")
+    private String zzsrcsys;
+
+
     /**
      * 年
      */

+ 25 - 0
zhsw-entity/src/main/java/com/rongwe/zhsw/system/dto/ReceiveMonthlyMeterReadingDTO.java

@@ -0,0 +1,25 @@
+package com.rongwe.zhsw.system.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.rongwe.zhsw.system.domain.SwMonthlyMeterReadingRecordDo;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ReceiveMonthlyMeterReadingDTO  {
+
+    /**
+     * 来源系统代码
+     */
+    @JsonProperty("ZZSRCSYS")
+    private String zzsrcsys;
+
+    /**
+     * 抄表明细记录
+     */
+    @JsonProperty("CBMX")
+    private List<SwMonthlyMeterReadingRecordDo> cbmx;
+
+
+}

+ 0 - 58
zhsw-server/src/main/java/com/rongwei/zhsw/config/GlobalExceptionHandler.java

@@ -1,58 +0,0 @@
-package com.rongwei.zhsw.config;
-
-import com.rongwei.rwcommon.base.R;
-import com.rongwei.zhsw.system.controller.SwMonthlyMeterReadingRecordController;
-import org.springframework.stereotype.Component;
-import org.springframework.validation.FieldError;
-import org.springframework.web.bind.MethodArgumentNotValidException;
-import org.springframework.web.bind.annotation.ExceptionHandler;
-import org.springframework.web.bind.annotation.RestControllerAdvice;
-
-import javax.validation.ConstraintViolation;
-import javax.validation.ConstraintViolationException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-@Component("globalExceptionHandler1") // 指定 Bean 名称
-@RestControllerAdvice(basePackages="com.rongwei.zhsw.system.controller",assignableTypes = {SwMonthlyMeterReadingRecordController.class})
-
-public class GlobalExceptionHandler {
-
-    /**
-     * 处理所有 @Valid 参数校验失败异常
-     */
-    @ExceptionHandler(MethodArgumentNotValidException.class)
-    public R handleValidationException(MethodArgumentNotValidException ex) {
-        Map<String, String> errors = new HashMap<>();
-        ex.getBindingResult().getAllErrors().forEach(error -> {
-            String fieldName = ((FieldError) error).getField();
-            String message = error.getDefaultMessage();
-            errors.put(fieldName, message);
-        });
-        return R.error("400", "参数校验失败").putData( errors);
-    }
-
-    /**
-     * 处理List校验异常(新增)
-     */
-    @ExceptionHandler(ConstraintViolationException.class)
-    public R handleConstraintViolation(ConstraintViolationException ex) {
-        Map<String, String> errors = ex.getConstraintViolations()
-                .stream()
-                .collect(Collectors.toMap(
-                        v -> v.getPropertyPath().toString(),
-                        ConstraintViolation::getMessage
-                ));
-        return R.error("400", "列表参数校验失败").putData(errors);
-    }
-
-
-    /**
-     * 兜底异常处理
-     */
-    @ExceptionHandler(Exception.class)
-    public R handleException(Exception ex) {
-        return R.error("服务器异常,请联系管理员!");
-    }
-}

+ 25 - 10
zhsw-server/src/main/java/com/rongwei/zhsw/system/controller/SwMonthlyMeterReadingRecordController.java

@@ -1,19 +1,24 @@
 package com.rongwei.zhsw.system.controller;
 import com.rongwe.zhsw.system.domain.SwMonthlyMeterReadingRecordDo;
+import com.rongwe.zhsw.system.dto.ReceiveMonthlyMeterReadingDTO;
 import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.base.exception.CustomException;
 import com.rongwei.zhsw.system.service.SwMonthlyMeterReadingRecordService;
 import com.rongwei.zhsw.system.service.SwWaterUsageEntryService;
+import io.protostuff.Request;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
+import java.util.HashMap;
 import java.util.List;
 
 
 @RestController
-@Validated
 @RequestMapping("/swMonthlyMeterReadingRecord")
 
 public class SwMonthlyMeterReadingRecordController {
@@ -25,17 +30,27 @@ public class SwMonthlyMeterReadingRecordController {
     SwMonthlyMeterReadingRecordService swMonthlyMeterReadingRecordService;
 
     @PostMapping("/receiveMonthlyMeterReading")
+    public R receiveMonthlyMeterReading(
+            @RequestBody ReceiveMonthlyMeterReadingDTO receiveMonthlyMeterReadingDTO,
+            HttpServletRequest request
+    ) throws Exception {
+            log.info("接受抄表数据开始");
+            log.info("入参 {}",receiveMonthlyMeterReadingDTO.toString());
+            return swMonthlyMeterReadingRecordService.receiveMonthlyMeterReading(receiveMonthlyMeterReadingDTO, request);
+
+    }
+
+
+    @PostMapping("/receiveswbookmanagement")
     @ResponseBody
-    public R receiveMonthlyMeterReading(@Valid @RequestBody List<SwMonthlyMeterReadingRecordDo> list ) {
+    public R receiveswbookmanagement(@RequestBody HashMap<String,String> map, HttpServletRequest request
+    ) throws Exception {
+        log.info("接受册号数据开始");
 
-        log.info("每月抄表数据接收接口开始调用,接收条数: {}",list.size());
+            return swMonthlyMeterReadingRecordService.receiveswbookmanagement(map,request);
 
-        try {
-            return swMonthlyMeterReadingRecordService.receiveMonthlyMeterReading(list);
 
-        }catch (Exception e){
-            log.error("数据接受失败 {}",e.getMessage());
-            return R.error("数据接收失败");
-        }
     }
-}
+
+
+}