From eb91d54dc917ecf30ef4f3f4b9676824a4891fb7 Mon Sep 17 00:00:00 2001
From: Fixiaobai <fixiaobai@163.com>
Date: 星期二, 31 十月 2023 18:07:18 +0800
Subject: [PATCH] Changes

---
 mes-basic/src/main/java/com/chinaztt/mes/basic/service/impl/PartServiceImpl.java |  140 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 137 insertions(+), 3 deletions(-)

diff --git a/mes-basic/src/main/java/com/chinaztt/mes/basic/service/impl/PartServiceImpl.java b/mes-basic/src/main/java/com/chinaztt/mes/basic/service/impl/PartServiceImpl.java
index e6ad84e..3efc91a 100644
--- a/mes-basic/src/main/java/com/chinaztt/mes/basic/service/impl/PartServiceImpl.java
+++ b/mes-basic/src/main/java/com/chinaztt/mes/basic/service/impl/PartServiceImpl.java
@@ -17,6 +17,12 @@
 package com.chinaztt.mes.basic.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.lang.Console;
+import cn.hutool.core.text.csv.CsvData;
+import cn.hutool.core.text.csv.CsvReader;
+import cn.hutool.core.text.csv.CsvRow;
+import cn.hutool.core.text.csv.CsvUtil;
+import cn.hutool.core.util.CharsetUtil;
 import cn.hutool.http.HttpRequest;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -34,9 +40,11 @@
 import com.chinaztt.mes.basic.util.PartUtils;
 import com.chinaztt.mes.basic.util.TransactionUtils;
 import com.chinaztt.mes.common.util.JsonUtil;
+import com.chinaztt.mes.common.util.MultipartFileToFile;
 import com.chinaztt.ztt.common.core.util.R;
 import com.chinaztt.ztt.common.security.util.SecurityUtils;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.Lists;
 import com.google.gson.Gson;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -49,21 +57,25 @@
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.params.CoreConnectionPNames;
 import org.apache.http.util.EntityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.client.discovery.DiscoveryClient;
 import org.springframework.core.env.Environment;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.TransactionDefinition;
