Forráskód Böngészése

首页-接口测试

黄远 5 éve
szülő
commit
a1fa5ac416

+ 1 - 1
lift-system-service/src/main/java/cn/com/ty/lift/system/constants/CommonConstants.java

@@ -212,7 +212,7 @@ public class CommonConstants {
         /**
          * 请求时间格式
          */
-        String REQUEST_DATE_FORMAT = "yyyy-MM";
+        String REQUEST_DATE_FORMAT = "yyyy-MM-dd";
 
         /**
          * 日期转化时间格式

+ 8 - 0
lift-system-service/src/main/java/cn/com/ty/lift/system/homepage/dao/dto/request/PlatformCalendarRequest.java

@@ -1,6 +1,7 @@
 package cn.com.ty.lift.system.homepage.dao.dto.request;
 
 import lombok.Data;
+import org.apache.commons.lang3.StringUtils;
 
 /**
  * @author huangyuan
@@ -38,4 +39,11 @@ public class PlatformCalendarRequest {
      * 月末时间 年月日
      */
     private String monthEndStr;
+
+    public String getRequestDateStr(){
+        if(StringUtils.isNotBlank(requestDateStr)) {
+            return requestDateStr + "-01";
+        }
+        return requestDateStr;
+    }
 }

+ 4 - 1
lift-system-service/src/main/java/cn/com/ty/lift/system/homepage/dao/dto/request/TodoRequest.java

@@ -42,6 +42,9 @@ public class TodoRequest {
      * @date 2020/2/24 9:48 上午
      */
     public Long getPageNum() {
-        return pageNum - 1;
+        if(pageNum != null) {
+            return pageNum - 1;
+        }
+        return pageNum;
     }
 }

+ 5 - 3
lift-system-service/src/main/java/cn/com/ty/lift/system/homepage/service/LiftDataService.java

