ycl-platform/src/main/java/com/ycl/common/constant/BaseCaseStatus.java
File was renamed from ycl-platform/src/main/java/com/ycl/controller/video/common/constant/BaseCaseStatus.java @@ -1,4 +1,4 @@ package com.ycl.controller.video.common.constant; package com.ycl.common.constant; /** * <p> ycl-platform/src/main/java/com/ycl/common/constant/ChannelCode.java
File was renamed from ycl-platform/src/main/java/com/ycl/controller/video/common/constant/ChannelCode.java @@ -1,4 +1,4 @@ package com.ycl.controller.video.common.constant; package com.ycl.common.constant; /** * <p> ycl-platform/src/main/java/com/ycl/common/constant/CheckResult.java
File was renamed from ycl-platform/src/main/java/com/ycl/controller/video/common/constant/CheckResult.java @@ -1,4 +1,4 @@ package com.ycl.controller.video.common.constant; package com.ycl.common.constant; /** * <p> ycl-platform/src/main/java/com/ycl/common/constant/StepName.java
File was renamed from ycl-platform/src/main/java/com/ycl/controller/video/common/constant/StepName.java @@ -1,4 +1,4 @@ package com.ycl.controller.video.common.constant; package com.ycl.common.constant; public enum StepName { ycl-platform/src/main/java/com/ycl/common/util/CommonUtils.java
File was renamed from ycl-platform/src/main/java/com/ycl/controller/video/common/util/CommonUtils.java @@ -1,4 +1,4 @@ package com.ycl.controller.video.common.util; package com.ycl.common.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; ycl-platform/src/main/java/com/ycl/common/util/DateUtil.java
File was renamed from ycl-platform/src/main/java/com/ycl/controller/video/common/util/DateUtil.java @@ -1,4 +1,4 @@ package com.ycl.controller.video.common.util; package com.ycl.common.util; import java.text.ParseException; import java.text.SimpleDateFormat; ycl-platform/src/main/java/com/ycl/common/util/DateUtils.java
File was renamed from ycl-platform/src/main/java/com/ycl/controller/video/common/util/DateUtils.java @@ -1,4 +1,4 @@ package com.ycl.controller.video.common.util; package com.ycl.common.util; import java.text.ParseException; import java.text.SimpleDateFormat; ycl-platform/src/main/java/com/ycl/common/util/Md5.java
File was renamed from ycl-platform/src/main/java/com/ycl/controller/video/common/util/Md5.java @@ -1,4 +1,4 @@ package com.ycl.controller.video.common.util; package com.ycl.common.util; import java.security.MessageDigest; ycl-platform/src/main/java/com/ycl/common/util/ParamsMap.java
File was renamed from ycl-platform/src/main/java/com/ycl/controller/video/common/util/ParamsMap.java @@ -1,4 +1,4 @@ package com.ycl.controller.video.common.util; package com.ycl.common.util; import lombok.extern.slf4j.Slf4j; ycl-platform/src/main/java/com/ycl/common/util/RandomNumberGenerator.java
File was renamed from ycl-platform/src/main/java/com/ycl/controller/video/common/util/RandomNumberGenerator.java @@ -1,4 +1,4 @@ package com.ycl.controller.video.common.util; package com.ycl.common.util; import java.text.SimpleDateFormat; import java.util.Date; ycl-platform/src/main/java/com/ycl/common/util/RandomStringUtil.java
File was renamed from ycl-platform/src/main/java/com/ycl/controller/video/common/util/RandomStringUtil.java @@ -1,4 +1,4 @@ package com.ycl.controller.video.common.util; package com.ycl.common.util; import java.util.Random; ycl-platform/src/main/java/com/ycl/common/util/UtilNumber.java
File was renamed from ycl-platform/src/main/java/com/ycl/controller/video/common/util/UtilNumber.java @@ -1,4 +1,4 @@ package com.ycl.controller.video.common.util; package com.ycl.common.util; import com.ycl.mapper.common.GeneratedCodeMapper; ycl-platform/src/main/java/com/ycl/controller/caseHandler/BaseCaseController.java
@@ -7,8 +7,8 @@ import com.ycl.annotation.LogSave; import com.ycl.api.CommonResult; import com.ycl.controller.BaseController; import com.ycl.controller.video.common.constant.BaseCaseStatus; import com.ycl.controller.video.common.util.UtilNumber; import com.ycl.common.constant.BaseCaseStatus; import com.ycl.common.util.UtilNumber; import com.ycl.dto.caseHandler.QueryForViolationParam; import com.ycl.dto.casePool.IllegalBuildingParam; import com.ycl.dto.casePool.VideoInspectParam; ycl-platform/src/main/java/com/ycl/controller/cockpit/enforcementEvents/EnforcementEventsController.java
@@ -2,16 +2,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ycl.api.CommonResult; import com.ycl.controller.video.common.constant.BaseCaseStatus; import com.ycl.dto.trend.TrendAnalysisParam; import com.ycl.entity.caseHandler.BaseCase; import com.ycl.entity.caseHandler.Violations; import com.ycl.mapper.trend.TrendAnalysisMapper; import com.ycl.service.caseHandler.IBaseCaseService; import com.ycl.service.caseHandler.IViolationsService; import com.ycl.service.trend.TrendAnalysisService; import com.ycl.util.CheckApiUtil; import com.ycl.vo.TrendVo; import com.ycl.vo.cockpit.CockpitVO; import com.ycl.vo.cockpit.enforcementEvents.EnforcementEventsVO; import com.ycl.vo.cockpit.enforcementEvents.VideoAndAreaVO; @@ -25,12 +22,9 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Consumer; import java.util.stream.Collectors; /** @@ -56,16 +50,6 @@ @GetMapping("/statistics") public CommonResult<Map<String, Object>> statistics(@Validated CockpitVO params) { checkApiUtil.cockpit(params); Map<String, Object> map = new HashMap<>(); // EnforcementEventsVO.StatisticsEventVO eventVO = new EnforcementEventsVO.StatisticsEventVO(); // eventVO.setCount(10); // eventVO.setRatio(new BigDecimal("0.69").setScale(2, RoundingMode.HALF_UP)); // eventVO.setUp(true); // iBaseCaseService.count(); // map.put("reported", eventVO); // map.put("disposition", eventVO); // map.put("dispositionInTime", eventVO); // map.put("register", eventVO); return CommonResult.success(iBaseCaseService.statistics()); } @@ -77,7 +61,7 @@ Long count = iViolationsService.count(); typeAndSourceVO.setAll(iViolationsService.count()); List<VideoAndAreaVO> videoAndAreaVOS = iViolationsService.selectType(); videoAndAreaVOS.stream().forEach(item->item.setRatio(new BigDecimal(item.getCount()*1.0/count).setScale(2,BigDecimal.ROUND_HALF_UP))); videoAndAreaVOS.stream().forEach(item -> item.setRatio(new BigDecimal(item.getCount() * 1.0 / count).setScale(2, BigDecimal.ROUND_HALF_UP))); typeAndSourceVO.setRecords(videoAndAreaVOS); return CommonResult.success(typeAndSourceVO); } ycl-platform/src/main/java/com/ycl/controller/message/MessageColumnController.java
@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.ycl.api.CommonResult; import com.ycl.bo.AdminUserDetails; import com.ycl.controller.video.common.util.UtilNumber; import com.ycl.common.util.UtilNumber; import com.ycl.dto.message.MessageColumnParam; import com.ycl.entity.message.MessageColumn; import com.ycl.service.message.IMessageColumnService; ycl-platform/src/main/java/com/ycl/controller/store/StoreInfoController.java
@@ -5,7 +5,7 @@ import com.ycl.annotation.LogSave; import com.ycl.api.CommonPage; import com.ycl.api.CommonResult; import com.ycl.controller.video.common.util.UtilNumber; import com.ycl.common.util.UtilNumber; import com.ycl.dto.store.UmsStoreInfoParam; import com.ycl.entity.store.StoreInfo; import com.ycl.entity.store.StoreScore; ycl-platform/src/main/java/com/ycl/controller/task/TaskController.java
@@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.ycl.api.CommonResult; import com.ycl.bo.AdminUserDetails; import com.ycl.controller.video.common.util.UtilNumber; import com.ycl.common.util.UtilNumber; import com.ycl.entity.task.Task; import com.ycl.service.task.ITaskService; import io.swagger.annotations.Api; ycl-platform/src/main/java/com/ycl/mapper/caseHandler/BaseCaseMapper.java
@@ -58,4 +58,14 @@ List<DelayDO> selectDelayVOList(); List<VideoAndAreaVO> selectType(); Long selectLastMonthCount(List<Integer> states); Long selectRecentlyMonthCount(List<Integer> states); Long selectOnTimeCaseCount(); Long selectOnTimeCaseLastMonthCount(); Long selectOnTimeCaseRecentlyMonthCount(); } ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/BaseCaseServiceImpl.java
@@ -8,10 +8,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.bo.AdminUserDetails; import com.ycl.controller.video.common.constant.BaseCaseStatus; import com.ycl.controller.video.common.constant.StepName; import com.ycl.controller.video.common.util.DateUtil; import com.ycl.controller.video.common.util.UtilNumber; import com.ycl.common.constant.BaseCaseStatus; import com.ycl.common.constant.StepName; import com.ycl.common.util.DateUtil; import com.ycl.common.util.UtilNumber; import com.ycl.dto.caseHandler.DispatchInfoParam; import com.ycl.dto.caseHandler.QueryForViolationParam; import com.ycl.dto.casePool.IllegalBuildingParam; @@ -35,6 +35,7 @@ import com.ycl.vo.casePool.*; import com.ycl.vo.cockpit.enforcementEvents.DelayVO; import com.ycl.vo.cockpit.enforcementEvents.EventVO; import com.ycl.vo.cockpit.enforcementEvents.StatisticsVO; import com.ycl.vo.cockpit.enforcementEvents.VideoAndAreaVO; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -42,7 +43,6 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; @@ -492,17 +492,17 @@ public List<DelayVO> selectDelayList() { List<DelayDO> delayDOS = baseCaseMapper.selectDelayVOList(); ArrayList<DelayVO> delayVOS = new ArrayList<>(); delayDOS.stream().forEach(item->{ delayDOS.stream().forEach(item -> { DelayVO delayVO = new DelayVO(); delayVO.setDescription(item.getDescription()); delayVO.setCode(item.getCode()); Duration between; if (item.getEndTime()!=null){ if (item.getEndTime() != null) { between = Duration.between(item.getEndTime(), item.getLimitTime()); }else { } else { between = Duration.between(LocalDateTime.now(), item.getLimitTime()); } if (between.isNegative()){ if (between.isNegative()) { delayVO.setDuration(between.toMinutes()); delayVOS.add(delayVO); } @@ -512,8 +512,91 @@ @Override public Map<String, Object> statistics() { baseCaseMapper.selectCount(new LambdaQueryWrapper<BaseCase>().eq(BaseCase::getState, BaseCaseStatus.REPORT)); return null; } Map<String, Object> map = new HashMap<>(); Long reportCount = baseCaseMapper.selectCount(new LambdaQueryWrapper<BaseCase>().eq(BaseCase::getState, BaseCaseStatus.REPORT)); StatisticsVO report = new StatisticsVO(); report.setCount(reportCount); ArrayList<Integer> reportState = new ArrayList<>(); reportState.add(BaseCaseStatus.REPORT); Long reportLastMonthCount = baseCaseMapper.selectLastMonthCount(reportState); Long reportRecentlyMonthCount = baseCaseMapper.selectRecentlyMonthCount(reportState); Double v = (reportRecentlyMonthCount - reportLastMonthCount) * 1.0 / reportLastMonthCount; if (reportLastMonthCount == 0) { report.setRatio(null); } else { report.setRatio(new BigDecimal(v).setScale(2, BigDecimal.ROUND_HALF_UP).abs()); } if (v < 0) { report.setUp(false); } else { report.setUp(true); } Long disposeCount = baseCaseMapper.selectCount(new LambdaQueryWrapper<BaseCase>().in(BaseCase::getState, BaseCaseStatus.DISPATCH, BaseCaseStatus.DISPOSE, BaseCaseStatus.CHECK, BaseCaseStatus.CLOSING_REGISTER)); StatisticsVO dispose = new StatisticsVO(); dispose.setCount(disposeCount); ArrayList<Integer> disposeState = new ArrayList<>(); disposeState.add(BaseCaseStatus.DISPATCH); disposeState.add(BaseCaseStatus.DISPOSE); disposeState.add(BaseCaseStatus.CHECK); disposeState.add(BaseCaseStatus.CLOSING_REGISTER); Long disposeLastMonthCount = baseCaseMapper.selectLastMonthCount(disposeState); Long disposeRecentlyMonthCount = baseCaseMapper.selectRecentlyMonthCount(disposeState); Double v1 = (disposeRecentlyMonthCount - disposeLastMonthCount) * 1.0 / disposeLastMonthCount; if (disposeLastMonthCount == 0) { dispose.setRatio(null); } else { dispose.setRatio(new BigDecimal(v1).setScale(2, BigDecimal.ROUND_HALF_UP).abs()); } if (v1 < 0) { dispose.setUp(false); } else { dispose.setUp(true); } StatisticsVO onTimeDispose = new StatisticsVO(); onTimeDispose.setCount(baseCaseMapper.selectOnTimeCaseCount()); Long onTimeCaseLastMonthCount = baseCaseMapper.selectOnTimeCaseLastMonthCount(); Long timeCaseRecentlyMonthCount = baseCaseMapper.selectOnTimeCaseRecentlyMonthCount(); Double v2 = (timeCaseRecentlyMonthCount - onTimeCaseLastMonthCount) * 1.0 / onTimeCaseLastMonthCount; if (onTimeCaseLastMonthCount == 0) { onTimeDispose.setRatio(null); } else { onTimeDispose.setRatio(new BigDecimal(v2).setScale(2, BigDecimal.ROUND_HALF_UP).abs()); } if (v2 < 0) { onTimeDispose.setUp(false); } else { onTimeDispose.setUp(true); } Long registerCount = baseCaseMapper.selectCount(new LambdaQueryWrapper<BaseCase>().in(BaseCase::getState, BaseCaseStatus.DISPATCH, BaseCaseStatus.DISPOSE, BaseCaseStatus.CHECK, BaseCaseStatus.CLOSING_REGISTER, BaseCaseStatus.REPORT)); StatisticsVO register = new StatisticsVO(); register.setCount(registerCount); ArrayList<Integer> registerState = new ArrayList<>(); registerState.add(BaseCaseStatus.DISPATCH); registerState.add(BaseCaseStatus.DISPOSE); registerState.add(BaseCaseStatus.CHECK); registerState.add(BaseCaseStatus.CLOSING_REGISTER); registerState.add(BaseCaseStatus.REPORT); Long registerLastMonthCount = baseCaseMapper.selectLastMonthCount(registerState); Long registerRecentlyMonthCount = baseCaseMapper.selectRecentlyMonthCount(registerState); System.out.println(disposeRecentlyMonthCount); Double v3 = (registerRecentlyMonthCount - registerLastMonthCount) * 1.0 / registerLastMonthCount; if (disposeLastMonthCount == 0) { register.setRatio(null); } else { register.setRatio(new BigDecimal(v3).setScale(2, BigDecimal.ROUND_HALF_UP).abs()); } if (v3 < 0) { register.setUp(false); } else { register.setUp(true); } map.put("reported", report); map.put("disposition", dispose); map.put("dispositionInTime", onTimeDispose); map.put("register", register); return map; } } ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/CheckHandleServiceImpl.java
@@ -3,9 +3,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.controller.video.common.constant.BaseCaseStatus; import com.ycl.controller.video.common.constant.CheckResult; import com.ycl.controller.video.common.constant.StepName; import com.ycl.common.constant.BaseCaseStatus; import com.ycl.common.constant.CheckResult; import com.ycl.common.constant.StepName; import com.ycl.dto.caseHandler.ChechParam; import com.ycl.entity.caseHandler.BaseCase; import com.ycl.entity.caseHandler.DisposeRecord; ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/DisposeRecordServiceImpl.java
@@ -7,8 +7,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.bo.AdminUserDetails; import com.ycl.controller.video.common.constant.BaseCaseStatus; import com.ycl.controller.video.common.constant.StepName; import com.ycl.common.constant.BaseCaseStatus; import com.ycl.common.constant.StepName; import com.ycl.dto.dispatch.UploadDisposingResultParam; import com.ycl.entity.caseHandler.*; import com.ycl.entity.resources.ImageResources; ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/IDispatchHandleServiceImpl.java
@@ -3,8 +3,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.controller.video.common.constant.BaseCaseStatus; import com.ycl.controller.video.common.constant.StepName; import com.ycl.common.constant.BaseCaseStatus; import com.ycl.common.constant.StepName; import com.ycl.dto.caseHandler.DispatchInfoParam; import com.ycl.entity.caseHandler.BaseCase; import com.ycl.entity.caseHandler.DispatchInfo; ycl-platform/src/main/java/com/ycl/service/message/impl/MessageServiceImpl.java
@@ -4,8 +4,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fasterxml.jackson.databind.ObjectMapper; import com.ycl.controller.video.common.constant.ChannelCode; import com.ycl.controller.video.common.util.CommonUtils; import com.ycl.common.constant.ChannelCode; import com.ycl.common.util.CommonUtils; import com.ycl.dto.message.MessageParam; import com.ycl.entity.message.Message; import com.ycl.entity.message.SendReq; ycl-platform/src/main/java/com/ycl/service/message/impl/SmsAuditServiceImpl.java
@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.controller.video.common.util.CommonUtils; import com.ycl.common.util.CommonUtils; import com.ycl.dto.message.MessageSmsParam; import com.ycl.entity.message.Message; import com.ycl.entity.message.SmsAudit; ycl-platform/src/main/java/com/ycl/service/message/impl/SmsTemplateServiceImpl.java
@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.controller.video.common.util.CommonUtils; import com.ycl.common.util.CommonUtils; import com.ycl.entity.message.SmsTemplate; import com.ycl.mapper.message.SmsTemplateMapper; import com.ycl.service.message.ISmsTemplateService; ycl-platform/src/main/java/com/ycl/vo/cockpit/enforcementEvents/EnforcementEventsVO.java
@@ -16,18 +16,7 @@ */ @ApiModel(description = "驾驶舱数据-执法事件VO层") public class EnforcementEventsVO { @ApiModel(description = "执法事件统计") @Data public static class StatisticsEventVO { @ApiModelProperty(value = "数量") private Integer count; @ApiModelProperty(value = "比例") private BigDecimal ratio; @ApiModelProperty(value = "上升下降") private Boolean up; } @Data @ApiModel(description = "事件类型/事件来源") ycl-platform/src/main/java/com/ycl/vo/cockpit/enforcementEvents/StatisticsVO.java
New file @@ -0,0 +1,19 @@ package com.ycl.vo.cockpit.enforcementEvents; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data public class StatisticsVO { @ApiModelProperty(value = "数量") private Long count; @ApiModelProperty(value = "比例") private BigDecimal ratio; @ApiModelProperty(value = "上升下降") private Boolean up; } ycl-platform/src/main/resources/mapper/caseHandler/BaseCaseMapper.xml
@@ -254,14 +254,14 @@ <select id="selectRegisterCount" resultType="java.lang.Long"> select count(1) from ums_base_case where state in (2, 6) where state in (2, 6,7,8,9) and to_days(create_time) = TO_DAYS(now()); </select> <select id="selectStudyCount" resultType="java.lang.Long"> select count(1) from ums_base_case where state =3 where state = 3 and to_days(create_time) = TO_DAYS(now()); </select> @@ -337,13 +337,51 @@ </select> <select id="selectType" resultType="com.ycl.vo.cockpit.enforcementEvents.VideoAndAreaVO"> SELECT IFNULL( t2.`name`, "其他" ) as name, COUNT( 1 ) as count SELECT IFNULL(t2.`name`, "其他") as name, COUNT(1) as count FROM ums_violations t1 LEFT JOIN ums_data_dictionary t2 ON t1.category_id = t2.id LEFT JOIN ums_data_dictionary t2 ON t1.category_id = t2.id GROUP BY t1.category_id </select> <select id="selectLastMonthCount" resultType="java.lang.Long"> SELECT count(1) FROM ums_base_case WHERE state in <foreach collection="list" open="(" separator="," close=")" item="state"> #{state} </foreach> AND PERIOD_DIFF( date_format( now( ), '%Y%m' ), date_format( create_time, '%Y%m' ) ) =1 </select> <select id="selectRecentlyMonthCount" resultType="java.lang.Long"> SELECT count(1) FROM ums_base_case WHERE state in <foreach collection="list" open="(" separator="," close=")" item="state"> #{state} </foreach> AND PERIOD_DIFF( date_format( now( ), '%Y%m' ), date_format( create_time, '%Y%m' ) ) =0 </select> <select id="selectOnTimeCaseCount" resultType="java.lang.Long"> SELECT COUNT(1) FROM ums_dispose_record WHERE end_time < limit_time </select> <select id="selectOnTimeCaseLastMonthCount" resultType="java.lang.Long"> SELECT COUNT(1) FROM ums_dispose_record WHERE end_time < limit_time AND PERIOD_DIFF( date_format( now( ), '%Y%m' ), date_format( create_time, '%Y%m' ) ) =1 </select> <select id="selectOnTimeCaseRecentlyMonthCount" resultType="java.lang.Long"> SELECT COUNT(1) FROM ums_dispose_record WHERE end_time < limit_time AND PERIOD_DIFF( date_format( now( ), '%Y%m' ), date_format( create_time, '%Y%m' ) ) =0 </select> </mapper> ycl-platform/src/test/java/com/ycl/sccgplatform/SccgPlatformApplicationTests.java
@@ -1,10 +1,9 @@ package com.ycl.sccgplatform; import com.ycl.controller.video.common.util.UtilNumber; import com.ycl.common.util.UtilNumber; import com.ycl.enums.common.DictTypeEnum; import com.ycl.service.caseHandler.IBaseCaseService; import com.ycl.utils.MD5Util; import org.apache.commons.codec.digest.Md5Crypt; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest;