package com.onemap.analyse.task; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.onemap.analyse.domain.*; import com.onemap.analyse.mapper.*; import com.onemap.analyse.utils.DozerUtils; import com.onemap.analyse.utils.NpoiHelper; import com.onemap.common.core.utils.StringUtils; import com.onemap.common.core.web.domain.RequestResult; import com.onemap.common.security.utils.SecurityUtils; import org.apache.commons.io.FileUtils; import org.apache.poi.xwpf.usermodel.*; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth; 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.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.math.BigInteger; import java.text.SimpleDateFormat; import java.util.*; import static com.onemap.analyse.utils.Fxfw2SdeUtils.fzxzvector2Sde; /** * 策划生成模块定时刷新任务 */ @Component public class ChscSchedule { //间隔时间 单位ms public static final long TIME_INTERVAL = 1 * 15000; //任务状态标识码 private RwztDTO Rwzt = new RwztDTO(); private XzlbDTO xzlbDTO = new XzlbDTO(); private FxfwDictDTO fxfwDictDTO = new FxfwDictDTO(); @Autowired private FzxzMapper fzxzMapper; @Autowired private FzxzXzyzMapper fzxzXzyzMapper; @Resource private HgxfxMapper hgxfxMapper; @Resource HgxfxHgscxMapper hgxfxHgscxMapper; @Resource HgxfxScxMapper hgxfxScxMapper; @Resource private FxrwrzMapper fxrwrzMapper; @Resource private FzssChscMapper fzssChscMapper; @Resource private FzssChscFileMapper fzssChscFileMapper; @Resource private HgxfxTemplateMapper hgxfxTemplateMapper; //合规性分析python方法名标识 @Value("${Hgxfx.functionId}") private String functionId; @Value("${Hgxfx.temp}") private String temp; private static final Logger log = LoggerFactory.getLogger(ChscSchedule.class); @Async("taskExecutor") @Scheduled(fixedDelay = TIME_INTERVAL) public void ChscStatus() { try { QueryWrapper wrapper = new QueryWrapper(); wrapper.eq("rwzt", Rwzt.getNoJX()); //以创建时间正序排列 wrapper.orderByAsc("cjsj"); //每次只操作一条记录 List ress = fzssChscMapper.selectList(wrapper); if (ress.size() > 0) { FzxzChscDTO zhxzChsc = ress.get(0); //更新策划生成任务状态 QueryWrapper chscwrapper = new QueryWrapper(); chscwrapper.eq("bsm", zhxzChsc.getBsm()); zhxzChsc.setRwjd(1); zhxzChsc.setRwzt(Rwzt.getCreate()); fzssChscMapper.update(zhxzChsc, chscwrapper); //获取分析范围 String curfxfw = ""; if (zhxzChsc.getFwlx() == fxfwDictDTO.getShp()) { FzssChscFileDTO fileDto = fzssChscFileMapper.selectOne(new QueryWrapper().eq("bsm", zhxzChsc.getXzfw())); curfxfw = fileDto.getWj(); } //插入任务日志 FxrwrzDTO rzDto = new FxrwrzDTO(); rzDto.setRwbsm(zhxzChsc.getBsm()); rzDto.setRwlx("策划生成"); rzDto.setRzlr("项目策划生成解析"); rzDto.setRzlx("info"); rzDto.setRzsj(new Date()); fxrwrzMapper.insert(rzDto); //根据选址类别区分进行任务分配执行 String rwlx = ""; if (zhxzChsc.getXzlb() == xzlbDTO.getXmxz()) {//项目选址 //TODO wanger 对接智慧选址 rwlx = "辅助选址"; FzxzDTO fzxzDTO = new FzxzDTO(); fzxzDTO.setBsm(zhxzChsc.getBsm()); fzxzDTO.setFwlx(zhxzChsc.getFwlx()); fzxzDTO.setJsdw(zhxzChsc.getSbdw()); fzxzDTO.setXmmc(zhxzChsc.getXmmc()); fzxzDTO.setXzfw(zhxzChsc.getXzfw()); fzxzDTO.setXzmj(zhxzChsc.getNydmj()); fzxzDTO.setYdmjbegin(zhxzChsc.getYdmjks()); fzxzDTO.setYdmjend(zhxzChsc.getYdmjjs()); fzxzDTO.setCjyh(zhxzChsc.getCjyh()); fzxzDTO.setSjy(zhxzChsc.getSjy()); fzxzDTO.setYdxz_bsm(zhxzChsc.getYdlx()); fzxzDTO.setRwzt(Rwzt.getCreate()); fzxzDTO.setRwly("OpenAPI"); fzxzMapper.insert(fzxzDTO); if (StringUtils.isNotEmpty(zhxzChsc.getYxyz())) { String yxyz = zhxzChsc.getYxyz(); List> list = null; try { ObjectMapper mapper = new ObjectMapper(); list = mapper.readValue(yxyz, new TypeReference>>() { }); } catch (Exception e) { e.printStackTrace(); } for (int i = 0; i < list.size(); i++) { FzxzXzyzDTO dto = DozerUtils.map(list.get(i), FzxzXzyzDTO.class); dto.setBsm(StringUtils.getUUID()); dto.setRwbsm(fzxzDTO.getBsm()); fzxzXzyzMapper.insert(dto); } } //TODO 入储备库 // FzssZhxzCbk cbk = zhxzChsc.MapTo(); // cbk.BSM = zhxzChsc.BSM; // var listFields = EsriClassField.ToFields(cbk); // PyUtils.Shp2Sde(shpfile, "KJGH.T_FZSS_ZHXZ_CBK", listFields); System.out.println("XZLB暂不支持" + zhxzChsc.getXzlb()); } else if (zhxzChsc.getXzlb() == xzlbDTO.getHgxfx()) { rwlx = "合规性分析"; //插入合规性分析主表 HgxfxDTO fzssHgxfx = DozerUtils.map(zhxzChsc, HgxfxDTO.class); fzssHgxfx.setCjyh(SecurityUtils.getUsername()); fzssHgxfx.setFxmj(zhxzChsc.getNydmj()); fzssHgxfx.setJsdw(zhxzChsc.getSbdw()); fzssHgxfx.setRwly("OpenAPI"); fzssHgxfx.setBsm(zhxzChsc.getBsm()); fzssHgxfx.setRwzt(Rwzt.getCreate()); //TODO 确认下是否需要任务进度字段 //fzssHgxfx.setRwjd(0); hgxfxMapper.insert(fzssHgxfx); //插入合规性分析分析因子表 //默认把基础分析写入到分析因子里面 QueryWrapper basefxyzwrapper = new QueryWrapper(); basefxyzwrapper.eq("kzxjb", 0); List basefxyz = hgxfxScxMapper.selectList(basefxyzwrapper); //查询看是否已配置分析因子模板,如果没有全部查询插入分析因子表 HgxfxTemplateDTO template = hgxfxTemplateMapper.selectOne(new QueryWrapper().eq("mbmc", zhxzChsc.getYwlx())); if (template != null) { QueryWrapper fxyzwrapper = new QueryWrapper(); fxyzwrapper.in("bsm", template.getFxyz().split(",")).orderByAsc("xssx"); List res = hgxfxScxMapper.selectList(fxyzwrapper); if (res.size() > 0) { basefxyz.addAll(res); } } else if (StringUtils.isNotEmpty(zhxzChsc.getYxyz())) { //查询审查项 默认把控制线级别等于0的也添加进去 QueryWrapper fxyzwrapper = new QueryWrapper(); fxyzwrapper.gt("kzxjb", 0).eq("status", 1); // fxyzwrapper.in("bsm", zhxzChsc.getYxyz().split(",")).orderByAsc("xssx"); List res = hgxfxScxMapper.selectList(fxyzwrapper); if (res.size() > 0) { basefxyz.addAll(res); } } for (HgxfxScxDTO cur : basefxyz) { HgxfxHgscxDTO scx = new HgxfxHgscxDTO(); scx.setBsm(StringUtils.getUUID()); scx.setRwbsm(zhxzChsc.getBsm()); scx.setScxbsm(cur.getBsm()); scx.setYsmc(cur.getYsmc()); hgxfxHgscxMapper.insert(scx); } //TODO 入储备库 // FzssZhxzCbk cbk = zhxzChsc.MapTo(); // cbk.BSM = zhxzChsc.BSM; // var listFields = EsriClassField.ToFields(cbk); // PyUtils.Shp2Sde(shpfile, "KJGH.T_FZSS_ZHXZ_CBK", listFields); } FzxzDTO fzxzDTO = new FzxzDTO(); fzxzDTO.setBsm(zhxzChsc.getBsm()); fzxzDTO.setFwlx(zhxzChsc.getFwlx()); fzxzDTO.setXzfw(curfxfw); RequestResult info = fzxzvector2Sde(fzxzDTO, rwlx); if (info != null) { System.out.println("策划生成分析范围数据入库失败"); } else { System.out.println("策划生成分析模块:" + zhxzChsc.getBsm() + "完成!!!!!!!! " + new Date().toString()); } //进度更新 zhxzChsc.setRwzt(Rwzt.getCreate()); zhxzChsc.setRwjd(3); fzssChscMapper.update(zhxzChsc, chscwrapper); } } catch (Exception e) { e.printStackTrace(); } } }