package com.zcloud.controller.keyProjects.app;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zcloud.controller.base.BaseController;
import com.zcloud.entity.Page;
import com.zcloud.entity.PageData;
import com.zcloud.service.bus.ImgFilesService;
import com.zcloud.service.keyProjects.AIWarningService;
import com.zcloud.service.keyProjects.KeyprojectHiddenService;
import com.zcloud.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;

/**
 * 说明:AI报警
 * 作者:luoxiaobao
 * 时间:2022-09-21
 * 官网:www.zcloudchina.com
 */
@Controller
@RequestMapping("/app/aiwarning")
public class AppAIWarningController extends BaseController {

	@Autowired
	private AIWarningService aiwarningService;
	@Autowired
	private KeyprojectHiddenService keyprojectHiddenService;
	@Autowired
	private ImgFilesService imgFilesService;
	/**新增
	 * @param
	 * @throws Exception
	 */
	@RequestMapping(value="/add")
	@ResponseBody
	public Object add() throws Exception{
		Map<String,Object> map = new HashMap<String,Object>();
		String errInfo = "success";
		PageData pd = new PageData();
		pd = this.getPageData();
		pd.put("AIWARNING_ID", this.get32UUID());	//主键
		pd.put("CREATTIME", DateUtil.date2Str(new Date()));	//添加时间
		pd.put("OPERATTIME", DateUtil.date2Str(new Date()));	//修改时间
		pd.put("ISDELETE", 0);	//是否删除
		aiwarningService.save(pd);
		map.put("result", errInfo);
		return map;
	}
	/**新增
	 * @param
	 * @throws Exception
	 */
	@RequestMapping(value="/addPeople")
	@ResponseBody
	public Object addPeople() throws Exception{
		Map<String,Object> map = new HashMap<String,Object>();
		String errInfo = "success";
		PageData pd = new PageData();
		pd = this.getPageData();
		pd.put("CONTRACT_PIC_ID", this.get32UUID());	//主键
		pd.put("CREATTIME", DateUtil.date2Str(new Date()));	//添加时间
		pd.put("CREATOR", DateUtil.date2Str(new Date()));	//添加人
		pd.put("OPERATTIME", DateUtil.date2Str(new Date()));	//修改时间
		pd.put("OPERATOR", DateUtil.date2Str(new Date()));	//修改人
		pd.put("ISDELETE", 0);	//是否删除
		aiwarningService.addPeople(pd);
		map.put("result", errInfo);
		return map;
	}
	/**删除
	 * @param out
	 * @throws Exception
	 */
	@RequestMapping(value="/delete")
	@ResponseBody
	public Object delete() throws Exception{
		Map<String,String> map = new HashMap<String,String>();
		String errInfo = "success";
		PageData pd = new PageData();
		pd = this.getPageData();
		aiwarningService.delete(pd);
		map.put("result", errInfo);				//返回结果
		return map;
	}

