From 2fb28b36f15de26249ae34160e1accf118c011c7 Mon Sep 17 00:00:00 2001
From: Fixiaobai <fixiaobai@163.com>
Date: 星期五, 17 十一月 2023 16:47:17 +0800
Subject: [PATCH] Changes16
---
mes-basic/src/main/java/com/chinaztt/mes/basic/service/impl/PartServiceImpl.java | 272 +++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 255 insertions(+), 17 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 96514d0..50ec42c 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,11 +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;
@@ -47,19 +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.Date;
-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;
/**
* 闆朵欢
@@ -69,6 +87,7 @@
*/
@AllArgsConstructor
@Service
+@Slf4j
public class PartServiceImpl extends ServiceImpl<PartMapper, Part> implements PartService {
private DictUtils dictUtils;
private PartUtils partUtils;
@@ -76,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) {
@@ -289,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,28 +386,247 @@
}
}
+
@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();
if (redisTemplate.hasKey(key)) {
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"));
- System.out.println(map);
- String url = "http://192.168.20.47:8008/PurchService.ashx?contract=ZTKJ&contractKey=4ttDeLKNsZuhstjtROMcRE1USNFXKdFYE7lQ2p1m5Bo=&procedureName=QUERY_INVENTORY_PART_INFO_STD&userId=7632&inAttr={'MODIFY_DATE':"+JsonUtil.jsonToString(map)+"}";
+ 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);
- System.out.println(
- "鎵ц========銆�"+mapResult);
+ 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) {
+ log.info("鎺ユ敹涓绘暟鎹钩鍙版暟鎹负===================銆�"+JSONObject.toJSONString(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_description());
+ //闆朵欢鎻忚堪
+ part.setDescription(partVo.getMaterial_name());
+ //鍗曚綅
+ 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