package com.fjhx.mes.controller.production;

import com.fjhx.mes.entity.production.po.ProductionTaskDetail;
import com.ruoyi.common.core.domain.BaseSelectDto;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fjhx.mes.entity.production.vo.ProductionTaskDetailVo;
import com.fjhx.mes.entity.production.dto.ProductionTaskDetailSelectDto;
import com.fjhx.mes.entity.production.dto.ProductionTaskDetailDto;
import com.fjhx.mes.service.production.ProductionTaskDetailService;
import org.springframework.beans.factory.annotation.Autowired;


/**
 * <p>
 * 生产任务明细 前端控制器
 * </p>
 *
 * @author 
 * @since 2023-05-18
 */
@RestController
@RequestMapping("/productionTaskDetail")
public class ProductionTaskDetailController {

    @Autowired
    private ProductionTaskDetailService productionTaskDetailService;

    /**
     * 生产任务明细分页
     */
    @PostMapping("/page")
    public Page<ProductionTaskDetailVo> page(@RequestBody ProductionTaskDetailSelectDto dto) {
        return productionTaskDetailService.getPage(dto);
    }

    /**
     * 生产任务明细分页
     */
    @PostMapping("/circulationPage")
    public Page<ProductionTaskDetailVo> circulationPage(@RequestBody ProductionTaskDetailSelectDto dto) {
        return productionTaskDetailService.circulationPage(dto);
    }

    /**
     * 生产任务流转
     */
    @PostMapping("/circulation")
    public void circulation(@RequestBody ProductionTaskDetailDto productionTaskDetailDto) {
        productionTaskDetailService.circulation(productionTaskDetailDto);
    }

    /**
     * 生产任务流转完工入库
     */
    @PostMapping("/productStorage")
    public void productStorage(@RequestBody ProductionTaskDetailDto productionTaskDetailDto) {
        productionTaskDetailService.productStorage(productionTaskDetailDto);
    }



    /**
     * 生产任务接收分页
     */
    @PostMapping("/receivePage")
    public Page<ProductionTaskDetailVo> receivePage(@RequestBody ProductionTaskDetailSelectDto dto) {
        return productionTaskDetailService.receivePage(dto);
    }

    /**
     * 生产任务接收
     */
    @PostMapping("/receive")
    public synchronized void receive(@RequestBody ProductionTaskDetailDto productionTaskDetailDto) {
        productionTaskDetailService.receive(productionTaskDetailDto);
    }

    /**
     * 生产任务拒绝接收
     */
    @PostMapping("/rejection")
    public void rejection(@RequestBody ProductionTaskDetailDto productionTaskDetailDto) {
        productionTaskDetailService.rejection(productionTaskDetailDto);
    }

    /**
     * 获取sn信息
     */
    @PostMapping("/snInfo")
    public ProductionTaskDetailVo snInfo(@RequestBody ProductionTaskDetailDto productionTaskDetailDto) {
        return productionTaskDetailService.snInfo(productionTaskDetailDto.getProductSn());
    }

    /**
     * 获取当前用户某一工序还在进行中的任务数
     */
    ;
    @PostMapping("/haveTaskCount")
    Long haveTaskCount(@RequestBody ProductionTaskDetailDto dto) {
        return productionTaskDetailService.haveTaskCount(dto);
    }

    /**
     * 退回任务（任务回到任务列表可供别人接取）
     */
    @PostMapping("/revokeTask")
    void revokeTask(@RequestBody ProductionTaskDetailDto dto){
        productionTaskDetailService.revokeTask(dto);
    }

    /**
     * 生产进度
     *
     * @return
     */
    @PostMapping("/taskProgressPage")
    Page<ProductionTaskDetailVo> taskProgress(@RequestBody ProductionTaskDetailSelectDto dto){
        return productionTaskDetailService.taskProgressPage(dto);
    }

    /**
     * 生产任务明细
     */
    @PostMapping("/detail")
    public ProductionTaskDetailVo detail(@RequestBody BaseSelectDto dto) {
        return productionTaskDetailService.detail(dto.getId());
    }
}
