Showing
13 changed files
with
638 additions
and
47 deletions
... | ... | @@ -20,6 +20,8 @@ import com.ash.util.UUIDGenerator; |
20 | 20 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
21 | 21 | import lombok.extern.slf4j.Slf4j; |
22 | 22 | import org.apache.commons.collections.CollectionUtils; |
23 | +import org.apache.commons.lang3.StringUtils; | |
24 | +import org.apache.ibatis.annotations.Param; | |
23 | 25 | import org.springframework.beans.BeanUtils; |
24 | 26 | import org.springframework.web.bind.annotation.*; |
25 | 27 | import org.springframework.web.multipart.MultipartFile; |
... | ... | @@ -30,10 +32,9 @@ import javax.servlet.http.HttpServletResponse; |
30 | 32 | import java.io.IOException; |
31 | 33 | import java.net.URLEncoder; |
32 | 34 | import java.nio.charset.StandardCharsets; |
33 | -import java.util.ArrayList; | |
34 | -import java.util.List; | |
35 | -import java.util.Map; | |
36 | -import java.util.Optional; | |
35 | +import java.util.*; | |
36 | +import java.util.concurrent.ExecutorService; | |
37 | +import java.util.concurrent.Executors; | |
37 | 38 | import java.util.stream.Collectors; |
38 | 39 | |
39 | 40 | @RestController |
... | ... | @@ -50,6 +51,8 @@ public class CaseController extends BaseController { |
50 | 51 | @Resource |
51 | 52 | private CaseAnalysisService caseAnalysisService; |
52 | 53 | |
54 | + private final ExecutorService executorService = Executors.newFixedThreadPool(10); | |
55 | + | |
53 | 56 | |
54 | 57 | @PostMapping("/save") |
55 | 58 | public JsonResult save(@RequestBody Case data) { |
... | ... | @@ -184,8 +187,22 @@ public class CaseController extends BaseController { |
184 | 187 | } |
185 | 188 | |
186 | 189 | @GetMapping(value = "/reAnalysis") |
187 | - public JsonResult reAnalysis() throws IOException { | |
188 | - return JsonResult.ok(); | |
190 | + public JsonResult reAnalysis(@RequestParam(value = "id", required = false) String id) throws IOException { | |
191 | + executorService.execute(() -> { | |
192 | + try { | |
193 | + if (StringUtils.isNotBlank(id)) { | |
194 | + caseService.analysisByIds(Collections.singletonList(id)); | |
195 | + } else { | |
196 | + List<Case> dataList = caseService.listUnAnalysis(); | |
197 | + caseService.analysis(dataList); | |
198 | + } | |
199 | + | |
200 | + } catch (Exception ex) { | |
201 | + log.error(ex.getMessage()); | |
202 | + } | |
203 | + }); | |
204 | + return JsonResult.ok("重新解析开始"); | |
205 | + | |
189 | 206 | } |
190 | 207 | |
191 | 208 | @PostMapping("/saveAnalysis") | ... | ... |
... | ... | @@ -6,6 +6,7 @@ import com.ash.base.BaseController; |
6 | 6 | import com.ash.base.JsonResult; |
7 | 7 | import com.ash.base.OptionStatus; |
8 | 8 | import com.ash.base.excelOpt.ExcelErrorMessage; |
9 | +import com.ash.entity.Case; | |
9 | 10 | import com.ash.entity.FileData; |
10 | 11 | import com.ash.entity.WarningInstance; |
11 | 12 | import com.ash.entity.WarningInstanceAnalysis; |
... | ... | @@ -20,6 +21,7 @@ import com.ash.util.UUIDGenerator; |
20 | 21 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
21 | 22 | import lombok.extern.slf4j.Slf4j; |
22 | 23 | import org.apache.commons.collections.CollectionUtils; |
24 | +import org.apache.commons.lang3.StringUtils; | |
23 | 25 | import org.springframework.beans.BeanUtils; |
24 | 26 | import org.springframework.web.bind.annotation.*; |
25 | 27 | import org.springframework.web.multipart.MultipartFile; |
... | ... | @@ -30,10 +32,9 @@ import javax.servlet.http.HttpServletResponse; |
30 | 32 | import java.io.IOException; |
31 | 33 | import java.net.URLEncoder; |
32 | 34 | import java.nio.charset.StandardCharsets; |
33 | -import java.util.ArrayList; | |
34 | -import java.util.List; | |
35 | -import java.util.Map; | |
36 | -import java.util.Optional; | |
35 | +import java.util.*; | |
36 | +import java.util.concurrent.ExecutorService; | |
37 | +import java.util.concurrent.Executors; | |
37 | 38 | import java.util.stream.Collectors; |
38 | 39 | |
39 | 40 | @RestController |
... | ... | @@ -49,6 +50,8 @@ public class WarningInstanceController extends BaseController { |
49 | 50 | @Resource |
50 | 51 | private FileDataService fileDataService; |
51 | 52 | |
53 | + private ExecutorService executorService = Executors.newFixedThreadPool(10); | |
54 | + | |
52 | 55 | @PostMapping(value = "/list") |
53 | 56 | public JsonResult list(@RequestBody WarningInstance warningInstance) { |
54 | 57 | try { |
... | ... | @@ -195,8 +198,23 @@ public class WarningInstanceController extends BaseController { |
195 | 198 | |
196 | 199 | |
197 | 200 | @GetMapping(value = "/reAnalysis") |
198 | - public JsonResult reAnalysis() throws IOException { | |
199 | - return JsonResult.ok(); | |
201 | + public JsonResult reAnalysis(@RequestParam(value = "id", required = false) String id) throws IOException { | |
202 | + executorService.execute(() -> { | |
203 | + try { | |
204 | + if (StringUtils.isNotBlank(id)) { | |
205 | + warningInstanceService.analysisByIds(Collections.singletonList(id)); | |
206 | + } else { | |
207 | + List<WarningInstance> dataList = warningInstanceService.listUnAnalysis(); | |
208 | + warningInstanceService.analysis(dataList); | |
209 | + } | |
210 | + | |
211 | + } catch (Exception ex) { | |
212 | + log.error(ex.getMessage()); | |
213 | + | |
214 | + } | |
215 | + }); | |
216 | + return JsonResult.ok("重新解析开始"); | |
217 | + | |
200 | 218 | } |
201 | 219 | |
202 | 220 | @PostMapping("/saveAnalysis") | ... | ... |
... | ... | @@ -35,7 +35,7 @@ public class WarningInstanceExcelData implements Serializable { |
35 | 35 | @ColumnWidth(25) |
36 | 36 | private Date alarmDate; |
37 | 37 | |
38 | - @ExcelCheck(canEmpty = false, dateFormatValid = "yyyy-MM-dd HH:mm:ss") | |
38 | + @ExcelCheck(canEmpty = false) | |
39 | 39 | @ExcelProperty(value = "报警电话", index = 2) |
40 | 40 | @ContentStyle(dataFormat = 49) |
41 | 41 | @ColumnWidth(25) | ... | ... |
... | ... | @@ -16,11 +16,13 @@ import com.ash.base.excelOpt.ExcelErrorMessage; |
16 | 16 | import com.ash.base.excelOpt.ValidateAnnotation; |
17 | 17 | import com.ash.entity.dao.CaseMapper; |
18 | 18 | import com.ash.excelData.CaseExcelData; |
19 | +import com.ash.service.CaseService; | |
19 | 20 | import lombok.Getter; |
20 | 21 | import lombok.extern.slf4j.Slf4j; |
21 | 22 | import org.apache.commons.collections.CollectionUtils; |
22 | 23 | import org.apache.commons.lang3.StringUtils; |
23 | 24 | |
25 | +import javax.annotation.Resource; | |
24 | 26 | import java.lang.reflect.Field; |
25 | 27 | import java.text.ParseException; |
26 | 28 | import java.text.SimpleDateFormat; |
... | ... | @@ -147,7 +149,8 @@ public class CaseExcelListener extends AnalysisEventListener<CaseExcelData> |
147 | 149 | endPosition = (i + 1) * singleThreadDealcount; |
148 | 150 | } |
149 | 151 | CaseMapper caseMapper = SpringJobBeanFactory.getBean(CaseMapper.class); |
150 | - CaseThread thread = new CaseThread(count, caseMapper, list, startPosition, endPosition); | |
152 | + CaseService caseService= SpringJobBeanFactory.getBean(CaseService.class); | |
153 | + CaseThread thread = new CaseThread(count, caseMapper, caseService, list, startPosition, endPosition); | |
151 | 154 | executor.execute(thread); |
152 | 155 | } |
153 | 156 | |
... | ... | @@ -203,7 +206,7 @@ public class CaseExcelListener extends AnalysisEventListener<CaseExcelData> |
203 | 206 | try { |
204 | 207 | SimpleDateFormat format = new SimpleDateFormat(excelCheck.dateFormatValid()); |
205 | 208 | format.setLenient(false); |
206 | - format.parse(format.format(value.toString())); | |
209 | + format.parse(format.format(value)); | |
207 | 210 | |
208 | 211 | } catch (Exception e) { |
209 | 212 | addError(rowIndex + 1, annotation.getHeadName() + "时间格式错误!"); | ... | ... |
1 | 1 | package com.ash.listener; |
2 | 2 | |
3 | 3 | import com.ash.entity.Case; |
4 | +import com.ash.entity.WarningInstance; | |
4 | 5 | import com.ash.entity.dao.CaseMapper; |
5 | 6 | import com.ash.enums.AnalysisStatusEnum; |
6 | 7 | import com.ash.enums.ReviewStatusEnum; |
7 | 8 | import com.ash.excelData.CaseExcelData; |
9 | +import com.ash.service.CaseService; | |
10 | +import com.ash.util.UUIDGenerator; | |
8 | 11 | import org.springframework.beans.BeanUtils; |
9 | 12 | import org.springframework.stereotype.Component; |
10 | 13 | |
14 | +import javax.annotation.Resource; | |
11 | 15 | import java.util.ArrayList; |
12 | 16 | import java.util.Collections; |
13 | 17 | import java.util.List; |
14 | 18 | import java.util.concurrent.CountDownLatch; |
19 | +import java.util.stream.Collectors; | |
15 | 20 | |
16 | 21 | @Component |
17 | 22 | public class CaseThread implements Runnable { |
... | ... | @@ -23,17 +28,19 @@ public class CaseThread implements Runnable { |
23 | 28 | private List<CaseExcelData> list = Collections.synchronizedList(new ArrayList<>()); |
24 | 29 | private CountDownLatch count; |
25 | 30 | private CaseMapper caseMapper; |
31 | + private CaseService caseService; | |
26 | 32 | |
27 | 33 | public CaseThread() { |
28 | 34 | } |
29 | 35 | |
30 | - public CaseThread(CountDownLatch count, CaseMapper mapper, | |
31 | - List<CaseExcelData> list, int startPosition, int endPosition) { | |
36 | + public CaseThread(CountDownLatch count, CaseMapper mapper, CaseService caseService, | |
37 | + List<CaseExcelData> list, int startPosition, int endPosition) { | |
32 | 38 | this.count = count; |
33 | 39 | this.list = list; |
34 | 40 | this.startPosition = startPosition; |
35 | 41 | this.endPosition = endPosition; |
36 | 42 | this.caseMapper = mapper; |
43 | + this.caseService = caseService; | |
37 | 44 | } |
38 | 45 | |
39 | 46 | @Override |
... | ... | @@ -44,11 +51,15 @@ public class CaseThread implements Runnable { |
44 | 51 | for (CaseExcelData data : subList) { |
45 | 52 | Case dbData = new Case(); |
46 | 53 | BeanUtils.copyProperties(data, dbData); |
47 | - dbData.setAnalysisStatus(AnalysisStatusEnum.unanalysis); | |
54 | + dbData.setAnalysisStatus(AnalysisStatusEnum.analysis); | |
48 | 55 | dbData.setReviewStatus(ReviewStatusEnum.UNAUDITED); |
56 | + String uuid = UUIDGenerator.uuid(); | |
57 | + dbData.setId(uuid); | |
49 | 58 | dataList.add(dbData); |
50 | 59 | } |
60 | + List<String> ids = dataList.stream().map(Case::getId).collect(Collectors.toList()); | |
51 | 61 | caseMapper.insertBatchSomeColumn(dataList); |
62 | + caseService.analysisByIds(ids); | |
52 | 63 | } catch (Exception ex) { |
53 | 64 | ex.printStackTrace(); |
54 | 65 | } finally { | ... | ... |
... | ... | @@ -16,6 +16,7 @@ import com.ash.base.excelOpt.ExcelErrorMessage; |
16 | 16 | import com.ash.base.excelOpt.ValidateAnnotation; |
17 | 17 | import com.ash.entity.dao.WarningInstanceMapper; |
18 | 18 | import com.ash.excelData.WarningInstanceExcelData; |
19 | +import com.ash.service.WarningInstanceService; | |
19 | 20 | import lombok.Getter; |
20 | 21 | import lombok.extern.slf4j.Slf4j; |
21 | 22 | import org.apache.commons.collections.CollectionUtils; |
... | ... | @@ -150,7 +151,8 @@ public class WarningInstanceExcelListener extends AnalysisEventListener<WarningI |
150 | 151 | endPosition = (i + 1) * singleThreadDealcount; |
151 | 152 | } |
152 | 153 | WarningInstanceMapper deadManMapper = SpringJobBeanFactory.getBean(WarningInstanceMapper.class); |
153 | - WarningInstanceThread thread = new WarningInstanceThread(count, deadManMapper, list, startPosition, endPosition); | |
154 | + WarningInstanceService warningInstanceService = SpringJobBeanFactory.getBean(WarningInstanceService.class); | |
155 | + WarningInstanceThread thread = new WarningInstanceThread(count, deadManMapper, warningInstanceService, list, startPosition, endPosition); | |
154 | 156 | executor.execute(thread); |
155 | 157 | } |
156 | 158 | |
... | ... | @@ -207,7 +209,7 @@ public class WarningInstanceExcelListener extends AnalysisEventListener<WarningI |
207 | 209 | try { |
208 | 210 | SimpleDateFormat format = new SimpleDateFormat(excelCheck.dateFormatValid()); |
209 | 211 | format.setLenient(false); |
210 | - format.parse(format.format(value.toString())); | |
212 | + format.parse(format.format(value)); | |
211 | 213 | |
212 | 214 | } catch (Exception e) { |
213 | 215 | addError(rowIndex + 1, annotation.getHeadName() + "时间格式错误!"); | ... | ... |
... | ... | @@ -5,13 +5,17 @@ import com.ash.entity.dao.WarningInstanceMapper; |
5 | 5 | import com.ash.enums.AnalysisStatusEnum; |
6 | 6 | import com.ash.enums.ReviewStatusEnum; |
7 | 7 | import com.ash.excelData.WarningInstanceExcelData; |
8 | +import com.ash.service.WarningInstanceService; | |
9 | +import com.ash.util.UUIDGenerator; | |
8 | 10 | import org.springframework.beans.BeanUtils; |
9 | 11 | import org.springframework.stereotype.Component; |
10 | 12 | |
13 | +import javax.annotation.Resource; | |
11 | 14 | import java.util.ArrayList; |
12 | 15 | import java.util.Collections; |
13 | 16 | import java.util.List; |
14 | 17 | import java.util.concurrent.CountDownLatch; |
18 | +import java.util.stream.Collectors; | |
15 | 19 | |
16 | 20 | @Component |
17 | 21 | public class WarningInstanceThread implements Runnable { |
... | ... | @@ -23,17 +27,19 @@ public class WarningInstanceThread implements Runnable { |
23 | 27 | private List<WarningInstanceExcelData> list = Collections.synchronizedList(new ArrayList<>()); |
24 | 28 | private CountDownLatch count; |
25 | 29 | private WarningInstanceMapper warningInstanceMapper; |
30 | + private WarningInstanceService warningInstanceService; | |
26 | 31 | |
27 | 32 | public WarningInstanceThread() { |
28 | 33 | } |
29 | 34 | |
30 | - public WarningInstanceThread(CountDownLatch count, WarningInstanceMapper mapper, | |
35 | + public WarningInstanceThread(CountDownLatch count, WarningInstanceMapper mapper, WarningInstanceService warningInstanceService, | |
31 | 36 | List<WarningInstanceExcelData> list, int startPosition, int endPosition) { |
32 | 37 | this.count = count; |
33 | 38 | this.list = list; |
34 | 39 | this.startPosition = startPosition; |
35 | 40 | this.endPosition = endPosition; |
36 | 41 | this.warningInstanceMapper = mapper; |
42 | + this.warningInstanceService = warningInstanceService; | |
37 | 43 | } |
38 | 44 | |
39 | 45 | |
... | ... | @@ -45,11 +51,15 @@ public class WarningInstanceThread implements Runnable { |
45 | 51 | for (WarningInstanceExcelData data : subList) { |
46 | 52 | WarningInstance dbData = new WarningInstance(); |
47 | 53 | BeanUtils.copyProperties(data, dbData); |
48 | - dbData.setAnalysisStatus(AnalysisStatusEnum.unanalysis); | |
54 | + dbData.setAnalysisStatus(AnalysisStatusEnum.analysis); | |
49 | 55 | dbData.setReviewStatus(ReviewStatusEnum.UNAUDITED); |
56 | + String uuid = UUIDGenerator.uuid(); | |
57 | + dbData.setId(uuid); | |
50 | 58 | dataList.add(dbData); |
51 | 59 | } |
60 | + List<String> ids = dataList.stream().map(WarningInstance::getId).collect(Collectors.toList()); | |
52 | 61 | warningInstanceMapper.insertBatchSomeColumn(dataList); |
62 | + warningInstanceService.analysisByIds(ids); | |
53 | 63 | } catch (Exception ex) { |
54 | 64 | ex.printStackTrace(); |
55 | 65 | } finally { | ... | ... |
... | ... | @@ -3,22 +3,26 @@ package com.ash.service; |
3 | 3 | import com.alibaba.excel.EasyExcel; |
4 | 4 | import com.alibaba.excel.exception.ExcelAnalysisException; |
5 | 5 | import com.alibaba.excel.exception.ExcelDataConvertException; |
6 | +import com.alibaba.fastjson.JSONObject; | |
6 | 7 | import com.ash.base.*; |
7 | 8 | import com.ash.base.excelOpt.ExcelErrorMessage; |
8 | 9 | import com.ash.entity.Case; |
10 | +import com.ash.entity.CaseAnalysis; | |
9 | 11 | import com.ash.entity.dao.CaseMapper; |
12 | +import com.ash.enums.AnalysisStatusEnum; | |
13 | +import com.ash.enums.ConformStatusEnum; | |
10 | 14 | import com.ash.excelData.CaseExcelData; |
11 | 15 | import com.ash.listener.CaseExcelListener; |
12 | -import com.ash.util.DateUtils; | |
13 | -import com.ash.util.MultipartFileToFileUtils; | |
14 | -import com.ash.util.ObjectValueOption; | |
15 | -import com.ash.util.UUIDGenerator; | |
16 | +import com.ash.util.*; | |
16 | 17 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
17 | 18 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
18 | 19 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
19 | 20 | import com.github.yulichang.query.MPJQueryWrapper; |
20 | 21 | import lombok.extern.slf4j.Slf4j; |
21 | 22 | import org.apache.commons.lang3.StringUtils; |
23 | +import org.apache.http.entity.ContentType; | |
24 | +import org.apache.http.entity.StringEntity; | |
25 | +import org.springframework.beans.factory.annotation.Value; | |
22 | 26 | import org.springframework.stereotype.Service; |
23 | 27 | import org.springframework.util.CollectionUtils; |
24 | 28 | import org.springframework.web.multipart.MultipartFile; |
... | ... | @@ -26,20 +30,25 @@ import org.springframework.web.multipart.MultipartFile; |
26 | 30 | import javax.annotation.Resource; |
27 | 31 | import java.text.ParseException; |
28 | 32 | import java.text.SimpleDateFormat; |
29 | -import java.util.ArrayList; | |
30 | -import java.util.Date; | |
31 | -import java.util.List; | |
32 | -import java.util.Map; | |
33 | +import java.util.*; | |
33 | 34 | import java.util.concurrent.atomic.AtomicReference; |
35 | +import java.util.function.Function; | |
34 | 36 | import java.util.stream.Collectors; |
35 | 37 | |
36 | 38 | @Slf4j |
37 | 39 | @Service |
38 | 40 | public class CaseService { |
39 | 41 | |
42 | + @Value("${ash.caseAnalysisUrl}") | |
43 | + public String caseAnalysisUrl; | |
44 | + | |
45 | + | |
40 | 46 | @Resource |
41 | 47 | private CaseMapper caseMapper; |
42 | 48 | |
49 | + @Resource | |
50 | + private CaseAnalysisService caseAnalysisService; | |
51 | + | |
43 | 52 | public Boolean save(Case data) { |
44 | 53 | String uuid = UUIDGenerator.uuid(); |
45 | 54 | data.setId(uuid); |
... | ... | @@ -105,6 +114,13 @@ public class CaseService { |
105 | 114 | return caseMapper.selectList(queryWrapper); |
106 | 115 | } |
107 | 116 | |
117 | + public List<Case> listUnAnalysis() { | |
118 | + QueryWrapper<Case> queryWrapper = new QueryWrapper<>(); | |
119 | + LambdaQueryWrapper<Case> lambda = queryWrapper.lambda(); | |
120 | + lambda.ne(Case::getAnalysisStatus, AnalysisStatusEnum.success); | |
121 | + return caseMapper.selectList(queryWrapper); | |
122 | + } | |
123 | + | |
108 | 124 | public Page<Case> pageByCondition(Case params, Page<Case> page) { |
109 | 125 | QueryWrapper<Case> queryWrapper = getCondition(params); |
110 | 126 | return caseMapper.selectPage(page, queryWrapper); |
... | ... | @@ -389,4 +405,60 @@ public class CaseService { |
389 | 405 | return null; |
390 | 406 | } |
391 | 407 | |
408 | + public void analysisByIds(List<String> ids) { | |
409 | + List<Case> dataList = caseMapper.selectBatchIds(ids); | |
410 | + analysis(dataList); | |
411 | + | |
412 | + } | |
413 | + | |
414 | + public void analysis(List<Case> dataList) { | |
415 | + if (CollectionUtils.isEmpty(dataList)) { | |
416 | + return; | |
417 | + } | |
418 | + Map<String, Case> dataMap = dataList.stream().collect(Collectors.toMap(Case::getId, Function.identity())); | |
419 | + for (String id : dataMap.keySet()) { | |
420 | + Case cd = dataMap.get(id); | |
421 | + JSONObject analysisResult = invokeAnalysis(cd); | |
422 | + if (analysisResult == null) { | |
423 | + cd.setAnalysisStatus(AnalysisStatusEnum.fail); | |
424 | + update(cd); | |
425 | + } else { | |
426 | + CaseAnalysis wa = new CaseAnalysis(); | |
427 | + wa.setCaseId(cd.getId()); | |
428 | + wa.setCounty(analysisResult.getString("area")); | |
429 | + wa.setAmount(analysisResult.getDouble("value")); | |
430 | + wa.setTotalAmount(analysisResult.getDouble("value")); | |
431 | + wa.setSex(analysisResult.getString("gender")); | |
432 | + wa.setAge(analysisResult.getInteger("age")); | |
433 | + wa.setCareer(analysisResult.getString("occupation")); | |
434 | + wa.setIdCard(analysisResult.getString("idCard")); | |
435 | + wa.setFraudType(analysisResult.getString("fraudType")); | |
436 | + wa.setRainageMethod(analysisResult.getString("diversionMethod")); | |
437 | + wa.setPayMethod(analysisResult.getString("paymentMethod")); | |
438 | + wa.setConformStatus(ConformStatusEnum.UNCONFIRMED); | |
439 | + caseAnalysisService.save(wa); | |
440 | + cd.setAnalysisStatus(AnalysisStatusEnum.success); | |
441 | + update(cd); | |
442 | + } | |
443 | + } | |
444 | + } | |
445 | + | |
446 | + private JSONObject invokeAnalysis(Case cd) { | |
447 | + try { | |
448 | + Map<String, String> header = new HashMap<>(); | |
449 | + Map<String, Object> paramsMap = new HashMap<>(); | |
450 | + paramsMap.put("summary", cd.getCaseDetail()); | |
451 | + paramsMap.put("unit", cd.getFilingUnit()); | |
452 | + String toJson = JSONObject.toJSONString(paramsMap); | |
453 | + StringEntity myEntity = new StringEntity(toJson, ContentType.APPLICATION_JSON); | |
454 | + String sResult = HttpClientUtils.doPostRequest(caseAnalysisUrl, header, null, myEntity); | |
455 | + return JSONObject.parseObject(sResult); | |
456 | + } catch (Exception ex) { | |
457 | + ex.printStackTrace(); | |
458 | + } | |
459 | + | |
460 | + return null; | |
461 | + | |
462 | + } | |
463 | + | |
392 | 464 | } | ... | ... |
... | ... | @@ -3,22 +3,26 @@ package com.ash.service; |
3 | 3 | import com.alibaba.excel.EasyExcel; |
4 | 4 | import com.alibaba.excel.exception.ExcelAnalysisException; |
5 | 5 | import com.alibaba.excel.exception.ExcelDataConvertException; |
6 | +import com.alibaba.fastjson.JSONObject; | |
6 | 7 | import com.ash.base.*; |
7 | 8 | import com.ash.base.excelOpt.ExcelErrorMessage; |
8 | 9 | import com.ash.entity.WarningInstance; |
10 | +import com.ash.entity.WarningInstanceAnalysis; | |
9 | 11 | import com.ash.entity.dao.WarningInstanceMapper; |
12 | +import com.ash.enums.AnalysisStatusEnum; | |
13 | +import com.ash.enums.ConformStatusEnum; | |
10 | 14 | import com.ash.excelData.WarningInstanceExcelData; |
11 | 15 | import com.ash.listener.WarningInstanceExcelListener; |
12 | -import com.ash.util.DateUtils; | |
13 | -import com.ash.util.MultipartFileToFileUtils; | |
14 | -import com.ash.util.ObjectValueOption; | |
15 | -import com.ash.util.UUIDGenerator; | |
16 | +import com.ash.util.*; | |
16 | 17 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
17 | 18 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
18 | 19 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
19 | 20 | import com.github.yulichang.query.MPJQueryWrapper; |
20 | 21 | import lombok.extern.slf4j.Slf4j; |
21 | 22 | import org.apache.commons.lang3.StringUtils; |
23 | +import org.apache.http.entity.ContentType; | |
24 | +import org.apache.http.entity.StringEntity; | |
25 | +import org.springframework.beans.factory.annotation.Value; | |
22 | 26 | import org.springframework.stereotype.Service; |
23 | 27 | import org.springframework.util.CollectionUtils; |
24 | 28 | import org.springframework.web.multipart.MultipartFile; |
... | ... | @@ -26,19 +30,25 @@ import org.springframework.web.multipart.MultipartFile; |
26 | 30 | import javax.annotation.Resource; |
27 | 31 | import java.text.ParseException; |
28 | 32 | import java.text.SimpleDateFormat; |
29 | -import java.util.ArrayList; | |
30 | -import java.util.Date; | |
31 | -import java.util.List; | |
32 | -import java.util.Map; | |
33 | +import java.util.*; | |
33 | 34 | import java.util.concurrent.atomic.AtomicReference; |
35 | +import java.util.function.Function; | |
34 | 36 | import java.util.stream.Collectors; |
35 | 37 | |
36 | 38 | @Slf4j |
37 | 39 | @Service |
38 | 40 | public class WarningInstanceService { |
41 | + | |
42 | + | |
43 | + @Value("${ash.wiAnalysisUrl}") | |
44 | + public String wiAnalysisUrl; | |
45 | + | |
39 | 46 | @Resource |
40 | 47 | private WarningInstanceMapper warningInstanceMapper; |
41 | 48 | |
49 | + @Resource | |
50 | + private WarningInstanceAnalysisService warningInstanceAnalysisService; | |
51 | + | |
42 | 52 | public Boolean save(WarningInstance data) { |
43 | 53 | String uuid = UUIDGenerator.uuid(); |
44 | 54 | data.setId(uuid); |
... | ... | @@ -103,6 +113,15 @@ public class WarningInstanceService { |
103 | 113 | return warningInstanceMapper.selectList(queryWrapper); |
104 | 114 | } |
105 | 115 | |
116 | + public List<WarningInstance> listUnAnalysis() { | |
117 | + QueryWrapper<WarningInstance> queryWrapper = new QueryWrapper<>(); | |
118 | + LambdaQueryWrapper<WarningInstance> lambda = queryWrapper.lambda(); | |
119 | + lambda.ne(WarningInstance::getAnalysisStatus,AnalysisStatusEnum.success); | |
120 | + return warningInstanceMapper.selectList(queryWrapper); | |
121 | + } | |
122 | + | |
123 | + | |
124 | + | |
106 | 125 | public Page<WarningInstance> pageByCondition(WarningInstance params, Page<WarningInstance> page) { |
107 | 126 | QueryWrapper<WarningInstance> queryWrapper = getCondition(params); |
108 | 127 | return warningInstanceMapper.selectPage(page, queryWrapper); |
... | ... | @@ -281,4 +300,56 @@ public class WarningInstanceService { |
281 | 300 | |
282 | 301 | return null; |
283 | 302 | } |
303 | + | |
304 | + public void analysisByIds(List<String> ids) { | |
305 | + List<WarningInstance> dataList = warningInstanceMapper.selectBatchIds(ids); | |
306 | + analysis(dataList); | |
307 | + | |
308 | + } | |
309 | + | |
310 | + public void analysis(List<WarningInstance> dataList) { | |
311 | + if (CollectionUtils.isEmpty(dataList)) { | |
312 | + return; | |
313 | + } | |
314 | + Map<String, WarningInstance> dataMap = dataList.stream().collect(Collectors.toMap(WarningInstance::getId, Function.identity())); | |
315 | + for (String id : dataMap.keySet()) { | |
316 | + WarningInstance cd = dataMap.get(id); | |
317 | + JSONObject analysisResult = invokeAnalysis(cd); | |
318 | + if (analysisResult == null) { | |
319 | + cd.setAnalysisStatus(AnalysisStatusEnum.fail); | |
320 | + update(cd); | |
321 | + } else { | |
322 | + WarningInstanceAnalysis wa = new WarningInstanceAnalysis(); | |
323 | + wa.setWiId(cd.getId()); | |
324 | + wa.setArea(cd.getMunicipalPolice().replaceAll("公安局", "")); | |
325 | + wa.setAmount(analysisResult.getDouble("value")); | |
326 | + wa.setSex(analysisResult.getString("gender")); | |
327 | + wa.setCareer(analysisResult.getString("occupation")); | |
328 | + wa.setRainageMethod(analysisResult.getString("diversionMethod")); | |
329 | + wa.setPayMethod(analysisResult.getString("paymentMethod")); | |
330 | + wa.setConformStatus(ConformStatusEnum.UNCONFIRMED); | |
331 | + warningInstanceAnalysisService.save(wa); | |
332 | + cd.setAnalysisStatus(AnalysisStatusEnum.success); | |
333 | + update(cd); | |
334 | + } | |
335 | + } | |
336 | + } | |
337 | + | |
338 | + private JSONObject invokeAnalysis(WarningInstance cd) { | |
339 | + try { | |
340 | + Map<String, String> header = new HashMap<>(); | |
341 | + Map<String, Object> paramsMap = new HashMap<>(); | |
342 | + paramsMap.put("content", cd.getContent()); | |
343 | + paramsMap.put("feedback", cd.getFeedbackContent()); | |
344 | + String toJson = JSONObject.toJSONString(paramsMap); | |
345 | + StringEntity myEntity = new StringEntity(toJson, ContentType.APPLICATION_JSON); | |
346 | + String sResult = HttpClientUtils.doPostRequest(wiAnalysisUrl, header, null, myEntity); | |
347 | + return JSONObject.parseObject(sResult); | |
348 | + } catch (Exception ex) { | |
349 | + ex.printStackTrace(); | |
350 | + } | |
351 | + | |
352 | + return null; | |
353 | + | |
354 | + } | |
284 | 355 | } | ... | ... |
1 | +package com.ash.util; | |
2 | + | |
3 | +import lombok.extern.slf4j.Slf4j; | |
4 | +import org.apache.commons.collections.MapUtils; | |
5 | +import org.apache.commons.lang3.StringUtils; | |
6 | +import org.apache.http.*; | |
7 | +import org.apache.http.client.ClientProtocolException; | |
8 | +import org.apache.http.client.config.RequestConfig; | |
9 | +import org.apache.http.client.entity.UrlEncodedFormEntity; | |
10 | +import org.apache.http.client.methods.CloseableHttpResponse; | |
11 | +import org.apache.http.client.methods.HttpGet; | |
12 | +import org.apache.http.client.methods.HttpPost; | |
13 | +import org.apache.http.client.methods.HttpPut; | |
14 | +import org.apache.http.entity.StringEntity; | |
15 | +import org.apache.http.impl.client.CloseableHttpClient; | |
16 | +import org.apache.http.message.BasicNameValuePair; | |
17 | +import org.apache.http.util.EntityUtils; | |
18 | + | |
19 | +import java.io.IOException; | |
20 | +import java.util.ArrayList; | |
21 | +import java.util.List; | |
22 | +import java.util.Map; | |
23 | + | |
24 | +@Slf4j | |
25 | +public class HttpClientUtils { | |
26 | + | |
27 | + | |
28 | + /** | |
29 | + * 发送post请求 | |
30 | + * | |
31 | + * @param url:请求地址 | |
32 | + * @param header:请求头参数 | |
33 | + * @param params:表单参数 form提交 | |
34 | + * @param httpEntity json/xml参数 | |
35 | + * @return | |
36 | + */ | |
37 | + public static String doPostRequest(String url, Map<String, String> header, Map<String, String> params, HttpEntity httpEntity) { | |
38 | + String resultStr = ""; | |
39 | + if (StringUtils.isEmpty(url)) { | |
40 | + return resultStr; | |
41 | + } | |
42 | + CloseableHttpClient httpClient = null; | |
43 | + CloseableHttpResponse httpResponse = null; | |
44 | + try { | |
45 | + httpClient = SSLClientCustom.getHttpClinet(); | |
46 | + HttpPost httpPost = new HttpPost(url); | |
47 | + //请求头header信息 | |
48 | + if (MapUtils.isNotEmpty(header)) { | |
49 | + for (Map.Entry<String, String> stringStringEntry : header.entrySet()) { | |
50 | + httpPost.setHeader(stringStringEntry.getKey(), stringStringEntry.getValue()); | |
51 | + log.info("请求header信息,key:{},value:{}", stringStringEntry.getKey(), stringStringEntry.getValue()); | |
52 | + } | |
53 | + } | |
54 | + //请求参数信息 | |
55 | + if (MapUtils.isNotEmpty(params)) { | |
56 | + List<NameValuePair> paramList = new ArrayList<NameValuePair>(); | |
57 | + for (Map.Entry<String, String> stringStringEntry : params.entrySet()) { | |
58 | + paramList.add(new BasicNameValuePair(stringStringEntry.getKey(), stringStringEntry.getValue())); | |
59 | + log.info("请求参数信息,key:{},value:{}", stringStringEntry.getKey(), stringStringEntry.getValue()); | |
60 | + } | |
61 | + UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(paramList, Consts.UTF_8); | |
62 | + httpPost.setEntity(urlEncodedFormEntity); | |
63 | + } | |
64 | + //实体设置 | |
65 | + if (httpEntity != null) { | |
66 | + String json = EntityUtils.toString(httpEntity); | |
67 | + log.info("请求参数信息{}", json); | |
68 | + httpPost.setEntity(httpEntity); | |
69 | + } | |
70 | + //httpPost.setHeader("Content-type", "application/x-www-form-urlencoded"); | |
71 | + //发起请求 | |
72 | + httpResponse = httpClient.execute(httpPost); | |
73 | + int statusCode = httpResponse.getStatusLine().getStatusCode(); | |
74 | + if (statusCode == HttpStatus.SC_OK||statusCode == HttpStatus.SC_UNAUTHORIZED) { | |
75 | + HttpEntity httpResponseEntity = httpResponse.getEntity(); | |
76 | + resultStr = EntityUtils.toString(httpResponseEntity); | |
77 | + //log.info("请求正常,请求地址:{},响应结果:{}", url, statusCode+";"+resultStr); | |
78 | + } else { | |
79 | + StringBuffer stringBuffer = new StringBuffer(); | |
80 | + HeaderIterator headerIterator = httpResponse.headerIterator(); | |
81 | + while (headerIterator.hasNext()) { | |
82 | + stringBuffer.append("\t" + headerIterator.next()); | |
83 | + } | |
84 | + log.info("异常信息:请求地址:{},响应状态和结果:{}",url,statusCode+";"+stringBuffer); | |
85 | + } | |
86 | + | |
87 | + } catch (Exception e) { | |
88 | + log.info("请求地址:{}", url); | |
89 | + e.printStackTrace(); | |
90 | + } finally { | |
91 | + HttpClientUtils.closeConnection(httpClient, httpResponse); | |
92 | + } | |
93 | + return resultStr; | |
94 | + } | |
95 | + | |
96 | + public static String doGetRequest(String url, Map<String, String> header, Map<String, Object> params) { | |
97 | + String resultStr = ""; | |
98 | + if (StringUtils.isEmpty(url)) { | |
99 | + return resultStr; | |
100 | + } | |
101 | + CloseableHttpClient httpClient = null; | |
102 | + CloseableHttpResponse httpResponse = null; | |
103 | + try { | |
104 | + httpClient = SSLClientCustom.getHttpClinet(); | |
105 | + //请求参数信息 | |
106 | + if (MapUtils.isNotEmpty(params)) { | |
107 | + url = url + buildUrl(params); | |
108 | + } | |
109 | + HttpGet httpGet = new HttpGet(url); | |
110 | + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000)//连接超时 | |
111 | + .setConnectionRequestTimeout(25000)//请求超时 | |
112 | + .setSocketTimeout(25000)//套接字连接超时 | |
113 | + .setRedirectsEnabled(true).build();//允许重定向 | |
114 | + httpGet.setConfig(requestConfig); | |
115 | + if (MapUtils.isNotEmpty(header)) { | |
116 | + for (Map.Entry<String, String> stringStringEntry : header.entrySet()) { | |
117 | + httpGet.setHeader(stringStringEntry.getKey(), stringStringEntry.getValue()); | |
118 | + } | |
119 | + } | |
120 | + //发起请求 | |
121 | + httpResponse = httpClient.execute(httpGet); | |
122 | + int statusCode = httpResponse.getStatusLine().getStatusCode(); | |
123 | + if (statusCode == HttpStatus.SC_OK) { | |
124 | + resultStr = EntityUtils.toString(httpResponse.getEntity(), Consts.UTF_8); | |
125 | + log.info("请求地址:{},响应结果:{}", url, resultStr); | |
126 | + } else { | |
127 | + StringBuffer stringBuffer = new StringBuffer(); | |
128 | + HeaderIterator headerIterator = httpResponse.headerIterator(); | |
129 | + while (headerIterator.hasNext()) { | |
130 | + stringBuffer.append("\t" + headerIterator.next()); | |
131 | + } | |
132 | + resultStr = EntityUtils.toString(httpResponse.getEntity(), Consts.UTF_8); | |
133 | + log.info("异常信息请求地址:{}", url, resultStr); | |
134 | + log.info("异常信息:请求响应状态:{},请求返回结果:{}", httpResponse.getStatusLine().getStatusCode(),StringUtils.isBlank(resultStr)?stringBuffer:resultStr); | |
135 | + } | |
136 | + | |
137 | + } catch (Exception e) { | |
138 | + log.info("请求地址:{}", url); | |
139 | + e.printStackTrace(); | |
140 | + | |
141 | + } finally { | |
142 | + HttpClientUtils.closeConnection(httpClient, httpResponse); | |
143 | + } | |
144 | + return resultStr; | |
145 | + } | |
146 | + | |
147 | + public static String doGetRequest(String url, Map<String, String> header, Map<String, Object> params,StringBuffer tracecode) { | |
148 | + String resultStr = ""; | |
149 | + if (StringUtils.isEmpty(url)) { | |
150 | + return resultStr; | |
151 | + } | |
152 | + CloseableHttpClient httpClient = null; | |
153 | + CloseableHttpResponse httpResponse = null; | |
154 | + try { | |
155 | + httpClient = SSLClientCustom.getHttpClinet(); | |
156 | + //请求参数信息 | |
157 | + if (MapUtils.isNotEmpty(params)) { | |
158 | + url = url + buildUrl(params); | |
159 | + } | |
160 | + HttpGet httpGet = new HttpGet(url); | |
161 | + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(30000)//连接超时 | |
162 | + .setConnectionRequestTimeout(30000)//请求超时 | |
163 | + .setSocketTimeout(30000)//套接字连接超时 | |
164 | + .setRedirectsEnabled(true).build();//允许重定向 | |
165 | + httpGet.setConfig(requestConfig); | |
166 | + if (MapUtils.isNotEmpty(header)) { | |
167 | + for (Map.Entry<String, String> stringStringEntry : header.entrySet()) { | |
168 | + httpGet.setHeader(stringStringEntry.getKey(), stringStringEntry.getValue()); | |
169 | + } | |
170 | + } | |
171 | + //发起请求 | |
172 | + httpResponse = httpClient.execute(httpGet); | |
173 | + int statusCode = httpResponse.getStatusLine().getStatusCode(); | |
174 | + if (statusCode == HttpStatus.SC_OK) { | |
175 | + Header[] tracecodes = httpResponse.getHeaders("Tracecode"); | |
176 | + tracecode.append(tracecodes[0].getValue()); | |
177 | + resultStr = EntityUtils.toString(httpResponse.getEntity(), Consts.UTF_8); | |
178 | + log.info("请求地址:{},响应结果:{}", url, resultStr); | |
179 | + } else { | |
180 | + StringBuffer stringBuffer = new StringBuffer(); | |
181 | + HeaderIterator headerIterator = httpResponse.headerIterator(); | |
182 | + while (headerIterator.hasNext()) { | |
183 | + stringBuffer.append("\t" + headerIterator.next()); | |
184 | + } | |
185 | + log.info("异常信息:请求地址:{},请求响应状态:{},请求返回结果:{}",url,httpResponse.getStatusLine().getStatusCode(), stringBuffer); | |
186 | + } | |
187 | + | |
188 | + } catch (Exception e) { | |
189 | + e.printStackTrace(); | |
190 | + } finally { | |
191 | + HttpClientUtils.closeConnection(httpClient, httpResponse); | |
192 | + } | |
193 | + return resultStr; | |
194 | + } | |
195 | + | |
196 | + | |
197 | + public static String doPutRequest(String url, Map<String, String> header,StringEntity entity) { | |
198 | + | |
199 | + CloseableHttpClient closeableHttpClient = null; | |
200 | + CloseableHttpResponse closeableHttpResponse=null; | |
201 | + try { | |
202 | + closeableHttpClient = SSLClientCustom.getHttpClinet(); | |
203 | + } catch (Exception e) { | |
204 | + e.printStackTrace(); | |
205 | + } | |
206 | + | |
207 | + | |
208 | + RequestConfig requestConfig = RequestConfig.custom() | |
209 | + .setConnectTimeout(5000) | |
210 | + .setConnectionRequestTimeout(5000) | |
211 | + .setRedirectsEnabled(true) | |
212 | + .build(); | |
213 | + | |
214 | + HttpPut httpPost = new HttpPut(url); | |
215 | + | |
216 | + httpPost.setConfig(requestConfig); | |
217 | + httpPost.setHeader("Content-Type", "application/json"); | |
218 | + | |
219 | + if (MapUtils.isNotEmpty(header)) { | |
220 | + for (Map.Entry<String, String> stringStringEntry : header.entrySet()) { | |
221 | + httpPost.setHeader(stringStringEntry.getKey(), stringStringEntry.getValue()); | |
222 | + log.info("请求header信息,key:{},value:{}", stringStringEntry.getKey(), stringStringEntry.getValue()); | |
223 | + } | |
224 | + } | |
225 | + | |
226 | + String strRequest = ""; | |
227 | + try { | |
228 | +// StringEntity entity = new StringEntity(jsonObject.toString(), "utf-8"); | |
229 | + entity.setContentEncoding("utf-8"); | |
230 | + entity.setContentType("application/json"); | |
231 | + httpPost.setEntity(entity); | |
232 | + | |
233 | + | |
234 | + closeableHttpResponse = closeableHttpClient.execute(httpPost); | |
235 | + | |
236 | + if (null != closeableHttpResponse && !"".equals(closeableHttpResponse)) { | |
237 | + int statusCode = closeableHttpResponse.getStatusLine().getStatusCode(); | |
238 | + if (closeableHttpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { | |
239 | + HttpEntity httpEntity = closeableHttpResponse.getEntity(); | |
240 | + strRequest = EntityUtils.toString(httpEntity); | |
241 | + log.info("请求正常,请求地址:{},响应结果:{}", url, statusCode+";"+strRequest); | |
242 | + } else { | |
243 | + StringBuffer stringBuffer = new StringBuffer(); | |
244 | + HeaderIterator headerIterator = closeableHttpResponse.headerIterator(); | |
245 | + while (headerIterator.hasNext()) { | |
246 | + stringBuffer.append("\t" + headerIterator.next()); | |
247 | + } | |
248 | + strRequest = "Error Response" + statusCode; | |
249 | + log.info("异常信息:请求地址:{},响应状态和结果:{}",url,strRequest+";"+stringBuffer); | |
250 | + } | |
251 | + } | |
252 | + | |
253 | + } catch (ClientProtocolException e) { | |
254 | + e.printStackTrace(); | |
255 | + } catch (ParseException e) { | |
256 | + e.printStackTrace(); | |
257 | + } catch (IOException e) { | |
258 | + e.printStackTrace(); | |
259 | + } finally { | |
260 | + try { | |
261 | + if (closeableHttpClient != null) { | |
262 | + closeableHttpClient.close(); | |
263 | + } | |
264 | + | |
265 | + if(closeableHttpResponse!=null){ | |
266 | + closeableHttpResponse.close(); | |
267 | + } | |
268 | + } catch (IOException e) { | |
269 | + e.printStackTrace(); | |
270 | + } | |
271 | + } | |
272 | + | |
273 | + return strRequest; | |
274 | + } | |
275 | + | |
276 | + | |
277 | + | |
278 | + /** | |
279 | + * 关掉连接释放资源 | |
280 | + */ | |
281 | + private static void closeConnection(CloseableHttpClient httpClient, CloseableHttpResponse httpResponse) { | |
282 | + if (httpClient != null) { | |
283 | + try { | |
284 | + httpClient.close(); | |
285 | + } catch (IOException e) { | |
286 | + e.printStackTrace(); | |
287 | + } | |
288 | + } | |
289 | + if (httpResponse != null) { | |
290 | + try { | |
291 | + httpResponse.close(); | |
292 | + } catch (IOException e) { | |
293 | + e.printStackTrace(); | |
294 | + } | |
295 | + } | |
296 | + | |
297 | + } | |
298 | + | |
299 | + /** | |
300 | + * 构造get请求的参数 | |
301 | + * | |
302 | + * @return | |
303 | + */ | |
304 | + private static String buildUrl(Map<String, Object> map) { | |
305 | + if (MapUtils.isEmpty(map)) { | |
306 | + return ""; | |
307 | + } | |
308 | + StringBuffer stringBuffer = new StringBuffer("?"); | |
309 | + for (Map.Entry<String, Object> stringStringEntry : map.entrySet()) { | |
310 | + stringBuffer.append(stringStringEntry.getKey()).append("=").append(stringStringEntry.getValue()).append("&"); | |
311 | + } | |
312 | + String result = stringBuffer.toString(); | |
313 | + if (StringUtils.isNotEmpty(result)) { | |
314 | + result = result.substring(0, result.length() - 1);//去掉结尾的&连接符 | |
315 | + } | |
316 | + return result; | |
317 | + } | |
318 | + | |
319 | +} | ... | ... |
1 | +package com.ash.util; | |
2 | + | |
3 | +import org.apache.http.config.Registry; | |
4 | +import org.apache.http.config.RegistryBuilder; | |
5 | +import org.apache.http.conn.socket.ConnectionSocketFactory; | |
6 | +import org.apache.http.conn.socket.PlainConnectionSocketFactory; | |
7 | +import org.apache.http.conn.ssl.NoopHostnameVerifier; | |
8 | +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; | |
9 | +import org.apache.http.conn.ssl.TrustStrategy; | |
10 | +import org.apache.http.impl.client.CloseableHttpClient; | |
11 | +import org.apache.http.impl.client.HttpClients; | |
12 | +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; | |
13 | +import org.apache.http.ssl.SSLContextBuilder; | |
14 | + | |
15 | +import java.security.KeyManagementException; | |
16 | +import java.security.KeyStoreException; | |
17 | +import java.security.NoSuchAlgorithmException; | |
18 | +import java.security.cert.CertificateException; | |
19 | +import java.security.cert.X509Certificate; | |
20 | + | |
21 | +public class SSLClientCustom { | |
22 | + private static final String HTTP = "http"; | |
23 | + private static final String HTTPS = "https"; | |
24 | + private static SSLConnectionSocketFactory sslConnectionSocketFactory = null; | |
25 | + private static PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = null;//连接池管理类 | |
26 | + private static SSLContextBuilder sslContextBuilder = null;//管理Https连接的上下文类 | |
27 | + | |
28 | + static { | |
29 | + try { | |
30 | + sslContextBuilder = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { | |
31 | + @Override | |
32 | + public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { | |
33 | +// 信任所有站点 直接返回true | |
34 | + return true; | |
35 | + } | |
36 | + }); | |
37 | + sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContextBuilder.build(), new String[]{"SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE); | |
38 | + Registry<ConnectionSocketFactory> registryBuilder = RegistryBuilder.<ConnectionSocketFactory>create() | |
39 | + .register(HTTP, new PlainConnectionSocketFactory()) | |
40 | + .register(HTTPS, sslConnectionSocketFactory) | |
41 | + .build(); | |
42 | + poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(registryBuilder); | |
43 | + poolingHttpClientConnectionManager.setMaxTotal(200); | |
44 | + } catch (NoSuchAlgorithmException e) { | |
45 | + e.printStackTrace(); | |
46 | + } catch (KeyStoreException e) { | |
47 | + e.printStackTrace(); | |
48 | + } catch (KeyManagementException e) { | |
49 | + e.printStackTrace(); | |
50 | + } | |
51 | + | |
52 | + } | |
53 | + | |
54 | + /** | |
55 | + * 获取连接 | |
56 | + * | |
57 | + * @return | |
58 | + * @throws Exception | |
59 | + */ | |
60 | + public static CloseableHttpClient getHttpClinet() throws Exception { | |
61 | + CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory) | |
62 | + .setConnectionManager(poolingHttpClientConnectionManager) | |
63 | + .setConnectionManagerShared(true) | |
64 | + .build(); | |
65 | + return httpClient; | |
66 | + } | |
67 | +} | ... | ... |
... | ... | @@ -5,13 +5,14 @@ spring: |
5 | 5 | name: ash |
6 | 6 | main: |
7 | 7 | allow-bean-definition-overriding: true |
8 | + allow-circular-references: true | |
8 | 9 | profiles: |
9 | 10 | active: default |
10 | 11 | datasource: |
11 | - url: jdbc:mysql://53.1.236.89:3306/ash?useSSL=false&autoReconnect=true&characterEncoding=utf8 | |
12 | + url: jdbc:mysql://10.9.1.252:3306/ash?useSSL=false&autoReconnect=true&characterEncoding=utf8 | |
12 | 13 | driver-class-name: com.mysql.cj.jdbc.Driver |
13 | - username: root | |
14 | - password: zaq1,lp- | |
14 | + username: qixiao | |
15 | + password: qixiao123!@# | |
15 | 16 | type: com.alibaba.druid.pool.DruidDataSource |
16 | 17 | druid: |
17 | 18 | initial-size: 5 |
... | ... | @@ -25,11 +26,9 @@ spring: |
25 | 26 | test-on-return: true |
26 | 27 | test-while-idle: true |
27 | 28 | redis: |
28 | - # cluster: | |
29 | - # nodes: 10.9.1.252:16380 | |
30 | - password: zaq1,lp- | |
31 | - host: 53.1.236.89 | |
32 | - port: 36379 | |
29 | + cluster: | |
30 | + nodes: 10.9.1.252:16380 | |
31 | + password: qixiao@123.com | |
33 | 32 | timeout: 3000 |
34 | 33 | servlet: |
35 | 34 | multipart: |
... | ... | @@ -52,6 +51,8 @@ logging: |
52 | 51 | ash: |
53 | 52 | # errorFilePath: D:/data/errorData |
54 | 53 | errorFilePath: /web/errorData |
54 | + wiAnalysisUrl: http://10.124.9.44:9098/review/infoAnalyse | |
55 | + caseAnalysisUrl: http://10.124.9.44:9098/review/caseAnalyse | |
55 | 56 | auth: |
56 | 57 | enable: false |
57 | 58 | white: | ... | ... |