From 40cd593e3528a1fe5d0399e48538d1302eabf4a4 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期五, 13 三月 2026 16:29:35 +0800
Subject: [PATCH] 报表数据

---
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java |  257 +++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 218 insertions(+), 39 deletions(-)

diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
index b0a619f..365ceb6 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
@@ -3,10 +3,15 @@
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.dao.admin.response.InterestedListVO;
 import com.doumee.dao.business.dao.UserActionMapper;
+import com.doumee.dao.business.dto.CarUseDataDTO;
+import com.doumee.dao.business.dto.InParkDataDTO;
+import com.doumee.dao.business.vo.GeneralDataVO;
+import com.doumee.dao.business.vo.InParkUserDataVO;
 import com.doumee.service.business.third.model.LoginUserInfo;
 import com.doumee.service.business.third.model.PageData;
 import com.doumee.service.business.third.model.PageWrap;
@@ -44,10 +49,13 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.nio.charset.Charset;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.Date;
 import java.util.stream.Collectors;
@@ -157,6 +165,7 @@
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(this.carUseBookList(carUseBook))){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪杞﹁締棰勭害鏃堕棿涓庡凡棰勭害鏃堕棿鍐茬獊~");
         }
+        carUseBook.setTypeInfo(Constants.equalsInteger(carUseBook.getType(),Constants.ZERO)?"甯傚唴":"瀹ゅ");
         carUseBookMapper.insert(carUseBook);
         //鐢ㄨ溅鐢宠 瀹℃壒璁板綍鍒涘缓
         approveService.createApproveFlow(carUseBook.getType()==0?3:4,carUseBook.getId(),carUseBook.getMemberId(),null);
@@ -627,21 +636,21 @@
             //瀹℃壒閫氳繃锛屼絾鏄� 宸插埌鍙戣溅鏃堕棿锛屼笉鍙互鎾ら攢
             return Constants.ZERO;
         }
-        if((Constants.equalsInteger(carUseBook.getStatus(),Constants.ZERO))
-                ||Constants.equalsInteger(carUseBook.getStatus(),Constants.ONE)
-                ||Constants.equalsInteger(carUseBook.getStatus(),Constants.TWO)){
-            //瀹℃壒浜哄彲浠ユ挙閿� 鑷繁瀹℃壒鐨勭敵璇疯褰�
-            Approve approve = approveJoinMapper.selectOne(new QueryWrapper<Approve>().lambda()
-                    .eq(Approve::getIsdeleted,Constants.ZERO)
-                    .ge(Approve::getLevel,Constants.ZERO)
-                    .eq(Approve::getChekorId,loginUserInfo.getMemberId())
-                    .eq(Approve::getObjId,carUseBook.getId())
-                    .eq(Approve::getObjType,carUseBook.getType()==0?3:4)
-                    .last("limit 1"));
-            if(approve!=null){
-                return Constants.ONE;
-            }
-        }
+//        if((Constants.equalsInteger(carUseBook.getStatus(),Constants.ZERO))
+//                ||Constants.equalsInteger(carUseBook.getStatus(),Constants.ONE)
+//                ||Constants.equalsInteger(carUseBook.getStatus(),Constants.TWO)){
+//            //瀹℃壒浜哄彲浠ユ挙閿� 鑷繁瀹℃壒鐨勭敵璇疯褰�
+//            Approve approve = approveJoinMapper.selectOne(new QueryWrapper<Approve>().lambda()
+//                    .eq(Approve::getIsdeleted,Constants.ZERO)
+//                    .ge(Approve::getLevel,Constants.ZERO)
+//                    .eq(Approve::getChekorId,loginUserInfo.getMemberId())
+//                    .eq(Approve::getObjId,carUseBook.getId())
+//                    .eq(Approve::getObjType,carUseBook.getType()==0?3:4)
+//                    .last("limit 1"));
+//            if(approve!=null){
+//                return Constants.ONE;
+//            }
+//        }
         return Constants.ZERO;
     }
 
@@ -657,16 +666,19 @@
         if(StringUtils.isEmpty(op)){
             return;
         }
