From d8d129a2e41f7099968cb4f4dc1b028ab985135f Mon Sep 17 00:00:00 2001
From: Fixiaobai <fixiaobai@163.com>
Date: 星期四, 16 十一月 2023 20:20:47 +0800
Subject: [PATCH] Changes14

---
 mes-basic/src/main/java/com/chinaztt/mes/basic/service/impl/PartServiceImpl.java |  246 +++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 225 insertions(+), 21 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 a0cb006..1a1c2c9 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,7 +17,12 @@
 package com.chinaztt.mes.basic.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.date.DateUtil;
+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;
@@ -33,12 +38,17 @@
 import com.chinaztt.mes.basic.service.PartService;
 import com.chinaztt.mes.basic.util.DictUtils;
 import com.chinaztt.mes.basic.util.PartUtils;
+import com.chinaztt.mes.basic.util.TransactionUtils;
+import com.chinaztt.mes.basic.vo.PartVo;
 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;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpPost;
@@ -48,17 +58,26 @@
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.params.CoreConnectionPNames;
 import org.apache.http.util.EntityUtils;
+import org.springframework.beans.BeanUtils;
+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.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;
 
 /**
  * 闆朵欢
@@ -68,6 +87,7 @@
  */
 @AllArgsConstructor
 @Service
+@Slf4j
 public class PartServiceImpl extends ServiceImpl<PartMapper, Part> implements PartService {
 	private DictUtils dictUtils;
 	private PartUtils partUtils;
@@ -75,7 +95,12 @@
 	private DiscoveryClient discoveryClient;
 	private Environment environment;
 	private RedisTemplate redisTemplate;
+	private TransactionUtils transactionUtils;
+
+	@Autowired
+	private ThreadPoolTaskExecutor threadPoolTaskExecutor;
 	;
+
 
 	@Override
 	public void importPartExcel(List<PartData> list) {
@@ -288,11 +313,6 @@
 			throw new RuntimeException("闆朵欢鍙风増鏈彿閲嶅锛�" + partByFind.getPartName() + "-" + partByFind.getPartNo());
 		}
 		baseMapper.insert(part);
-		//瀵规帴IFS
-//		R result = ifsFeignClient.importInventPartStd(new JSONObject().fluentPut("BATCH_INFO", new JSONArray().fluentAdd(ifsDataMake(part))), true);
-//		if (result.getCode() == 1) {
-//			throw new RuntimeException("IFS閿欒鈥斺��" + result.getMsg());
-//		}
 		return true;
 	}
 
@@ -367,9 +387,9 @@
 	}
 
 
-	@Transactional(rollbackFor = Exception.class)
 	@Override
