package org.jeecg.modules.itdmGongDan.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.itdmGongDan.convert.ItdmJHYQueryConvert;
import org.jeecg.modules.itdmGongDan.dto.ItdmJHYAddOrUpdateDTO;
import org.jeecg.modules.itdmGongDan.dto.ItdmXMJLAddOrUpdateDTO;
import org.jeecg.modules.itdmGongDan.service.IItdmGongdanDetailService;
import org.jeecg.modules.itdmGongDan.service.IItdmGongdanMasterService;
import org.jeecg.modules.itdmGongDan.service.IItdmJCXMSHJHService;
import org.jeecg.modules.itdmGongDan.service.IItdmTestPlanService;
import org.jeecg.modules.itdmGongDan.vo.ItdmJHYQueryListVO;
import org.jeecg.modules.itdmGongDan.vo.ItdmXMJLQueryListVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 计划排期——试验计划（计划员）；工单制定（项目经理）
 */
@Api(tags=".计划排期")
@RestController
@RequestMapping("/sych")
@Slf4j
public class ItdmJCXMSHJHController {

    @Autowired
    @SuppressWarnings("all")
    private IItdmTestPlanService itdmTestPlanService;
    @Autowired
    @SuppressWarnings("all")
    private IItdmJCXMSHJHService iItdmJCXMSHJHService;
    @Autowired
    @SuppressWarnings("all")
    private IItdmGongdanMasterService iItdmGongdanMasterService;
    @Autowired
    @SuppressWarnings("all")
    private IItdmGongdanDetailService iItdmGongdanDetailService;


    /**
     *   删除2级工单master+对应的工单detail
     */
    @AutoLog(value = "删除")
    @ApiOperation(value="删除", notes="删除工单master")
    @DeleteMapping(value = "/delete")
    public Result<String> delete(@RequestParam(name="id",required=true) String id) {
        System.out.println(id);
        return Result.OK(iItdmJCXMSHJHService.deleteByGongdanMasterId(id));
    }


    /**
     * 项目经理新增或修改工单master
     */
    @AutoLog(value = "项目经理新增或修改工单master")
    @ApiOperation(value="项目经理新增或修改工单master", notes="项目经理新增或修改工单master")
    @PostMapping(value = "/XMJLAddOrUpdate")
    public Result<String> XMJLAddOrUpdate(@RequestBody ItdmXMJLAddOrUpdateDTO dto) {
        System.out.println("项目经理新增或修改工单master");
//        System.out.println(JSON.toJSON(vo));
        return Result.OK(iItdmJCXMSHJHService.XMJLAddOrUpdate(dto));
    }

    /**
     * 项目经理查询列表——有两级（能看到所有人的）
     */
//    @ApiOperation(value="项目经理查询列表", notes="通过委托id查询，得到委托单的检测项目、试验计划部分信息")
//    @GetMapping(value = "/XMJLList")
//    public Result<List<ItdmXMJLQueryListVO>> XMJLList(@RequestParam("weituoNo") String weituoNo) {
//        List<ItdmXMJLQueryListVO> list = new ArrayList<>();
//        list.addAll(iItdmJCXMSHJHService.getXMJLFirstList(weituoNo));
//        list.addAll(iItdmJCXMSHJHService.getXMJLSecondList(weituoNo));
//        return Result.OK(list);
//    }