-import org.springframework.transaction.TransactionStatus;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
 
 /**
  * 闆朵欢
@@ -82,6 +94,9 @@
 	private Environment environment;
 	private RedisTemplate redisTemplate;
 	private TransactionUtils transactionUtils;
+
+	@Autowired
+	private ThreadPoolTaskExecutor threadPoolTaskExecutor;
 	;
 
 
@@ -378,7 +393,6 @@
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public Long syncNewIfs(String date) {
-		TransactionStatus transaction = transactionUtils.begin(TransactionDefinition.ISOLATION_READ_COMMITTED);
 		Map<String, String> dicmattype = dictUtils.getDicKey("material_type");
 		Map<String, String> dicunit = dictUtils.getDicKey("unit");
 		String key = "syncPart_lock" + SecurityUtils.getUser().getId();
@@ -449,4 +463,124 @@
 		}
 		return (long) partList.size();
 	}
+
+	@Override
+	public void asyncUploadExcel(MultipartFile file) {
+		String key = "syncPart_lock" + SecurityUtils.getUser().getId();
+		if (redisTemplate.hasKey(key)) {
+			throw new RuntimeException("鏈夊鍏ヤ换鍔℃鍦ㄥ鐞�");
+		}
+		redisTemplate.opsForValue().set(key, 1, 1000 * 3600);
+		RequestContextHolder.setRequestAttributes(RequestContextHolder.getRequestAttributes(),true);
+		Map<String, String> dicmattype = dictUtils.getDicKey("material_type");
+		Map<String, String> dicunit = dictUtils.getDicKey("unit");
+		CompletableFuture.runAsync(()->{
+			asyncExcel(file,dicmattype,dicunit);
+			redisTemplate.delete(key);
+		},threadPoolTaskExecutor);
+	}
+
+	public void asyncExcel(MultipartFile file,Map<String, String> dicmattype,Map<String, String> dicunit){
+		File file1 = MultipartFileToFile.multipartFileToFile(file);
+		CsvReader reader = CsvUtil.getReader();
+		reader.setFieldSeparator(',');
+//浠庢枃浠朵腑璇诲彇CSV鏁版嵁
+		CsvData data = reader.read(file1, CharsetUtil.CHARSET_GBK);
+		List<CsvRow> rows = data.getRows();
+//閬嶅巻琛�
+		List<Part>list = new ArrayList<>();
+		List<String>no=new ArrayList<String>();
+		for (CsvRow csvRow : rows) {
+			//getRawList杩斿洖涓�涓狶ist鍒楄〃锛屽垪琛ㄧ殑姣忎竴椤逛负CSV涓殑涓�涓崟鍏冩牸锛堟棦閫楀彿鍒嗛殧閮ㄥ垎锛�
+			List<String> rawList = filter(csvRow.getRawList());
+			//System.out.println(rawList);
+			if(rawList.get(0).equals("鏄惁璁惧澶囦欢")){
+				continue;
+			}
+			if(rawList.get(1).equals("88.118.1/A0172320")){
+				Console.log(rawList);
+				for (int i = 0; i < rawList.size(); i++) {
+					System.out.println(i+"====="+rawList.get(i));
+				}
+				Console.log(rawList.get(6));
+			}
+			Part part = new Part();
+			part.setIsEquipment(rawList.get(0));
+			part.setPartNo(rawList.get(1));
+			no.add(rawList.get(1));
+			part.setPartName(rawList.get(2));
+			part.setDescription(rawList.get(3));
+			part.setMaterialType(rawList.get(6));
+			part.setUnit(rawList.get(8));
+			part.setAssets(rawList.get(16));
+			part.setAssetsType(rawList.get(17));
+			part.setPlanningMethod(rawList.get(18));
+			part.setSuppliesType(rawList.get(19));
+			part.setAbcType(rawList.get(20));
+			part.setHz(rawList.get(21));
+			part.setCycle(rawList.get(22));
+			part.setSunit(rawList.get(33));
+			part.setVolume(rawList.get(35));
+			part.setTotalNum(rawList.get(36));
+			part.setGetNum(rawList.get(37));
+			part.setDefaultMr(rawList.get(60));
+			part.setDopR(rawList.get(61));
+			part.setNetto(rawList.get(62));
+			part.setNumCount(rawList.get(64));
+			part.setIvm(rawList.get(66));
+			part.setIcl(rawList.get(67));
+			part.setSii(rawList.get(68));
+			part.setZc(rawList.get(69));
+			part.setEsca(rawList.get(72));
+			list.add(part);
+		}
+		list.forEach(r->{
+			r.setEngChgLevel("1");
+			no.add(r.getPartNo());
+			r.setMaterialType(dicmattype.get(r.getMaterialType()));
+			r.setUnit(dicunit.get(r.getUnit()));
+			r.setSunit(dicunit.get(r.getSunit()));
+		});
+		list.stream().filter(r-> Objects.isNull(r.getMaterialType())).forEach(System.out::println);
+		if(list.size()>0) {
+			List<List<String>> partition = Lists.partition(no, 10000);
+			partition.forEach(l->{
+				QueryWrapper<Part> queryWrapper = new QueryWrapper<>();
+				queryWrapper.lambda().select(Part::getPartNo).in(Part::getPartNo, l);
+				List<Part> selectList = baseMapper.selectList(queryWrapper);
+				list.removeIf(mainObj -> selectList.stream().anyMatch(subObj -> subObj.getPartNo().equals(mainObj.getPartNo())));
+			});
+			log.info("杩囨护鍚庨暱搴�=============================銆�"+list.size());
+			list.forEach(l->{
+				try {
+					baseMapper.insert(l);
+				}catch (Exception e) {
+					e.printStackTrace();
+				}
+			});
+		}
+		MultipartFileToFile.delteTempFile(file1);
+	}
+
+	/**
+	 * 杩囨护淇敼涓嶆纭暟鎹牸寮�
+	 * @param rawList
+	 * @return
+	 */
+	public static List<String> filter( List<String> rawList){
+		List<String>filters = new ArrayList<>();
+		for (int i = 0; i < rawList.size(); i++) {
+			if (rawList.get(i).contains("|")&&rawList.get(i).contains(",")&&rawList.get(i).split(",").length>1) {
+				String[] split = rawList.get(i).split(",");
+				if (!Objects.equals(split[1], "") &&split[0].charAt(0)==split[1].charAt(0)){
+					Arrays.stream(split).forEach(filters::add);
+				}else {
+					filters.add(rawList.get(i));
+				}
+			}else {
+				filters.add(rawList.get(i));
+			}
+		}
+		return filters;
+	}
 }

--
Gitblit v1.9.3