package com.bs.ct.controller;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.servlet.http.HttpServletResponse;

import com.bs.cm.domain.CmAttach;
import com.bs.cm.service.ICmAttachService;
import com.bs.common.core.domain.entity.SysUser;
import com.bs.ct.domain.CtTaskInfo;
import com.bs.ct.service.ICtTaskInfoService;
import com.bs.system.service.ISysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.bs.common.annotation.Log;
import com.bs.common.core.controller.BaseController;
import com.bs.common.core.domain.AjaxResult;
import com.bs.common.core.page.TableDataInfo;
import com.bs.common.enums.BusinessType;
import com.bs.common.utils.poi.ExcelUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import cn.hutool.core.lang.Validator;
import com.bs.ct.domain.CtTaskFeedback;
import com.bs.ct.service.ICtTaskFeedbackService;
import javax.annotation.Resource;

/**
 * 任务反馈Controller
 *
 * @author bs
 * @date 2025-02-22
 */
@Api(tags = "任务反馈")
@RestController
@RequestMapping("/task/feedback")
public class CtTaskFeedbackController extends BaseController {
    @Resource
    private ICtTaskFeedbackService ctTaskFeedbackService;
    @Resource
    private ICtTaskInfoService ctTaskInfoService;
    @Autowired
    private ISysUserService userService;
    @Resource
    private ICmAttachService cmAttachService;
    /**
     * 分页查询任务反馈列表
     */
    @ApiOperation("分页查询任务反馈列表")
    @GetMapping("/pageList")
    public TableDataInfo pageList(CtTaskFeedback ctTaskFeedback) {
        startPage();
        LambdaQueryWrapper<CtTaskFeedback> queryWrapper = new LambdaQueryWrapper();
        condition(queryWrapper,ctTaskFeedback);
        List<CtTaskFeedback> list = ctTaskFeedbackService.list(queryWrapper);
        return getDataTable(list);
    }

    private void setFile(List<CtTaskFeedback> list) {
        for (CtTaskFeedback ctFeedback : list) {
            List<CmAttach> cmAttachList = cmAttachService.list(new LambdaQueryWrapper<CmAttach>().eq(CmAttach::getFileId,ctFeedback.getFileId()));
            ctFeedback.setFile(cmAttachList);
        }
    }

    /**
     * 查询任务反馈列表
     */
    @ApiOperation("查询任务反馈列表")
    @GetMapping("/list")
    public AjaxResult list(CtTaskFeedback ctTaskFeedback) {
        LambdaQueryWrapper<CtTaskFeedback> queryWrapper = new LambdaQueryWrapper();
        condition(queryWrapper,ctTaskFeedback);
        List<CtTaskFeedback> list = ctTaskFeedbackService.list(queryWrapper);
        setFile(list);
        return success(list);
    }

    /**
     * 导出任务反馈列表
     */
    @ApiOperation("导出任务反馈列表")
    @Log(title = "任务反馈导出", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, CtTaskFeedback ctTaskFeedback) {
        LambdaQueryWrapper<CtTaskFeedback> queryWrapper = new LambdaQueryWrapper();
        condition(queryWrapper,ctTaskFeedback);
        List<CtTaskFeedback> list = ctTaskFeedbackService.list(queryWrapper);
        ExcelUtil<CtTaskFeedback> util = new ExcelUtil<CtTaskFeedback>(CtTaskFeedback. class);
        util.exportExcel(response, list, "任务反馈数据");
    }

