package com.artfess.rescue.event.controller;


import com.alibaba.fastjson.JSONObject;
import com.artfess.base.annotation.ApiGroup;
import com.artfess.base.constants.ApiGroupConsts;
import com.artfess.base.controller.BaseController;
import com.artfess.base.enums.ResponseErrorEnums;
import com.artfess.base.model.CommonResult;
import com.artfess.base.query.PageList;
import com.artfess.base.query.QueryFilter;
import com.artfess.base.util.JsonUtil;
import com.artfess.base.valid.AddGroup;
import com.artfess.base.valid.UpdateGroup;
import com.artfess.poi.util.ExcelUtil;
import com.artfess.poi.util.ExcelUtils;
import com.artfess.rescue.event.manager.BizCompensationInfoManager;
import com.artfess.rescue.event.model.BizCompensationInfo;
import com.artfess.rescue.event.model.BizEventHandle;
import com.artfess.rescue.event.model.BizEventInfo;
import com.artfess.rescue.event.vo.CountCompensationNumVO;
import com.artfess.rescue.event.vo.CountCompensationTypeVO;
import com.artfess.rescue.event.vo.CountEventNumVO;
import com.artfess.rescue.monitor.aop.WebSocketNotify;
import com.artfess.rescue.monitor.eunms.RefreshType;
import com.artfess.rescue.report.dto.FilterDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;

/**
 * 路损赔偿信息 前端控制器
 *
 * @company 阿特菲斯信息技术有限公司
 * @author 系统管理员
 * @since 2024-08-05
 */
@RestController
@RequestMapping("/event/bizCompensationInfo/v1/")
@Api(tags = "路损赔偿信息")
@ApiGroup(group = {ApiGroupConsts.GROUP_BIZ_RESCUE})
public class BizCompensationInfoController extends BaseController<BizCompensationInfoManager, BizCompensationInfo> {


    @ApiOperation(value = "导出")
    @PostMapping("/export")
    public void export(HttpServletResponse response, HttpServletRequest request,
                       @ApiParam(name="queryFilter", value="分页查询信息") @RequestBody QueryFilter<BizCompensationInfo> queryFilter){
        baseService.export(response, request, queryFilter);
    }

    @Override
    @PostMapping(value = "/query", produces = {"application/json; charset=utf-8"})
    @ApiOperation("分页查询结果")
    public PageList<BizCompensationInfo> query(@ApiParam(name = "queryFilter", value = "分页查询信息") @RequestBody QueryFilter<BizCompensationInfo> queryFilter) {
        return baseService.queryByPage(queryFilter);
    }

    @PostMapping("/delete")
    @ApiOperation("根据id集合批量删除")
    public CommonResult<String> deleteByIds(@ApiParam(name = "ids", value = "实体集合") @RequestParam String ids) {
        boolean result = baseService.deleteBath(Arrays.asList(ids.split(",")));
        if (!result) {
            return new CommonResult<>(ResponseErrorEnums.FAIL_OPTION, "删除实体失败");
        }
        return new CommonResult<>();
    }

    @Override
    @PostMapping("/")
    @ApiOperation("添加实体的接口")
    public CommonResult<String> create(@ApiParam(name = "model", value = "实体信息") @Validated({AddGroup.class}) @RequestBody BizCompensationInfo t) {
        boolean res = baseService.saveInfo(t);
        return new CommonResult<>(res?"添加成功":"添加失败");
    }

    @Override
    @PutMapping("/")
    @ApiOperation("更新实体")
    public CommonResult<String> updateById(@ApiParam(name = "model", value = "实体信息") @Validated({UpdateGroup.class}) @RequestBody BizCompensationInfo t) {
        boolean res = baseService.updateInfo(t);
        if (!res) {
            return new CommonResult<>(ResponseErrorEnums.FAIL_OPTION, "更新实体失败");
        }
        return new CommonResult<>("更新实体成功");
    }

    @Override
    @GetMapping("/{id}")
    @ApiOperation("根据id查询实体")
    public BizCompensationInfo getById(@ApiParam(name = "id", value = "实体id") @PathVariable String id) {
        return baseService.getById(id);
    }

    @DeleteMapping("/{id}")
    @ApiOperation("根据id删除")
    public CommonResult<String> deleteById(@ApiParam(name = "id", value = "实体id") @PathVariable String id) {
        boolean result = baseService.deleteById(id);
        if (!result) {
            return new CommonResult<>(ResponseErrorEnums.FAIL_OPTION, "删除实体失败");
        }
        return new CommonResult<>();
    }

    @RequestMapping(value = "/count/frequency", method = RequestMethod.POST, produces = {"application/json; charset=utf-8"})
    @ApiOperation(value = "路损统计-路产单数量统计", httpMethod = "POST", notes = "路产单数量统计")
    public CommonResult<JSONObject>countFrequency(@RequestBody FilterDto dto) {
        return baseService.countFrequency(dto);
    }

    @PostMapping("/count/frequency/export")
    @ApiOperation("路损统计-路产单数量统计excel导出")
    public void taskLedgerNumExport(HttpServletResponse response,@RequestBody FilterDto dto) throws Exception {
        CommonResult<JSONObject> result = baseService.countFrequency(dto);
        JSONObject value = result.getValue();
        List<CountCompensationNumVO> voList = (List<CountCompensationNumVO>)value.get("data");
        List<Map<String, Object>> list = new ArrayList<>();
        if (voList != null && voList.size() > 0) {
            for (CountCompensationNumVO vo : voList) {
                String jsonStr = JsonUtil.toJson(vo);
                Map<String, Object> map = JsonUtil.toMap(jsonStr);
                list.add(map);
            }
        }
        String tempName = "路产单统计";
        Map<String, String> exportMaps = new LinkedHashMap<>();
        exportMaps.put("roadName", "所属路段");
        exportMaps.put("total", "路损赔偿清单条数（条）");
        exportMaps.put("compensationMoney", "路产损失（元）");
        HSSFWorkbook book = ExcelUtil.exportExcel(tempName, 24, exportMaps, list);
        ExcelUtil.downloadExcel(book, tempName, response);
    }

//    @RequestMapping(value = "/count/type", method = RequestMethod.POST, produces = {"application/json; charset=utf-8"})
//    @ApiOperation(value = "路损统计-路产损失项目统计", httpMethod = "POST", notes = "路产损失项目统计")
//    public CommonResult<List<CountCompensationTypeVO>> countType(@ApiParam(name = "queryFilter", value = "分页查询信息") @RequestBody QueryFilter<BizCompensationInfo> queryFilter) {
//        return baseService.countType(queryFilter);
//    }
}