    /**
     * 项目经理查询列表——有两级——项目经理只能查询到该委托单编号对应的分配给自己的试验计划——看实际情况决定是否要修改
     */
    @ApiOperation(value="项目经理查询列表", notes="通过委托id查询，得到委托单的检测项目、试验计划部分信息")
    @GetMapping(value = "/XMJLList")
    public Result<List<ItdmXMJLQueryListVO>> XMJLList(@RequestParam("weituoNo") String weituoNo) {
        List<ItdmXMJLQueryListVO> list = new ArrayList<>();

        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String username = loginUser.getUsername();
        String realName = loginUser.getRealname();

        if(username.equals("admin")){
            list.addAll(iItdmJCXMSHJHService.getXMJLFirstList(weituoNo));
            list.addAll(iItdmJCXMSHJHService.getXMJLSecondList(weituoNo));
        }else { //用户管理的真实姓名必须与人员管理的人员姓名一样，比如用户表的username：admin，realname：管理员，对应人员管理表的name：管理员
            list.addAll(iItdmJCXMSHJHService.getXMJLFirstListByUserName(weituoNo,realName));
            list.addAll(iItdmJCXMSHJHService.getXMJLSecondListByUserName(weituoNo,realName));
        }
        return Result.OK(list);
    }

    /**
     * 计划员查询列表
     */
    @ApiOperation(value="计划员查询列表", notes="通过委托id查询，得到委托单的检测项目、试验计划部分信息")
    @GetMapping(value = "/JHYList")
    public Result<List<ItdmJHYQueryListVO>> JHYList3(@RequestParam(required = false,name = "weituoNo") String weituoNo) {
        List<ItdmJHYQueryListVO> list = iItdmJCXMSHJHService.getAll3(weituoNo);
//        List<ItdmJHYQueryListVO> totalList = new ArrayList<>();
//        int i =1;
//        for (ItdmJHYQueryListVO vo: list){
//            vo.setIzShiji("计划"); //非实绩
//            totalList.add(vo);
//
//            Date shijiStartDate = vo.getShijiStartDate();
//            Date shijiEndDate = vo.getShijiEndDate();
//
//            int lasTime = -1;
//            if(shijiStartDate!=null && shijiEndDate!=null){
//                int days = (int) ((shijiEndDate.getTime() - shijiStartDate.getTime()) / (1000*3600*24));
//                lasTime = days+1;
//            }else if(shijiStartDate!=null && shijiEndDate==null) {
//                //如果有开始时间,没有结束时间，不必修改持续时间（为-1即可）
//            }else if(shijiStartDate==null){
//                //如果没有开始时间和结束时间，初始化开始时间为今天，不必修改持续时间（为-1即可）
//                shijiStartDate = new Date();
//            }
//
//            String izShiji ="实绩";  //实绩
//            ItdmJHYQueryListVO shijiVO = ItdmJHYQueryConvert.INSTANCE.convert(vo,shijiStartDate,shijiEndDate,i++,izShiji);
//            shijiVO.setLastTime(lasTime);
//            totalList.add(shijiVO);
//        }
        return Result.OK(list);
    }

    /**
     * 计划员新增或修改试验计划
     */
    @AutoLog(value = "计划员新增或修改试验计划")
    @ApiOperation(value="计划员新增或修改试验计划", notes="计划员新增或修改试验计划——直接left join")
    @PostMapping(value = "/JHYAddOrUpdate")
    public Result<String> JHYaddAndUpdate(@RequestBody ItdmJHYAddOrUpdateDTO dto) {
        return Result.OK(iItdmJCXMSHJHService.JHYAddAndUpdate(dto));
    }

//    public Result<String> JHYaddAndUpdate(@RequestBody List<ItdmJHYAddOrUpdateDTO> list) {
//        List<ItdmJHYAddOrUpdateDTO> list1 = new ArrayList<>();
//        for(ItdmJHYAddOrUpdateDTO dto: list){
//            if(dto.getIzShiji().equals("计划")) list1.add(dto);
//        }
//        return Result.OK(iItdmJCXMSHJHService.JHYAddAndUpdate(list1));
//    }

    /**
     * 测试
     * */
    @ApiOperation(value="测试查出后再往vo里组", notes="测试")
    @GetMapping(value = "/cs")
    public Result<List<ItdmJHYQueryListVO>> JHYList2(@RequestParam("weituoNo") String weituoNo) {
        List<ItdmJHYQueryListVO> list = iItdmJCXMSHJHService.getAll(weituoNo);
        return Result.OK(list);
    }


}
