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/FactoryService.java          |    2 
 mes-basic/src/main/java/com/chinaztt/mes/basic/controller/FactoryController.java    |    9 
 mes-basic/src/main/java/com/chinaztt/mes/basic/service/PartService.java             |    3 
 mes-basic/src/main/java/com/chinaztt/mes/basic/controller/DivisionController.java   |    1 
 mes-basic/src/main/java/com/chinaztt/mes/basic/entity/Part.java                     |  114 ++++++++--
 mes-web/src/main/resources/bootstrap.yml                                            |    4 
 mes-common/src/main/java/com/chinaztt/mes/common/util/Threads.java                  |   96 ++++++++
 mes-common/src/main/java/com/chinaztt/mes/common/util/MultipartFileToFile.java      |   65 +++++
 mes-basic/src/main/java/com/chinaztt/mes/basic/controller/PartController.java       |   54 ++++
 mes-basic/src/main/java/com/chinaztt/mes/basic/entity/Division.java                 |    8 
 mes-basic/src/main/java/com/chinaztt/mes/basic/service/impl/FactoryServiceImpl.java |   10 
 mes-basic/src/main/java/com/chinaztt/mes/basic/service/impl/PartServiceImpl.java    |  140 ++++++++++++
 mes-basic/src/main/java/com/chinaztt/mes/basic/entity/Post.java                     |   16 +
 mes-common/src/main/java/com/chinaztt/mes/common/config/FeignInterceptor.java       |   27 ++
 mes-common/src/main/java/com/chinaztt/mes/common/util/ThreadPoolConfig.java         |   62 +++++
 15 files changed, 580 insertions(+), 31 deletions(-)

