package com.ruoyi.tc.controller;


import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.tc.entity.*;
import com.ruoyi.tc.entity.request.AssetCurrentPageRequest;
import com.ruoyi.tc.service.AssetBasicNetworkService;
import com.ruoyi.tc.service.AssetCurrentService;
import com.ruoyi.tc.service.AssetSupplyChainService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * 现有资产表(AssetCurrent)表控制层
 *
 * @author makejava
 * @since 2024-11-15 10:03:56
 */
@Api(tags = "现有资产表")
@RestController
@RequestMapping("/tc/assetCurrent")
public class AssetCurrentController extends BaseController {
    /**
     * 服务对象
     */
    @Resource
    private AssetCurrentService assetCurrentService;
    @Resource
    private AssetSupplyChainService assetSupplyChainService;

    @Resource
    private AssetBasicNetworkService assetBasicNetworkService;


    /**
     * 分页查询所有数据
     *
     * @param page 分页对象
     * @param as 查询实体
     * @return 所有数据
     */
    @ApiOperation(value = "分页查询所有数据", response = AssetCurrent.class)
    @GetMapping
    public AjaxResult selectAll(Page<AssetCurrent> page, AssetCurrentPageRequest as) {
        return success(assetCurrentService.page(page, as));
    }

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @ApiOperation(value = "通过主键查询单条数据", response = AssetCurrent.class)
    @GetMapping("{id}")
    public AjaxResult selectOne(@PathVariable Serializable id) {
        return success(assetCurrentService.getById(id));
    }

    /**
     * 新增数据
     *
     * @param assetCurrent 实体对象
     * @return 新增结果
     */
    @ApiOperation(value = "新增数据")
    @PostMapping
    public AjaxResult insert(@RequestBody @Valid AssetCurrent assetCurrent) {
        return success(assetCurrentService.save(assetCurrent));
    }

    /**
     * 修改数据
     *
     * @param assetCurrent 实体对象
     * @return 修改结果
     */
    @ApiOperation(value = "修改数据")
    @PutMapping
    public AjaxResult update(@RequestBody @Valid AssetCurrent assetCurrent) {
        return success(assetCurrentService.updateById(assetCurrent));
    }

    /**
     * 删除数据
     *
     * @param idList 主键结合
     * @return 删除结果
     */
    @ApiOperation(value = "删除数据")
    @DeleteMapping
    public AjaxResult delete(@RequestParam("idList") List<Long> idList) {
        return success(assetCurrentService.removeByIds(idList));
    }

    /**
     * 下载资产导入模板
     */
    @ApiOperation(value = "下载资产导入模板")
    @PostMapping("/importTemplate")
    public void importTemplate(HttpServletResponse response) {
        ExcelUtil<AssetExport> util = new ExcelUtil<>(AssetExport.class);
        util.importTemplateExcel(response, "资产导入模板");
    }


    /**
     * 导出现有资产
     */
    @ApiOperation(value = "导出现有资产")
    @PostMapping("/export")
    public void exportProject(HttpServletResponse response, AssetCurrentPageRequest as) {
        List<AssetCurrent> list = assetCurrentService.page(as);
        List<AssetExport> proList = new ArrayList<>();
        for (AssetCurrent x : list) {
            //对应的资产
            AssetExport assetExport = new AssetExport();
            BeanUtil.copyProperties(x,assetExport);
            //查找对应的系统建设单位
            AssetSupplyChain jsdw = assetSupplyChainService.getJsdw(x.getId());
            BeanUtil.copyProperties(jsdw,assetExport);

            List<AssetBasicNetwork> byList = assetBasicNetworkService.getByAssetId(x.getId());
            for (AssetBasicNetwork items : byList) {
                if(items.getType() == 1){
                    //查找对应的服务器信息
                    BeanUtil.copyProperties(items,assetExport);
                }
                if(items.getType() == 2){
                    //查找对应网络设备
                    assetExport.setWlpp(items.getPp());
                    assetExport.setWlyjxh(items.getYjxh());
                    assetExport.setWlyjbsxx(items.getYjbsxx());
                    assetExport.setWlsblx(items.getSblx());
                    assetExport.setWlyjbbxx(items.getYjbbxx());
                    assetExport.setWlyjxlh(items.getYjxlh());
                    assetExport.setWlsbIp(items.getSbIp());
                    assetExport.setWlyjyt(items.getYjyt());
                }
                if(items.getType() == 3){
                    //查找对应安全设备
                    assetExport.setAqwlpp(items.getPp());
                    assetExport.setAqwlsblx(items.getSblx());
                    assetExport.setAqwlsbIp(items.getSbIp());
                }
            }
            proList.add(assetExport);
        }
        ExcelUtil<AssetExport> util = new ExcelUtil<>(AssetExport.class);
        util.exportExcel(response, proList, "现有资产记录");
    }

    /**
     * 导入现有资产
     */
    @ApiOperation(value = "导入现有资产")
    @PostMapping(value = "/import", consumes = "multipart/form-data")
    public AjaxResult export(@RequestPart("file") MultipartFile file) throws Exception {
        //读取所有的字段
        ExcelUtil<AssetExport> util = new ExcelUtil<>(AssetExport.class);
        List<AssetExport> proList = util.importExcel(file.getInputStream());
        for (AssetExport items : proList) {
            AssetCurrent as = new AssetCurrent();
            //copy新增到新的现有资产表里面
            BeanUtil.copyProperties(items,as);
            assetCurrentService.save(as);
            //新增系统建设单位
            AssetSupplyChain s1 = new AssetSupplyChain();
            BeanUtil.copyProperties(items,s1);
            s1.setType(5);
            s1.setAssetId(as.getId());
            assetSupplyChainService.save(s1);
            //新增服务器信息
            AssetBasicNetwork a1 = new AssetBasicNetwork();
            BeanUtil.copyProperties(items,a1);
            a1.setType(1);
            a1.setAssetId(as.getId());
            assetBasicNetworkService.save(a1);
            //新增网络设备
            AssetBasicNetwork a2 = new AssetBasicNetwork();
            a2.setSblx(items.getWlsblx());
            a2.setPp(items.getWlpp());
            a2.setSbIp(items.getWlsbIp());
            a2.setYjxh(items.getWlyjxh());
            a2.setYjxlh(items.getWlyjxlh());
            a2.setYjbbxx(items.getWlyjbbxx());
            a2.setYjyt(items.getWlyjyt());
            a2.setYjbsxx(items.getWlyjbsxx());
            a2.setType(2);
            a2.setAssetId(as.getId());
            assetBasicNetworkService.save(a2);
            //新增安全设备
            AssetBasicNetwork a3 = new AssetBasicNetwork();
            a3.setSblx(items.getAqwlsblx());
            a3.setPp(items.getAqwlpp());
            a3.setSbIp(items.getAqwlsbIp());
            a3.setType(3);
            a3.setAssetId(as.getId());
            assetBasicNetworkService.save(a3);
        }
        return AjaxResult.success();
    }

}