liurunyu
2024-09-10 c8934e53e8477189927da76b51177808f21a6348
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
package com.dy.pipIrrBase.block;
 
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.dy.common.webUtil.QueryResultVo;
import com.dy.pipIrrGlobal.daoBa.BaBlockMapper;
import com.dy.pipIrrGlobal.daoBa.BaMapCoordinatesMapper;
import com.dy.pipIrrGlobal.daoBa.BaMapGraphMapper;
import com.dy.pipIrrGlobal.daoPr.PrDivideMapper;
import com.dy.pipIrrGlobal.pojoBa.BaBlock;
import com.dy.pipIrrGlobal.pojoBa.BaMapCoordinates;
import com.dy.pipIrrGlobal.pojoBa.BaMapGraph;
import com.dy.pipIrrGlobal.voBa.VoBlock;
import com.dy.pipIrrGlobal.voBa.VoMapCoordinates;
import com.dy.pipIrrGlobal.voBa.VoMapGraph;
import com.dy.pipIrrGlobal.voPr.VoSimpleDivide;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.common.utils.PojoUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
 
@Slf4j
@Service
public class BlockSv {
 
    private BaBlockMapper dao;
 
    @Autowired
    private void setDao(BaBlockMapper dao){
        this.dao = dao;
    }
 
    @Autowired
    private BaMapGraphMapper baMapGraphMapper;
 
    @Autowired
    private BaMapCoordinatesMapper baMapCoordinatesMapper;
 
    @Autowired
    private PrDivideMapper prDivideMapper;
 
    /**
     * 得到一个片区
     * @param id 片区ID
     * @return 片区实体
     */
    public BaBlock selectById(Long id){
        return this.dao.selectByPrimaryKey(id) ;
    }
 
 
    /**
     * 得到所有片区
     * @return 所有片区集合
     */
    public QueryResultVo<List<BaBlock>> selectAll(){
        QueryResultVo<List<BaBlock>> rsVo = new QueryResultVo<>() ;
        rsVo.obj = this.dao.selectAll() ;
        return rsVo ;
    }    
    /**
     * 得到一个片区
     * @param vo 查询条件值对象
     * @return 片区实体
     */
    @SuppressWarnings("unchecked")
    public QueryResultVo<List<BaBlock>> selectSome(QueryVo vo){
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo) ;
        Long itemTotal = this.dao.selectTotal(params) ;
 
        QueryResultVo<List<BaBlock>> rsVo = new QueryResultVo<>() ;
        rsVo.pageSize = vo.pageSize ;
        rsVo.pageCurr = vo.pageCurr ;
        rsVo.calculateAndSet(itemTotal, params);
        rsVo.obj = this.dao.selectSome(params) ;
 