-	public void syncNewIfs(Date date) {
+	@Transactional(rollbackFor = Exception.class)
+	public Long syncNewIfs(String date) {
 		Map<String, String> dicmattype = dictUtils.getDicKey("material_type");
 		Map<String, String> dicunit = dictUtils.getDicKey("unit");
 		String key = "syncPart_lock" + SecurityUtils.getUser().getId();
@@ -377,15 +397,27 @@
 			throw new RuntimeException("鏈夊悓姝ヤ换鍔℃鍦ㄥ鐞�");
 		}
 		redisTemplate.opsForValue().set(key, 1, 1000 * 3600);
-		Map<String, Object>map=new HashMap<>();
-		map.put("MODIFY_DATE", DateUtil.format(date,"yyyy-MM-dd"));
+		List<Part>partList=new ArrayList<Part>();
+		Connection conn =null;
+		PreparedStatement pstmt =null;
 		try {
-			String url = "http://192.168.20.47:8008/PurchService.ashx?contract=ZTKJ&contractKey=4ttDeLKNsZuhstjtROMcRE1USNFXKdFYE7lQ2p1m5Bo=&procedureName=QUERY_INVENTORY_PART_INFO_STD&userId=7632&inAttr="+new ObjectMapper().writeValueAsString(map);
+			String url ="";
+			//鍒ゆ柇鏃ユ湡鏈夊惁
+			if (Objects.isNull(date)){
+				url = "http://192.168.20.47:8008/PurchService.ashx?contract=KJZS&contractKey=4ttDeLKNsZuhstjtROMcRE1USNFXKdFYE7lQ2p1m5Bo=&procedureName=QUERY_INVENTORY_PART_INFO_STD&userId=7632&inAttr={}";
+			}else {
+				Map<String, Object>map=new HashMap<>();
+				map.put("MODIFY_DATE", date);
+				url = "http://192.168.20.47:8008/PurchService.ashx?contract=KJZS&contractKey=4ttDeLKNsZuhstjtROMcRE1USNFXKdFYE7lQ2p1m5Bo=&procedureName=QUERY_INVENTORY_PART_INFO_STD&userId=7632&inAttr="+new ObjectMapper().writeValueAsString(map);
+			}
+			log.info("寮�濮嬫墽琛屽悓姝�==========銆�");
 			String body = HttpRequest.get(url).execute().body();
+			log.info("鎵ц鍚屾缁撴潫===========銆�");
 			Map<String, Object> mapResult = JsonUtil.jsonToPojo(body, Map.class);
 			List<Map<String, Object>> data = JsonUtil.jsonToPojo(JsonUtil.jsonToString(mapResult.get("INVENTORY_PART_INFO")), List.class);
+			System.out.println(data.size());
+			//data.forEach(System.out::println);
 			List<String>no=new ArrayList<String>();
-			List<Part>partList=new ArrayList<Part>();
 			data.forEach(l->{
 				Part part = new Part();
 				part.setPartNo(String.valueOf(l.get("PART_NO")));
@@ -408,20 +440,192 @@
 				part.setSunit(dicunit.get(l.get("UNIT_MEAS_FOR_WEIGHT")));
 				partList.add(part);
 			});
-			QueryWrapper<Part>queryWrapper=new QueryWrapper<>();
-			queryWrapper.lambda().select(Part::getPartNo).in(Part::getPartNo,no);
-			List<Part> selectList = baseMapper.selectList(queryWrapper);
-			//System.out.println(baseMapper.selectList(queryWrapper));
-			partList.removeIf(mainObj -> selectList.stream().anyMatch(subObj -> subObj.getPartNo().equals(mainObj.getPartNo())));
-			//System.out.println(partList);
-			partList.forEach(l->{
-				baseMapper.insert(l);
-			});
+			if(partList.size()>0) {
+				QueryWrapper<Part> queryWrapper = new QueryWrapper<>();
+				queryWrapper.lambda().select(Part::getPartNo).in(Part::getPartNo, no);
+				List<Part> selectList = baseMapper.selectList(queryWrapper);
+				//System.out.println(baseMapper.selectList(queryWrapper));
+				partList.removeIf(mainObj -> selectList.stream().anyMatch(subObj -> subObj.getPartNo().equals(mainObj.getPartNo())));
+				System.out.println("杩囨护闀垮害=============================銆�"+partList.size());
+				partList.forEach(l->{
+					baseMapper.insert(l);
+				});
+			}
 		} catch (Exception e) {
 			e.printStackTrace();
 			throw new RuntimeException(e.getMessage());
 		} finally {
+			//JDBCUtil.close(pstmt,conn);
 			redisTemplate.delete(key);
 		}
+		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);
+	}
+
+	//瑙﹀彂闆朵欢
+	@Override
+	public String triggerAdd(PartVo partVo) {
+		Part part = new Part();
+		BeanUtils.copyProperties(partVo,part);
+		//鍒涘缓鑰�
+		part.setCreateUser(partVo.getCreate_name());
+		//鏇存柊鑰�
+		part.setUpdateUser(partVo.getUpdate_name());
+		//闆朵欢鍙�
+		part.setPartNo(partVo.getMaterial_number());
+		//鍚嶇О
+		part.setPartName(partVo.getMaterial_name());
+		//闆朵欢鎻忚堪
+		part.setDescription(partVo.getMaterial_description());
+		//鍗曚綅
+		part.setUnit(partVo.getUnit());
+		//涓�绾у垎绫�
+		part.setAssortment(partVo.getFirstCategoryName());
+		//浜岀骇鍒嗙被
+		part.setCategory(partVo.getSecondCategoryName());
+		//涓夌骇鍒嗙被
+		part.setThreeLevelClassification(partVo.getThirdCategoryName());
+		//瑙勬牸
+		part.setSpecs(partVo.getMaterial_spec());
+		//鐗堟湰鍙�
+		part.setEngChgLevel(partVo.getTemplate_version().substring(1));
+		//璁″垝鏂规硶
+		part.setPlanningMethod("A");
+		//鍨嬪彿
+		part.setPartModel(partVo.getMaterial_spec());
+		if (partVo.getType().equals("add")){
+			int insert = baseMapper.insert(part);
+			log.info("鏂板"+part.getPartNo()+"闆朵欢鍙锋垚鍔�");
+			return insert>0?"1":"0" ;
+		}else {
+			int update = baseMapper.update(part, Wrappers.<Part>lambdaUpdate().eq(Part::getPartNo, part.getPartNo()));
+			log.info("淇敼"+part.getPartNo()+"闆朵欢鍙锋垚鍔�");
+			return update>0?"1":"0" ;
+		}
+	}
+
+
+
+
+
+	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.setDomainNo(rawList.get(4));
+			part.setDomainName(rawList.get(5));
+			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