@@ -231,11 +231,13 @@ public class LiftDataService {
      * @date 2020/2/18 1:32 下午
      */
     private Map<Long, Integer> getLiftIdToMaintenancePlanStatus(List<MtPlanDataModel> mtPlanDataModelList) {
+        Map<Long, Integer> liftIdToMaintenancePlanStatus = new HashMap<>();
         if (mtPlanDataModelList != null && mtPlanDataModelList.size() > 0) {
-            return mtPlanDataModelList.stream()
-                    .collect(Collectors.toMap(MtPlanDataModel::getLiftId, MtPlanDataModel::getStatus));
+            mtPlanDataModelList.forEach(mtPlanDataModel -> {
+                liftIdToMaintenancePlanStatus.put(mtPlanDataModel.getLiftId(), mtPlanDataModel.getStatus());
+            });
         }
-        return new HashMap<>();
+        return liftIdToMaintenancePlanStatus;
     }
 
     /**

+ 89 - 73
lift-system-service/src/main/java/cn/com/ty/lift/system/homepage/service/PlatformCalendarService.java

@@ -35,7 +35,7 @@ public class PlatformCalendarService {
      */
     public RestResponse taskNum(PlatformCalendarRequest platformCalendarRequest) {
         Map<Integer, Map<Integer, Long>> dayToLiftDataToNum = CommonUtil.initCalendarMapData(
-                platformCalendarRequest.getRequestDateStr(), CommonConstants.PlatformCalendarConstants.REQUEST_DATE_FORMAT);
+                platformCalendarRequest.getRequestDateStr(), CommonConstants.PlatformCalendarConstants.TRANS_DATE_FORMAT);
         //获取日期数 -> 电梯信息 (不同电梯状态 -> 电梯数据)
         Map<Integer, Map<Integer, List<CalendarLiftDataModel>>> dayToCalendarLift = getDayToCalendarLift(
                 platformCalendarRequest);
@@ -46,7 +46,9 @@ public class PlatformCalendarService {
                 Map<Integer, Long> statusToLiftNum = new HashMap<>();
                 dayToCalendarLiftMap.forEach((status, calendarLiftList) -> {
                     if (calendarLiftList != null) {
-                        statusToLiftNum.put(status, calendarLiftList.stream().count());
+                        if (status != 0) {
+                            statusToLiftNum.put(status, calendarLiftList.stream().count());
+                        }
                     }
                 });
                 dayToLiftDataToNum.put(day, statusToLiftNum);
@@ -72,7 +74,9 @@ public class PlatformCalendarService {
                 platformCalendarRequest.getRequestDateDayStr(), CommonConstants.PlatformCalendarConstants.TRANS_DATE_FORMAT));
         if (statusToLiftData != null && statusToLiftData.size() > 0) {
             statusToLiftData.forEach((status, calendarLiftList) -> {
-                calendarLiftDataModelList.addAll(calendarLiftDataModelList);
+                if(status != 0) {
+                    calendarLiftDataModelList.addAll(calendarLiftList);
+                }
             });
         }
         //去除id相同的电梯数据
@@ -86,7 +90,8 @@ public class PlatformCalendarService {
      * @description 获取日期对应的电梯数据 天 -> 电梯数据(电梯状态 -> 电梯数据)
      * @date 2020/2/21 11:12 上午
      */
-    private Map<Integer, Map<Integer, List<CalendarLiftDataModel>>> getDayToCalendarLift(PlatformCalendarRequest platformCalendarRequest) {
+    private Map<Integer, Map<Integer, List<CalendarLiftDataModel>>> getDayToCalendarLift(
+            PlatformCalendarRequest platformCalendarRequest) {
         //时间转化
         CommonUtil.setMonthDate(platformCalendarRequest);
         Map<Integer, Map<Integer, List<CalendarLiftDataModel>>> dayToCalendarLift = new HashMap<>();
@@ -191,41 +196,48 @@ public class PlatformCalendarService {
      * @description 封装维保的电梯信息
      * @date 2020/2/21 2:55 下午
      */
-    private void addMaintenanceStatusLift(Map<Long, List<MtRecordDataModel>> liftIdToMtRecord, Map<Long, List<MtPlanDataModel>> liftIdToMtPlan, List<CalendarLiftDataModel> calendarLiftDataModelList, Long liftId) {
-        //获取保养记录数据
-        List<MtRecordDataModel> mtRecordDataModelList = liftIdToMtRecord.get(liftId);
-        //获取保养计划数据
-        List<MtPlanDataModel> mtPlanDataModelList = liftIdToMtPlan.get(liftId);
-        if (mtRecordDataModelList != null && mtRecordDataModelList.size() > 0) {
-            MtRecordDataModel mtRecordDataModel = mtRecordDataModelList.get(0);
-            CalendarLiftDataModel calendarLiftDataModel = new CalendarLiftDataModel(
-                    mtRecordDataModel.getLiftId(), mtRecordDataModel.getProjectName(),
-                    mtRecordDataModel.getRegistrationCode(), mtRecordDataModel.getLiftCode(),
-                    mtRecordDataModel.getWorkerName());
-            //默认是维保已完成
-            calendarLiftDataModel.setMaintenanceStatus(3);
-            if (StringUtils.isNotBlank(mtRecordDataModel.getStatus())) {
-                switch (mtRecordDataModel.getStatus()) {
-                    case "-2":
-                    case "-1":
-                    case "0":
-                        calendarLiftDataModel.setMaintenanceStatus(1);
-                        break;
-                    case "1":
-                        calendarLiftDataModel.setMaintenanceStatus(2);
-                        break;
+    private void addMaintenanceStatusLift(Map<Long, List<MtRecordDataModel>> liftIdToMtRecord,
+                                          Map<Long, List<MtPlanDataModel>> liftIdToMtPlan,
+                                          List<CalendarLiftDataModel> calendarLiftDataModelList,
+                                          Long liftId) {
+        if (liftIdToMtRecord != null) {
+            //获取保养记录数据
+            List<MtRecordDataModel> mtRecordDataModelList = liftIdToMtRecord.get(liftId);
+            if (mtRecordDataModelList != null && mtRecordDataModelList.size() > 0) {
+                MtRecordDataModel mtRecordDataModel = mtRecordDataModelList.get(0);
+                CalendarLiftDataModel calendarLiftDataModel = new CalendarLiftDataModel(
+                        mtRecordDataModel.getLiftId(), mtRecordDataModel.getProjectName(),
+                        mtRecordDataModel.getRegistrationCode(), mtRecordDataModel.getLiftCode(),
+                        mtRecordDataModel.getWorkerName());
+                //默认是维保已完成
+                calendarLiftDataModel.setMaintenanceStatus(3);
+                if (StringUtils.isNotBlank(mtRecordDataModel.getStatus())) {
+                    switch (mtRecordDataModel.getStatus()) {
+                        case "-2":
+                        case "-1":
+                        case "0":
+                            calendarLiftDataModel.setMaintenanceStatus(1);
+                            break;
+                        case "1":
+                            calendarLiftDataModel.setMaintenanceStatus(2);
+                            break;
+                    }
                 }
+                calendarLiftDataModelList.add(calendarLiftDataModel);
+            }
+        } else if (liftIdToMtPlan != null) {
+            //获取保养计划数据
+            List<MtPlanDataModel> mtPlanDataModelList = liftIdToMtPlan.get(liftId);
+            if (mtPlanDataModelList != null && mtPlanDataModelList.size() > 0) {
+                //有计划 则说明有待保养的电梯
+                MtPlanDataModel mtPlanDataModel = mtPlanDataModelList.get(0);
+                CalendarLiftDataModel calendarLiftDataModel = new CalendarLiftDataModel(
+                        mtPlanDataModel.getLiftId(), mtPlanDataModel.getProjectName(),
+                        mtPlanDataModel.getRegistrationCode(), mtPlanDataModel.getLiftCode(),
+                        mtPlanDataModel.getWorkerName());
+                calendarLiftDataModel.setMaintenanceStatus(1);
+                calendarLiftDataModelList.add(calendarLiftDataModel);
             }
-            calendarLiftDataModelList.add(calendarLiftDataModel);
-        } else if (mtPlanDataModelList != null && mtPlanDataModelList.size() > 0) {
-            //有计划 则说明有待保养的电梯
-            MtPlanDataModel mtPlanDataModel = mtPlanDataModelList.get(0);
-            CalendarLiftDataModel calendarLiftDataModel = new CalendarLiftDataModel(
-                    mtPlanDataModel.getLiftId(), mtPlanDataModel.getProjectName(),
-                    mtPlanDataModel.getRegistrationCode(), mtPlanDataModel.getLiftCode(),
-                    mtPlanDataModel.getWorkerName());
-            calendarLiftDataModel.setMaintenanceStatus(1);
-            calendarLiftDataModelList.add(calendarLiftDataModel);
         }
     }
 
@@ -237,27 +249,29 @@ public class PlatformCalendarService {
      */
     private void addEmergencyStatusLift(Map<Long, List<EmergencyRecordDataModel>> liftIdToEmergencyRecord,
                                         List<CalendarLiftDataModel> calendarLiftDataModelList, Long liftId) {
-        //获取急修记录数
-        List<EmergencyRecordDataModel> emergencyRecordDataModelList = liftIdToEmergencyRecord.get(liftId);
-        if (emergencyRecordDataModelList != null && emergencyRecordDataModelList.size() > 0) {
-            EmergencyRecordDataModel emergencyRecordDataModel = emergencyRecordDataModelList.get(0);
-            CalendarLiftDataModel calendarLiftDataModel = new CalendarLiftDataModel(
-                    emergencyRecordDataModel.getLiftId(), emergencyRecordDataModel.getProjectName(),
-                    emergencyRecordDataModel.getRegistrationCode(), emergencyRecordDataModel.getLiftCode(),
-                    emergencyRecordDataModel.getWorkerName());
-            //急修默认状态是 待急修
-            calendarLiftDataModel.setEmergencyStatus(4);
-            if (emergencyRecordDataModel.getStatus() != null) {
-                switch (emergencyRecordDataModel.getStatus()) {
-                    case 1:
-                    case 3:
-                        calendarLiftDataModel.setEmergencyStatus(5);
-                        break;
-                    case 2:
-                        calendarLiftDataModel.setEmergencyStatus(6);
+        if (liftIdToEmergencyRecord != null) {
+            //获取急修记录数
+            List<EmergencyRecordDataModel> emergencyRecordDataModelList = liftIdToEmergencyRecord.get(liftId);
+            if (emergencyRecordDataModelList != null && emergencyRecordDataModelList.size() > 0) {
+                EmergencyRecordDataModel emergencyRecordDataModel = emergencyRecordDataModelList.get(0);
+                CalendarLiftDataModel calendarLiftDataModel = new CalendarLiftDataModel(
+                        emergencyRecordDataModel.getLiftId(), emergencyRecordDataModel.getProjectName(),
+                        emergencyRecordDataModel.getRegistrationCode(), emergencyRecordDataModel.getLiftCode(),
+                        emergencyRecordDataModel.getWorkerName());
+                //急修默认状态是 待急修
+                calendarLiftDataModel.setEmergencyStatus(4);
+                if (emergencyRecordDataModel.getStatus() != null) {
+                    switch (emergencyRecordDataModel.getStatus()) {
+                        case 1:
+                        case 3:
+                            calendarLiftDataModel.setEmergencyStatus(5);
+                            break;
+                        case 2:
+                            calendarLiftDataModel.setEmergencyStatus(6);
+                    }
                 }
+                calendarLiftDataModelList.add(calendarLiftDataModel);
             }
-            calendarLiftDataModelList.add(calendarLiftDataModel);
         }
     }
 
@@ -269,23 +283,25 @@ public class PlatformCalendarService {
      */
     private void addAnnualInspectionLift(Map<Long, List<AnnualInspectionDataModel>> liftIdToAnnualInspection,
                                          List<CalendarLiftDataModel> calendarLiftDataModelList, Long liftId) {
-        //获取年检记录
-        List<AnnualInspectionDataModel> annualInspectionDataModelList = liftIdToAnnualInspection.get(liftId);
-        if (annualInspectionDataModelList != null && annualInspectionDataModelList.size() > 0) {
-            AnnualInspectionDataModel annualInspectionDataModel = annualInspectionDataModelList.get(0);
-            CalendarLiftDataModel calendarLiftDataModel = new CalendarLiftDataModel(
-                    annualInspectionDataModel.getLiftId(), annualInspectionDataModel.getProjectName(),
-                    annualInspectionDataModel.getRegistrationCode(), annualInspectionDataModel.getLiftCode(),
-                    annualInspectionDataModel.getWorkerName());
-            //年检默认状态 默认 计划年检
-            calendarLiftDataModel.setAnnualInspectionStatus(7);
-            if (annualInspectionDataModel.getStatus() != null) {
-                if (annualInspectionDataModel.getStatus() == 1) {
-                    calendarLiftDataModel.setAnnualInspectionStatus(9);
-                } else {
-                    if (annualInspectionDataModel.getStepStatus() != null &&
-                            annualInspectionDataModel.getStepStatus() != 1) {
-                        calendarLiftDataModel.setAnnualInspectionStatus(8);
+        if (liftIdToAnnualInspection != null) {
+            //获取年检记录
+            List<AnnualInspectionDataModel> annualInspectionDataModelList = liftIdToAnnualInspection.get(liftId);
+            if (annualInspectionDataModelList != null && annualInspectionDataModelList.size() > 0) {
+                AnnualInspectionDataModel annualInspectionDataModel = annualInspectionDataModelList.get(0);
+                CalendarLiftDataModel calendarLiftDataModel = new CalendarLiftDataModel(
+                        annualInspectionDataModel.getLiftId(), annualInspectionDataModel.getProjectName(),
+                        annualInspectionDataModel.getRegistrationCode(), annualInspectionDataModel.getLiftCode(),
+                        annualInspectionDataModel.getWorkerName());
+                //年检默认状态 默认 计划年检
+                calendarLiftDataModel.setAnnualInspectionStatus(7);
+                if (annualInspectionDataModel.getStatus() != null) {
+                    if (annualInspectionDataModel.getStatus() == 1) {
+                        calendarLiftDataModel.setAnnualInspectionStatus(9);
+                    } else {
+                        if (annualInspectionDataModel.getStepStatus() != null &&
+                                annualInspectionDataModel.getStepStatus() != 1) {
+                            calendarLiftDataModel.setAnnualInspectionStatus(8);
+                        }
                     }
                 }
             }

+ 22 - 15
lift-system-service/src/main/java/cn/com/ty/lift/system/homepage/service/PlatformDataStatisticsService.java

@@ -60,7 +60,7 @@ public class PlatformDataStatisticsService {
             provinceCodeToMaintenanceCompany.forEach((provinceCode, maintenanceCompanyList) -> {
                 //获取省份名称
                 String provinceName = provinceCodeToName.get(provinceCode);
-                if(StringUtils.isNotBlank(provinceName)) {
+                if (StringUtils.isNotBlank(provinceName)) {
                     //vip标识->公司数量:初始化数据
                     Map<Integer, Long> vipFlagToCompanyNum = CommonConstants.VIP_STATUS_TO_COMPANY_NUM;
                     long allCompanyNum = maintenanceCompanyList.stream().count();
@@ -101,7 +101,12 @@ public class PlatformDataStatisticsService {
         if (liftUnitsDataModelList != null && liftUnitsDataModelList.size() > 0) {
             //公司省份编码 -> 电梯数据
             Map<String, List<LiftUnitsDataModel>> provinceCodeToLiftUnitsDataModel = liftUnitsDataModelList.stream()
-                    .collect(Collectors.groupingBy(LiftUnitsDataModel::getProvinceCode));
+                    .collect(Collectors.groupingBy(liftUnitsDataModel -> {
+                        if (StringUtils.isNotBlank(liftUnitsDataModel.getProvinceCode())) {
+                            return liftUnitsDataModel.getProvinceCode();
+                        }
+                        return "暂无";
+                    }));
             //设置台量
             provinceCodeToLiftUnitsDataModel.forEach((provinceCode, LiftUnitsDataModelList) -> {
                 Map<Integer, Long> unitsStatusToNum = new HashMap<>();
@@ -109,20 +114,22 @@ public class PlatformDataStatisticsService {
                 unitsStatusToNum.put(0, 0L);
                 unitsStatusToNum.put(1, 0L);
                 String provinceName = provinceCodeToName.get(provinceCode);
-                if (LiftUnitsDataModelList != null && liftUnitsDataModelList.size() > 0) {
-                    //计算总台量
-                    unitsStatusToNum.put(0, liftUnitsDataModelList.stream().count());
-                    //计算活跃台量
-                    unitsStatusToNum.put(1, liftUnitsDataModelList.stream().filter(liftUnitsDataModel -> {
-                        if (StringUtils.isNotBlank(liftUnitsDataModel.getLiftCompanyStatus())) {
-                            //如果电梯没有停保就是活跃电梯
-                            CommonEnum.LiftStatus.STOP_INSURANCE.getCode()
-                                    .equals(liftUnitsDataModel.getLiftCompanyStatus());
-                        }
-                        return false;
-                    }).count());
+                if (StringUtils.isNotBlank(provinceName)) {
+                    if (LiftUnitsDataModelList != null && liftUnitsDataModelList.size() > 0) {
+                        //计算总台量
+                        unitsStatusToNum.put(0, liftUnitsDataModelList.stream().count());
+                        //计算活跃台量
+                        unitsStatusToNum.put(1, liftUnitsDataModelList.stream().filter(liftUnitsDataModel -> {
+                            if (StringUtils.isNotBlank(liftUnitsDataModel.getLiftCompanyStatus())) {
+                                //如果电梯没有停保就是活跃电梯
+                                return !CommonEnum.LiftStatus.STOP_INSURANCE.getCode()
+                                        .equals(liftUnitsDataModel.getLiftCompanyStatus());
+                            }
+                            return false;
+                        }).count());
+                    }
+                    provinceCodeToUnits.put(provinceName, unitsStatusToNum);
                 }
-                provinceCodeToUnits.put(provinceName, unitsStatusToNum);
             });
         }
         return RestResponse.success(ProjectUtils.transReturnMapToStatisticsKVModel(provinceCodeToUnits),

+ 22 - 12
lift-system-service/src/main/java/cn/com/ty/lift/system/utils/CommonUtil.java

@@ -66,15 +66,14 @@ public class CommonUtil {
 
     /**
      * @param transTimeStr 给定时间
-     * @param origFormat   给定时间格式
      * @param monthFormat  转化为的月份时间格式
      * @return Map 类型对应时间格式 monthBegin:表示月初时间 monthEnd:表示月末时间
      * @description
      */
-    public static Map<String, String> getMonthDate(String transTimeStr, String origFormat, String monthFormat) {
+    public static Map<String, String> getMonthDate(String transTimeStr, String monthFormat) {
         Map<String, String> dateTypeToDateValue = new HashMap<>();
         //将传递时间字符串转化为localDate类型时间
-        LocalDate transDate = LocalDate.parse(transTimeStr, DateTimeFormatter.ofPattern(origFormat));
+        LocalDate transDate = LocalDate.parse(transTimeStr, DateTimeFormatter.ofPattern(monthFormat));
         //设置月初时间
         LocalDate monthBeginDate = transDate.with(TemporalAdjusters.firstDayOfMonth());
         dateTypeToDateValue.put(CommonConstants.PlatformCalendarConstants.MONTH_BEGIN_DATE,
@@ -93,8 +92,12 @@ public class CommonUtil {
      * @description 设置月初月末时间
      */
     public static void setMonthDate(PlatformCalendarRequest platformCalendarRequest) {
-        Map<String, String> dateTypeToDateValue = CommonUtil.getMonthDate(platformCalendarRequest.getRequestDateStr(),
-                CommonConstants.PlatformCalendarConstants.REQUEST_DATE_FORMAT,
+        String dateStr = platformCalendarRequest.getRequestDateStr();
+        //如果请求时间为空,就设置带天的请求时间
+        if(StringUtils.isBlank(dateStr)) {
+            dateStr = platformCalendarRequest.getRequestDateDayStr();
+        }
+        Map<String, String> dateTypeToDateValue = CommonUtil.getMonthDate(dateStr,
                 CommonConstants.PlatformCalendarConstants.TRANS_DATE_FORMAT);
         //设置月初时间
         platformCalendarRequest.setMonthBeginStr(dateTypeToDateValue.get(
@@ -142,13 +145,13 @@ public class CommonUtil {
     }
 
     /**
-     * @param timeStr 时间值 - 字符串
+     * @param timeStr    时间值 - 字符串
      * @param timeFormat 时间格式
      * @return
      * @description 获取日期的天数值
      */
     public static int getDateStrDayValue(String timeStr, String timeFormat) {
-        if(StringUtils.isNotBlank(timeStr)) {
+        if (StringUtils.isNotBlank(timeStr)) {
             LocalDate time = LocalDate.parse(timeStr, DateTimeFormatter.ofPattern(timeFormat));
             return getDateDayValue(time);
         }
@@ -161,14 +164,21 @@ public class CommonUtil {
      * @return
      * @description 将数据转化为map 日期天 -> 数据集合
      */
-    public static Map getDayToDataModel(List dataList, String dateAttrName) {
+    public static Map getKeyToDataModel(List dataList, String dateAttrName) {
         Map dayToDataModel = new HashMap();
         if (dataList != null && dataList.size() > 0) {
             dayToDataModel = (Map) dataList.stream()
                     .collect(Collectors.groupingBy(obj -> {
                         try {
-                            return getDateDayValue((LocalDate) obj.getClass()
-                                    .getMethod(PojoUtils.attrGetMethodName(dateAttrName)).invoke(obj, null));
+                            Object value = obj.getClass()
+                                    .getMethod(PojoUtils.attrGetMethodName(dateAttrName)).invoke(obj, null);
+                            if (value != null) {
+                                if (value instanceof LocalDate) {
+                                    return getDateDayValue((LocalDate) value);
+                                }
+                                return value;
+                            }
+                            return 0;
                         } catch (Exception e) {
                             e.printStackTrace();
                             return null;
@@ -187,10 +197,10 @@ public class CommonUtil {
     public static Map getDayToDataMap(List dataList, String dateAttrName) {
         Map dayToDataMap = new HashMap();
         //将数据转化为map 日期天 -> 数据集合
-        Map dayToDataModel = getDayToDataModel(dataList, dateAttrName);
+        Map dayToDataModel = getKeyToDataModel(dataList, dateAttrName);
         //将map集合转化为 liftId -> 数据集合
         dayToDataModel.forEach((dayValue, dataModelList) -> {
-            dayToDataMap.put(dayValue, getDayToDataModel((List) dataModelList, "liftId"));
+            dayToDataMap.put(dayValue, getKeyToDataModel((List) dataModelList, "liftId"));
         });
         return dayToDataMap;
     }

+ 1 - 1
lift-system-service/src/main/resources/mapper/CommonDataMapper.xml

@@ -17,7 +17,7 @@
 
     <!-- 电梯信息 sql -->
     <sql id="liftInfoSql">
-        l.lift_id as liftId,
+        l.id as liftId,
         l.registration_code as registrationCode,
         l.lift_code as liftCode,
         p.project_name as projectName,