diff --git a/mes-basic/src/main/java/com/chinaztt/mes/basic/controller/DivisionController.java b/mes-basic/src/main/java/com/chinaztt/mes/basic/controller/DivisionController.java
index ce99c57..c545860 100644
--- a/mes-basic/src/main/java/com/chinaztt/mes/basic/controller/DivisionController.java
+++ b/mes-basic/src/main/java/com/chinaztt/mes/basic/controller/DivisionController.java
@@ -94,6 +94,7 @@
     @PostMapping
     @PreAuthorize("@pms.hasPermission('basic_division_add')")
     public R save(@RequestBody Division division) {
+		System.out.println(division);
         return R.ok(divisionService.save(division));
     }
 	/**
diff --git a/mes-basic/src/main/java/com/chinaztt/mes/basic/controller/FactoryController.java b/mes-basic/src/main/java/com/chinaztt/mes/basic/controller/FactoryController.java
index f3144d2..d863e4f 100644
--- a/mes-basic/src/main/java/com/chinaztt/mes/basic/controller/FactoryController.java
+++ b/mes-basic/src/main/java/com/chinaztt/mes/basic/controller/FactoryController.java
@@ -64,6 +64,15 @@
         return R.ok(factoryService.getFactoryPage(page, QueryWrapperUtil.gen(factory)));
     }
 
+	/**
+	 * 鏍规嵁鍏徃鏌ヨ宸ュ巶
+	 * @param id
+	 * @return
+	 */
+	@GetMapping("/byCompanyId")
+	public R getFactoryByCompany(@RequestParam("id") Long id){
+		return R.ok(factoryService.getByCompanyId(id));
+	}
 
     /**
      * 閫氳繃id鏌ヨ宸ュ巶
diff --git a/mes-basic/src/main/java/com/chinaztt/mes/basic/controller/PartController.java b/mes-basic/src/main/java/com/chinaztt/mes/basic/controller/PartController.java
index 603c3c3..7060d09 100644
--- a/mes-basic/src/main/java/com/chinaztt/mes/basic/controller/PartController.java
+++ b/mes-basic/src/main/java/com/chinaztt/mes/basic/controller/PartController.java
@@ -17,6 +17,7 @@
 
 package com.chinaztt.mes.basic.controller;
 
+import cn.hutool.core.text.csv.CsvReadConfig;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -24,7 +25,10 @@
 import com.chinaztt.mes.basic.entity.Part;
 import com.chinaztt.mes.basic.excel.PartData;
 import com.chinaztt.mes.basic.excel.PartUploadListener;
+import com.chinaztt.mes.basic.mapper.PartMapper;
 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.common.util.JsonUtil;
 import com.chinaztt.mes.common.wrapper.QueryWrapperUtil;
 import com.chinaztt.ztt.admin.api.entity.SysDictItem;
@@ -37,7 +41,11 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -62,6 +70,16 @@
 	private final RemoteDictService remoteDictService;
 	private final RedisTemplate redisTemplate;;
 
+	private DictUtils dictUtils;
+	private PartUtils partUtils;
+
+	private PartMapper partMapper;
+
+	private final static Logger logger = LoggerFactory.getLogger(PartController.class);
+
+
+	@Autowired
+	private ThreadPoolTaskExecutor threadPoolTaskExecutor;
 	/**
 	 * 鍒嗛〉鏌ヨ
 	 *
@@ -305,4 +323,40 @@
 	public R getRoutingPartPage(Page page, Part part, Long bomId) {
 		return R.ok(partService.getRoutingPartPage(page, QueryWrapperUtil.gen(part), bomId));
 	}
+
+	@PostMapping("/uploadExcel")
+	public R uploadExcel(MultipartFile file) {
+		String key = "syncPart_lock" + SecurityUtils.getUser().getId();
+		if (redisTemplate.hasKey(key)) {
+			throw new RuntimeException("鏈夊鍏ヤ换鍔℃鍦ㄥ鐞�");
+		}
+		partService.asyncUploadExcel(file);
+		return R.ok();
+	}
+
+	/**
+	 * 璁剧疆Csv璇绘枃浠堕厤缃�
+	 * @return CsvWriteConfig
+	 */
+	public static CsvReadConfig setCsvReadConfig(){
+		CsvReadConfig csvReadConfig = new CsvReadConfig();
+		// 璁剧疆 鏂囨湰鍒嗛殧绗︼紝鏂囨湰鍖呰绗︼紝榛樿鍙屽紩鍙�'"'
+		//csvReadConfig.setTextDelimiter('\t');
+		// 瀛楁鍒嗗壊绗﹀彿锛岄粯璁や负閫楀彿
+		csvReadConfig.setFieldSeparator('|');
+		// 璁剧疆娉ㄩ噴绗﹀彿
+		// csvReadConfig.setCommentCharacter('#');
+		// CSV鏂囦欢鏄惁鍖呭惈琛ㄥご(鍥犱负琛ㄥご涓嶆槸鏁版嵁鍐呭)
+		csvReadConfig.setContainsHeader(true);
+		// 鎴栬�呬娇鐢ㄥ涓嬮厤缃缃〃澶村紑濮嬭鍙凤紝-1L浠h〃鏃犺〃澶�
+		// csvReadConfig.setHeaderLineNo(1L);
+		//璁剧疆寮�濮嬬殑琛岋紙鍖呮嫭锛夛紝榛樿0锛屾澶勪负鍘熷鏂囦欢琛屽彿
+		// csvReadConfig.setBeginLineNo(0);
+		// 鏄惁璺宠繃绌虹櫧琛岋紝榛樿涓簍rue
+		// csvReadConfig.setSkipEmptyRows(true);
+		// 璁剧疆姣忚瀛楁涓暟涓嶅悓鏃舵槸鍚︽姏鍑哄紓甯革紝榛樿false
+		// csvReadConfig.setErrorOnDifferentFieldCount(false);
+		return csvReadConfig;
+	}
+
 }
diff --git a/mes-basic/src/main/java/com/chinaztt/mes/basic/entity/Division.java b/mes-basic/src/main/java/com/chinaztt/mes/basic/entity/Division.java
index d54eab6..827f2cf 100644
--- a/mes-basic/src/main/java/com/chinaztt/mes/basic/entity/Division.java
+++ b/mes-basic/src/main/java/com/chinaztt/mes/basic/entity/Division.java
@@ -107,5 +107,11 @@
 	@TableField(exist = false)
 	private String companyName;
 
-
+	@TableField(exist = false)
+	private String factoryId;
+	/**
+	 * 宸ュ巶鍚�
+	 */
+	@TableField(exist = false)
+	private String factoryName;
 }
diff --git a/mes-basic/src/main/java/com/chinaztt/mes/basic/entity/Part.java b/mes-basic/src/main/java/com/chinaztt/mes/basic/entity/Part.java
index e0d9546..c80ad72 100644
--- a/mes-basic/src/main/java/com/chinaztt/mes/basic/entity/Part.java
+++ b/mes-basic/src/main/java/com/chinaztt/mes/basic/entity/Part.java
@@ -17,6 +17,7 @@
 
 package com.chinaztt.mes.basic.entity;
 
