DinerController.java 4.28 KB
package com.infoloop.tianting.controller;

import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.infoloop.tianting.annotation.RepeatSubmit;
import com.infoloop.tianting.clientinventoryservice.SingleClientRpcResponse;
import com.infoloop.tianting.mealorderservice.SingleDinerRpcResponse;
import com.infoloop.tianting.mealorderservice.SingleGradeClassRpcResponse;
import com.infoloop.tianting.model.common.CreatedResult;
import com.infoloop.tianting.model.dto.DinerDTO;
import com.infoloop.tianting.model.vo.DinerVO;
import com.infoloop.tianting.model.vo.GradeClassVO;
import com.infoloop.tianting.service.DinerService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.List;

import static com.infoloop.tianting.constant.PathVariableResourceConstants.INJECTED_CLIENT;
import static com.infoloop.tianting.constant.PathVariableResourceConstants.INJECTED_DINER;
import static com.infoloop.tianting.constant.PathVariableResourceConstants.INJECTED_GRADE_CLASS;

@Api(tags = "就餐人")
@ApiSupport(order = -1)
@Slf4j
@Validated
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class DinerController {

    private final DinerService dinerService;

    @ApiOperation(value = "用户就餐人列表")
    @GetMapping("/mpaccount/diners")
    @ResponseStatus(HttpStatus.OK)
    public List<DinerVO> getMpAccountDiners() {
        return dinerService.getMpAccountDiners();
    }

    @ApiOperation(value = "添加就餐人")
    @PutMapping("/mpaccount/diner")
    @RepeatSubmit(prefix = "create.diner", isLockByLoginUser = false)
    @ResponseStatus(HttpStatus.CREATED)
    public CreatedResult<DinerVO> createMpAccountDiner(@RequestBody @Valid final DinerDTO.CreateDinerDTO createDinerDTO) {
        return dinerService.createMpAccountDiner(createDinerDTO);
    }

    @ApiOperation(value = "学校年级班级列表")
    @GetMapping("/client/{clientId}/gradeclasses")
    @ResponseStatus(HttpStatus.OK)
    public List<GradeClassVO> getClientGradeClasses(@RequestAttribute(INJECTED_CLIENT) final SingleClientRpcResponse client) {
        return dinerService.getClientGradeClasses(client);
    }

    @ApiOperation(value = "根据学校,班级和学号查询就餐人")
    @PostMapping("/client/{clientId}/gradeclass/{gradeClassId}/diner")
    @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());
    }

    @ApiOperation(value = "修改就餐人")
    @PatchMapping("/mpaccount/diner/{dinerId}")
    @ResponseStatus(HttpStatus.NO_CONTENT)
    public void updateMpAccountDiner(@RequestAttribute(INJECTED_DINER) final SingleDinerRpcResponse diner,
                                     @RequestBody @Valid final DinerDTO.UpdateDinerDTO updateDinerDTO) {
        dinerService.updateMpAccountDiner(diner, updateDinerDTO);
    }

    @ApiOperation(value = "删除就餐人")
    @DeleteMapping("/mpaccount/diner/{dinerId}")
    @ResponseStatus(HttpStatus.NO_CONTENT)
    public void deleteMpAccountDiner(@RequestAttribute(INJECTED_DINER) final SingleDinerRpcResponse diner) {
        dinerService.deleteMpAccountDiner(diner);
    }
}