Commit efc1b607 LN

工单增加xlsx格式的文件导入

1 个父辈 615bb7f2
package com.neotel.smfcore.common.excel;
import com.alibaba.excel.EasyExcel;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class ExcelReader {
public static List<Map<Integer, String>> noModelRead(String fileName) {
// 这里 只要,然后读取第一个sheet 同步读取会自动finish
NoModelDataListener listener = new NoModelDataListener();
EasyExcel.read(fileName, listener).sheet().doRead();
List<Map<Integer, String>> data = listener.getData();
Map<Integer, String> headerMap = listener.getHeaderMap();
if (headerMap != null) {
if (data == null) {
data = new ArrayList<>();
}
data.add(0, headerMap);
}
return data;
}
// public static List<OrderLineItem> ReadOrder(String fileName){
// ExcelReaderBuilder workBook = EasyExcel.read
// (fileName, OrderLineItem.class, new OrderReaderListener());
//
// // 封装工作表
// ExcelReaderSheetBuilder sheet1 = workBook.sheet();
// // 读取
// sheet1.doRead();
//
// //写入数据库
// List<OrderLineItem> orderLineItems = OrderReaderListener.getStudentList();
// return orderLineItems;
//
// }
}
package com.neotel.smfcore.common.excel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.util.ConverterUtils;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
public class NoModelDataListener extends AnalysisEventListener<Map<Integer, String>> {
private List<Map<Integer, String>> cachedDataList =new ArrayList<>();
private Map<Integer,String> headerMap=new HashMap<>();
@Override
public void invoke(Map<Integer, String> data, AnalysisContext context) {
log.debug("解析到一条数据:{}", JSON.toJSONString(data));
cachedDataList.add(data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
log.info("所有数据解析完成,共"+cachedDataList.size()+"条数据!");
}
public List<Map<Integer, String>> getData(){
return cachedDataList ;
}
public Map<Integer, String> getHeaderMap(){
return headerMap;
}
@Override
public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) {
log.debug("解析到一条头数据:{}", JSON.toJSONString(headMap));
headerMap= ConverterUtils.convertToStringMap(headMap, context);
// 如果想转成成 Map<Integer,String>
// 方案1: 不要implements ReadListener 而是 extends AnalysisEventListener
// 方案2: 调用 ConverterUtils.convertToStringMap(headMap, context) 自动会转换
}
}
...@@ -161,6 +161,11 @@ public class CodeResolve { ...@@ -161,6 +161,11 @@ public class CodeResolve {
} }
} }
} }
if(barcodeFromRule.getExpireDate()!=null &&barcode.getExpireDate()==null){
barcode.setExpireDate(barcodeFromRule.getExpireDate());
log.info("重新设置"+codeBeanFromRule.getCodeStr()+"的过期日期");
needUpdate = true;
}
if(needUpdate){ if(needUpdate){
try { try {
......
...@@ -3,6 +3,7 @@ package com.neotel.smfcore.core.order.listener; ...@@ -3,6 +3,7 @@ package com.neotel.smfcore.core.order.listener;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.neotel.smfcore.common.csv.CsvReader; import com.neotel.smfcore.common.csv.CsvReader;
import com.neotel.smfcore.common.excel.ExcelReader;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager; import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
...@@ -42,12 +43,16 @@ public class DefaultOrderFileListener implements IOrderFileListener { ...@@ -42,12 +43,16 @@ public class DefaultOrderFileListener implements IOrderFileListener {
// if(!fileName.endsWith(".process") && fileName.endsWith("_result.txt")){ // if(!fileName.endsWith(".process") && fileName.endsWith("_result.txt")){
// //
// } // }
if(isFileType(fileName,"csv")){ if(isFileType(fileName,"csv")||isFileType(fileName,"xlsx")){
LiteOrder fileNameOrder = liteOrderManager.findBySource(fileName); LiteOrder fileNameOrder = liteOrderManager.findBySource(fileName);
if(fileNameOrder == null){ if(fileNameOrder == null){
try{ try{
Map<String, List<LiteOrderItem>> itemMap = readCsvFile(fileName,orderFile.getAbsolutePath()); Map<String, List<LiteOrderItem>> itemMap =null;
if(isFileType(fileName,"csv")) {
itemMap = readCsvFile(fileName, orderFile.getAbsolutePath());
}else if(isFileType(fileName,"xlsx")){
itemMap = readExcelFile(fileName, orderFile.getAbsolutePath());
}
if (itemMap != null && itemMap.size() > 0) { if (itemMap != null && itemMap.size() > 0) {
for (String so:itemMap.keySet()) { for (String so:itemMap.keySet()) {
...@@ -178,6 +183,89 @@ public class DefaultOrderFileListener implements IOrderFileListener { ...@@ -178,6 +183,89 @@ public class DefaultOrderFileListener implements IOrderFileListener {
} }
public Map<String , List<LiteOrderItem>> readExcelFile(String fileName, String fileURL) {
try {
fileName = fileName.replace(".xlsx", "");
Map<String, List<LiteOrderItem>> itemMap = new HashMap<>();
List<Map<Integer, String>> data= ExcelReader.noModelRead(fileURL);
if(data!=null&&data.size()>=2){
Map<Integer, String> headerData=data.get(0);
Map<String,Integer> headerMap=new HashMap<>();
for (Integer key :
headerData.keySet()) {
String v=headerData.get(key);
headerMap.put(v,key);
}
OrderSetting orderSetting = dataCache.getOrderSetting();
int partNumberIndex = headerMap.getOrDefault( orderSetting.getPn(),-1);
int qtyIndex = headerMap.getOrDefault( orderSetting.getQty(),-1);
int feederIndex = headerMap.getOrDefault( orderSetting.getFeeder(),-1);
int riIndex = headerMap.getOrDefault( orderSetting.getRi(),-1);
int soIndex = headerMap.getOrDefault( orderSetting.getSo(),-1);
for(int i=1;i<data.size();i++){
Map<Integer, String> lineValues = data.get(i);
String partNumber = lineValues.get(partNumberIndex);
String ri="";
if(riIndex!=-1){
ri=lineValues.get(riIndex);
}
if (partNumber.isEmpty()&&ri.isEmpty()) {
log.warn("行[partNumber=" + partNumber + "]中PN和RI都 为空,此行忽略");
} else {
int num = 1;
if (qtyIndex != -1) {
String numStr = lineValues.get(qtyIndex) ;
if (Strings.isNotBlank(numStr)) {
try {
num = Integer.valueOf(numStr);
} catch (Exception e) {
log.error(partNumber + "的数量:" + numStr + " 不是数字,使用1");
}
}
}
String feeder = "";
if (feederIndex != -1) {
feeder = lineValues.get(feederIndex);
}
String so=fileName;
if(soIndex!=-1){
so=lineValues.get(soIndex);
}
if(!ObjectUtil.isNotEmpty(so)){
so=fileName;
}
LiteOrderItem item = new LiteOrderItem();
item.setPn(partNumber);
if(partNumber.isEmpty()){
item.setNeedReelCount(1);
}
item.setNeedNum(num);
item.setFeederInfo(feeder);
item.setRi(ri);
if(!itemMap.containsKey(so)){
itemMap.put(so,new ArrayList<LiteOrderItem>());
}
itemMap.get(so).add(item);
}
}
}
return itemMap;
} catch (Exception ex) {
log.error("解析上传的工单出错:" + ex.toString());
} finally {
}
return null;
}
protected boolean isFileType(String smbFile, String type){ protected boolean isFileType(String smbFile, String type){
//判断是否是有效的工单文件 //判断是否是有效的工单文件
if(smbFile.toLowerCase().endsWith(type)){ if(smbFile.toLowerCase().endsWith(type)){
......
...@@ -129,11 +129,12 @@ public class OrderController { ...@@ -129,11 +129,12 @@ public class OrderController {
@AnonymousAccess @AnonymousAccess
public ResultBean updateAvatar(@RequestParam MultipartFile orderFile) { public ResultBean updateAvatar(@RequestParam MultipartFile orderFile) {
String image = "csv"; String csv = "csv";
String excel="xlsx";
String fileType = FileUtil.getExtensionName(orderFile.getOriginalFilename()); String fileType = FileUtil.getExtensionName(orderFile.getOriginalFilename());
String fileName = FileUtil.getFileNameNoEx(orderFile.getOriginalFilename()); String fileName = FileUtil.getFileNameNoEx(orderFile.getOriginalFilename());
if (fileType != null && !image.contains(fileType)) { if (fileType != null &&(!csv.contains(fileType))&&(!excel.contains(fileType)) ) {
throw new ValidateException("smfcore.feleFormatError", "文件格式错误!, 仅支持{0}格式", new String[]{image}); throw new ValidateException("smfcore.feleFormatError", "文件格式错误!, 仅支持{0}格式", new String[]{csv+","+excel});
} }
File folder = new File(properties.getPath(), "pos"); File folder = new File(properties.getPath(), "pos");
File localFile = FileUtil.upload(orderFile, folder.getAbsolutePath()); File localFile = FileUtil.upload(orderFile, folder.getAbsolutePath());
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!