package com.nantian.cloud.dbcapp.controller;


import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nantian.cloud.dbcapp.entity.BelowGradeNotice;
import com.nantian.cloud.dbcapp.entity.ReportAbarbeitung;
import com.nantian.cloud.dbcapp.service.BelowGradeNoticeService;
import com.nantian.cloud.dbcapp.service.IReportAbarbeitungService;
import com.nantian.sc.cloud.common.core.util.R;
import com.nantian.sc.cloud.common.log.annotation.SysLog;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.Valid;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 不合格报告整改记录表 前端控制器
 * </p>
 *
 * @author qqm
 * @since 2024-03-08
 */
@RestController()
@RequestMapping("/reportAbarbeitung")
public class ReportAbarbeitungController {


    @Autowired
    private IReportAbarbeitungService reportAbarbeitungService;

    @Autowired
    private BelowGradeNoticeService belowGradeNoticeService;

    @ApiModelProperty("获取企业不合格报告信息列表")
    @SysLog("获取企业不合格报告信息列表")
    @GetMapping("/getReportAbarbeitungListByEnterpriseCode")
    public R getReportAbarbeitungListByEnterpriseCode(Page page, String enterpriseCode,String enterpriseName, String abarbeitungSchedule) {
        return R.ok(reportAbarbeitungService.getReportAbarbeitungInfo(page, enterpriseCode,enterpriseName, abarbeitungSchedule));
    }

    @ApiOperation("获取企业最新的不合格报告信息，用于更新企业的展示状态")
    @SysLog("获取企业最新的不合格报告信息，更新企业的展示状态")
    @GetMapping("/getReportAbarbeitungOneByEnterpriseCode")
    public R getReportAbarbeitungOneByEnterpriseCode(@RequestParam("enterpriseName") String enterpriseName,
                                                     @RequestParam("startTime") String startTime,
                                                     @RequestParam("endTime") String endTime) {
        return R.ok(reportAbarbeitungService.selectOneByEntName(enterpriseName,startTime,endTime));
    }

    @ApiOperation("修改不合格报告企业状态信息")
    @SysLog("修改不合格报告企业状态信息")
    @PostMapping("/updateReportAbarbeitungInfo")
    public R updateReportAbarbeitungInfo(@RequestBody @Valid ReportAbarbeitung reportAbarbeitung) {
        boolean flag = reportAbarbeitungService.updateById(reportAbarbeitung);
        if (flag){
            return R.ok("修改数据成功！");
        }else{
            return R.failed("修改数据失败！");
        }
    }

    @ApiOperation("上传不合格企业整改信息")
    @SysLog("上传不合格企业整改信息")
    @PostMapping("/uploadReportAbarbeitungInfo")
    public R uploadReportAbarbeitungInfo(@RequestParam("file") MultipartFile file) throws IOException {
        String message = "文件格式不正确";
        try {
            String type = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
            if ("xlsx".equals(type) || "xls".equals(type)) {
                List<ReportAbarbeitung> datas = EasyExcel.read(file.getInputStream()).head(ReportAbarbeitung.class).sheet().doReadSync();
                if (0 < datas.size()) {
                    boolean flag = reportAbarbeitungService.saveBatch(datas);
                    if (flag) {
                        message = "数据上传成功!";
                    } else {
                        message = "保存表格数据失败！";
                    }
                } else {
                    message = "上传文件数据为空!";
                }
            }
            return R.ok(message);
        }catch (Exception e){
            e.printStackTrace();
            return R.ok(message);
        }
    }


    @ApiOperation("同步不合格信息")
    @SysLog("同步不合格信息")
    @GetMapping("/syncBelowGradeNoticeInfo")
    public R syncBelowGradeNoticeInfo(@Param("topic") String topic,String abarbeitungTime){
        String result = "同步数据失败，请重试！";
        List<BelowGradeNotice> belowGradeNoticeList = belowGradeNoticeService.getBelowGradeNoticeList(topic);
        if (belowGradeNoticeList.size() > 0){
            List<ReportAbarbeitung> reportAbarbeitungsList = new ArrayList<>();
            for (BelowGradeNotice belowGradeNotice : belowGradeNoticeList) {
                ReportAbarbeitung Data = new ReportAbarbeitung();
                Data.setAbarbeitungSchedule("出具");
                Data.setAbarbeitungTime(abarbeitungTime);
                Data.setEnterpriseCode(belowGradeNotice.getEnterpriseCode());
                Data.setEnterpriseName(belowGradeNotice.getCmpName());
                Data.setReDocument(belowGradeNotice.getFile());
                reportAbarbeitungsList.add(Data);
            }
            try {
                boolean flag = reportAbarbeitungService.saveBatch(reportAbarbeitungsList);
                if (flag){
                    result = "同步数据成功！";
                }
            }catch (Exception e){
                e.printStackTrace();
            }

        }else{
            result = "数据为空，请确认不合格报告信息是否正确！";
        }
        return R.ok(result);
    }



}