-
-        JSONObject dataJSON = dataInfoJSON.getJSONObject("data");
-        String no = dataJSON.getString("no");
-        if(StringUtils.isEmpty(no)){
+        if(op.equals("data_test")){
             return;
         }
+        JSONObject dataJSON = dataInfoJSON.getJSONObject("data");
+        String id = dataJSON.getString("_id");
         if(op.equals("data_remove")){
             carUseBookJoinMapper.update(new UpdateWrapper<CarUseBook>().lambda()
                             .set(CarUseBook::getEditDate,DateUtil.getCurrDateTime())
-                    .set(CarUseBook::getIsdeleted,Constants.ONE).eq(CarUseBook::getJdyId,no));
+                    .set(CarUseBook::getIsdeleted,Constants.ONE).eq(CarUseBook::getJdyId,id));
+            return;
+        }
+        String no = dataJSON.getString("no");
+        if(StringUtils.isEmpty(no)){
             return;
         }
         Integer status = dataJSON.getInteger("flowState");
@@ -682,12 +694,14 @@
         String addr =   dataJSON.getString("addr");
 
         CarUseBook carUseBook = carUseBookJoinMapper.selectOne(new QueryWrapper<CarUseBook>()
-                .lambda().eq(CarUseBook::getJdyId,no).last("limit 1"));
+                .lambda().eq(CarUseBook::getJdyNo,no).last("limit 1"));
         if(Objects.isNull(carUseBook)){
             carUseBook = new CarUseBook();
             carUseBook.setCreateDate(new Date());
             carUseBook.setEditDate(new Date());
-            carUseBook.setJdyId(no);
+            carUseBook.setJdyNo(no);
+            carUseBook.setJdyId(id);
+            carUseBook.setKeyStatus(Constants.ZERO);
         }else{
             carUseBook.setEditDate(new Date());
         }
@@ -699,14 +713,15 @@
                     .eq(Cars::getCode,carCode).last("limit 1"));
             carUseBook.setCarId(Objects.nonNull(cars)?cars.getId():null);
         }
-        carUseBook.setStartTime(StringUtils.isBlank(startDate)?null:DateUtil.getISO8601DateByStr(startDate));
-        carUseBook.setEndTime(StringUtils.isBlank(endDate)?null:DateUtil.getISO8601DateByStr(endDate));
+
+        carUseBook.setStartTime(StringUtils.isBlank(startDate)?null:DateUtil.getXMinuteAfterDate(DateUtil.getISO8601DateByStr(startDate),480));
+        carUseBook.setEndTime(StringUtils.isBlank(endDate)?null:DateUtil.getXMinuteAfterDate(DateUtil.getISO8601DateByStr(endDate),480));
         carUseBook.setTypeInfo(StringUtils.isBlank(typeInfo)?null:typeInfo);
-        carUseBook.setContent(StringUtils.isBlank(typeInfo)?null:reason);
-        carUseBook.setAddr(StringUtils.isBlank(typeInfo)?null:addr);
+        carUseBook.setContent(StringUtils.isBlank(reason)?null:reason);
+        carUseBook.setAddr(StringUtils.isBlank(addr)?null:addr);
         carUseBook.setStatus(Constants.TWO);
         JSONObject driverJSON = dataJSON.getJSONObject("driver");
