zhuyifan

fix(service): 修复创建 diner时的逻辑错误

......@@ -67,12 +67,12 @@ public class DinerController {
}
@ApiOperation(value = "根据学校,班级和学号查询就餐人")
@PostMapping("/client/{clientId}/gradeclass/{gradeClassId}/diner")
@PostMapping("/client/{clientId}/gradeclass/{gradeClassId}/diners")
@ResponseStatus(HttpStatus.OK)
public DinerVO getClientClassDiner(@RequestAttribute(INJECTED_CLIENT) final SingleClientRpcResponse client,
@RequestAttribute(INJECTED_GRADE_CLASS) final SingleGradeClassRpcResponse gradeClass,
@RequestBody @Valid final DinerDTO.QueryUniqueDinerDTO queryUniqueDinerDTO) {
return dinerService.getClientClassDiner(client, gradeClass, queryUniqueDinerDTO.getStudentNo());
public List<DinerVO> getClientClassDiners(@RequestAttribute(INJECTED_CLIENT) final SingleClientRpcResponse client,
@RequestAttribute(INJECTED_GRADE_CLASS) final SingleGradeClassRpcResponse gradeClass,
@RequestBody @Valid final DinerDTO.QueryUniqueDinerDTO queryUniqueDinerDTO) {
return dinerService.getClientClassDiners(client, gradeClass, queryUniqueDinerDTO.getStudentNo());
}
@ApiOperation(value = "修改就餐人")
......
......@@ -137,11 +137,11 @@ public class AutoCreateMealOrderTask {
final var client = clientMap.get(diner.getClientId());
final var gradeClass = classMap.get(diner.getClassId());
final var mpAccountDinerRef = mpAccountDinerRefMap.get(diner.getId());
if (menu == null || client == null || gradeClass == null || mpAccountDinerRef == null) return null;
if (menu == null || client == null || gradeClass == null) return null;
return MealOrderCreation.newBuilder()
.setClientId(diner.getClientId())
.setMenuId(menu.getId())
.setAccountId(mpAccountDinerRef.getAccountId())
.setAccountId(mpAccountDinerRef == null ? 0 : mpAccountDinerRef.getAccountId())
.setOrderMethod(MealOrderOrderMethodEnum.MEAL_ORDER_METHOD_SYSTEM)
.setDinerId(diner.getId())
.setDinerName(diner.getName())
......@@ -161,10 +161,13 @@ public class AutoCreateMealOrderTask {
private List<MenuSchedule> buildNextWeekMeals(ZonedDateTime nextWeekStart) {
return IntStream.range(0, 5)
.mapToObj(i -> MenuSchedule.newBuilder()
.setDate(nextWeekStart.plusDays(i).format(DateUtil.YYYY_MM_DD_LEFT_SYMBOL))
.setMenu("A")
.build())
.mapToObj(i -> {
final var date = nextWeekStart.plusDays(i);
return MenuSchedule.newBuilder()
.setDate(date.format(DateUtil.YYYY_MM_DD_LEFT_SYMBOL))
.setMenu("A")
.build();
})
.toList();
}
}
......
......@@ -17,7 +17,6 @@ public class DinerDTO {
public static class QueryUniqueDinerDTO {
@ApiModelProperty(value = "学号")
@NotEmpty(message = "学号不能为空")
private String studentNo;
}
......
......@@ -22,5 +22,5 @@ public interface DinerService {
void deleteMpAccountDiner(SingleDinerRpcResponse diner);
DinerVO getClientClassDiner(SingleClientRpcResponse client, SingleGradeClassRpcResponse gradeClass, String studentNo);
List<DinerVO> getClientClassDiners(SingleClientRpcResponse client, SingleGradeClassRpcResponse gradeClass, String studentNo);
}
......
......@@ -4,7 +4,6 @@ import com.infoloop.tianting.clientinventoryservice.SingleClientRpcResponse;
import com.infoloop.tianting.context.LoginContextHolder;
import com.infoloop.tianting.exception.ClientEndExceptions;
import com.infoloop.tianting.exception.ErrorCodeEnum;
import com.infoloop.tianting.mealorderservice.DinerCreation;
import com.infoloop.tianting.mealorderservice.DinerModification;
import com.infoloop.tianting.mealorderservice.MpAccountDinerRefCreation;
import com.infoloop.tianting.mealorderservice.SingleDinerRpcResponse;
......@@ -75,45 +74,30 @@ public class DinerServiceImpl implements DinerService {
}
final var singleClientRpcResponse = clientsByCodes.get(0);
final var diners = mealOrderServiceRpcClient.queryDinersByCondition(loginInfo.getEnterpriseId(), List.of(singleClientRpcResponse.getId()), List.of(createDinerDTO.getClassId()), createDinerDTO.getStudentNo());
if (!diners.isEmpty()) {
if (diners.size() != 1) {
throw ClientEndExceptions.IncorrectRequestValue.build(ErrorCodeEnum.DINER_NOT_FOUND);
}
final var diner = diners.get(0);
if (!diner.getName().equals(createDinerDTO.getName())) {
log.info("createMpAccountDiner dinerId:{} name:{}, createName:{}", diner.getId(), diner.getName(), createDinerDTO.getName());
throw ClientEndExceptions.IncorrectRequestValue.build(ErrorCodeEnum.DINER_NAME_STUDENT_NO_NOT_MISMATCH);
}
final int dinerId = diner.getId();
final var mpAccountDinerRefs = mealOrderServiceRpcClient.queryMpAccountDinerRefsByCondition(loginInfo.getEnterpriseId(), List.of(loginInfo.getId()), List.of(dinerId));
if (!mpAccountDinerRefs.isEmpty()) {
throw ClientEndExceptions.IncorrectRequestValue.build(ErrorCodeEnum.DINER_ALREADY_EXISTS);
} else {
final var mpAccountDinerRefCreation = MpAccountDinerRefCreation.newBuilder()
.setDinerId(dinerId)
.setAccountId(loginInfo.getId())
.build();
final var mpAccountDinerRef = mealOrderServiceRpcClient.createMpAccountDinerRef(loginInfo, mpAccountDinerRefCreation);
log.info("createMpAccountDiner dinerId:{} mpAccountDinerRefId:{}", dinerId, mpAccountDinerRef.getId());
return CreatedResult.<DinerVO>builder().id(dinerId).isCreated(mpAccountDinerRef.getIsCreated()).build();
}
if (diners.isEmpty()) {
throw ClientEndExceptions.IncorrectRequestValue.build(ErrorCodeEnum.DINER_NOT_FOUND);
}
if (diners.size() != 1) {
throw ClientEndExceptions.IncorrectRequestValue.build(ErrorCodeEnum.DINER_NOT_FOUND);
}
final var diner = diners.get(0);
if (!diner.getName().equals(createDinerDTO.getName())) {
log.info("createMpAccountDiner dinerId:{} name:{}, createName:{}", diner.getId(), diner.getName(), createDinerDTO.getName());
throw ClientEndExceptions.IncorrectRequestValue.build(ErrorCodeEnum.DINER_NAME_STUDENT_NO_NOT_MISMATCH);
}
final var dinerCreation = DinerCreation.newBuilder()
.setClientId(singleClientRpcResponse.getId())
.setClassId(createDinerDTO.getClassId())
.setStudentNo(createDinerDTO.getStudentNo())
.setName(createDinerDTO.getName())
.build();
final var dinerResponse = mealOrderServiceRpcClient.createDiner(loginInfo, dinerCreation);
if (dinerResponse.getIsCreated()) {
final int dinerId = diner.getId();
final var mpAccountDinerRefs = mealOrderServiceRpcClient.queryMpAccountDinerRefsByCondition(loginInfo.getEnterpriseId(), List.of(loginInfo.getId()), List.of(dinerId));
if (!mpAccountDinerRefs.isEmpty()) {
throw ClientEndExceptions.IncorrectRequestValue.build(ErrorCodeEnum.DINER_ALREADY_EXISTS);
} else {
final var mpAccountDinerRefCreation = MpAccountDinerRefCreation.newBuilder()
.setDinerId(dinerResponse.getId())
.setDinerId(dinerId)
.setAccountId(loginInfo.getId())
.build();
final var mpAccountDinerRef = mealOrderServiceRpcClient.createMpAccountDinerRef(loginInfo, mpAccountDinerRefCreation);
log.info("createMpAccountDiner dinerId:{} mpAccountDinerRefId:{}", dinerResponse.getId(), mpAccountDinerRef.getId());
log.info("createMpAccountDiner dinerId:{} mpAccountDinerRefId:{}", dinerId, mpAccountDinerRef.getId());
return CreatedResult.<DinerVO>builder().id(dinerId).isCreated(mpAccountDinerRef.getIsCreated()).build();
}
return CreatedResult.<DinerVO>builder().id(dinerResponse.getId()).isCreated(dinerResponse.getIsCreated()).build();
}
@Override
......@@ -164,23 +148,20 @@ public class DinerServiceImpl implements DinerService {
}
@Override
public DinerVO getClientClassDiner(SingleClientRpcResponse client, SingleGradeClassRpcResponse gradeClass, String studentNo) {
public List<DinerVO> getClientClassDiners(SingleClientRpcResponse client, SingleGradeClassRpcResponse gradeClass, String studentNo) {
final var loginInfo = LoginContextHolder.getLoginInfo();
final var diner = mealOrderServiceRpcClient.queryDinersByCondition(loginInfo.getEnterpriseId(), List.of(client.getId()), List.of(gradeClass.getId()), studentNo);
if (diner.size() != 1) {
return null;
}
return DinerVO.builder()
.id(diner.get(0).getId())
.enterpriseId(diner.get(0).getEnterpriseId())
.clientId(diner.get(0).getClientId())
final var diners = mealOrderServiceRpcClient.queryDinersByCondition(loginInfo.getEnterpriseId(), List.of(client.getId()), List.of(gradeClass.getId()), studentNo);
return diners.stream().map(diner -> DinerVO.builder()
.id(diner.getId())
.enterpriseId(diner.getEnterpriseId())
.clientId(diner.getClientId())
.clientCode(client.getCode())
.clientName(client.getName())
.classId(diner.get(0).getClassId())
.classId(diner.getClassId())
.gradeName(gradeClass.getGradeName())
.className(gradeClass.getClassName())
.studentNo(diner.get(0).getStudentNo())
.name(diner.get(0).getName())
.build();
.studentNo(diner.getStudentNo())
.name(diner.getName())
.build()).toList();
}
}
......
......@@ -95,7 +95,7 @@ public class MealOrderServiceImpl implements MealOrderService {
}
final var latestMealMenuRecords = mealOrderServiceRpcClient.queryLatestMealMenuRecordsByClientIds(loginInfo.getEnterpriseId(), Collections.singletonList(dinerById.getClientId()));
if (latestMealMenuRecords.isEmpty()) {
throw ClientEndExceptions.IncorrectRequestValue.build(ErrorCodeEnum.MEAL_MENU_NOT_FOUND);
// throw ClientEndExceptions.IncorrectRequestValue.build(ErrorCodeEnum.MEAL_MENU_NOT_FOUND);
}
final var reserveDinerMealOrders = mealOrderServiceRpcClient.queryReserveMealOrdersByDinerIds(loginInfo.getEnterpriseId(), Collections.singletonList(createMealOrderDTO.getDinerId()));
if (!reserveDinerMealOrders.isEmpty()) {
......@@ -103,7 +103,7 @@ public class MealOrderServiceImpl implements MealOrderService {
}
final var mealOrder = mealOrderServiceRpcClient.createMealOrder(loginInfo, MealOrderCreation.newBuilder()
.setClientId(dinerById.getClientId())
.setMenuId(latestMealMenuRecords.get(0).getId())
.setMenuId(latestMealMenuRecords.isEmpty() ? 0 : latestMealMenuRecords.get(0).getId())
.setAccountId(loginInfo.getId())
.setOrderMethod(MealOrderOrderMethodEnum.MEAL_ORDER_METHOD_MICRO)
.setDinerId(createMealOrderDTO.getDinerId())
......