wuww
2025-05-04 d8a1ab25881275da008b2801119f36b51554f427
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package com.se.nsl.service;
 
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.se.nsl.config.PropertiesConfig;
import com.se.nsl.domain.po.DataPo;
import com.se.nsl.domain.po.Simu;
import com.se.nsl.domain.po.SimuData;
import com.se.nsl.helper.StringHelper;
import com.se.nsl.helper.WebHelper;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.gdal.ogr.Geometry;
import org.gdal.ogr.ogr;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.sql.Timestamp;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
@Slf4j
@Service
@SuppressWarnings("ALL")
public class ResolveService {
    @Resource
    SimuService simuService;
 
    @Resource
    PropertiesConfig config;
 
    public int start(Simu simu) {
        Date now = new Date();
        String date = StringHelper.YMDHMS2_FORMAT.format(now);
 
        // 将WKT转换为Geometry对象
        Geometry geom = Geometry.CreateFromWkt(simu.getGeom());
        if (geom.GetGeometryType() == ogr.wkbMultiPolygon) {
            geom = geom.GetGeometryRef(0);
        }
        double[] envelope = new double[4];
        geom.GetEnvelope(envelope);
 
        SimuData data = JSON.parseObject(simu.getData(), SimuData.class);
        data.setInPath(date);
        data.setOutPath(date);
        data.setEpsg(4548);
        data.setEnvelope(envelope);
 
        simu.setData(JSON.toJSONString(data));
        simu.setServiceName(date);
        simu.setStatus(1); // 0-创建仿真,1-预处理,2-分析中,10-完成,20-出错
        simu.setUpdateTime(new Timestamp(now.getTime()));
 
        int rows = simuService.updateById(simu);
        if (rows > 0) {
            asyncCall(simu);
        }
 
        return rows;
    }
 
    private void asyncCall(Simu simu) {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        executor.execute(new Runnable() {
            @Override
            @SneakyThrows
            public void run() {
                cope(simu);
            }
        });
        executor.shutdown();
    }
 
    private void cope(Simu simu) {
        try {
            DataPo data = JSONUtil.toBean(simu.getData(), DataPo.class);
 
            update(simu, 1, null);
            //gedbService.copeVectors(token, data, db);
 
            //update(simu, 3, null);
            //gedbService.copeDem(token, data);
 
            //update(simu, 4, null);
            //uwService.createRainFile(data);
 
            update(simu, 10, "完成");
        } catch (Exception ex) {
            log.error(ex.getMessage(), ex);
            update(simu, 20, ex.getMessage());
        }
    }
 
    private void update(Simu simu, int status, String rs) {
        simu.setStatus(status);
        if (null != rs) simu.setResult(rs);
        simu.setUpdateTime(WebHelper.getCurrentTimestamp());
 
        simuService.updateById(simu);
    }
 
    private void initArgs(){
 
    }
}