+import cn.hutool.core.annotation.Alias;
 import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import io.swagger.annotations.ApiModel;
@@ -84,37 +85,49 @@
 	@Unique
 	@ApiModelProperty(value = "闆朵欢鍙�")
 	@NonNull
+	@Alias("闆朵欢鍙�")
 	private String partNo;
+
 	/**
 	 * 鍚嶇О
 	 */
-	@ApiModelProperty(value = "鍚嶇О")
+	@Alias("姝e湪浣跨敤涓殑闆朵欢鎻忚堪")
 	private String partName;
-	/**
-	 * 鍚嶇О
-	 */
-	@ApiModelProperty(value = "妫�娴嬭鍒檌d")
-	private Long testRuleId;
-	/**
-	 * 闆朵欢绫诲瀷
-	 */
-	@ApiModelProperty(value = "闆朵欢绫诲瀷")
-	private String materialType;
-	/**
-	 * 鍗曚綅
-	 */
-	@ApiModelProperty(value = "鍗曚綅")
-	private String unit;
-	/**
-	 * 鍗曚綅2
-	 */
-	@ApiModelProperty(value = "鍗曚綅2")
-	private String sunit;
+
 	/**
 	 * 鎻忚堪
 	 */
-	@ApiModelProperty(value = "鎻忚堪")
+	@Alias("闆朵欢鎻忚堪")
 	private String description;
+
+	/**
+	 * 闆朵欢绫诲瀷
+	 */
+	@Alias("闆朵欢绫诲瀷")
+	private String materialType;
+	/**
+	 * 妫�娴嬭鍒檌d
+	 */
+	@ApiModelProperty(value = "妫�娴嬭鍒檌d")
+	private Long testRuleId;
+
+	/**
+	 * 鍗曚綅
+	 */
+	@Alias("搴撳瓨璁¢噺鍗曚綅")
+	private String unit;
+
+
+	/**
+	 * 鍗曚綅2
+	 */
+	@Alias("閲嶉噺璁¢噺鍗曚綅")
+	private String sunit;
+
+
+	@Alias("鐜版湁鏁伴噺")
+	private String totalNum;
+
 	/**
 	 * 鍘熷厛鐨勫搧绫� 鐜板湪鏀逛负 涓�绾у垎绫�
 	 */
@@ -192,6 +205,7 @@
 	 * P锛氳櫄鎷熼浂浠惰鍒掋�傛棤闇�闄勫姞瀛楁
 	 */
 	@ApiModelProperty(value = "璁″垝鏂规硶")
+	@Alias("闆朵欢鐘舵��")
 	private String planningMethod;
 	/**
 	 * 鐗规��1
@@ -240,4 +254,60 @@
 
 	@ApiModelProperty(value = "鏄惁鍘熸潗鏂欐")
 	private Integer testRuleType;
+
+	@Alias("鏄惁璁惧澶囦欢")
+	private String isEquipment;
+
+	@Alias("璧勪骇绛夌骇")
+	private String assets;
+
+	@Alias("璧勪骇绫诲埆")
+	private String assetsType;
+
+	@Alias("鐗╄祫鐘舵��")
+	private String suppliesType;
+
+	@Alias("ABC 绫�")
+	private String abcType;
+
+	@Alias("棰戠巼绾у埆")
+	private String hz;
+
+	@Alias("澹版槑鍛ㄦ湡")
+	private String cycle;
+
+	@Alias("浣撶Н璁¢噺鍗曚綅")
+	private String volume;
+
+	@Alias("鐜版湁鑾峰彇鏁伴噺")
+	private String getNum;
+
+	@Alias("榛樿鐨勭墿鏂欑敵璇蜂緵搴�")
+	private String defaultMr;
+
+	@Alias("DOP 杩炴帴")
+	private String dopR;
+
+	@Alias("鍑�棰濅氦鏄�")
+	private String netto;
+
+	@Alias("鏁伴噺璁$畻鍙栨暣")
+	private String numCount;
+
+	@Alias("搴撳瓨浼颁环鏂规硶")
+	private String ivm;
+
+	@Alias("搴撳瓨浠舵垚鏈眰")
+	private String icl;
+
+	@Alias("渚涘簲鍟嗗彂绁ㄤ簨椤�")
+	private String sii;
+
+	@Alias("闆舵垚鏈�")
+	private String zc;
+
+	@Alias("澶栭儴鏈嶅姟鎴愭湰鐨勬柟娉�")
+	private String esca;
+
+
 }
diff --git a/mes-basic/src/main/java/com/chinaztt/mes/basic/entity/Post.java b/mes-basic/src/main/java/com/chinaztt/mes/basic/entity/Post.java
index b48b236..78c5fe8 100644
--- a/mes-basic/src/main/java/com/chinaztt/mes/basic/entity/Post.java
+++ b/mes-basic/src/main/java/com/chinaztt/mes/basic/entity/Post.java
@@ -44,4 +44,20 @@
 	 */
 	@ApiModelProperty(value = "澶囨敞")
 	private String remark;
