diff --git a/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeStudentDao.java b/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeStudentDao.java index c8958761..414dad03 100644 --- a/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeStudentDao.java +++ b/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeStudentDao.java @@ -1,5 +1,7 @@ package com.ibeetl.jlw.dao; +import com.ibeetl.jlw.entity.RandomStudentListDTO; +import com.ibeetl.jlw.entity.Student; import com.ibeetl.jlw.entity.TeacherOpenCourseMergeStudent; import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeStudentQuery; import com.sun.istack.internal.NotNull; @@ -34,5 +36,10 @@ public interface TeacherOpenCourseMergeStudentDao extends BaseMapper selectStudentIdListByTeacherId(@NotNull Long teacherId); - + /** + * 取随机的学生 + * @param dto + * @return + */ + List randomStudentList(RandomStudentListDTO dto); } diff --git a/web/src/main/java/com/ibeetl/jlw/entity/RandomStudentListDTO.java b/web/src/main/java/com/ibeetl/jlw/entity/RandomStudentListDTO.java new file mode 100644 index 00000000..36a1e3fc --- /dev/null +++ b/web/src/main/java/com/ibeetl/jlw/entity/RandomStudentListDTO.java @@ -0,0 +1,43 @@ +package com.ibeetl.jlw.entity; + +import lombok.Data; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +/** + *

+ * 随机获取学生的请求参数实体 + *

+ * + * @author mlx + * @date 2022/10/25 + * @modified + */ +@Data +public class RandomStudentListDTO { + + /** + * 开课ID + */ + @NotNull(message = "开课ID不能为空!") + private Long teacherOpenCourseId; + + /** + * 班级ID集合 + */ + private String schoolClassIds; + + /** + * 随机获取的学生数量 (非必填) + * null或者-1 则查询所有开课关联的学生 + */ + @Min(message = "随机抽取的数量不能小于1(非必填)!", value = 1) + private Long randomCount; + + /** + * 学生编号或者姓名 + */ + private Long studentSnOrName; + +} diff --git a/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseStudentSigninLogManualDTO.java b/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseStudentSigninLogManualDTO.java new file mode 100644 index 00000000..986c3478 --- /dev/null +++ b/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseStudentSigninLogManualDTO.java @@ -0,0 +1,31 @@ +package com.ibeetl.jlw.entity; + +import com.ibeetl.jlw.web.query.TeacherOpenCourseStudentSigninLogQuery; +import lombok.Data; +import org.springframework.validation.annotation.Validated; + +import javax.validation.constraints.NotNull; + +/* +* 教师-我的课程-开课-学生签到记录,手动签到方式 +* gen by Spring Boot2 Admin 2022-10-12 +*/ +@Data +@Validated +public class TeacherOpenCourseStudentSigninLogManualDTO { + + //学生ID + @NotNull(message = "学生ID不能为空") + + private Long studentId ; + + //备注(缺勤理由) + + private String teacherOpenCourseStudentSigninLogRemark ; + + // 签到标签 10 签到,20 缺勤 + @NotNull(message = "签到方式不能为空") + + private TeacherOpenCourseStudentSigninLogQuery.SignInTypeEnum teacherOpenCourseStudentSigninLogTag; + +} diff --git a/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseStudentSigninLogManualSignInDTO.java b/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseStudentSigninLogManualMergeDTO.java similarity index 69% rename from web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseStudentSigninLogManualSignInDTO.java rename to web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseStudentSigninLogManualMergeDTO.java index 9e32d17e..5602e3c9 100644 --- a/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseStudentSigninLogManualSignInDTO.java +++ b/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseStudentSigninLogManualMergeDTO.java @@ -16,18 +16,18 @@ import java.util.List; * @modified */ @Data -public class TeacherOpenCourseStudentSigninLogManualSignInDTO { +public class TeacherOpenCourseStudentSigninLogManualMergeDTO { /** * 签到配置 */ @NotNull(message = "签到配置参数不能为空!") - private TeacherOpenCourseStudentSigninSetting signinSetting; + private TeacherOpenCourseStudentSigninSettingManualDTO signinSetting; /** * 签到日志列表 */ @NotEmpty(message = "签到日志不能为空!") - private List signinLogList; + private List signinLogList; } diff --git a/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseStudentSigninSettingManualDTO.java b/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseStudentSigninSettingManualDTO.java new file mode 100644 index 00000000..f6512708 --- /dev/null +++ b/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseStudentSigninSettingManualDTO.java @@ -0,0 +1,26 @@ +package com.ibeetl.jlw.entity; + +import lombok.Data; +import org.springframework.validation.annotation.Validated; + +import javax.validation.constraints.NotNull; + +/* +* 教师-我的课程-开课-学生签到-配置,手动签到配置 +* gen by Spring Boot2 Admin 2022-10-11 +*/ +@Data +@Validated +public class TeacherOpenCourseStudentSigninSettingManualDTO { + + //开课ID + + @NotNull(message = "开课ID不能为空!") + private Long teacherOpenCourseId ; + + //班级ID集合 + + @NotNull(message = "班级ID不能为空!") + private String schoolClassIds ; + +} diff --git a/web/src/main/java/com/ibeetl/jlw/enums/MoveEnum.java b/web/src/main/java/com/ibeetl/jlw/enums/MoveEnum.java index 21795021..655c7c65 100644 --- a/web/src/main/java/com/ibeetl/jlw/enums/MoveEnum.java +++ b/web/src/main/java/com/ibeetl/jlw/enums/MoveEnum.java @@ -11,7 +11,7 @@ import org.beetl.sql.annotation.entity.EnumMapping; @Getter @AllArgsConstructor -@EnumMapping("text") +@EnumMapping("name") public enum MoveEnum { // 进行中 MOVE_TOP(10, "置顶"), diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeStudentService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeStudentService.java index d4d092b4..317dbae9 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeStudentService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeStudentService.java @@ -1,7 +1,6 @@ package com.ibeetl.jlw.service; import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.ObjectUtil; import cn.jlw.util.ToolUtils; import cn.jlw.validate.ValidateConfig; import com.alibaba.fastjson.JSON; @@ -18,13 +17,11 @@ import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeStudentQuery; import org.apache.commons.lang3.StringUtils; import org.beetl.sql.core.SqlId; import org.beetl.sql.core.engine.PageQuery; -import org.beetl.sql.core.query.LambdaQuery; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; -import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.util.ArrayList; @@ -222,23 +219,12 @@ public class TeacherOpenCourseMergeStudentService extends CoreBaseService randomStudentList( - @NotNull(message = "开课ID不能为空!") Long teacherOpenCourseId, - @Min(message = "随机抽取的数量不能小于1(非必填)!", value = 1) Long randomCount) { - - LambdaQuery lambdaQuery = teacherOpenCourseMergeStudentDao.createLambdaQuery() - .andEq(TeacherOpenCourseMergeStudent::getTeacherOpenCourseId, teacherOpenCourseId); - - // 查询数量大于0 - if(ObjectUtil.isNotNull(randomCount)) { - lambdaQuery.appendSql("ORDER BY RAND() LIMIT " + randomCount); - } - - List studentList = lambdaQuery.select(); + public Object randomStudentList(RandomStudentListDTO dto) { + List studentList = teacherOpenCourseMergeStudentDao.randomStudentList(dto); queryListAfter(studentList); return studentList; } diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseStudentSigninLogService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseStudentSigninLogService.java index 16028e44..67bafc37 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseStudentSigninLogService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseStudentSigninLogService.java @@ -1,5 +1,8 @@ package com.ibeetl.jlw.service; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.EnumUtil; @@ -22,6 +25,7 @@ import com.ibeetl.jlw.dao.TeacherOpenCourseStudentSigninSettingDao; import com.ibeetl.jlw.entity.*; import com.ibeetl.jlw.entity.dto.TeacherOpenCourseStudentSigninLogSigninDTO; import com.ibeetl.jlw.entity.dto.TeacherOpenCourseStudentSigninLogSigninDTO.ManualClass; +import com.ibeetl.jlw.enums.StartStatusEnum; import com.ibeetl.jlw.validator.TeacherOpenCourseStudentSigninLogSigninDTOValidator; import com.ibeetl.jlw.web.query.TeacherOpenCourseStudentSigninLogQuery; import org.apache.commons.lang3.StringUtils; @@ -37,9 +41,11 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import javax.validation.constraints.NotNull; import java.io.*; import java.util.*; +import java.util.stream.Collectors; import static cn.jlw.util.IpUtils.getIpAddr; import static cn.jlw.util.IpUtils.isRangeInner; @@ -546,16 +552,59 @@ public class TeacherOpenCourseStudentSigninLogService extends CoreBaseService { - item.setTeacherOpenCourseStudentSigninSettingId(settingId); - }); - - insertBatch(dto.getSigninLogList()); + public void manualSigninAdd(@NotNull(message = "手动签到参数不能为空!") TeacherOpenCourseStudentSigninLogManualMergeDTO dto) { + + // 获取当前登录用户信息 + final CoreUser user = getUser(); + final HttpServletRequest request = getRequest(); + + // 添加我签到配置 + TeacherOpenCourseStudentSigninSettingManualDTO signinSetting = dto.getSigninSetting(); + TeacherOpenCourseStudentSigninSetting entity = new TeacherOpenCourseStudentSigninSetting(); + + // 拷贝前端传过来的值 + BeanUtil.copyProperties(signinSetting, entity); + DateTime now = DateUtil.date(); + + // 默认的一些属性填充 + entity.setTeacherOpenCourseStudentSigninSettingSessionTime(now); + entity.setTeacherOpenCourseStudentSigninSettingStartTime(now); + entity.setTeacherOpenCourseStudentSigninSettingAddTime(now); + entity.setTeacherOpenCourseStudentSigninSettingType(manual_signin.name()); + entity.setTeacherOpenCourseStudentSigninSettingStartStatus(StartStatusEnum.READY); + entity.setTeacherOpenCourseStudentSigninSettingStatus(1); + entity.setOrgId(user.getOrgId()); + entity.setUserId(user.getId()); + teacherOpenCourseStudentSigninSettingDao.insert(entity); + + + // 获取插入后的配置ID + final Long settingId = entity.getTeacherOpenCourseStudentSigninSettingId(); + + // 构建签到日志集合 + List signinLogList = dto.getSigninLogList().stream() + .map(item -> { + Student studentInfo = studentDao.getById(item.getStudentId()); + Long classId = studentInfo.getClassId(); + Assert.notNull(classId, "学生姓名:{}, 编号:{} 信息异常,请联系管理员!" + , studentInfo.getStudentName(), studentInfo.getStudentSn()); + + TeacherOpenCourseStudentSigninLog teacherOpenCourseStudentSigninLog = new TeacherOpenCourseStudentSigninLog(); + teacherOpenCourseStudentSigninLog.setTeacherOpenCourseId(entity.getTeacherOpenCourseId()); + teacherOpenCourseStudentSigninLog.setSchoolClassId(classId); + teacherOpenCourseStudentSigninLog.setTeacherOpenCourseStudentSigninLogAddTime(now); + teacherOpenCourseStudentSigninLog.setTeacherOpenCourseStudentSigninLogIp(getIpAddr(request)); + teacherOpenCourseStudentSigninLog.setTeacherOpenCourseStudentSigninLogTag(SIGN_IN); + teacherOpenCourseStudentSigninLog.setTeacherOpenCourseStudentSigninSettingSessionTime(now); + teacherOpenCourseStudentSigninLog.setTeacherOpenCourseStudentSigninSettingId(settingId); + teacherOpenCourseStudentSigninLog.setOrgId(user.getOrgId()); + teacherOpenCourseStudentSigninLog.setUserId(user.getId()); + // 拷贝前端传过来的值 + BeanUtil.copyProperties(item, teacherOpenCourseStudentSigninLog); + return teacherOpenCourseStudentSigninLog; + // 默认的一些属性填充 + }).collect(Collectors.toList()); + + insertBatch(signinLogList); } } diff --git a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeStudentController.java b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeStudentController.java index ed63327b..3d116b27 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeStudentController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeStudentController.java @@ -8,6 +8,7 @@ import com.ibeetl.admin.core.annotation.Function; import com.ibeetl.admin.core.entity.CoreUser; import com.ibeetl.admin.core.file.FileService; import com.ibeetl.admin.core.web.JsonResult; +import com.ibeetl.jlw.entity.RandomStudentListDTO; import com.ibeetl.jlw.entity.Student; import com.ibeetl.jlw.entity.TeacherOpenCourseMergeStudent; import com.ibeetl.jlw.service.TeacherOpenCourseMergeStudentService; @@ -26,6 +27,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; +import javax.validation.constraints.NotNull; import java.util.List; /** @@ -155,13 +157,12 @@ public class TeacherOpenCourseMergeStudentController{ /** * 教师端-随机抽取开课下的学生数 * - * @param teacherOpenCourseId 开课ID - * @param randomCount 随机数量 null或者-1 则查询所有开课关联的学生 + * @param dto * @return */ @PostMapping(API + "/randomStudentList.do") - public JsonResult randomStudentList(Long teacherOpenCourseId, Long randomCount) { - return JsonResult.success(teacherOpenCourseMergeStudentService.randomStudentList(teacherOpenCourseId, randomCount)); + public JsonResult randomStudentList(@NotNull(message = "必传参数不能为空!") RandomStudentListDTO dto) { + return JsonResult.success(teacherOpenCourseMergeStudentService.randomStudentList(dto)); } diff --git a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseStudentSigninLogController.java b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseStudentSigninLogController.java index 3d2a88e9..6b31ee7c 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseStudentSigninLogController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseStudentSigninLogController.java @@ -12,7 +12,7 @@ import com.ibeetl.admin.core.util.TimeTool; import com.ibeetl.admin.core.web.JsonResult; import com.ibeetl.jlw.entity.FileEntity; import com.ibeetl.jlw.entity.TeacherOpenCourseStudentSigninLog; -import com.ibeetl.jlw.entity.TeacherOpenCourseStudentSigninLogManualSignInDTO; +import com.ibeetl.jlw.entity.TeacherOpenCourseStudentSigninLogManualMergeDTO; import com.ibeetl.jlw.entity.dto.TeacherOpenCourseStudentSigninLogSigninDTO; import com.ibeetl.jlw.service.TeacherOpenCourseStudentSigninLogService; import com.ibeetl.jlw.web.query.TeacherOpenCourseStudentSigninLogQuery; @@ -24,6 +24,7 @@ import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.beetl.sql.core.engine.PageQuery; +import org.springframework.util.Assert; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -100,10 +101,11 @@ public class TeacherOpenCourseStudentSigninLogController{ */ @PostMapping(API + "/manualSigninAdd.do") - public JsonResult manualSigninAdd(@RequestBody TeacherOpenCourseStudentSigninLogManualSignInDTO dto, @SCoreUser CoreUser coreUser) { + public JsonResult manualSigninAdd(@RequestBody TeacherOpenCourseStudentSigninLogManualMergeDTO dto, @SCoreUser CoreUser coreUser) { if(null == coreUser){ return JsonResult.failMessage("请登录后再操作"); }else{ + Assert.isTrue(coreUser.isTeacher(), "非老师身份,无法进行手动签到操作!"); teacherOpenCourseStudentSigninLogService.manualSigninAdd(dto); return JsonResult.success(); } diff --git a/web/src/main/resources/sql/jlw/teacherOpenCourseMergeStudent.md b/web/src/main/resources/sql/jlw/teacherOpenCourseMergeStudent.md index ccb29aac..98120b25 100644 --- a/web/src/main/resources/sql/jlw/teacherOpenCourseMergeStudent.md +++ b/web/src/main/resources/sql/jlw/teacherOpenCourseMergeStudent.md @@ -383,3 +383,29 @@ selectStudentIdListByTeacherId AND ta.teacher_open_course_school_class_merge_student_status = 1 AND t.teacher_id = #teacherId# + +randomStudentList +=== +* 教师开课随机获取学生 + + SELECT + distinct tb.* + FROM + teacher_open_course_merge_teacher t + RIGHT JOIN teacher_open_course_merge_student ta ON ta.teacher_open_course_id = t.teacher_open_course_id + RIGHT JOIN student tb on tb.student_id = ta.student_id + WHERE + 1 = 1 + AND t.teacher_open_course_merge_teacher_status = 1 + AND ta.teacher_open_course_school_class_merge_student_status = 1 + AND tb.student_status = 1 + AND t.teacher_open_course_id = #teacherOpenCourseId# + @if(!isEmpty(schoolClassIds)){ + and find_in_set(tb.class_id, #schoolClassIds#) + @} + @if(!isEmpty(randomCount) && randomCount > 0){ + ORDER BY RAND() LIMIT #randomCount# + @} + @if(!isEmpty(studentSnOrName)){ + and (tb.student_sn like #'%'+studentSnOrName+'%'# or tb.student_name like #'%'+studentSnOrName+'%'#) + @} diff --git a/web/src/test/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeStudentControllerTest.java b/web/src/test/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeStudentControllerTest.java index b0e51d0d..3d059d87 100644 --- a/web/src/test/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeStudentControllerTest.java +++ b/web/src/test/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeStudentControllerTest.java @@ -5,6 +5,7 @@ import com.ibeetl.jlw.dao.StudentDao; import com.ibeetl.jlw.dao.TeacherOpenCourseDao; import com.ibeetl.jlw.dao.TeacherOpenCourseMergeTeacherDao; import org.junit.jupiter.api.Test; +import org.springframework.http.MediaType; import org.springframework.test.web.servlet.RequestBuilder; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; @@ -145,4 +146,27 @@ class TeacherOpenCourseMergeStudentControllerTest extends BaseTest { System.out.println(result); clearEnvLoginInfo(); } + + @Test + void randomStudentList() throws Exception { + //构造请求参数 + RequestBuilder rb = MockMvcRequestBuilders.post(API + "/randomStudentList.do") + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .param("randomCount", "1000") + .param("schoolClassIds", "1") + .param("teacherOpenCourseId", "1569699103338831872") + ; + + // 测试账号,佟老师 + putLoginInfoToEnv("102", "26"); + + //发送请求,验证返回结果 + String result = mvc.perform(rb) + .andExpect(status().isOk()) + .andExpect(MockMvcResultMatchers.jsonPath("$.code").value("0")) + .andReturn().getResponse().getContentAsString(Charset.defaultCharset()); + + System.out.println(result); + clearEnvLoginInfo(); + } } \ No newline at end of file diff --git a/web/src/test/java/com/ibeetl/jlw/web/TeacherOpenCourseStudentSigninLogControllerTest.java b/web/src/test/java/com/ibeetl/jlw/web/TeacherOpenCourseStudentSigninLogControllerTest.java index 607047ab..66a7a350 100644 --- a/web/src/test/java/com/ibeetl/jlw/web/TeacherOpenCourseStudentSigninLogControllerTest.java +++ b/web/src/test/java/com/ibeetl/jlw/web/TeacherOpenCourseStudentSigninLogControllerTest.java @@ -77,6 +77,41 @@ class TeacherOpenCourseStudentSigninLogControllerTest extends BaseTest { .params(toMultiMap(dto)); + //发送请求,验证返回结果 + String result = mvc.perform(rb) + .andExpect(status().isOk()) + .andExpect(MockMvcResultMatchers.jsonPath("$.code").value("0")) + .andReturn().getResponse().getContentAsString(Charset.defaultCharset()); + + System.out.println(result); + } + + @Test + void manualSigninAdd() throws Exception { + String paramsString = "{\n" + + " \"signinSetting\": {\n" + + " \"teacherOpenCourseId\": 1569699103338831872,\n" + + " \"schoolClassIds\": \"1\"\n" + + " },\n" + + " \"signinLogList\": [\n" + + " {\n" + + " \"studentId\": 11,\n" + + " \"teacherOpenCourseStudentSigninLogRemark\": \"这个学生缺勤了\",\n" + + " \"teacherOpenCourseStudentSigninLogTag\": \"UN_SIGN_IN\"\n" + + " }\n" + + " ]\n" + + "}"; + + //构造请求参数 + RequestBuilder rb = MockMvcRequestBuilders.post(API + "/manualSigninAdd.do") + .contentType(MediaType.APPLICATION_JSON_VALUE) + // 模拟IP + .header(X_FORWARDED_FOR, "192.168.1.2") + .content(paramsString); + + // 测试账号,佟老师 + putLoginInfoToEnv("102", "26"); + //发送请求,验证返回结果 String result = mvc.perform(rb) .andExpect(status().isOk())