package cn.com.goldenwater.dcproj.service.impl; import cn.com.goldenwater.core.persistence.CrudDao; import cn.com.goldenwater.core.service.AbstractCrudService; import cn.com.goldenwater.dcproj.constValue.CommonLabel; import cn.com.goldenwater.dcproj.constValue.SplitValue; import cn.com.goldenwater.dcproj.dao.*; import cn.com.goldenwater.dcproj.model.*; import cn.com.goldenwater.dcproj.param.BisInspRsvrynPblmMendParam; import cn.com.goldenwater.dcproj.param.GwComFileParam; import cn.com.goldenwater.dcproj.service.AttRsBaseService; import cn.com.goldenwater.dcproj.service.BisInspRsvrynPblmMendService; import cn.com.goldenwater.dcproj.service.GwComFileService; import cn.com.goldenwater.dcproj.utils.*; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import org.apache.commons.collections.map.HashedMap; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.File; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; /** * @author lune * @date 2020-7-7 */ @Service public class BisInspRsvrynPblmMendServiceImpl extends AbstractCrudService implements BisInspRsvrynPblmMendService { private Logger logger = LoggerFactory.getLogger(getClass()); private static String accessToken = ""; @Value("${mwr.ducha.url}") private String quanguoUrl; @Value("${hunan.phone}") private String phone; @Value("${quanguocode}") private String smscode; @Value("${getFile.prefix}") public String prefix; @Autowired private OlBisInspOrgDao olBisInspOrgDao; @Autowired private BisInspRsvrynPblmMendDao bisInspRsvrynPblmMendDao; @Autowired private GwComFileDao gwComFileDao; @Autowired private AttAdBaseDao attAdBaseDao; @Value("${web.upload-path}") public String fileDir; @Autowired private BisInspRsvrynRgstrDao bisInspRsvrynRgstrDao; @Autowired private GwComFileService gwComFileService; public BisInspRsvrynPblmMendServiceImpl(BisInspRsvrynPblmMendDao bisInspRsvrynPblmMendDao) { super(bisInspRsvrynPblmMendDao); this.bisInspRsvrynPblmMendDao = bisInspRsvrynPblmMendDao; } @Override public PageInfo findRsvrPblmPage(BisInspRsvrynPblmMendParam bisInspRsvrynPblmMendParam) { if (StringUtils.isNotBlank(bisInspRsvrynPblmMendParam.getAdCode())) { bisInspRsvrynPblmMendParam.setAdCode(AdLevelUtil.SubAd(bisInspRsvrynPblmMendParam.getAdCode()).get(SplitValue.SUBAD).toString()); } PageHelper.startPage(bisInspRsvrynPblmMendParam); List result = bisInspRsvrynPblmMendDao.findRsvrPblmList(bisInspRsvrynPblmMendParam); if (result.size() > 0) { result.forEach(mend -> { List gwComFiles = gwComFileDao.findFileByBiz(mend.getId()); if (gwComFiles != null && gwComFiles.size() > 0) { gwComFiles = gwComFiles.stream().filter(file -> "MEND_EXTRA".equals(file.getBizType())).collect(Collectors.toList()); } mend.setGwComFiles(gwComFiles); }); } PageInfo pageInfo = new PageInfo<>(result); return pageInfo; } /** * 每日凌晨一点定时导入小水库问题数据 */ @Override public void getQuanguo() { //登录 BisInspAllRlationPers bisInspAllRlationPers = this.login(); Map params = new HashMap<>(); if (bisInspAllRlationPers != null) { Map headerMap = new HashMap<>(); headerMap.put(CommonLabel.ACCESS_TOKEN, accessToken); headerMap.put(CommonLabel.PERSID, bisInspAllRlationPers.getGuid()); List attAdBases = attAdBaseDao.getAdData("000000000000"); Calendar calendar = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String entm = DateUtils.Calendar2Str(calendar, "yyyy-MM-dd HH:mm:ss"); calendar.add(Calendar.DAY_OF_MONTH, -3);//今天的时间减三天 String sttm = DateUtils.Calendar2Str(calendar, "yyyy-MM-dd HH:mm:ss"); logger.info("-------------开始导入部里数据----------------"); for (AttAdBase attAdBase : attAdBases) { //设置省份导入 String adCode = attAdBase.getAdCode(); params.put("adCode", AdLevelUtil.getAddvcd(adCode)); /*params.put("adCode", "53");*/ params.put("startTime", sttm); params.put("endTime", entm); List bisInspRsvrynPblmMends = getBisInspRects(bisInspAllRlationPers, params, headerMap); //获取小水库数据并插入本地库 // insertRsvr(bisInspRsvrynPblmMends, bisInspAllRlationPers, params, headerMap); bisInspRsvrynPblmMends.stream().forEach(bisInspRsvrynPblmMend -> { bisInspRsvrynPblmMendDao.insertRsvr(bisInspRsvrynPblmMend); //插入附件信息,下载附件文件 String fileBizId = bisInspRsvrynPblmMend.getId(); if (downloadFile(fileBizId, headerMap)) { //下载成功 logger.info("下载成功"); } else { //下载失败 logger.info("下载失败"); } //如果附件已经插入则放弃,如果没有则进行插入 }); } logger.info("-------------导入部里数据结束----------------"); } } /** * 调用部里登录接口 * * @return */ public BisInspAllRlationPers login() { String apiUrl = quanguoUrl + "/bis/insp/loginByCode"; Map params = new HashMap<>(); params.put("phone", phone); params.put("code", smscode); String content = HttpClientUtils.doHttpsPost(apiUrl, params, new HashedMap()); JSONObject jsonObject = JSONObject.fromObject(content); //登录结果返回 if (jsonObject != null && jsonObject.size() > 3) { //获取token accessToken = jsonObject.getString(CommonLabel.ACCESS_TOKEN); String data = jsonObject.getString("data"); JSONObject object = JSONObject.fromObject(data); return (BisInspAllRlationPers) JSONObject.toBean(object, BisInspAllRlationPers.class); } return new BisInspAllRlationPers(); } /** * 下发通知,问题反馈 * * @param params * @param headerMap * @param */ private void sendInform(Map params, Map headerMap, List bisInspRsvrynPblmMends) { /* String rectIds = rectList.stream().map(n -> n.getId()).collect(Collectors.joining(",")); params.clear(); params.put("rectIds", rectIds); String rectpblmUrl = quanguoUrl + "/api/bis/insp/rect/findRecPblmListByRectIds"; HttpClientUtils.doHttpsPost(rectpblmUrl, params, headerMap); //通知下发成功,更改获取通知状态 String rectMsgUrl = quanguoUrl + "/api/bis/insp/rect/restRectByIds"; HttpClientUtils.doHttpsPost(rectMsgUrl, params, headerMap); //问题反馈成功,信息反馈(未部署) String rectPortUrl = quanguoUrl + "/api/bis/insp/rect/restRectPblmByIds"; HttpClientUtils.doHttpsPost(rectPortUrl, params, headerMap);*/ } /** * 获取小水库数据并插入本地库 * * @param bisInspAllRlationPers * @param params * @param headerMap */ private void insertRsvr(List bisInspRsvrynPblmMends, BisInspAllRlationPers bisInspAllRlationPers, Map params, Map headerMap) { /* List list = new ArrayList<>(); int delDataStep = 0; for (int i = 0; i < bisInspRsvrynPblmMends.size(); i++) { list.add(bisInspRsvrynPblmMends.get(i)); delDataStep++; if (delDataStep == 50) { bisInspRsvrynPblmMendDao.insertRsvr(list); list.clear(); delDataStep = 0; } if (i == bisInspRsvrynPblmMends.size() - 1) { bisInspRsvrynPblmMendDao.insertRsvr(list); list.clear(); } }*/ } /** * 下载数据 * * @param bisInspAllRlationPers * @param params * @param headerMap * @return */ private List getBisInspRects(BisInspAllRlationPers bisInspAllRlationPers, Map params, Map headerMap) { //OlBisInspOrg olBisInspOrg = olBisInspOrgDao.get(bisInspAllRlationPers.getOrgId()); //获取用户相关信息 String rectUrl = quanguoUrl + "/bis/insp/rsvr/pblm/mend/downLoadRsvrList"; Calendar date = Calendar.getInstance(); params.put("year", String.valueOf(date.get(Calendar.YEAR))); params.put("mnth", String.valueOf(date.get(Calendar.MONTH) + 1)); //params.put("rsName", "弄贯(二)水库"); String rectContent = ""; try { rectContent = HttpClientUtils.doHttpsPost2(rectUrl, params, headerMap); JSONObject jsonObject = JSONObject.fromObject(rectContent); JSONArray jsonArray = jsonObject.getJSONArray("data"); List bisInspRsvrynPblmMends; bisInspRsvrynPblmMends = JSONArray.toList(jsonArray, new BisInspRsvrynPblmMend(), new JsonConfig()); return bisInspRsvrynPblmMends; } catch (Exception e) { logger.info(rectContent); logger.info(e.getMessage()); return null; } } /** * 手动导入小水库数据 * * @param bisInspRsvrynPblmMendParam */ @Override public void importRsvrData(BisInspRsvrynPblmMendParam bisInspRsvrynPblmMendParam) { //调用部里登录接口 BisInspAllRlationPers bisInspAllRlationPers = this.login(); Map params = new HashMap<>(); if (bisInspAllRlationPers != null) { Map headerMap = new HashMap<>(); headerMap.put(CommonLabel.ACCESS_TOKEN, accessToken); headerMap.put(CommonLabel.PERSID, bisInspAllRlationPers.getGuid()); //获取用户相关信息 List attAdBases = attAdBaseDao.getAdData("000000000000"); for (AttAdBase attAdBase : attAdBases) { String adCode = attAdBase.getAdCode(); params.put("adCode", AdLevelUtil.getAddvcd(adCode)); List bisInspRsvrynPblmMends = getBisInspRects(bisInspAllRlationPers, params, headerMap); //获取小水库数据并插入本地库 /*insertRsvr(bisInspRsvrynPblmMends, bisInspAllRlationPers, params, headerMap);*/ bisInspRsvrynPblmMends.stream().forEach(bisInspRsvrynPblmMend -> { bisInspRsvrynPblmMendDao.insertRsvr(bisInspRsvrynPblmMend); }); } } } public Boolean downloadFile(String bizId, Map headerMap) { String rectUrl = quanguoUrl + "/file/findFileByBiz?bizId=" + bizId; Map params = new HashMap<>(); //params.put("bizId", bizId); String rectContent = ""; try { rectContent = HttpClientUtils.doHttpsPost(rectUrl, params, headerMap); JSONObject jsonObject = JSONObject.fromObject(rectContent); JSONArray jsonArray = jsonObject.getJSONArray("data"); List gwComFiles; gwComFiles = JSONArray.toList(jsonArray, new GwComFile(), new JsonConfig()); //拼接 访问地址做下载 for (GwComFile gwComFile : gwComFiles ) { String path = quanguoUrl + "/" + gwComFile.getFilePath(); fileDir = fileDir.replace("upload/", ""); String dirPath = fileDir + gwComFile.getFilePath().substring(0, gwComFile.getFilePath().lastIndexOf("/")); File pathFile = new File(dirPath); if (!pathFile.exists()) { pathFile.mkdirs(); } ; HttpsDownloadUtils.downloadFile(path, fileDir + gwComFile.getFilePath()); //插入插入本地数据库记录 if (null != gwComFileService.get(gwComFile.getId())) { gwComFileService.update(gwComFile); } else { gwComFileService.insert(gwComFile); } } return true; } catch (Exception ex) { logger.info(rectContent); logger.info(ex.getMessage()); return false; } } @Override public void updRevwInfo() { //调用部里登录接口 BisInspAllRlationPers bisInspAllRlationPers = this.login(); Map params = new HashMap<>(); String mwrUrl = quanguoUrl + "/bis/insp/rsvr/pblm/mend/findRsvrList"; Map headerMap = new HashMap<>(); headerMap.put(CommonLabel.ACCESS_TOKEN, accessToken); headerMap.put(CommonLabel.PERSID, bisInspAllRlationPers.getGuid()); params.put("revwInfo", "revwInfo"); params.put("persGuid", bisInspAllRlationPers.getGuid()); String mwrContent = HttpClientUtils.doHttpsPost2(mwrUrl, params, headerMap); JSONObject jsonObject = JSONObject.fromObject(mwrContent); JSONArray mwrJsonArray = jsonObject.getJSONArray("data"); List bisInspRsvrynPblmMends = JSONArray.toList(mwrJsonArray, new BisInspRsvrynPblmMend(), new JsonConfig()); for (BisInspRsvrynPblmMend bisInspRsvrynPblmMend : bisInspRsvrynPblmMends) { bisInspRsvrynPblmMendDao.updateRevwInfo(bisInspRsvrynPblmMend.getId(), bisInspRsvrynPblmMend.getRevwInfo()); } } @Override public int update2021(BisInspRsvrynPblmMend bisInspRsvrynPblmMend) { int update = update(bisInspRsvrynPblmMend); BisInspRsvrynRgstr bisInspRsvrynRgstr = new BisInspRsvrynRgstr(); String rgstrId = bisInspRsvrynPblmMend.getRgstrId(); bisInspRsvrynRgstr.setRgstrId(rgstrId); BisInspRsvrynPblmMendParam mendParam = new BisInspRsvrynPblmMendParam(); mendParam.setRsCode(bisInspRsvrynPblmMend.getRsCode()); // mendParam.setRsName(bisInspRsvrynPblmMend.getRsName()); // mendParam.setAdCode(bisInspRsvrynPblmMend.getAdCode()); List mendList = findList(mendParam); if (mendList != null) { //统计所有问题的状态得出登记表状态 String rectState = "2";//要求前端校验提交的数据(即当前修改的问题必须有值) for (BisInspRsvrynPblmMend mend : mendList) { if (mend.getRevwState() == null || !"2".equals(mend.getRevwState())) { rectState = "1"; break; } } bisInspRsvrynRgstr.setRectStat(rectState); } BisInspRsvrynRgstr rgstr = bisInspRsvrynRgstrDao.get(rgstrId); if (rgstr != null) { if (!Constant.STRING_TWO.equals(rgstr.getState())) { bisInspRsvrynRgstr.setState(Constant.STRING_ONE); } bisInspRsvrynRgstrDao.update(bisInspRsvrynRgstr); } List gwComFiles = bisInspRsvrynPblmMend.getGwComFiles(); // 为 佐证材料 类的文件 不能删除,所以直接加上 GwComFileParam param = new GwComFileParam(); param.setBizId(bisInspRsvrynPblmMend.getId()); param.setBizType("MEND_PROV"); List prov = gwComFileService.findList(param); if (gwComFiles != null && gwComFiles.size() > 0) { if (prov != null) { gwComFiles.addAll(prov); } gwComFileService.updateBiz(gwComFiles, bisInspRsvrynPblmMend.getId()); } return 0; } @Autowired private AttRsBaseService attRsBaseService; @Override public int insert2021(BisInspRsvrynPblmMend bisInspRsvrynPblmMend) { Optional.ofNullable(bisInspRsvrynPblmMend).map(BisInspRsvrynPblmMend::getRsCode).ifPresent(rsCode -> { AttRsBase attRsBase = attRsBaseService.get(rsCode); Optional.ofNullable(attRsBase).ifPresent(base -> { bisInspRsvrynPblmMend.setEngScal(base.getEngScal()); bisInspRsvrynPblmMend.setRsName(base.getRsName()); }); }); int insert = insert(bisInspRsvrynPblmMend); BisInspRsvrynRgstr bisInspRsvrynRgstr = new BisInspRsvrynRgstr(); String rgstrId = bisInspRsvrynPblmMend.getRgstrId(); bisInspRsvrynRgstr.setRgstrId(rgstrId); BisInspRsvrynPblmMendParam mendParam = new BisInspRsvrynPblmMendParam(); // mendParam.setRsCode(bisInspRsvrynPblmMend.getRsCode()); mendParam.setRsName(bisInspRsvrynPblmMend.getRsName()); mendParam.setAdCode(bisInspRsvrynPblmMend.getAdCode()); List mendList = findList(mendParam); if (mendList != null) { //统计所有问题的状态得出登记表状态 String rectState = "2";//要求前端校验提交的数据(即当前修改的问题必须有值) for (BisInspRsvrynPblmMend mend : mendList) { if (mend.getRevwState() == null || !mend.getRevwState().equals("2")) { rectState = "1"; break; } } bisInspRsvrynRgstr.setRectStat(rectState); } BisInspRsvrynRgstr rgstr = bisInspRsvrynRgstrDao.get(rgstrId); if (rgstr != null) { if (!Constant.STRING_TWO.equals(rgstr.getState())) { bisInspRsvrynRgstr.setState(Constant.STRING_ONE); } bisInspRsvrynRgstrDao.update(bisInspRsvrynRgstr); } List gwComFiles = bisInspRsvrynPblmMend.getGwComFiles(); if (gwComFiles != null && gwComFiles.size() > 0) { gwComFileService.updateBiz(gwComFiles, bisInspRsvrynPblmMend.getId()); } return 0; } @Override public PageInfo pagerPc(BisInspRsvrynPblmMendParam bisInspRsvrynPblmMendParam) { PageHelper.startPage(bisInspRsvrynPblmMendParam); List list = bisInspRsvrynPblmMendDao.findList(bisInspRsvrynPblmMendParam); return new PageInfo<>(list); } }