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 |  291 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 278 insertions(+), 13 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 c1bd36c..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,6 +17,13 @@
 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;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -31,12 +38,18 @@
 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.RedisUtils;
+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.config.RequestConfig;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.entity.ContentType;
@@ -45,18 +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.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.math.BigDecimal;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
 
 /**
  * 闆朵欢
@@ -66,13 +87,20 @@
  */
 @AllArgsConstructor
 @Service
+@Slf4j
 public class PartServiceImpl extends ServiceImpl<PartMapper, Part> implements PartService {
 	private DictUtils dictUtils;
 	private PartUtils partUtils;
 	private IfsFeignClient ifsFeignClient;
 	private DiscoveryClient discoveryClient;
 	private Environment environment;
-	private RedisTemplate redisTemplate;;
+	private RedisTemplate redisTemplate;
+	private TransactionUtils transactionUtils;
+
+	@Autowired
+	private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+	;
+
 
 	@Override
 	public void importPartExcel(List<PartData> list) {
@@ -285,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;
 	}
 
@@ -329,12 +352,12 @@
 		if (redisTemplate.hasKey(key)) {
 			throw new RuntimeException("鏈夊悓姝ヤ换鍔℃鍦ㄥ鐞�");
 		}
-		redisTemplate.opsForValue().set(key,1,1000 * 3600);
+		redisTemplate.opsForValue().set(key, 1, 1000 * 3600);
 		CloseableHttpClient httpClient = HttpClientBuilder.create().build();
 		String syncErpUrl = environment.getProperty("erpPartUrl");
 		HttpPost httpPost = new HttpPost(syncErpUrl);
 		httpPost.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);
-		httpPost.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,1000 * 3600);
+		httpPost.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 1000 * 3600);
 		// 灏嗗弬鏁拌浆鎹负JSON瀛楃涓�
 		Map<String, String> params = new HashMap<>();
 //		params.put("startTime", customOrderSyncDTO.getStartTime());
@@ -363,4 +386,246 @@
 		}
 	}
 
+
+	@Override
+	@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();
+		if (redisTemplate.hasKey(key)) {
+			throw new RuntimeException("鏈夊悓姝ヤ换鍔℃鍦ㄥ鐞�");
+		}
+		redisTemplate.opsForValue().set(key, 1, 1000 * 3600);
+		List<Part>partList=new ArrayList<Part>();
+		Connection conn =null;
+		PreparedStatement pstmt =null;
+		try {
+			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>();
+			data.forEach(l->{
+				Part part = new Part();
+				part.setPartNo(String.valueOf(l.get("PART_NO")));
+				no.add(part.getPartNo());
+				part.setPartName(String.valueOf(l.get("PART_DESC")));
+				part.setMaterialType(dicmattype.get(l.get("TYPE_CODE")));
+				part.setUnit(dicunit.get(l.get("UNIT_MEAS")));
+				part.setAssortment(String.valueOf(l.get("FIRST_CLASS")));
+				part.setCategory(String.valueOf(l.get("SECOND_CLASS")));
+				part.setThreeLevelClassification(String.valueOf(l.get("THIRD_CLASS")));
+//                        part1.setMaterialAttribute(dicmatatype.get(part.get("ACCOUNTING_GROUP_DESC")));
+				Object netWeight = Optional.ofNullable(l.get("NET_WEIGHT")).orElse("1");
+				if(!Objects.equals(netWeight,"1")){
+					part.setWeight(BigDecimal.valueOf(Double.parseDouble(String.valueOf(l.get("NET_WEIGHT")))));
+				}
+				part.setEngChgLevel("1");
+				part.setPlanningMethod(String.valueOf(l.get("PART_STATUS")));
+				//part.setPlanningMethodIfs(l.get("PART_STATUS"));
+				part.setLotTrackingIfs(!(l.get("LOT_TRACK_DB").equals("NOT LOT TRACKING")));
+				part.setSunit(dicunit.get(l.get("UNIT_MEAS_FOR_WEIGHT")));
+				partList.add(part);
+			});
+			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