+
+	/**
+	 * 鍏徃
+	 */
+	private Long company;
+
+	/**
+	 * 宸ュ巶
+	 */
+	private Long factory;
+
+
+	/**
+	 * 閮ㄩ棬
+	 */
+	private Long division;
 }
diff --git a/mes-basic/src/main/java/com/chinaztt/mes/basic/service/FactoryService.java b/mes-basic/src/main/java/com/chinaztt/mes/basic/service/FactoryService.java
index d7725bb..003f5af 100644
--- a/mes-basic/src/main/java/com/chinaztt/mes/basic/service/FactoryService.java
+++ b/mes-basic/src/main/java/com/chinaztt/mes/basic/service/FactoryService.java
@@ -22,7 +22,6 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.chinaztt.mes.basic.entity.Factory;
-import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -44,4 +43,5 @@
      */
     IPage<List<Factory>> getFactoryPage(Page page, QueryWrapper<Factory> ew);
 
+    List<Factory> getByCompanyId(Long id);
 }
diff --git a/mes-basic/src/main/java/com/chinaztt/mes/basic/service/PartService.java b/mes-basic/src/main/java/com/chinaztt/mes/basic/service/PartService.java
index 106baa5..83eb458 100644
--- a/mes-basic/src/main/java/com/chinaztt/mes/basic/service/PartService.java
+++ b/mes-basic/src/main/java/com/chinaztt/mes/basic/service/PartService.java
@@ -25,6 +25,7 @@
 import com.chinaztt.mes.basic.entity.Part;
 import com.chinaztt.mes.basic.excel.PartData;
 import com.chinaztt.ztt.common.core.util.R;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -131,4 +132,6 @@
 	void syncPart();
 
 	Long syncNewIfs(String date);
+
+    void asyncUploadExcel(MultipartFile file);
 }
diff --git a/mes-basic/src/main/java/com/chinaztt/mes/basic/service/impl/FactoryServiceImpl.java b/mes-basic/src/main/java/com/chinaztt/mes/basic/service/impl/FactoryServiceImpl.java
index e6d46e9..9dc35f8 100644
--- a/mes-basic/src/main/java/com/chinaztt/mes/basic/service/impl/FactoryServiceImpl.java
+++ b/mes-basic/src/main/java/com/chinaztt/mes/basic/service/impl/FactoryServiceImpl.java
@@ -23,9 +23,7 @@
 import com.chinaztt.mes.basic.entity.Factory;
 import com.chinaztt.mes.basic.mapper.FactoryMapper;
 import com.chinaztt.mes.basic.service.FactoryService;
-import com.chinaztt.ztt.common.data.datascope.DataScope;
 import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -54,4 +52,12 @@
 	public IPage<List<Factory>> getFactoryPage(Page page, QueryWrapper<Factory> ew) {
 		return baseMapper.getFactoryPage(page,ew);
 	}
+
+	@Override
+	public List<Factory> getByCompanyId(Long id) {
+		System.out.println(id);
+		QueryWrapper<Factory> wrapper = new QueryWrapper<>();
+		wrapper.lambda().eq(Factory::getCompanyId,id);
+		return baseMapper.selectList(wrapper);
+	}
 }
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;
+	}
 }
