package com.boco.nbd.wios.flow.controller;

import com.boco.nbd.cams.core.util.LambdaUtils;
import com.boco.nbd.framework.common.PageData;
import com.boco.nbd.framework.common.ResponseMessage2;
import com.boco.nbd.framework.common.util.IdUtil;
import com.boco.nbd.framework.parent.microservice.exception.ErrorInfoException;
import com.boco.nbd.wios.flow.entity.po.PlanTaskPO;
import com.boco.nbd.wios.flow.service.IPlanTaskService;
import com.boco.nbd.wios.flow.util.ProcessUtil;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.ihidea.core.support.session.SessionInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import tk.mybatis.mapper.entity.Example;

import java.util.List;


/**
 * @Description: TODO
 * @Author: ZQY
 * @Date: 2022/8/11
 **/
@RestController
@Slf4j
@RequestMapping("planTask")
@Api(tags = "计划任务配置")
public class PlanTaskController {


    @Autowired
    private IPlanTaskService planTaskService;


    /**
     * 新增计划任务
     *
     * @param po
     * @return
     */
    @ApiOperation(value = "新增计划任务")
    @PostMapping(value = "/addPlanTask")
    public ResponseMessage2 savePlanTask(PlanTaskPO po) {
        try {
            Example example = new Example(PlanTaskPO.class);
            Example.Criteria criteria = example.createCriteria();
            criteria.andEqualTo(LambdaUtils.getFieldName(PlanTaskPO::getYear), po.getYear());
            criteria.andEqualTo(LambdaUtils.getFieldName(PlanTaskPO::getOemName), po.getOemName());
            List<PlanTaskPO> planTaskPOList = planTaskService.selectByExample(example);
            if (planTaskPOList.size() > 0) {
                throw new ErrorInfoException("存在(" + po.getYear() + "+" + po.getOemName() + ")重复数据!");
            }
            po.setId(IdUtil.getLongUUID() + "");
            SessionInfo user = ProcessUtil.getUserInfo();
            po.setCreateUser(user == null ? "" : user.getUserId());
            planTaskService.insertSelective(po);
            return ResponseMessage2.Success();
        } catch (Exception e) {
            e.printStackTrace();
            log.error("新增计划任务", e.getMessage());
            return ResponseMessage2.Failed(e.getMessage());


        }

    }


    /**
     * 修改计划任务
     *
     * @param po
     * @return
     */
    @ApiOperation(value = "修改计划任务")
    @PostMapping(value = "/updatePlanTask")
    public ResponseMessage2 updatePlanTask(PlanTaskPO po) {
        try {
            Example example = new Example(PlanTaskPO.class);
            Example.Criteria criteria = example.createCriteria();
            criteria.andEqualTo(LambdaUtils.getFieldName(PlanTaskPO::getYear), po.getYear());
            criteria.andEqualTo(LambdaUtils.getFieldName(PlanTaskPO::getOemName), po.getOemName());
            planTaskService.updateByPrimaryKeySelective(po);
            return ResponseMessage2.Success();
        } catch (Exception e) {
            e.printStackTrace();
            log.error("修改计划任务", e.getMessage());
            return ResponseMessage2.Failed(e.getMessage());


        }

    }


    /**
     * 删除计划任务
     *
     * @param id
     * @return
     */
    @ApiOperation(value = "删除计划任务")
    @PostMapping(value = "/deletePlanTask")
    public ResponseMessage2 deletePlanTask(@RequestParam("id") String id) {

        try {
            Example example = new Example(PlanTaskPO.class);
            Example.Criteria criteria = example.createCriteria();
            criteria.andEqualTo(LambdaUtils.getFieldName(PlanTaskPO::getId), id);
            planTaskService.deleteByExample(example);
            return ResponseMessage2.Success();
        } catch (Exception e) {
            e.printStackTrace();
            log.error("删除计划任务", e.getMessage());
            return ResponseMessage2.Failed(e.getMessage());


        }
    }


    /**
     * 获取计划任务列表
     *
     * @param
     * @return
     */
    @ApiOperation(value = "获取计划任务列表")
    @GetMapping(value = "/getList")
    public ResponseMessage2<PageData<PlanTaskPO>> getList(int pageIndex, int pageSize) {

        Page<PlanTaskPO> result = PageHelper.startPage(pageIndex, pageSize);
        planTaskService.selectAll();
        return ResponseMessage2.Success2(PageData.create2(result.getTotal(), result.getResult()));
    }


    /**
     * 导入计划任务列表
     *
     * @param excel
     * @return
     */
    @ApiOperation(value = "导入计划任务配置")
    @PostMapping("/importExcel")
    public ResponseMessage2 importExcel(@RequestParam("file") MultipartFile excel) {
        return planTaskService.importExcel(excel);
    }


    @ApiOperation(value = "根据年份和主机厂查询计划任务")
    @PostMapping("/getPlanTaskByYearAndOemId")
    @ApiImplicitParams({@ApiImplicitParam(name = "year", value = "年份", dataType = "String", paramType = "query", required = true),
            @ApiImplicitParam(name = "oemId", value = "主机厂ID", dataType = "String", paramType = "query", required = false)})
    public ResponseMessage2 getPlanTaskByYearAndOemId(String year, Integer oemId) {
        return ResponseMessage2.Success2(planTaskService.getPlanTaskByYearAndOemId(year, oemId));
    }


}