	/**修改
	 * @param
	 * @throws Exception
	 */
	@RequestMapping(value="/edit")
	@ResponseBody
	@Transactional
	public Object edit() throws Exception{
		Map<String,Object> map = new HashMap<String,Object>();
		String errInfo = "success";
		PageData pd = new PageData();
		pd = this.getPageData();
		pd.put("STATUS",1);
		pd.put("OPERATTIME", DateUtil.date2Str(new Date()));	//修改时间
		List<String> hiddenIdList = new ArrayList<String>();
		if (Tools.notEmpty(pd.getString("HIDDENJSON"))) {
			List<JSONObject> list = (List<JSONObject>) JSON.parse(pd.getString("HIDDENJSON"));
			if(list != null){
				for (JSONObject json : list) {
					PageData hidden = new PageData();
					String HIDDEN_ID = UuidUtil.get32UUID();
					hiddenIdList.add(HIDDEN_ID);
					hidden.put("HIDDEN_ID",HIDDEN_ID);    //主键
					pd.put("HIDDEN_ID",hidden.getString("HIDDEN_ID"));
					hidden.put("FOREIGN_ID", pd.getString("OUTSOURCED_ID"));    //外键ID
					hidden.put("HIDDENDESCR", json.getString("HIDDENDESCR"));    //隐患描述
					hidden.put("HIDDENPART", json.getString("HIDDENPART"));    //隐患部位
					hidden.put("HIDDENLEVEL", json.getString("HIDDENLEVEL"));    //隐患级别
					hidden.put("HIDDENTYPE", json.getString("HIDDENTYPE"));    //隐患类型1
					hidden.put("HIDDENTYPE2", json.getString("HIDDENTYPE2"));    //隐患类型2
					hidden.put("LONGITUDE", json.getString("LONGITUDE"));    //隐患位置经度
					hidden.put("LATITUDE", json.getString("LATITUDE"));    //隐患位置纬度
					hidden.put("DISCOVERYTIME", json.getString("DISCOVERYTIME"));    //隐患发现时间
					hidden.put("HIDDENFINDDEPT", json.getString("HIDDENFINDDEPT"));    //隐患发现部门(隐患责任人部门)
					hidden.put("RECTIFICATIONTYPE", json.getString("RECTIFICATIONTYPE"));    //隐患处置
					hidden.put("RECTIFICATIONDEADLINE", json.getString("RECTIFICATIONDEADLINE"));    //整改期限
					hidden.put("RECTIFYDESCR", json.getString("RECTIFYDESCR"));    //整改描述
					hidden.put("RECTIFICATIONDEPT", json.getString("RECTIFICATIONDEPT"));    //整改部门
					hidden.put("RECTIFICATIONOR", json.getString("RECTIFICATIONOR"));    //整改人
					hidden.put("CREATOR", pd.getString("OPERATOR"));    //发现人(隐患责任人)
					hidden.put("SOURCE", 1);    //隐患来源
					hidden.put("STATE", "1");    //隐患状态 100-安全环保检查暂存的隐患(流程完转0)
					hidden.put("CREATTIME", DateUtil.date2Str(new Date()));    //发现时间
					hidden.put("ISDELETE", "0");    //是否删除(0:有效 1:删除)
					hidden.put("POSITIONDESC",json.getString("POSITIONDESC"));// 隐患位置描述
					if(!Tools.isEmpty(json.getString("IMG_PATH"))){//添加隐患图片
						PageData imgAddPd = new PageData();
						imgAddPd.put("IMGFILES_ID",  this.get32UUID());
						imgAddPd.put("FILEPATH", json.getString("IMG_PATH") );
						imgAddPd.put("TYPE", "3");
						imgAddPd.put("FOREIGN_KEY",  hidden.getString("HIDDEN_ID"));
						imgFilesService.save(imgAddPd);
					}
					if(!Tools.isEmpty(json.getString("REMARKS"))){//添加隐患图片
						PageData imgAddPd = new PageData();
						imgAddPd.put("IMGFILES_ID",  this.get32UUID());
						imgAddPd.put("FILEPATH", json.getString("REMARKS") );
						imgAddPd.put("TYPE", "102");
						imgAddPd.put("FOREIGN_KEY",  hidden.getString("HIDDEN_ID"));
						imgFilesService.save(imgAddPd);
					}
					keyprojectHiddenService.save(hidden);
					try {
//						this.DownloadPicturn(pd);
					}catch (Exception e){
						e.printStackTrace();
					}
//				PageData img = new PageData();
//				img.put("IMGFILES_ID",  this.get32UUID());
//				img.put("FILEPATH",  pd.get("IMG_PATH"));
//				img.put("TYPE", 3);
//				img.put("FOREIGN_KEY",  hidden.get("HIDDEN_ID"));
//				imgFilesService.save(img);
				}
			}
		}
		if (!hiddenIdList.isEmpty()) {
			pd.put("HIDDEN_IDS", hiddenIdList.toString().replace("[","").replace("]","").replace(" ",""));
		}
		aiwarningService.edit(pd);
		map.put("result", errInfo);
		return map;
	}

	/**列表
	 * @param page
	 * @throws Exception
	 */
	@RequestMapping(value="/list")
	@ResponseBody
	public Object  list(Page page) throws Exception{
		Map<String,Object> map = new HashMap<String,Object>();
		String errInfo = "success";
		PageData pd = new PageData();
		pd = this.getPageData();
		String KEYWORDS = pd.getString("KEYWORDS");						//关键词检索条件
		if(Tools.notEmpty(KEYWORDS))pd.put("KEYWORDS", KEYWORDS.trim());
		page.setPd(pd);
		List<PageData>	varList = aiwarningService.listApp(page);	//列出AIWarning列表
		map.put("varList", varList);
		map.put("page", page);
		map.put("result", errInfo);
		return map;
	}

