package com.unis.base.app.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.unis.base.app.feign.DictFeign;
import com.unis.base.app.service.PushService;
import com.unis.base.app.service.WarehouseService;
import com.unis.base.client.WarehouseFeign;
import com.unis.base.common.vo.CompanyVO;
import com.unis.base.common.vo.DCfxxsjyVO;
import com.unis.base.common.vo.DHwxxsjyVO;
import com.unis.base.common.vo.OiltankVO;
import com.unis.common.utils.CurrentUtil;
import com.unis.common.utils.JsonUtils;
import com.unis.common.utils.POI4Util;
import com.unis.common.utils.ResponseWrapper;
import com.unis.common.vo.poi.Column;
import com.unis.common.vo.poi.Line;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.time.DateTimeException;
import java.time.LocalDate;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;

/**
 * @author WangZL
 * @version 1.0
 * @Title WarehouseController
 * @ProjectName 仓房信息 Controller
 * @Description
 * @date 2019/07/22 17点26分
 */
@RestController
@Api(value = "仓房信息", tags = "仓房信息维护")
@Slf4j
public class WarehouseController {

	@Autowired
	private WarehouseFeign warehouseFeign;

	@Autowired
	private WarehouseService warehouseService;

    @Autowired
    private PushService pushService;

    @Autowired
    private DictFeign dictFeign;

	@ApiOperation(value = "获取仓房信息列表", notes = "参数：仓房编号，仓房名称，库点编号，库点名称，仓房类型，建筑类型，仓房状态")
	@PostMapping(value = "/warehouseList")
	public ResponseWrapper getDCfxxxsjyList(@RequestBody DCfxxsjyVO dCfxxsjyVO){
		return warehouseFeign.getDCfxxxsjyList(dCfxxsjyVO);
	}

	@ApiOperation(value = "分页获取仓房信息列表", notes = "参数：仓房编号，仓房名称，库点编号，库点名称，仓房类型，建筑类型，仓房状态")
	@PostMapping(value = "/warehousePage/{pageNum}/{pageSize}")
	public ResponseWrapper getDCfxxxsjyPage(@RequestBody DCfxxsjyVO dCfxxsjyVO,@PathVariable("pageNum")Integer pageNum,
											@PathVariable("pageSize") Integer pageSize) {
		return warehouseFeign.getDCfxxxsjyPage(dCfxxsjyVO,pageNum,pageSize) ;
	}

	@ApiOperation(value = "根据仓房编码获取仓房信息", notes = "参数：仓房编号")
	@GetMapping(value = "/warehouse/{cfbh}")
	public ResponseWrapper getDCfxxxsjyInfoBycfbh(@PathVariable("cfbh")String cfbh) {
        return warehouseFeign.getDCfxxxsjyInfoBycfbh(cfbh);
	}

	@ApiOperation(value = "更新仓房信息", notes = "参数：仓房编号")
	@PutMapping(value = "/warehouse")
	public ResponseWrapper update(@RequestBody DCfxxsjyVO dCfxxsjyVO) {
        dCfxxsjyVO.buildUpdateData();
		ResponseWrapper responseWrapper = warehouseFeign.update(dCfxxsjyVO);
		// 推送数据
		if (responseWrapper.isSuccess() && 200==responseWrapper.getInfoCode()) {
            if(5 == dCfxxsjyVO.getSfba()) { // 审核通过，下发库级
                DCfxxsjyVO dCfxxsjy = new DCfxxsjyVO();
                dCfxxsjy.setKddm(dCfxxsjyVO.getKddm());
                dCfxxsjy.setCfxh(dCfxxsjyVO.getCfxh());
                ResponseWrapper result = warehouseFeign.getWarehouseDetail(dCfxxsjy);
                DCfxxsjyVO cfxxsjyInfo = JsonUtils.parse(JsonUtils.serialize(result.getData()),DCfxxsjyVO.class);
                JSONObject obj = (JSONObject) JSONObject.toJSON(cfxxsjyInfo);
                String sendResult = pushService.push(obj,"storehouseApi");
                if(StringUtils.isNotEmpty(sendResult)) {
                    dCfxxsjy.setSendResult(sendResult);
                    warehouseFeign.updateSendResult(dCfxxsjy);
                }
            }
		}
        return responseWrapper;
	}