    /**
     * 获取任务反馈详细信息
     */
    @ApiOperation("获取任务反馈详细信息")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id) {
        return success(ctTaskFeedbackService.getById(id));
    }

    /**
     * 新增任务反馈
     */
    @ApiOperation("新增任务反馈")
    @Log(title = "任务反馈新增", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody CtTaskFeedback ctTaskFeedback) {
        updateFile(ctTaskFeedback);
        return toAjax(ctTaskFeedbackService.save(ctTaskFeedback));
    }

    private void updateFile(CtTaskFeedback ctTaskFeedback) {
        Long newId = System.currentTimeMillis() + new Random().nextInt(1000);
        List<CmAttach> file = ctTaskFeedback.getFile();
        if (null != file) {
            for (CmAttach cmAttach : file) {
                cmAttach.setFileId(String.valueOf(newId));
            }
            cmAttachService.updateBatchById(file);
            ctTaskFeedback.setFileId(newId);
        }
    }

    /**
     * 修改任务反馈
     */
    @ApiOperation("修改任务反馈")
    @Log(title = "任务反馈修改", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody CtTaskFeedback ctTaskFeedback) {
        updateFile(ctTaskFeedback);
        return toAjax(ctTaskFeedbackService.updateById(ctTaskFeedback));
    }

    /**
     * 删除任务反馈
     */
    @ApiOperation("删除任务反馈")
    @Log(title = "任务反馈删除", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable List<Long> ids) {
        return toAjax(ctTaskFeedbackService.removeBatchByIds(ids));
    }

    /**
      * 条件设置
      */
    private void condition (LambdaQueryWrapper<CtTaskFeedback> queryWrapper,CtTaskFeedback ctTaskFeedback){


        //id
        if(Validator.isNotEmpty(ctTaskFeedback.getId())){
            queryWrapper.eq(CtTaskFeedback::getId,ctTaskFeedback.getId());
        }

        //任务id
        if(Validator.isNotEmpty(ctTaskFeedback.getTaskId())){
            queryWrapper.eq(CtTaskFeedback::getTaskId,ctTaskFeedback.getTaskId());
        }

        //机构任务id
        if(Validator.isNotEmpty(ctTaskFeedback.getTaskBranchId())){
            queryWrapper.eq(CtTaskFeedback::getTaskBranchId,ctTaskFeedback.getTaskBranchId());
        }

        //机构代码
        if(Validator.isNotEmpty(ctTaskFeedback.getBranchCode())){
            queryWrapper.eq(CtTaskFeedback::getBranchCode,ctTaskFeedback.getBranchCode());
        }

        //任务反馈时间
        if(Validator.isNotEmpty(ctTaskFeedback.getFeedbackTime())){
            queryWrapper.eq(CtTaskFeedback::getFeedbackTime,ctTaskFeedback.getFeedbackTime());
        }

        //任务完成情况
        if(Validator.isNotEmpty(ctTaskFeedback.getTaskDesc())){
            queryWrapper.eq(CtTaskFeedback::getTaskDesc,ctTaskFeedback.getTaskDesc());
        }

        //操作人员工号
        if(Validator.isNotEmpty(ctTaskFeedback.getUserId())){
            queryWrapper.eq(CtTaskFeedback::getUserId,ctTaskFeedback.getUserId());
        }

        //操作人员姓名
        if(Validator.isNotEmpty(ctTaskFeedback.getUserName())){
            queryWrapper.eq(CtTaskFeedback::getUserName,ctTaskFeedback.getUserName());
        }

        //操作人员部门
        if(Validator.isNotEmpty(ctTaskFeedback.getUserDept())){
            queryWrapper.eq(CtTaskFeedback::getUserDept,ctTaskFeedback.getUserDept());
        }

        //是否已拍照留存
        if(Validator.isNotEmpty(ctTaskFeedback.getIsPhoto())){
            queryWrapper.eq(CtTaskFeedback::getIsPhoto,ctTaskFeedback.getIsPhoto());
        }

        //附件id
        if(Validator.isNotEmpty(ctTaskFeedback.getFileId())){
            queryWrapper.eq(CtTaskFeedback::getFileId,ctTaskFeedback.getFileId());
        }

        //审核人员id
        if(Validator.isNotEmpty(ctTaskFeedback.getCheckUserId())){
            queryWrapper.eq(CtTaskFeedback::getCheckUserId,ctTaskFeedback.getCheckUserId());
        }

        //审核人员姓名
        if(Validator.isNotEmpty(ctTaskFeedback.getCheckUserName())){
            queryWrapper.eq(CtTaskFeedback::getCheckUserName,ctTaskFeedback.getCheckUserName());
        }

        //审核人员部门
        if(Validator.isNotEmpty(ctTaskFeedback.getCheckUserDept())){
            queryWrapper.eq(CtTaskFeedback::getCheckUserDept,ctTaskFeedback.getCheckUserDept());
        }

        //审核时间
        if(Validator.isNotEmpty(ctTaskFeedback.getCheckDate())){
            queryWrapper.eq(CtTaskFeedback::getCheckDate,ctTaskFeedback.getCheckDate());
        }

        //审核状态
        if(Validator.isNotEmpty(ctTaskFeedback.getStatus())){
            queryWrapper.eq(CtTaskFeedback::getStatus,ctTaskFeedback.getStatus());
        }

        //审核信息
        if(Validator.isNotEmpty(ctTaskFeedback.getCheckInfo())){
            queryWrapper.eq(CtTaskFeedback::getCheckInfo,ctTaskFeedback.getCheckInfo());
        }

        //备注
        if(Validator.isNotEmpty(ctTaskFeedback.getRemarks())){
            queryWrapper.eq(CtTaskFeedback::getRemarks,ctTaskFeedback.getRemarks());
        }

        //删除标志(0代表存在 2代表删除)
        if(Validator.isNotEmpty(ctTaskFeedback.getDelFlag())){
            queryWrapper.eq(CtTaskFeedback::getDelFlag,ctTaskFeedback.getDelFlag());
        }

        //创建部门
        if(Validator.isNotEmpty(ctTaskFeedback.getCreateDept())){
            queryWrapper.eq(CtTaskFeedback::getCreateDept,ctTaskFeedback.getCreateDept());
        }

        //创建人
        if(Validator.isNotEmpty(ctTaskFeedback.getCreateBy())){
            queryWrapper.eq(CtTaskFeedback::getCreateBy,ctTaskFeedback.getCreateBy());
        }

        //创建时间
        if(Validator.isNotEmpty(ctTaskFeedback.getCreateTime())){
            queryWrapper.eq(CtTaskFeedback::getCreateTime,ctTaskFeedback.getCreateTime());
        }

        //修改人
        if(Validator.isNotEmpty(ctTaskFeedback.getUpdateBy())){
            queryWrapper.eq(CtTaskFeedback::getUpdateBy,ctTaskFeedback.getUpdateBy());
        }

        //修改时间
        if(Validator.isNotEmpty(ctTaskFeedback.getUpdateTime())){
            queryWrapper.eq(CtTaskFeedback::getUpdateTime,ctTaskFeedback.getUpdateTime());
        }

        //租户ID
        if(Validator.isNotEmpty(ctTaskFeedback.getTenantId())){
            queryWrapper.eq(CtTaskFeedback::getTenantId,ctTaskFeedback.getTenantId());
        }

        }

}