	 /**去修改页面获取数据
	 * @param
	 * @throws Exception
	 */
	@RequestMapping(value="/goEdit")
	@ResponseBody
	public Object goEdit() throws Exception{
		Map<String,Object> map = new HashMap<String,Object>();
		String errInfo = "success";
		PageData pd = new PageData();
		pd = this.getPageData();
		pd = aiwarningService.findById(pd);	//根据ID读取
		PageData user =  aiwarningService.findByOperatorId(pd);//查询处置人ID
		if(user != null){
		 pd.put("NAME",user.getString("name"));
		}
		pd.put("FOREIGN_ID", pd.getString("OUTSOURCED_ID"));
		if (Tools.notEmpty(pd.getString("HIDDEN_IDS"))){
			PageData pageData = new PageData();
			pageData.put("AI_WARNING","Y");
			pageData.put("array",pd.getString("HIDDEN_IDS").split(","));
			pd.put("hiddenList", keyprojectHiddenService.listAllInspection(pageData));
		}
		map.put("pd", pd);
		map.put("result", errInfo);
		return map;
	}

	 /**批量删除
	 * @param
	 * @throws Exception
	 */
	@RequestMapping(value="/deleteAll")
	@ResponseBody
	public Object deleteAll() throws Exception{
		Map<String,Object> map = new HashMap<String,Object>();
		String errInfo = "success";
		PageData pd = new PageData();
		pd = this.getPageData();
		String DATA_IDS = pd.getString("DATA_IDS");
		if(Tools.notEmpty(DATA_IDS)){
			String ArrayDATA_IDS[] = DATA_IDS.split(",");
			aiwarningService.deleteAll(ArrayDATA_IDS);
			errInfo = "success";
		}else{
			errInfo = "fail";
		}
		map.put("result", errInfo);				//返回结果
		return map;
	}
	/**处理隐患
	 * @param
	 * @throws Exception
	 */
	@RequestMapping(value="/handle")
	@ResponseBody
	public Object handle() throws Exception{
		Map<String,Object> map = new HashMap<String,Object>();
		String errInfo = "success";
		PageData pd = new PageData();
		pd = this.getPageData();

		map.put("result", errInfo);				//返回结果
		return map;
	}


	public  void DownloadPicturn(PageData pd) throws Exception {
		String url = pd.getString("IMG_PATH");
		String suffix = url.substring(url.lastIndexOf(".")+1);
//		String suffixName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1).toLowerCase();
		String suffixName = suffix.toLowerCase();
		if (!"pdf".equals(suffixName) && !"jpg".equals(suffixName) && !"jpeg".equals(suffixName) && !"png".equals(suffixName) && !"mp4".equals(suffixName)) {
//			errInfo = "fail";
//			map.put("result", errInfo);
//			map.put("msg", "文件格式不正确!");
//			return map;
			System.out.println("文件格式不正确!");
		} else {
			InputStream input = this.getInputStreamFromUrl(url);//获取流
			String fileName = this.get32UUID()+"." +suffix;
			Smb.sshSftpForInput(input, fileName, Const.FILEPATHYHTP + pd.getString("OPERATOR") + "/" +  DateUtil.getDays());
			input.close();
			PageData savePicturn = new PageData();
			savePicturn.put("IMGFILES_ID", this.get32UUID());
			savePicturn.put("FILEPATH", Const.FILEPATHYHTP + pd.getString("OPERATOR") + "/" + DateUtil.getDays()+ "/" + fileName);
			savePicturn.put("TYPE", 114);
			savePicturn.put("FOREIGN_KEY", pd.getString("HIDDEN_ID"));
			imgFilesService.save(savePicturn);
		}
	}

	/**
	 * 根据url下载文件流
	 * @param urlStr
	 * @return
	 */
	public static InputStream getInputStreamFromUrl(String urlStr) {
		InputStream inputStream=null;
		try {
			//url解码
			URL url = new URL(java.net.URLDecoder.decode(urlStr, "UTF-8"));
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			//设置超时间为3秒
			conn.setConnectTimeout(3 * 1000);
			//防止屏蔽程序抓取而返回403错误
			conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
			//得到输入流
			inputStream = conn.getInputStream();
		} catch (IOException e) {

		}
		return inputStream;
	}


}