Commit 5cf353737ae580df6e93cf04be1ce48fbe918f8e

Authored by 胡翰林
2 parents d7909836 eb7b1902

Merge branch '0730_word'

... ... @@ -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,32 @@ 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 + Case data = caseService.load(id);
  195 + data.setAnalysisStatus(AnalysisStatusEnum.analysis);
  196 + caseService.update(data);
  197 + caseService.analysis(Collections.singletonList(data));
  198 + } else {
  199 + List<Case> dataList = caseService.listUnAnalysis();
  200 + if (CollectionUtils.isNotEmpty(dataList)) {
  201 + dataList.forEach(e -> {
  202 + e.setAnalysisStatus(AnalysisStatusEnum.analysis);
  203 + caseService.update(e);
  204 + });
  205 + caseService.analysis(dataList);
  206 + }
  207 +
  208 + }
  209 +
  210 + } catch (Exception ex) {
  211 + log.error(ex.getMessage());
  212 + }
  213 + });
  214 + return JsonResult.ok("重新解析开始");
  215 +
189 216 }
190 217
191 218 @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,36 @@ 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 + WarningInstance data = warningInstanceService.load(id);
  206 + if (data != null) {
  207 + data.setAnalysisStatus(AnalysisStatusEnum.analysis);
  208 + warningInstanceService.update(data);
  209 + warningInstanceService.analysis(Collections.singletonList(data));
  210 + }
  211 +
  212 + } else {
  213 + List<WarningInstance> dataList = warningInstanceService.listUnAnalysis();
  214 + if (CollectionUtils.isNotEmpty(dataList)) {
  215 + dataList.forEach(e -> {
  216 + e.setAnalysisStatus(AnalysisStatusEnum.analysis);
  217 + warningInstanceService.update(e);
  218 + });
  219 + warningInstanceService.analysis(dataList);
  220 + }
  221 +
  222 + }
  223 +
  224 + } catch (Exception ex) {
  225 + log.error(ex.getMessage());
  226 +
  227 + }
  228 + });
  229 + return JsonResult.ok("重新解析开始");
  230 +
200 231 }
201 232
202 233 @PostMapping("/saveAnalysis")
... ...
... ... @@ -84,7 +84,7 @@ public class CaseAnalysis extends BaseModel {
84 84 private String rainageMethod;
85 85
86 86 /**
87   - * 引流方式
  87 + * 引流方式详情
88 88 */
89 89 @TableField(value = "rainage_method_detail")
90 90 private String rainageMethodDetail;
... ...
... ... @@ -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:
... ...