diff --git a/mes-common/src/main/java/com/chinaztt/mes/common/config/FeignInterceptor.java b/mes-common/src/main/java/com/chinaztt/mes/common/config/FeignInterceptor.java
new file mode 100644
index 0000000..8822b35
--- /dev/null
+++ b/mes-common/src/main/java/com/chinaztt/mes/common/config/FeignInterceptor.java
@@ -0,0 +1,27 @@
+package com.chinaztt.mes.common.config;
+
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/10/31
+ */
+@Component
+public class FeignInterceptor implements RequestInterceptor {
+	@Override
+	public void apply(RequestTemplate template) {
+		RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+		if(requestAttributes != null){
+			HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
+			String authorization = request.getHeader("Authorization");
+			template.header("Authorization", authorization);
+		}
+	}
+}
diff --git a/mes-common/src/main/java/com/chinaztt/mes/common/util/MultipartFileToFile.java b/mes-common/src/main/java/com/chinaztt/mes/common/util/MultipartFileToFile.java
new file mode 100644
index 0000000..8dc6457
--- /dev/null
+++ b/mes-common/src/main/java/com/chinaztt/mes/common/util/MultipartFileToFile.java
@@ -0,0 +1,65 @@
+package com.chinaztt.mes.common.util;
+
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.*;
+import java.util.Objects;
+
+/**
+ * @Author 寮犲
+ * @Date 2022/8/5
+ */
+public class MultipartFileToFile {
+    /**
+     * MultipartFile 杞� File
+     *
+     * @param file
+     * @throws Exception
+     */
+    public static File multipartFileToFile(MultipartFile file) {
+
+        File toFile = null;
+        try {
+			if ("".equals(file) || file.getSize() <= 0) {
+				file = null;
+			} else {
+				InputStream ins = null;
+				ins = file.getInputStream();
+				toFile = new File(Objects.requireNonNull(file.getOriginalFilename()));
+				inputStreamToFile(ins, toFile);
+				ins.close();
+			}
+		}catch (IOException e){
+			e.printStackTrace();
+		}
+        return toFile;
+    }
+
+    //鑾峰彇娴佹枃浠�
+    private static void inputStreamToFile(InputStream ins, File file) {
+        try {
+            OutputStream os = new FileOutputStream(file);
+            int bytesRead = 0;
+            byte[] buffer = new byte[8192];
+            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
+                os.write(buffer, 0, bytesRead);
+            }
+            os.close();
+            ins.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 鍒犻櫎鏈湴涓存椂鏂囦欢
+     * @param file
+     */
+    public static void delteTempFile(File file) {
+        if (file != null) {
+            File del = new File(file.toURI());
+            del.deleteOnExit();
+        }
+    }
+
+}
diff --git a/mes-common/src/main/java/com/chinaztt/mes/common/util/ThreadPoolConfig.java b/mes-common/src/main/java/com/chinaztt/mes/common/util/ThreadPoolConfig.java
new file mode 100644
index 0000000..47e2637
--- /dev/null
+++ b/mes-common/src/main/java/com/chinaztt/mes/common/util/ThreadPoolConfig.java
@@ -0,0 +1,62 @@
+package com.chinaztt.mes.common.util;
+
+import org.apache.commons.lang3.concurrent.BasicThreadFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * 绾跨▼姹犻厤缃�
+ *
+ * @author 寮犲
+ **/
+@Configuration
+public class ThreadPoolConfig
+{
+    // 鏍稿績绾跨▼姹犲ぇ灏�
+    private int corePoolSize = 80;
+
+    // 鏈�澶у彲鍒涘缓鐨勭嚎绋嬫暟
+    private int maxPoolSize = 92;
+
+    // 闃熷垪鏈�澶ч暱搴�
+    private int queueCapacity = 80;
+
+    // 绾跨▼姹犵淮鎶ょ嚎绋嬫墍鍏佽鐨勭┖闂叉椂闂�
+    private int keepAliveSeconds = 300;
+
+    @Bean(name = "threadPoolTaskExecutor")
+    public ThreadPoolTaskExecutor threadPoolTaskExecutor()
+    {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        executor.setMaxPoolSize(maxPoolSize);
+        executor.setCorePoolSize(corePoolSize);
+        executor.setQueueCapacity(queueCapacity);
+        executor.setKeepAliveSeconds(keepAliveSeconds);
+        // 绾跨▼姹犲鎷掔粷浠诲姟(鏃犵嚎绋嬪彲鐢�)鐨勫鐞嗙瓥鐣�
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        return executor;
+    }
+
+    /**
+     * 鎵ц鍛ㄦ湡鎬ф垨瀹氭椂浠诲姟
+     */
+    @Bean(name = "scheduledExecutorService")
+    protected ScheduledExecutorService scheduledExecutorService()
+    {
+        return new ScheduledThreadPoolExecutor(corePoolSize,
+                new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build())
+        {
+            @Override
+            protected void afterExecute(Runnable r, Throwable t)
+            {
+                super.afterExecute(r, t);
+                Threads.printException(r, t);
+            }
+        };
+    }
+}
diff --git a/mes-common/src/main/java/com/chinaztt/mes/common/util/Threads.java b/mes-common/src/main/java/com/chinaztt/mes/common/util/Threads.java
new file mode 100644
index 0000000..4619a26
--- /dev/null
+++ b/mes-common/src/main/java/com/chinaztt/mes/common/util/Threads.java
@@ -0,0 +1,96 @@
+package com.chinaztt.mes.common.util;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.*;
+
+/**
+ * 绾跨▼鐩稿叧宸ュ叿绫�.
+ * 
+ * @author 寮犲
+ */
+public class Threads
+{
+    private static final Logger logger = LoggerFactory.getLogger(Threads.class);
+
+    /**
+     * sleep绛夊緟,鍗曚綅涓烘绉�
+     */
+    public static void sleep(long milliseconds)
+    {
+        try
+        {
+            Thread.sleep(milliseconds);
+        }
+        catch (InterruptedException e)
+        {
+            return;
+        }
+    }
+
+    /**
+     * 鍋滄绾跨▼姹�
+     * 鍏堜娇鐢╯hutdown, 鍋滄鎺ユ敹鏂颁换鍔″苟灏濊瘯瀹屾垚鎵�鏈夊凡瀛樺湪浠诲姟.
+     * 濡傛灉瓒呮椂, 鍒欒皟鐢╯hutdownNow, 鍙栨秷鍦╳orkQueue涓璓ending鐨勪换鍔�,骞朵腑鏂墍鏈夐樆濉炲嚱鏁�.
+     * 濡傛灉浠嶄汉瓒呮檪锛屽墖寮峰埗閫�鍑�.
+     * 鍙﹀鍦╯hutdown鏃剁嚎绋嬫湰韬璋冪敤涓柇鍋氫簡澶勭悊.
+     */
+    public static void shutdownAndAwaitTermination(ExecutorService pool)
+    {
+        if (pool != null && !pool.isShutdown())
+        {
+            pool.shutdown();
+            try
+            {
+                if (!pool.awaitTermination(120, TimeUnit.SECONDS))
+                {
+                    pool.shutdownNow();
+                    if (!pool.awaitTermination(120, TimeUnit.SECONDS))
+                    {
+                        logger.info("Pool did not terminate");
+                    }
+                }
+            }
+            catch (InterruptedException ie)
+            {
+                pool.shutdownNow();
+                Thread.currentThread().interrupt();
+            }
+        }
+    }
+
+    /**
+     * 鎵撳嵃绾跨▼寮傚父淇℃伅
+     */
+    public static void printException(Runnable r, Throwable t)
+    {
+        if (t == null && r instanceof Future<?>)
+        {
+            try
+            {
+                Future<?> future = (Future<?>) r;
+                if (future.isDone())
+                {
+                    future.get();
+                }
+            }
+            catch (CancellationException ce)
+            {
+                t = ce;
+            }
+            catch (ExecutionException ee)
+            {
+                t = ee.getCause();
+            }
+            catch (InterruptedException ie)
+            {
+                Thread.currentThread().interrupt();
+            }
+        }
+        if (t != null)
+        {
+            logger.error(t.getMessage(), t);
+        }
+    }
+}
diff --git a/mes-web/src/main/resources/bootstrap.yml b/mes-web/src/main/resources/bootstrap.yml
index f8f31c8..1d6e43d 100644
--- a/mes-web/src/main/resources/bootstrap.yml
+++ b/mes-web/src/main/resources/bootstrap.yml
@@ -1,5 +1,5 @@
 server:
-  port: 6060
+  port: 6066
 
 spring:
   datasource:
@@ -17,7 +17,7 @@
       #      password: nacos
       password: zttZTT123!
       discovery:
-        server-addr: 127.0.0.1:8848
+        server-addr: 106.13.194.57:8848
         metadata:
           #          VERSION: 10.88.15.224
           VERSION: 127.0.0.1

--
Gitblit v1.9.3