	@DeleteMapping(value="/warehouse/{cfbh}")
	@ApiOperation(value = "根据仓房编号删除仓房信息", notes = "参数：仓房编号")
	public ResponseWrapper delete(@PathVariable("cfbh")String cfbh) {
        return warehouseFeign.delete(cfbh);
    }

	@PostMapping(value = "/warehouse")
	@ApiOperation(value = "新增仓房信息", notes = "参数：仓房名称，苦点代码")
    public ResponseWrapper insert(@RequestBody DCfxxsjyVO dCfxxsjyVO) {
        dCfxxsjyVO.buildInsertData();
		ResponseWrapper responseWrapper = warehouseFeign.insert(dCfxxsjyVO);
		// 推送数据
		/*if (responseWrapper.isSuccess()) {
			warehouseService.depotPush(dCfxxsjyVO);
		}*/
		return responseWrapper;
    }

    @PostMapping(value = "/warehouseInsertList")
    @ApiOperation(value = "新增仓房列表信息", notes = "参数：仓房信息列表")
    public ResponseWrapper insertList(@RequestBody List<DCfxxsjyVO> dCfxxsjyVOList) {
        return warehouseService.insertList(dCfxxsjyVOList);
    }

	@ApiOperation(value = "仓房信息-根据库点代码获取仓房列表", notes = "参数：库点代码")
	@PostMapping(value = "/warehouseListByKddm/{kddm}")
	public ResponseWrapper getWarehouseListByKddm(@PathVariable("kddm")String kddm){
		return warehouseFeign.getWarehouseListByKddm(kddm);
	}