-        if(!driverJSON.isEmpty()){
+        if(Objects.nonNull(driverJSON)){
             String driverName = driverJSON.getString("name");
             String driverUserName = driverJSON.getString("username");
             if(StringUtils.isNotBlank(driverUserName)){
@@ -717,7 +732,7 @@
             }
         }
         JSONObject createJSON = dataJSON.getJSONObject("creator");
-        if(!driverJSON.isEmpty()){
+        if(Objects.nonNull(createJSON)){
             String createName = createJSON.getString("name");
             String createUserName = createJSON.getString("username");
             if(StringUtils.isNotBlank(createUserName)){
@@ -729,13 +744,13 @@
         }
 
         JSONArray usersArray =   dataJSON.getJSONArray("users");
-        if(!usersArray.isEmpty()){
+        if(Objects.nonNull(usersArray)){
             String names = "";
             List<String> userDDIdList = new ArrayList<>();
             for (int i = 0; i < usersArray.size(); i++) {
                 JSONObject userJSON = usersArray.getJSONObject(i);
-                String name = createJSON.getString("name");
-                String userName = createJSON.getString("username");
+                String name = userJSON.getString("name");
+                String userName = userJSON.getString("username");
                 userDDIdList.add(userName);
                 names = names +
                         (StringUtils.isNotBlank(names)?",":"")
@@ -758,7 +773,7 @@
 
     @Override
     public List<InterestedListVO> getCarUseStatistics(Integer type){
-        List<String> weekDays = DateUtil.getBeforDaysByFormat(new Date(),Objects.isNull(type)||Constants.equalsInteger(type,Constants.ZERO)?7:15,"MM鏈坉d鏃�");
+        List<String> weekDays = DateUtil.getBeforDaysByFormat(new Date(),Objects.isNull(type)||Constants.equalsInteger(type,Constants.ZERO)?7:15,"MM-dd");
         MPJLambdaWrapper<CarUseBook> wrapper = new MPJLambdaWrapper<CarUseBook>()
                 .selectAll(CarUseBook.class)
                 .eq(CarUseBook::getIsdeleted, Constants.ZERO)
@@ -774,7 +789,7 @@
             vo.setNextNum(Constants.ZERO);
             if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(carUseBookList)) {
                 vo.setNum(
-                        carUseBookList.stream().filter(i->DateUtil.dateToString(i.getCreateDate(),"MM鏈坉d鏃�").equals(days))
+                        carUseBookList.stream().filter(i->DateUtil.dateToString(i.getCreateDate(),"MM-dd").equals(days))
                                 .collect(Collectors.toList()).size()
                 );
             }
@@ -782,7 +797,171 @@
         }
         return list;
     }
-    
-    
-    
+
+
+
+
+    public InParkUserDataVO getCarUseData(CarUseDataDTO carUseDataDTO){
+        //鏌ヨ鏈懆鐨勫紑濮嬫棩鏈熷拰缁撴潫鏃ユ湡
+        Long weekStart = LocalDate.now().with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).atStartOfDay(ZoneOffset.UTC).toInstant().toEpochMilli();
+        InParkUserDataVO inParkUserDataVO = new InParkUserDataVO();
+        List<CarUseBook> yearList = carUseBookMapper.selectJoinList(CarUseBook.class,new MPJLambdaWrapper<CarUseBook>()
+                .selectAll(CarUseBook.class)
+                .eq(CarUseBook::getIsdeleted,Constants.ZERO)
+                .apply(" ( DATE_FORMAT(CREATE_DATE, '%Y') = DATE_FORMAT(now(), '%Y') ) ")
+        );
+        List<CarUseBook> monthList = yearList.stream().filter(i->DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(DateUtil.formatDate(new Date(),"yyyy-MM"))).collect(Collectors.toList());
+        List<CarUseBook> weekList = yearList.stream().filter(i->i.getCreateDate().getTime()>=weekStart).collect(Collectors.toList());
+        List<CarUseBook> todayList = weekList.stream().filter(i-> DateUtil.formatDate(i.getCreateDate(),"yyyy-MM-dd").equals(DateUtil.formatDate(new Date(),"yyyy-MM-dd"))).collect(Collectors.toList());
+        List<CarUseBook> yesterdayList = yearList.stream().filter(i-> DateUtil.formatDate(i.getCreateDate(),"yyyy-MM-dd").equals(DateUtil.getBeforDay(new Date(),1))).collect(Collectors.toList());
+        inParkUserDataVO.setYearTotal(yearList.size());
+        inParkUserDataVO.setMonthTotal(monthList.size());
+        inParkUserDataVO.setTodayTotal(todayList.size());
+        inParkUserDataVO.setWeekTotal(weekList.size());
+        inParkUserDataVO.setYesterdayTotal(yesterdayList.size());
+//        //澶勭悊骞村害鎶樼嚎鍥炬暟鎹�
+        List<GeneralDataVO> cumulativeDataList = new ArrayList<>();
+        for (int i = 1; i <=12 ; i++) {
+            GeneralDataVO generalDataVO = new GeneralDataVO();
+            generalDataVO.setName(Integer.toString(i));
+            generalDataVO.setTotal(yearList.stream().filter(j->Constants.equalsInteger(Integer.valueOf(generalDataVO.getName()),Integer.valueOf(DateUtil.formatDate(j.getCreateDate(),"MM")))).collect(Collectors.toList()).size());
+            generalDataVO.setName(generalDataVO.getName()+"鏈�");
+            cumulativeDataList.add(generalDataVO);
+        }
+        inParkUserDataVO.setCumulativeDataList(cumulativeDataList);
+        return inParkUserDataVO;
+    }
+
+
+    @Override
+    public List<List<String>> getReportList(CarUseDataDTO carUseDataDTO){
+        if(Objects.isNull(carUseDataDTO)
+                || StringUtils.isBlank(carUseDataDTO.getDateStr())
+                || !( Constants.equalsInteger(carUseDataDTO.getDateStr().length(),4) || Constants.equalsInteger(carUseDataDTO.getDateStr().length(),7) )
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        List<CarUseBook> allList = new ArrayList<>();
+        MPJLambdaWrapper mpjLambdaWrapper = new MPJLambdaWrapper<CarUseBook>()
+                .eq(CarUseBook::getIsdeleted,Constants.ZERO)
+                .in(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(carUseDataDTO.getCarCodeList()),CarUseBook::getCarCode,carUseDataDTO.getCarCodeList())
+                .apply(Constants.equalsInteger(carUseDataDTO.getDateStr().length(),4)," ( DATE_FORMAT(CREATE_DATE, '%Y') =  '"+carUseDataDTO.getDateStr()+"' ) ")
+                .apply(Constants.equalsInteger(carUseDataDTO.getDateStr().length(),7)," ( DATE_FORMAT(CREATE_DATE, '%Y-%m') =  '"+carUseDataDTO.getDateStr()+"' ) ");
+            mpjLambdaWrapper.groupBy(Constants.equalsInteger(carUseDataDTO.getDateStr().length(),4),
+                            "car_code,DATE_FORMAT(CREATE_DATE, '%Y-%m')")
+                    .groupBy(Constants.equalsInteger(carUseDataDTO.getDateStr().length(),7),
+                            "car_code,DATE_FORMAT(CREATE_DATE, '%Y-%m-%d')");
+            if(Constants.equalsInteger(carUseDataDTO.getDateStr().length(),4)){
+                mpjLambdaWrapper.select("car_code,DATE_FORMAT(CREATE_DATE, '%Y-%m') as createDateStr ");
+            }else{
+                mpjLambdaWrapper.select("car_code,DATE_FORMAT(CREATE_DATE, '%Y-%m-%d') as createDateStr ");
+            }
+        allList = carUseBookMapper.selectJoinList(CarUseBook.class,mpjLambdaWrapper);
+
+        List<List<String>>  resultList = new ArrayList<>();
+
+
+        List<String> dateList = new ArrayList<>();
+        //骞翠唤
+        if(Constants.equalsInteger(carUseDataDTO.getDateStr().length(),4)){
+            Integer maxMonth = 12;
+            if(Constants.equalsInteger(DateUtil.getNowYearNum(),Integer.valueOf(carUseDataDTO.getDateStr()))){
+                maxMonth =  DateUtil.getNowMonthNum();
+            }
+            for (int i = maxMonth; i >0 ; i--) {
+                dateList.add(DateUtil.getNowYearNum()+"-"+ StringUtils.leftPad(i+"",2,"0"));
+            }
+        }else {
+            //鏃ユ湡
+            Integer year  = Integer.valueOf(carUseDataDTO.getDateStr().substring(0,4));
+            Integer month = Integer.valueOf(carUseDataDTO.getDateStr().substring(5,7));
+            Integer today = DateUtil.getNowDayNum();
+            YearMonth yearMonth = YearMonth.of(year, month);
+            // 鑾峰彇璇ユ湀鐨勬渶鍚庝竴澶�
+            LocalDate lastDayDate = yearMonth.atEndOfMonth();
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd");
+            Integer lastDay = Integer.valueOf(lastDayDate.format(formatter));
+            if(Constants.equalsInteger(year,DateUtil.getNowYearNum()) && Constants.equalsInteger(month,DateUtil.getNowMonthNum())){
+                if(today <  lastDay){
+                    lastDay = today;
+                }
+            }
+            for (int i = lastDay; i > 0 ; i--) {
+                dateList.add(year + "-" + StringUtils.leftPad(month.toString(),2,"0") + "-" + StringUtils.leftPad(Integer.toString(i),2,"0"));
+            }
+        }
+        return this.dealResultData(allList,carUseDataDTO.getCarCodeList(),dateList,carUseDataDTO.getDateStr());
+    }
+
+
+    public List<List<String>> dealResultData(List<CarUseBook> allList,List<String> queryCarList,List<String> dataList ,String dateStr){
+        List<List<String>>  resultList = new ArrayList<>();
+        List<String> totalString = new ArrayList<>();
+        totalString.add("鏁版嵁鏃ユ湡");
+        List<String> carCodeList = new ArrayList<>();
+        if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(queryCarList)) {
+            List<Cars> list  = carsMapper.selectList(
+                    new QueryWrapper<Cars>().lambda()
+                            .eq(Cars::getIsdeleted,Constants.ZERO)
+            );
+            if(CollectionUtils.isEmpty(list)){
+                return  resultList;
+            }
+            carCodeList = list.stream().map(i->i.getCode()).collect(Collectors.toList());
+        }else{
+            carCodeList = queryCarList;
+        }
+        Set<String> setList = new HashSet<>(carCodeList);
+        for (String categoryName:setList) {
+            totalString.add(categoryName);
+        }
+        totalString.add("鍚堣");
+        resultList.add(totalString);
+        for (String str:dataList) {
+            Integer total = 0;
+            List<String> dataChildList = new ArrayList<>();
+            dataChildList.add(str);
+            for (String carCode:setList) {
+                if(Constants.equalsInteger(dateStr.length(),4)){
+                    Integer childNum = allList.stream().filter(i->carCode.equals(i.getCarCode())
+                            && i.getCreateDateStr().equals(str)).collect(Collectors.toList()).size();
+                    dataChildList.add(
+                            Integer.toString(childNum)
+                    );
+                    total = total + childNum;
+                }else if(Constants.equalsInteger(dateStr.length(),7)){
+                    Integer childNum = allList.stream().filter(i->carCode.equals(i.getCarCode())
+                            &&i.getCreateDateStr().equals(str)).collect(Collectors.toList()).size();
+                    dataChildList.add(
+                            Integer.toString(childNum)
+                    );
+                    total = total + childNum;
+                }
+            }
+            dataChildList.add(Integer.toString(total));
+            resultList.add(dataChildList);
+        }
+        return resultList;
+    }
+
+
+    @Override
+    public void excel(CarUseDataDTO carUseDataDTO, HttpServletResponse response){
+        List<List<String>> data = this.getReportList(carUseDataDTO);
+        try {
+            String fileName =  "娲捐溅鐢宠缁熻琛╛"+System.currentTimeMillis();
+            String encodeFileName = URLEncoder.encode(fileName, Charset.forName("UTF-8").toString()) + ".xlsx";
+            response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName);
+            response.setContentType("application/octet-stream");
+            response.setHeader("eva-opera-type", "download");
+            response.setHeader("eva-download-filename", encodeFileName);
+            ExcelExporter.exportList(data, fileName, response.getOutputStream());
+        } catch (IOException e) {
+            throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
+        }
+    }
+
+
+
+
 }

--
Gitblit v1.9.3