        return rsVo ;
    }
 
    /**
     * 根据指定条件获取片区,2024-08-14新增,替换原来的片区分页查询
     * @param vo
     * @return
     */
    public QueryResultVo<List<VoBlock>> getBlocks(QueryVo vo){
        vo.setPageCurr((vo.getPageCurr() -1) * vo.getPageSize());
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(vo) ;
        Long itemTotal = this.dao.getBlocksCount(params) ;
 
        JSONArray array_blocks = null;
        JSONArray array_mapGraphs = null;
 
        // 获取片区列表
        List<VoBlock> list_blocks = this.dao.getBlocks(params);
        if(list_blocks != null && list_blocks.size() > 0) {
            array_blocks = (JSONArray) JSON.toJSON(list_blocks);
            for (int i = 0; i < array_blocks.size(); i++) {
                JSONObject job_block = array_blocks.getJSONObject(i);
                Long blockId = job_block.getLong("id");
 
                // 处理一个新的片区前清空graphs,避免上一个片区的graphs存留数据造成数据错误
                array_mapGraphs = null;
                // 根据片区ID获取地图图形列表
                List<VoMapGraph> list_mapGraphs = this.dao.gertMapGraphsByBlockId(blockId);
                if(list_mapGraphs != null && list_mapGraphs.size() > 0) {
                    array_mapGraphs = (JSONArray) JSON.toJSON(list_mapGraphs);
                    for (int j = 0; j < array_mapGraphs.size(); j++) {
                        JSONObject job_mapGraph = array_mapGraphs.getJSONObject(j);
                        job_mapGraph = array_mapGraphs.getJSONObject(j);
                        Long graphId = job_mapGraph.getLong("graphId");
                        String graphType = job_mapGraph.getString("type");
 
                        // 根据地图图形ID获取地图图形坐标列表,并添加到地图图形对象中
                        List<VoMapCoordinates> list_mapCoordinates = this.dao.getCoordinatesByGraphId(graphId);
                        if(list_mapCoordinates != null && list_mapCoordinates.size() > 0) {
                            JSONArray array_mapCoordinates = (JSONArray) JSON.toJSON(list_mapCoordinates);
 
                            JSONArray[] arrays = new JSONArray[1];
                            arrays[0] = array_mapCoordinates;
                            job_mapGraph.put("coordinates", arrays);
                        }
                    }
                }
 
                // 将地图图形数组添加到片区中
                if(array_mapGraphs != null && array_mapGraphs.size() > 0) {
                    job_block.put("graphs", array_mapGraphs);
                }
            }
        }else {//增加健壮性
            QueryResultVo<List<VoBlock>> rsVo = new QueryResultVo<>() ;
            return rsVo ;
        }
 
        QueryResultVo<List<VoBlock>> rsVo = new QueryResultVo<>() ;
        rsVo.pageSize = vo.pageSize ;
        rsVo.pageCurr = vo.pageCurr ;
        rsVo.calculateAndSet(itemTotal, params);
        //rsVo.obj = this.dao.getBlocks(params) ;
        rsVo.obj = array_blocks.toList(VoBlock.class);
 
        return rsVo ;
    }
 
    /**
     * 保存实体
     * @param po 实体
     * @return 数量
     */
    @Transactional
    public Long save(BaBlock po){
        //return this.dao.putin(po) ;
        this.dao.putin(po);
        return po.getId();
    }
 
    /**
     * 保存修改实体
     * @param po 实体
     * @return 数量
     */
    @Transactional
    public int update(BaBlock po){
        return this.dao.updateByPrimaryKeySelective(po) ;
    }
 
    /**
     * 保存修改实体
     * @param id 实体ID
     * @return 数量
     */
    @Transactional
    public int delete(Long id){
        return this.dao.deleteLogicById(id) ;
    }
 
    /**
     * 添加地图图形
     * @param po
     * @return
     */
    public Long addMapGraph(BaMapGraph po) {
        this.baMapGraphMapper.insert(po);
        return po.getId();
    }
 
    /**
     * 添加地图图形坐标
     * @param po
     * @return
     */
    public Long addMapCoordinate(BaMapCoordinates po) {
        this.baMapCoordinatesMapper.insert(po);
        return po.getId();
    };
 
    /**
     * 根据片区ID删除地图图形
     * @param blockId
     * @return
     */
    public int deleteMapGraph(Long blockId) {
        return this.baMapGraphMapper.deleteByBlockId(blockId);
    }
 
    /**
     * 根据片区ID删除该片区下的坐标点
     * @param blockId
     * @return
     */
    public int deleteMapCoordinates(Long blockId) {
        return this.baMapCoordinatesMapper.deleteByBlockId(blockId);
    }
 
    /**
     * 获取片区、分水房联动视图,添加农户时使用
     * @return
     */
    public JSONArray getBlockDivides() {
        JSONArray array_blocks = null;
        JSONArray array_divides = null;
        JSONArray array_result = new JSONArray();
 
        List<BaBlock> list_blocks = dao.selectAll();
        if(list_blocks != null && list_blocks.size() > 0) {
            array_blocks = (JSONArray) JSON.toJSON(list_blocks);
            for (int i = 0; i < array_blocks.size(); i++) {
                JSONObject job_block = array_blocks.getJSONObject(i);
                JSONObject job_blockNew = new JSONObject();
                job_blockNew.put("value", job_block.getLong("id").toString());
                job_blockNew.put("label", job_block.getString("name"));
 
                List<VoSimpleDivide> list_divides = Optional.ofNullable( prDivideMapper.getDividesByBlockId(job_block.getLong("id"))).orElse(new ArrayList<>());
                array_divides = (JSONArray) JSON.toJSON(list_divides);
                job_blockNew.put("children", array_divides);
                array_result.add(job_blockNew);
            }
            return array_result;
        }else {
            return new JSONArray();
        }
    }
}