123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- package com.jkcredit.invoice.controller;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.google.common.util.concurrent.ThreadFactoryBuilder;
- import com.jkcredit.invoice.common.CommonConstants;
- import com.jkcredit.invoice.model.entity.SearchInvoiceResult;
- import com.jkcredit.invoice.model.entity.SearchInvoiceResultTemp;
- import com.jkcredit.invoice.model.entity.WayBillTest;
- import com.jkcredit.invoice.service.SearchInvoiceResultService;
- import com.jkcredit.invoice.service.SearchInvoiceResultTempService;
- import com.jkcredit.invoice.util.HttpUtil;
- import com.jkcredit.invoice.util.ReadExcelUtil;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.multipart.MultipartFile;
- import java.util.*;
- import java.util.concurrent.*;
- import java.util.stream.Collectors;
- @RestController
- @RequestMapping("/temp")
- @Slf4j
- public class TempController {
- @Autowired
- private HttpUtil httpUtil;
- @Autowired
- private SearchInvoiceResultService searchInvoiceResultService;
- @Autowired
- private SearchInvoiceResultTempService tempService;
- @Autowired
- private RedisTemplate redisTemplate;
- @RequestMapping("/temp")
- public void temp(@RequestParam MultipartFile file) {
-
- List<WayBillTest> wayBillTestList = ReadExcelUtil.readTempExcel(file, WayBillTest.class);
-
- int count = 20000;
-
- int listSize = wayBillTestList.size();
-
- int threadSize = (listSize / count) + 1;
- ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("thread-numInvoice-%d").build();
- ExecutorService executor = new ThreadPoolExecutor(threadSize, threadSize, 200L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(), namedThreadFactory);
- CountDownLatch countDownLatch = new CountDownLatch(threadSize);
- List<WayBillTest> newList;
- for (int i = 0; i < threadSize; i++) {
- if ((i + 1) == threadSize) {
- int startIndex = (i * count);
- int endIndex = wayBillTestList.size();
- newList = wayBillTestList.subList(startIndex, endIndex);
- } else {
- int startIndex = i * count;
- int endIndex = (i + 1) * count;
- newList = wayBillTestList.subList(startIndex, endIndex);
- }
- List<WayBillTest> finalNewList = newList;
- executor.execute(new Thread(() -> {
- if (null != finalNewList) {
- log.info("传入数据是:{}", JSON.toJSONString(finalNewList));
- finalNewList.stream().forEach(numInvoice -> {
- Map<String, Object> map = new HashMap<>(4);
- map.put("companyNum","10004616");
- map.put("num", numInvoice.getWayBillNum());
- log.info("运单编号num={}", numInvoice.getWayBillNum());
-
- String registerResult = httpUtil.getCheckResult(map, CommonConstants.WAY_BILL_NUM_FIND_INVOICE_API);
- log.info("运单查询发票接口返回:{},请求参数:{}", registerResult, JSON.toJSONString(map));
-
- JSONObject registerResultJson = JSON.parseObject(registerResult);
-
- String dataCode = registerResultJson.getString("data");
-
- if ("1".equals(dataCode)) {
- String returnStr = registerResultJson.getString("msg");
- JSONObject returnStrJson = JSON.parseObject(returnStr);
-
- String numResult = returnStrJson.getString("result");
-
- String waybillStatus = returnStrJson.getString("waybillStatus");
-
- List<SearchInvoiceResult> ts = JSONArray.parseArray(numResult, SearchInvoiceResult.class);
- List<SearchInvoiceResult> newSearchInvoiceResultList;
- if (ts.size() > 0) {
-
- newSearchInvoiceResultList = ts.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
- () -> new TreeSet<>(Comparator.comparing(SearchInvoiceResult::getTransactionId))),
- ArrayList::new));
-
- newSearchInvoiceResultList.stream().forEach(t -> {
- if (!redisTemplate.hasKey(CommonConstants.NUM_FIND_INVOICE_KEY + t.getInvoiceNum() + "_" + t.getInvoiceCode())) {
- SearchInvoiceResultTemp temp = new SearchInvoiceResultTemp();
- BeanUtils.copyProperties(t, temp);
- tempService.save(temp);
-
- redisTemplate.opsForValue().set(CommonConstants.NUM_FIND_INVOICE_KEY + t.getInvoiceNum() + "_" + t.getInvoiceCode(), JSON.toJSONString(t));
-
- redisTemplate.opsForValue().set(CommonConstants.TRANSACTION_ID_KEY + t.getTransactionId(), t.getTransactionId());
- }
- });
- }
- } else {
-
- log.error("返回code不等于1的结果={}", registerResult);
- }
- });
- }
- countDownLatch.countDown();
- }));
- }
- try {
- countDownLatch.await();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- executor.shutdown();
- }
- }
|