fix: 修改临近城市上传模版
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package mjkf.xinke.main.model.db;
|
package mjkf.xinke.main.model.db;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.bean.copier.CopyOptions;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
@@ -170,8 +171,44 @@ public class DataAdjacent extends Model<DataAdjacent> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DataAdjacent (String regionName, Row row, MaterialTask task) {
|
||||||
|
var policy = Row.MissingCellPolicy.CREATE_NULL_AS_BLANK;
|
||||||
|
row.getCell(0, policy).setCellType(CellType.STRING);
|
||||||
|
this.setMaterialId(row.getCell(0, policy).getStringCellValue());
|
||||||
|
this.setName(row.getCell(1, policy).getStringCellValue().replace(" ", ""));
|
||||||
|
this.setSpec(row.getCell(2, policy).getStringCellValue().replace(" ", ""));
|
||||||
|
this.setYear(task.getYear());
|
||||||
|
this.setMonth(task.getMonth());
|
||||||
|
|
||||||
|
if (this.getMaterialId().isEmpty()) {
|
||||||
|
throw new IllegalArgumentException("材料编码为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("广东".equals(regionName)) {
|
||||||
|
this.setPriceGuangzhou(BigDecimal.valueOf(row.getCell(3, policy).getNumericCellValue()));
|
||||||
|
this.setPriceMeizhou(BigDecimal.valueOf(row.getCell(4, policy).getNumericCellValue()));
|
||||||
|
this.setPriceChaozhou(BigDecimal.valueOf(row.getCell(5, policy).getNumericCellValue()));
|
||||||
|
} else if ("江西".equals(regionName)) {
|
||||||
|
this.setPriceNanchang(BigDecimal.valueOf(row.getCell(3, policy).getNumericCellValue()));
|
||||||
|
this.setPriceFuzhou(BigDecimal.valueOf(row.getCell(4, policy).getNumericCellValue()));
|
||||||
|
this.setPriceGanzhou(BigDecimal.valueOf(row.getCell(5, policy).getNumericCellValue()));
|
||||||
|
this.setPriceShangrao(BigDecimal.valueOf(row.getCell(6, policy).getNumericCellValue()));
|
||||||
|
this.setPriceYingtan(BigDecimal.valueOf(row.getCell(7, policy).getNumericCellValue()));
|
||||||
|
} else if ("浙江".equals(regionName)) {
|
||||||
|
this.setPriceHangzhou(BigDecimal.valueOf(row.getCell(3, policy).getNumericCellValue()));
|
||||||
|
this.setPriceLishui(BigDecimal.valueOf(row.getCell(4, policy).getNumericCellValue()));
|
||||||
|
this.setPriceQuzhou(BigDecimal.valueOf(row.getCell(5, policy).getNumericCellValue()));
|
||||||
|
this.setPriceWenzhou(BigDecimal.valueOf(row.getCell(6, policy).getNumericCellValue()));
|
||||||
|
} else if ("云南".equals(regionName)) {
|
||||||
|
this.setPriceKunming(BigDecimal.valueOf(row.getCell(3, policy).getNumericCellValue()));
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException("无效的地区名称: " + regionName);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public DataAdjacent update(DataAdjacent item) {
|
public DataAdjacent update(DataAdjacent item) {
|
||||||
BeanUtil.copyProperties(item, this);
|
BeanUtil.copyProperties(item, this, CopyOptions.create().setIgnoreNullValue(true));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,10 +1,16 @@
|
|||||||
package mjkf.xinke.main.service;
|
package mjkf.xinke.main.service;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import lombok.SneakyThrows;
|
||||||
import mjkf.xinke.main.model.db.DataAdjacent;
|
import mjkf.xinke.main.model.db.DataAdjacent;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import mjkf.xinke.main.model.db.MaterialTask;
|
||||||
|
import org.apache.poi.ss.usermodel.Row;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@@ -59,5 +65,32 @@ public class DataAdjacentService extends DataService<BaseMapper<DataAdjacent>, D
|
|||||||
query.orderByAsc(DataAdjacent::getYear, DataAdjacent::getMonth);
|
query.orderByAsc(DataAdjacent::getYear, DataAdjacent::getMonth);
|
||||||
return query;
|
return query;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
public List<DataAdjacent> saveOrUpdateByIndexBatch(Map<String, List<Row>> rowsMap, MaterialTask task) {
|
||||||
|
var result = new ArrayList<DataAdjacent>();
|
||||||
|
for (var key: rowsMap.keySet()) {
|
||||||
|
if (!List.of("广东", "江西", "浙江", "云南").contains(key)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var rows = rowsMap.get(key);
|
||||||
|
for (var row: rows) {
|
||||||
|
try {
|
||||||
|
var item = new DataAdjacent(key, row, task);
|
||||||
|
if (ObjectUtil.isNotEmpty(item)) {
|
||||||
|
result.add(item);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (var item : result) {
|
||||||
|
if (item != null) {
|
||||||
|
this.saveOrUpdateByIndex(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
package mjkf.xinke.main.service;
|
package mjkf.xinke.main.service;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
@@ -51,7 +52,7 @@ public abstract class DataService<M extends BaseMapper<T>, T> extends ServiceImp
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}).collect(Collectors.toList());
|
}).filter(i-> ObjectUtil.isNotEmpty(i)).collect(Collectors.toList());
|
||||||
for (T item : list) {
|
for (T item : list) {
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
this.saveOrUpdateByIndex(item);
|
this.saveOrUpdateByIndex(item);
|
||||||
|
@@ -18,9 +18,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class MaterialTaskService extends ServiceImpl<BaseMapper<MaterialTask>, MaterialTask> {
|
public class MaterialTaskService extends ServiceImpl<BaseMapper<MaterialTask>, MaterialTask> {
|
||||||
@@ -92,7 +90,8 @@ public class MaterialTaskService extends ServiceImpl<BaseMapper<MaterialTask>, M
|
|||||||
} else if (MaterialTaskType.isHighwayBureau(data.getType())) {
|
} else if (MaterialTaskType.isHighwayBureau(data.getType())) {
|
||||||
list = fuzhouHighwayBureauService.saveOrUpdateByIndexBatch(rows, data);
|
list = fuzhouHighwayBureauService.saveOrUpdateByIndexBatch(rows, data);
|
||||||
} else if (data.getType().equals(MaterialTaskType.OTHER)) {
|
} else if (data.getType().equals(MaterialTaskType.OTHER)) {
|
||||||
list = dataAdjacentService.saveOrUpdateByIndexBatch(rows, data);
|
var rowsMap = this.getTableRowsMap(file);
|
||||||
|
list = dataAdjacentService.saveOrUpdateByIndexBatch(rowsMap, data);
|
||||||
} else {
|
} else {
|
||||||
System.out.println("MaterialTaskService.importData | 未识别的任务类型");
|
System.out.println("MaterialTaskService.importData | 未识别的任务类型");
|
||||||
return false;
|
return false;
|
||||||
@@ -111,6 +110,7 @@ public class MaterialTaskService extends ServiceImpl<BaseMapper<MaterialTask>, M
|
|||||||
System.out.println("MaterialTaskService.getTableRows | 解析表格 | " + file.getName());
|
System.out.println("MaterialTaskService.getTableRows | 解析表格 | " + file.getName());
|
||||||
List<Row> result = new ArrayList<>();
|
List<Row> result = new ArrayList<>();
|
||||||
try (Workbook workbook = WorkbookFactory.create(file)) {
|
try (Workbook workbook = WorkbookFactory.create(file)) {
|
||||||
|
|
||||||
Sheet sheet = workbook.getSheetAt(0); // 假设文件中只有一个表格
|
Sheet sheet = workbook.getSheetAt(0); // 假设文件中只有一个表格
|
||||||
Iterator<Row> rowIterator = sheet.iterator();
|
Iterator<Row> rowIterator = sheet.iterator();
|
||||||
rowIterator.next( ); // 跳过标题行
|
rowIterator.next( ); // 跳过标题行
|
||||||
@@ -125,5 +125,31 @@ public class MaterialTaskService extends ServiceImpl<BaseMapper<MaterialTask>, M
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private Map<String, List<Row>> getTableRowsMap(File file) throws IOException {
|
||||||
|
System.out.println("MaterialTaskService.getTableRowsMap | 解析表格 | " + file.getName());
|
||||||
|
Map<String, List<Row>> result = new HashMap<>();
|
||||||
|
|
||||||
|
try (Workbook workbook = WorkbookFactory.create(file)) {
|
||||||
|
var sheetIterator = workbook.sheetIterator();
|
||||||
|
while (sheetIterator.hasNext()) {
|
||||||
|
var name = sheetIterator.next().getSheetName();
|
||||||
|
var resultList = new ArrayList<Row>();
|
||||||
|
Sheet sheet = workbook.getSheet(String.valueOf(name));
|
||||||
|
Iterator<Row> rowIterator = sheet.iterator();
|
||||||
|
rowIterator.next( ); // 跳过标题行
|
||||||
|
while (rowIterator.hasNext()) {
|
||||||
|
Row row = rowIterator.next();
|
||||||
|
resultList.add(row);
|
||||||
|
}
|
||||||
|
result.put(String.valueOf(name), resultList);
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -27,8 +27,8 @@ public class UploadFileTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test() throws Exception {
|
public void test() throws Exception {
|
||||||
// var filePath = "C:\\Users\\Administrator\\Desktop\\材料管理系统模版\\历史数据\\地材-202405.xlsx";
|
// var filePath = "C:\\Users\\Administrator\\Desktop\\材料管理系统模版\\历史数据\\地材-202405.xlsx";
|
||||||
// var filePath = "C:\\Users\\Administrator\\Documents\\工作表 在 9月完成功能.xlsx";
|
var filePath = "C:\\Users\\Administrator\\Documents\\对比材料精简9月.xlsx";
|
||||||
var filePath = "C:\\Users\\Administrator\\Documents\\三明钢铁.xlsx";
|
// var filePath = "C:\\Users\\Administrator\\Documents\\三明钢铁.xlsx";
|
||||||
var file = new File(filePath);
|
var file = new File(filePath);
|
||||||
// var multipartFile = this.mockMultipartFile(file, "相邻城市价格.xlsx", "application/x-zip-compressed");
|
// var multipartFile = this.mockMultipartFile(file, "相邻城市价格.xlsx", "application/x-zip-compressed");
|
||||||
var multipartFile = this.mockMultipartFile(file);
|
var multipartFile = this.mockMultipartFile(file);
|
||||||
@@ -43,7 +43,7 @@ public class UploadFileTest {
|
|||||||
* 1810482216079302658 交通局.xlsx 40101
|
* 1810482216079302658 交通局.xlsx 40101
|
||||||
* 1810497092512178177 地材.xlsx 1101
|
* 1810497092512178177 地材.xlsx 1101
|
||||||
* 1810506191866003457 地材-202405.xlsx 1101
|
* 1810506191866003457 地材-202405.xlsx 1101
|
||||||
* 1838851336371163138 相邻城市.xlsx 600
|
* 1871732061747179521 相邻城市.xlsx 600
|
||||||
* 1866412571689631746 三明钢铁.xlsx 301
|
* 1866412571689631746 三明钢铁.xlsx 301
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user