package cn.com.goldenwater.dcproj.service.impl.importex;
import cn.com.goldenwater.core.service.AbstractCrudService;
import cn.com.goldenwater.dcproj.constValue.ImpPblmEnum;
import cn.com.goldenwater.dcproj.dao.*;
import cn.com.goldenwater.dcproj.dto.BisInspRgstrDto;
import cn.com.goldenwater.dcproj.dto.BisInspRsvrRgstrPcDto;
import cn.com.goldenwater.dcproj.dto.BisInspSdRgstrDto;
import cn.com.goldenwater.dcproj.dto.PersListDto;
import cn.com.goldenwater.dcproj.model.*;
import cn.com.goldenwater.dcproj.param.*;
import cn.com.goldenwater.dcproj.service.BisInspAllRlationPersService;
import cn.com.goldenwater.dcproj.service.BisInspPblmService;
import cn.com.goldenwater.dcproj.service.GwComFileService;
import cn.com.goldenwater.dcproj.service.ImpPblmService;
import cn.com.goldenwater.dcproj.util.PtypeConversionUtil;
import cn.com.goldenwater.dcproj.utils.InspUtils;
import cn.com.goldenwater.dcproj.utils.ZipUtil;
import cn.com.goldenwater.dcproj.utils.export.FieldFormat;
import cn.com.goldenwater.dcproj.utils.impexcel.ExpAndImpUtil;
import cn.com.goldenwater.dcproj.utils.impexcel.ExpUtil;
import cn.com.goldenwater.dcproj.utils.impexcel.ImpUtil;
import cn.com.goldenwater.dcproj.utils.impexcel.ImportExcel;
import cn.com.goldenwater.dcproj.utils.impexcel.format.PblmFieldFormatExp;
import cn.com.goldenwater.dcproj.utils.impexcel.format.PblmFieldFormatImp;
import cn.com.goldenwater.id.util.UuidUtil;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
import static cn.com.goldenwater.dcproj.constValue.ImpPblmEnum.*;
import static cn.com.goldenwater.dcproj.utils.impexcel.ImpUtil.*;
import static cn.com.goldenwater.dcproj.utils.impexcel.ImportExcel.convertMapToBean;
import static cn.com.goldenwater.dcproj.utils.impexcel.field.ExcelFieldLists.pblmFieldArrays;
/**
*
* 水库问题导入Service实现类,业务逻辑主要处理部分
* 1)rollbackFor属性 只要有异常就会回滚
*
*
* @author liyz
* @date 2019/7/10 16:10
**/
@Service
@Transactional(rollbackFor = Exception.class)
public class ImpPblmServiceImpl extends AbstractCrudService implements ImpPblmService {
@Value("${export.templatePath}")
private String templatePath;
@Value("${impExcel.basePath}")
private String impExcelBashPath;
@Value("${web.upload-path}")
private String imgPath;
@Value("${getFile.prefix}")
private String imgPathPrefix;
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private ImpPblmDao impPblmDao;
@Autowired
private GwComFileService gwComFileService;
@Autowired
private BisInspPblmService bisInspPblmService;
@Autowired
private ObjInspPblmsDao objInspPblmsDao;
@Autowired
private ObjKeyPblmsDao objKeyPblmsDao;
@Autowired
private BisInspRsvrRgstrDao bisInspRsvrRgstrDao;
@Autowired
private BisInspSvwtAreaRgstrDao bisInspSvwtAreaRgstrDao;
@Autowired
private BisInspSvwtWuntRgstrDao bisInspSvwtWuntRgstrDao;
@Autowired
private BisInspPblmDao bisInspPblmDao;
@Autowired
private AttWagaRgstrDao attWagaRgstrDao;
@Autowired
private BisInspSdRgstrDao bisInspSdRgstrDao;
@Autowired
private BisInspSwhsRgstrDao bisInspSwhsRgstrDao;
@Autowired
private BisInspWiuRgstrDao bisInspWiuRgstrDao;
@Autowired
private BisInspAllObjDao bisInspAllObjDao;
@Autowired
private BisInspKeyRegisterSectionDao bisInspKeyRegisterSectionDao;
@Autowired
private BisInspAllRlationPersService bisInspAllRlationPersService;
private int updateSuccessCount = 0;
private int insertSuccessCount = 0;
/**
* 要检查问题标准的类型
*/
private static String[] checkedOrgTypes = new String[]{
ImpPblmEnum.IMP_REVER.getOrgType(),
ImpPblmEnum.IMP_WAGA.getOrgType(),
ImpPblmEnum.IMP_SD.getOrgType(),
ImpPblmEnum.IMP_SWHS.getOrgType(),
ImpPblmEnum.IMP_WIU.getOrgType()
};
public ImpPblmServiceImpl(ImpPblmDao impPblmDao) {
super(impPblmDao);
this.impPblmDao = impPblmDao;
}
@Override
public void downloadTemplate(HttpServletResponse response,String userId,String orgType,String orgIds,String datas,String orgId) throws Exception{
// if(orgType.equals(orgIds)){
// orgIds = "";
// }
ImpPblmEnum impPblmEnum = ImpPblmEnum.getEnumByOrgType(orgType);
if(impPblmEnum == null){
return;
}
switch (impPblmEnum) {
case IMP_REVER:
// 水库
this.downloadTemplateRever(response, userId, orgType, orgIds ,datas,orgId);
break;
case IMP_WAGA:
// 水闸
this.downloadTemplateWaga(response, userId, orgType, orgIds,datas,orgId);
break;
case IMP_EMPWT:
// 水利工程建设
this.downloadTemplateKeyReg(response, userId, orgType, orgIds,datas,orgId);
break;
case IMP_EMPWTRUN:
// 水利工程运行
this.downloadTemplateKeyReg(response, userId, orgType, orgIds,datas,orgId);
break;
case IMP_SD:
// 淤地坝
this.downloadTemplateSd(response, userId, orgIds, impPblmEnum,datas,orgId);
break;
case IMP_WIU:
// 取水口
this.downloadTemplateWiu(response, userId, orgIds, impPblmEnum,datas,orgId);
break;
case IMP_SWHS:
// 水源地
this.downloadTemplateSwhs(response, userId, orgIds, impPblmEnum,datas,orgId);
break;
case IMP_SVWT:
// 节水管理与评价
this.downloadTemplateSvwt(response, userId, orgIds, impPblmEnum, datas,orgId);
break;
case IMP_WUNT:
// 用水单位抽查
this.downloadTemplateWunt(response, userId, orgIds, impPblmEnum,datas,orgId);
break;
default:
break;
}
}
private Object getConverDatas(String datas,Object object){
try {
if(datas == null){
return object;
}
return JSONObject.parseObject(datas, object.getClass());
}catch (Exception e){
e.printStackTrace();
}
return object;
}
public void downloadTemplateRever(HttpServletResponse response,String userId,String orgType,
String orgIds,String datas,String orgId) throws Exception{
ReverParam reverParam = (ReverParam)this.getConverDatas(datas,new ReverParam());
reverParam.setOrgIds(InspUtils.setOrgIds(orgIds));
reverParam.setPersId(userId);
reverParam.setOrgId(orgId);
List pblmList=bisInspPblmDao.findReverPlbmList(reverParam);
// 模板路径
String filePath = templatePath + File.separator + "pblmSk.xls";
// SHEET名称
String sheetName = "水库问题";
// 文件名称带后缀
String fileName = sheetName + ".xls";
// startRow
int startRow = 2;
// 使用通用的下载模板的方法
List