    @ApiImplicitParams({
            @ApiImplicitParam(name = "file", value = "excel")
    })
    @ApiOperation(value = "仓房信息导入数据   multipart/form-data", notes = "仓房信息表---")
    @PostMapping(value = "/warehouse/import_info_list", headers = "content-type= multipart/form-data", consumes = "multipart/*")
    public ResponseWrapper importInfoList(@RequestParam(value = "file", required = false) MultipartFile file,
                                       @RequestParam(value = "kddm", required = false) String kddm) {
        if(file == null || file.isEmpty()){
            log.error("无文件数据");
            return ResponseWrapper.error("无文件数据");
        } else{
            List<String> columns = new ArrayList<>();
            int success = 0;
            int fail = 0;
            List<String> msgList = new ArrayList<>();
            HashMap<Object, Integer> s2i = new HashMap<>();
            s2i.put("有", 1);
            s2i.put("无", 0);
            s2i.put("低温仓", 1);
            s2i.put("准低温仓", 2);
            s2i.put("普通仓", 3);
            s2i.put("保温仓", 4);

            s2i.put("停用", 0);
            s2i.put("闲置", 1);
            s2i.put("储粮", 2);
            s2i.put("物资", 3);
            s2i.put("他用", 4);

            try {
                // 必填字段
                /*columns.add("cfxh"); // 仓房序号
                columns.add("ajxh"); // 廒间序号
                columns.add("hwxh"); // 货位序号
                columns.add("cfmc"); // 仓房名称
                columns.add("jssj"); // 建设时间
                columns.add("cflx"); // 仓(罐)型
                columns.add("dczlrj"); // 单仓仓容(吨)
                columns.add("dwclx"); // 低温仓类型
                columns.add("zlxgd"); // 装粮线高度
                columns.add("bwm"); // 保温门
                columns.add("bwc"); // 保温窗
                columns.add("scbwc"); // 双层保温窗
                columns.add("wknkc"); // 外控内开窗
                columns.add("cndd"); // 仓内吊顶
                columns.add("cdbwdd"); // 仓内保温吊顶
                columns.add("gcpjr"); // 隔层排积热
                columns.add("cdwgrc"); // 仓顶外隔热层
                columns.add("bwqt"); // 保温墙体
                columns.add("bwtl"); // 保温涂料
                columns.add("zlsb"); // 制冷设备
                columns.add("dltf"); // 地笼通风
                columns.add("zlfj"); // 轴流风机
                columns.add("dzcw"); // 电子测温
                columns.add("zdllk"); // 自动流粮口
                columns.add("hlxz"); // 环流熏蒸
                columns.add("cnhl"); // 内环流
                columns.add("cnsxt"); // 仓内摄像头
                columns.add("qmx"); // 气密性
                columns.add("bgr"); // 保管员信息
                columns.add("cfsyqk"); // 用途
                columns.add("cfsyqk"); // 仓房状态
                columns.add("cfsyqk"); // 墙体结构
                columns.add("cfsyqk"); // 房顶结构
                columns.add("cfsyqk"); // 房架结构
                columns.add(""); //地面
                columns.add(""); //仓外长（m）
                columns.add(""); //仓宽长（m）
                columns.add(""); //仓外檐高(m)
                columns.add(""); //仓外顶高(m)
                columns.add(""); //筒仓外径(m)
                columns.add(""); //仓内长（m）
                columns.add(""); //仓内宽（m）
                columns.add(""); //
                columns.add(""); //
                columns.add(""); //
                columns.add(""); //
                columns.add(""); //
                columns.add(""); //
                columns.add(""); //
                columns.add(""); //
                columns.add(""); //
                columns.add(""); //
                columns.add(""); //
                columns.add(""); //
                columns.add(""); //
                columns.add(""); //
                columns.add(""); //
                columns.add(""); //
                columns.add(""); //
                columns.add(""); //*/

                Field[] declaredFields = CompanyVO.class.getDeclaredFields();
                for (Field field : declaredFields) {
                    columns.add(field.getName());
                }

                Map<String, Object> map = POI4Util.uploadExcel(file, columns);
                Integer state = Integer.valueOf(String.valueOf(map.get("state")));
                if (1 == state) {
                    List<Line> lines = (List<Line>) map.get("lines");
                    List<Line> validList = lines.stream().filter(i -> {
                        return i.getColumns().stream().anyMatch(c -> !ObjectUtils.isEmpty(c.getValue()));
                    }).collect(Collectors.toList());
                    for (Line line : validList) {
                        List<Column> columnList = line.getColumns();
                        DCfxxsjyVO vo = new DCfxxsjyVO();
                        List<DHwxxsjyVO> hwxxsjyVOList = new ArrayList<>();
                        DHwxxsjyVO hwxx = new DHwxxsjyVO();
                        vo.buildInsertData();
                        vo.setKddm(kddm);
                        vo.setStatus(1);
                        vo.setSfba(1);
                        String tyshxydm = kddm.substring(0, 18);
                        vo.setTyshxydm(tyshxydm);

                        if (!ObjectUtils.isEmpty(columnList.get(0).getValue())) {
                            String cfxh = columnList.get(0).getValue().toString();
                            if(cfxh.matches("[0-9]{3}")) {
                                vo.setCfxh(cfxh);
                            } else {
                                return ResponseWrapper.error("请正确填写仓房序号");
                            }
                        }else {
                            return ResponseWrapper.error("仓房序号不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(1).getValue())) {
                            vo.setGfcfmc(columnList.get(1).getValue().toString());
                        }else {
                            return ResponseWrapper.error("仓房名称不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(2).getValue())) {
                            String hwxh = columnList.get(2).getValue().toString();
                            try {
                                if(hwxh.matches("[0-9]{2}")) {
                                    hwxx.setHwxh(hwxh);
                                } else {
                                    return ResponseWrapper.error("请正确填写货位序号");
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                                return ResponseWrapper.error("货位序号格式不正确 ");
                            }
                        }else {
                            return ResponseWrapper.error("货位序号不能为空");
                        }

                        Object cfname = columnList.get(3).getValue();
                        if (!ObjectUtils.isEmpty(cfname)) {
                            hwxx.setCfmc(cfname.toString());
                        }else {
                            return ResponseWrapper.error("货位名称不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(4).getValue())) {
                            String sj = columnList.get(4).getValue().toString();
                            try {
                                DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                                LocalDate now = LocalDate.parse(sj, dateTimeFormatter);
                                Date jssj = Date.from(now.atStartOfDay(ZoneOffset.ofHours(8)).toInstant());
                                vo.setJssj(jssj);
                            } catch (DateTimeException e) {
                                log.warn("解析时间格式不正确 = " + sj);
                                return ResponseWrapper.error("建设时间格式不对 : " + sj);
                            }
                        }else {
                            return ResponseWrapper.error("建设时间不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(5).getValue())) {
                            vo.setCflx(columnList.get(5).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("仓(罐)型不能为空");
                        }
                        Object dczlrj = columnList.get(6).getValue();
                        if (!ObjectUtils.isEmpty(dczlrj)) {
                            try {
                                BigDecimal bigDecimal = new BigDecimal(dczlrj.toString());
                                vo.setDczlrj(bigDecimal.doubleValue());
                            } catch (NumberFormatException nfe) {
                                log.warn("非法数字 " + dczlrj);
                                return ResponseWrapper.error("非法数字 " + dczlrj);
                            }
                        }else {
                            return ResponseWrapper.error("单仓仓容不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(7).getValue())) {
                            vo.setDwclx(s2i.get(columnList.get(7).getValue()));
                        }else {
                            return ResponseWrapper.error("低温仓类型不能为空");
                        }
                        Object sjcr = columnList.get(8).getValue();
                        if (!ObjectUtils.isEmpty(sjcr)) {
                            try {
                                BigDecimal bigDecimal = new BigDecimal(sjcr.toString());
                                vo.setSjcr(bigDecimal.doubleValue());
                            } catch (NumberFormatException nfe) {
                                log.warn("非法数字 " + sjcr);
                                return ResponseWrapper.error("非法数字 " + sjcr);
                            }
                        }else {
                            return ResponseWrapper.error("设计仓容不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(9).getValue())) {
                            vo.setBwm(s2i.get(columnList.get(9).getValue()));
                        }else {
                            return ResponseWrapper.error("保温门不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(10).getValue())) {
                            vo.setBwc(s2i.get(columnList.get(10).getValue()));
                        }else {
                            return ResponseWrapper.error("保温窗不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(11).getValue())) {
                            vo.setScbwc(s2i.get(columnList.get(11).getValue()));
                        }else {
                            return ResponseWrapper.error("双层保温窗不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(12).getValue())) {
                            vo.setWknkc(s2i.get(columnList.get(12).getValue()));
                        }else {
                            return ResponseWrapper.error("外控内开窗不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(13).getValue())) {
                            vo.setCndd(s2i.get(columnList.get(13).getValue()));
                        }else {
                            return ResponseWrapper.error("仓内吊顶不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(14).getValue())) {
                            vo.setCdbwdd(s2i.get(columnList.get(14).getValue()));
                        }else {
                            return ResponseWrapper.error("仓内保温吊顶不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(15).getValue())) {
                            vo.setGcpjr(s2i.get(columnList.get(15).getValue()));
                        }else {
                            return ResponseWrapper.error("隔层排积热不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(16).getValue())) {
                            vo.setCdwgrc(s2i.get(columnList.get(16).getValue()));
                        }else {
                            return ResponseWrapper.error("仓顶外隔热层不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(17).getValue())) {
                            vo.setBwqt(s2i.get(columnList.get(17).getValue()));
                        }else {
                            return ResponseWrapper.error("保温墙体不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(18).getValue())) {
                            vo.setBwtl(s2i.get(columnList.get(18).getValue()));
                        }else {
                            return ResponseWrapper.error("保温涂料不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(19).getValue())) {
                            vo.setZlsb(s2i.get(columnList.get(19).getValue()));
                        }else {
                            return ResponseWrapper.error("制冷设备不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(20).getValue())) {
                            vo.setDltf(s2i.get(columnList.get(20).getValue()));
                        }else {
                            return ResponseWrapper.error("地笼通风不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(21).getValue())) {
                            vo.setZlfj(s2i.get(columnList.get(21).getValue()));
                        }else {
                            return ResponseWrapper.error("轴流风机不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(22).getValue())) {
                            vo.setDzcw(s2i.get(columnList.get(22).getValue()));
                        }else {
                            return ResponseWrapper.error("电子测温不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(23).getValue())) {
                            vo.setZdllk(s2i.get(columnList.get(23).getValue()));
                        }else {
                            return ResponseWrapper.error("自动流粮口不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(24).getValue())) {
                            vo.setHlxz(s2i.get(columnList.get(24).getValue()));
                        }else {
                            return ResponseWrapper.error("环流熏蒸不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(25).getValue())) {
                            vo.setCnhl(s2i.get(columnList.get(25).getValue()));
                        }else {
                            return ResponseWrapper.error("内环流不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(26).getValue())) {
                            vo.setCnsxt(s2i.get(columnList.get(26).getValue()));
                        }else {
                            return ResponseWrapper.error("仓内摄像头不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(27).getValue())) {
                            vo.setQmx(columnList.get(27).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("气密性不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(28).getValue())) {
                            vo.setBgr(columnList.get(28).getValue().toString());
                        }else {
                            return ResponseWrapper.error("保管员信息头不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(29).getValue())) {
                            vo.setCfsyqk(s2i.get(columnList.get(29).getValue()));
                        }else {
                            return ResponseWrapper.error("用途不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(30).getValue())) {
                            vo.setCfzt(columnList.get(30).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("仓房状态不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(31).getValue())) {
                            vo.setQtjg(columnList.get(31).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("墙体不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(32).getValue())) {
                            vo.setFdjg(columnList.get(32).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("房顶不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(33).getValue())) {
                            vo.setFjjg(columnList.get(33).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("房架不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(34).getValue())) {
                            vo.setDmjg(columnList.get(34).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("地面不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(35).getValue())) {
                            try {
                                vo.setCwc(new BigDecimal(columnList.get(35).getValue().toString()));
                            } catch (NumberFormatException nfe) {
                                return ResponseWrapper.error("仓外长非法数字");
                            }
                        }else {
                            return ResponseWrapper.error("仓外长不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(36).getValue())) {
                            try {
                                vo.setCwk(new BigDecimal(columnList.get(36).getValue().toString()));
                            } catch (NumberFormatException nfe) {
                                return ResponseWrapper.error("仓宽长非法数字");
                            }
                        }else {
                            return ResponseWrapper.error("仓宽长不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(37).getValue())) {
                            try {
                                vo.setCwyg(new BigDecimal(columnList.get(37).getValue().toString()));
                            } catch (NumberFormatException nfe) {
                                return ResponseWrapper.error("仓外檐高非法数字");
                            }
                        }else {
                            return ResponseWrapper.error("仓外檐高不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(38).getValue())) {
                            try {
                                vo.setCwdg(new BigDecimal(columnList.get(38).getValue().toString()));
                            } catch (NumberFormatException nfe) {
                                return ResponseWrapper.error("仓外顶高非法数字");
                            }
                        }else {
                            return ResponseWrapper.error("仓外顶高不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(39).getValue())) {
                            try {
                                vo.setCwtcwj(new BigDecimal(columnList.get(39).getValue().toString()));
                            } catch (NumberFormatException nfe) {
                                return ResponseWrapper.error("筒仓外径非法数字");
                            }
                        }else {
                            return ResponseWrapper.error("筒仓外径不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(40).getValue())) {
                            try {
                                vo.setCnc(new BigDecimal(columnList.get(40).getValue().toString()));
                            } catch (NumberFormatException nfe) {
                                return ResponseWrapper.error("仓内长非法数字");
                            }
                        }else {
                            return ResponseWrapper.error("仓内长不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(41).getValue())) {
                            try {
                                vo.setCnk(new BigDecimal(columnList.get(41).getValue().toString()));
                            } catch (NumberFormatException nfe) {
                                return ResponseWrapper.error("仓内宽非法数字");
                            }
                        }else {
                            return ResponseWrapper.error("仓内宽不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(42).getValue())) {
                            try {
                                vo.setCfnk(new BigDecimal(columnList.get(42).getValue().toString()).doubleValue());
                            } catch (NumberFormatException nfe) {
                                return ResponseWrapper.error("仓内檐高非法数字");
                            }
                        }else {
                            return ResponseWrapper.error("仓内檐高不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(43).getValue())) {
                            try {
                                vo.setCnzlxg(new BigDecimal(columnList.get(43).getValue().toString()));
                            } catch (NumberFormatException nfe) {
                                return ResponseWrapper.error("装粮线高非法数字");
                            }
                        }else {
                            return ResponseWrapper.error("装粮线高不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(44).getValue())) {
                            try {
                                vo.setCntcnj(new BigDecimal(columnList.get(44).getValue().toString()));
                            } catch (NumberFormatException nfe) {
                                return ResponseWrapper.error("筒仓内径非法数字");
                            }
                        }else {
                            return ResponseWrapper.error("筒仓内径不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(45).getValue())) {
                            try {
                                vo.setCntj(new BigDecimal(columnList.get(45).getValue().toString()));
                            } catch (NumberFormatException nfe) {
                                return ResponseWrapper.error("仓内体积非法数字");
                            }
                        }else {
                            return ResponseWrapper.error("仓内体积不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(46).getValue())) {
                            vo.setYwfhfbfdss(columnList.get(46).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("有无防火防爆防盗设施不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(47).getValue())) {
                            vo.setSfszcc(Integer.parseInt(columnList.get(47).getValue().toString().split("：")[0]));
                        }else {
                            return ResponseWrapper.error("能否散装储存不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(48).getValue())) {
                            vo.setYwfsfqfczz(columnList.get(48).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("有无防鼠防雀防虫装置及设施不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(49).getValue())) {
                            vo.setGrbwcs(columnList.get(49).getValue().toString());
                        }else {
                            return ResponseWrapper.error("隔热保温措施不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(50).getValue())) {
                            vo.setYwlqckqk(Integer.parseInt(columnList.get(50).getValue().toString().split("：")[0]));
                        }else {
                            return ResponseWrapper.error("有无粮情检测设施不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(51).getValue())) {
                            vo.setYwjxtfss(Integer.parseInt(columnList.get(51).getValue().toString().split("：")[0]));
                        }else {
                            return ResponseWrapper.error("有无机械通风设施不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(52).getValue())) {
                            vo.setNfxlsc(Integer.parseInt(columnList.get(52).getValue().toString().split("：")[0]));
                        }else {
                            return ResponseWrapper.error("能否环流熏蒸杀虫不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(53).getValue())) {
                            vo.setNffddyqtcl(columnList.get(53).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("能否富氮低氧气调储粮不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(54).getValue())) {
                            vo.setClgx(columnList.get(54).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("储粮功效不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(55).getValue())) {
                            vo.setNfgrbw(columnList.get(55).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("能否隔热保温不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(56).getValue())) {
                            vo.setGrxn(columnList.get(56).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("隔热性能不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(57).getValue())) {
                            vo.setJgcl(columnList.get(57).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("结构材料不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(58).getValue())) {
                            vo.setLqjs(columnList.get(58).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("粮情技术不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(59).getValue())) {
                            vo.setTfjs(columnList.get(59).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("通风技术不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(60).getValue())) {
                            vo.setTfxtxs(columnList.get(60).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("通风系统型式不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(61).getValue())) {
                            vo.setScjs(columnList.get(61).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("杀虫技术不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(62).getValue())) {
                            vo.setKwjs(columnList.get(62).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("控温技术不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(63).getValue())) {
                            vo.setSfyjxxxhgz(columnList.get(63).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("是否已进行信息化改造不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(64).getValue())) {
                            vo.setDlmxs(columnList.get(64).getValue().toString().split("：")[0]);
                        }else {
                            return ResponseWrapper.error("挡粮门型式不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(65).getValue())) {
                            hwxx.setStatus(Integer.parseInt(columnList.get(65).getValue().toString().split("：")[0]));
                        }else {
                            return ResponseWrapper.error("使用状态不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(66).getValue())) {
                            String sj = columnList.get(66).getValue().toString();
                            try {
                                DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                                LocalDate now = LocalDate.parse(sj, dateTimeFormatter);
                                Date qyrq = Date.from(now.atStartOfDay(ZoneOffset.ofHours(8)).toInstant());
                                hwxx.setQyrq(qyrq);
                            } catch (DateTimeException e) {
                                return ResponseWrapper.error("货位启用日期格式不对 : " + sj);
                            }
                        }else {
                            return ResponseWrapper.error("货位启用日期不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(67).getValue())) {
                            hwxx.setHwrl(new BigDecimal(columnList.get(67).getValue().toString()).doubleValue());
                        }else {
                            return ResponseWrapper.error("货位容量不能为空");
                        }
                        if (!ObjectUtils.isEmpty(columnList.get(68).getValue())) {
                            vo.setCmsl(new BigDecimal(columnList.get(68).getValue().toString()).intValue());
                        }else {
                            return ResponseWrapper.error("仓门数量不能为空");
                        }
                        hwxxsjyVOList.add(hwxx);
                        vo.setHwxxsjyVOList(hwxxsjyVOList);
                        vo.setIsImport(true);
                        ResponseWrapper insert = warehouseFeign.insert(vo);
                        if (200 == insert.getInfoCode()) {
                            success++;
                        } else {
                            msgList.add(columnList.get(1).getValue() + " "+cfname+ "" + insert.getMsg());
                            log.warn(columnList.get(1).getValue() + " "+cfname+ "------------" + insert.getMsg());
                            fail++;
                        }
                    }
                }
            } catch (Exception e) {
                fail++;
                e.printStackTrace();
                return ResponseWrapper.error("无数据");
            }
            msgList.stream().collect(Collectors.joining("\n"));
            return ResponseWrapper.success(success == 0 ? 500 : 200, "成功：" + success + ",失败：" + fail, msgList);
        }
	}

    @ApiOperation(value = "仓房信息导出", notes = "参数：无")
    @PostMapping(value = "notice/warehouseListExport/{pageNum}/{pageSize}")
    public void warehouseListExport(HttpServletResponse response,@RequestBody DCfxxsjyVO dCfxxsjyVO,
                                    @PathVariable("pageNum")Integer pageNum,@PathVariable("pageSize") Integer pageSize) {
        try {
            ResponseWrapper responseWrapper = warehouseFeign.getDCfxxxsjyPage(dCfxxsjyVO,pageNum,Integer.MAX_VALUE);
            if(responseWrapper.isSuccess() && responseWrapper.getData() != null) {
                JSONObject data = JSON.parseObject(JsonUtils.serialize(responseWrapper.getData()));
                String fileName = URLEncoder.encode("仓房信息", "UTF-8");
                Workbook wb = warehouseService.export(data);
                response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xls");
                OutputStream stream = response.getOutputStream();
                if(null != wb && null != stream){
                    wb.write(stream);
                    wb.close();
                    stream.close();
                }
            }
        }catch (Exception e){
        e.printStackTrace();
        }
    }

    @ApiOperation(value = "获取仓房信息及货位信息")
    @PostMapping(value = "/getWarehouseDetail")
    public ResponseWrapper getWarehouseDetail(@RequestBody DCfxxsjyVO dCfxxsjyVO){
        return warehouseFeign.getWarehouseDetail(dCfxxsjyVO);
    }

    @ApiOperation(value = "分页获取仓房及货位信息列表")
    @PostMapping(value = "/warehousePageNew/{pageNum}/{pageSize}")
    public ResponseWrapper getDCfxxxsjyPageNew(@RequestBody DCfxxsjyVO dCfxxsjyVO,
                                               @PathVariable("pageNum") Integer pageNum,
                                               @PathVariable("pageSize") Integer pageSize) {
        return warehouseFeign.getDCfxxxsjyPageNew(dCfxxsjyVO,pageNum,pageSize);
    }

    @ApiOperation(value = "获取货位信息")
    @PostMapping(value = "/warehouse/selectCfxxsjy")
    public ResponseWrapper selectCfxxsjy(@RequestBody DCfxxsjyVO dCfxxsjyVO) {
        return warehouseFeign.selectCfxxsjy(dCfxxsjyVO);
    }

    @ApiOperation(value = "批量更新仓房信息", notes = "参数：仓房编号")
    @PutMapping(value = "/warehouseBatch")
    public ResponseWrapper updateBatch(@RequestBody DCfxxsjyVO dCfxxsjyVO) {
        if (dCfxxsjyVO.getCfbhs() == null || dCfxxsjyVO.getCfbhs().isEmpty() || dCfxxsjyVO.getCfbhs().containsAll(Collections.singleton(null))) {
            return ResponseWrapper.success(HttpStatus.BAD_REQUEST.value(), "有必传参数为空", null);
        }
        ResponseWrapper responseWrapper =  warehouseFeign.updateBatch(dCfxxsjyVO);
        // 推送数据
        if (responseWrapper.isSuccess() && 200==responseWrapper.getInfoCode()) {
            if(5 == dCfxxsjyVO.getSfba()) { // 审核通过，下发库级
                List<String> cfbhs = dCfxxsjyVO.getCfbhs();
                for (String cfxh : cfbhs) {
                    DCfxxsjyVO dCfxxsjy = new DCfxxsjyVO();
                    dCfxxsjy.setKddm(dCfxxsjyVO.getKddm());
                    dCfxxsjy.setCfxh(cfxh);
                    ResponseWrapper result = warehouseFeign.getWarehouseDetail(dCfxxsjy);
                    DCfxxsjyVO cfxxsjyInfo = JsonUtils.parse(JsonUtils.serialize(result.getData()),DCfxxsjyVO.class);
                    JSONObject obj = (JSONObject) JSONObject.toJSON(cfxxsjyInfo);
                    String sendResult = pushService.push(obj,"storehouseApi");
                    if(StringUtils.isNotEmpty(sendResult)) {
                        dCfxxsjy.setSendResult(sendResult);
                        warehouseFeign.updateSendResult(dCfxxsjy);
                    }
                }
            }
        }
        return responseWrapper;
    }

    @DeleteMapping(value = "/warehouse/{kddm}/{cfxh}")
    @ApiOperation(value = "根据仓房编号删除仓房信息", notes = "参数：仓房编号")
    public ResponseWrapper delete(@PathVariable("kddm") String kddm,@PathVariable("cfxh") String cfxh) {
        return warehouseFeign.delete(kddm,cfxh);
    }
}
