add:组盘页面新增导入组盘信息

This commit is contained in:
2025-12-17 11:06:11 +08:00
parent 67e8d2ab15
commit 86452fec64
7 changed files with 168 additions and 74 deletions

View File

@@ -0,0 +1,43 @@
package org.nl.config.excel.group;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class GroupExcelDTO {
@ExcelProperty("载具编码")
private String storagevehicle_code;
@ExcelProperty("物料编码")
private String material_code;
@ExcelProperty("批次")
private String pcsn;
@ExcelProperty("组盘数量")
private BigDecimal qty;
@ExcelProperty("备注")
private String remark;
@ExcelProperty("供应商编码")
private String supp_code;
@ExcelProperty("生产日期")
private String produce_time;
@ExcelProperty("烘干次数")
private Integer bake_num;
@ExcelProperty("品质类型")
private String quality_type;
@ExcelProperty("料箱类型")
private String box_type;
@ExcelProperty("机台编码")
private String device_code;
}

View File

@@ -0,0 +1,90 @@
package org.nl.config.excel.group;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.config.SpringContextHolder;
import org.nl.wms.basedata_manage.service.dao.MdCsSupplierbase;
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
import org.nl.wms.basedata_manage.service.impl.MdCsSupplierbaseServiceImpl;
import org.nl.wms.basedata_manage.service.impl.MdMeMaterialbaseServiceImpl;
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
import org.nl.wms.warehouse_management.service.impl.MdPbGroupplateServiceImpl;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Component
public class GroupExcelListener extends AnalysisEventListener<GroupExcelDTO> {
// 存储解析的数据
private List<GroupExcelDTO> dataList = new ArrayList<>();
@Override
public void invoke(GroupExcelDTO userDTO, AnalysisContext analysisContext) {
dataList.add(userDTO);
// 调用插入逻辑
saveData();
// 清空缓存
dataList.clear();
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
// 处理最后一批数据
saveData();
log.info("Excel解析完成共处理{}条数据", dataList.size());
}
/**
* 实际逻辑替换为mybatis/dao操作
*/
private void saveData() {
if (!dataList.isEmpty()) {
for (GroupExcelDTO dto : dataList) {
// 基础校验
checkData(dto);
GroupPlate groupPlate = JSONObject.parseObject(JSONObject.toJSONString(dto), GroupPlate.class);
MdMeMaterialbaseServiceImpl iMdMeMaterialbaseService = SpringContextHolder.getBean(MdMeMaterialbaseServiceImpl.class);
MdMeMaterialbase materDao = iMdMeMaterialbaseService.getByCode(dto.getMaterial_code());
groupPlate.setMaterial_id(materDao.getMaterial_id());
MdCsSupplierbaseServiceImpl iMdCsSupplierbaseService = SpringContextHolder.getBean(MdCsSupplierbaseServiceImpl.class);
MdCsSupplierbase suppDao = iMdCsSupplierbaseService.getByCode(dto.getSupp_code());
groupPlate.setSupp_code(suppDao.getSupp_code());
SpringContextHolder.getBean(MdPbGroupplateServiceImpl.class).create(groupPlate);
}
log.info("批量组盘{}条数据", dataList.size());
}
}
private void checkData(GroupExcelDTO dto) {
if (ObjectUtil.isEmpty(dto.getStoragevehicle_code())) {
throw new BadRequestException("载具编码不能为空!");
}
if (ObjectUtil.isEmpty(dto.getPcsn())) {
throw new BadRequestException("批次不能为空!");
}
if (ObjectUtil.isEmpty(dto.getQty())) {
throw new BadRequestException("组盘数量不能为空!");
}
if (ObjectUtil.isEmpty(dto.getProduce_time())) {
throw new BadRequestException("生产日期不能为空!");
}
if (ObjectUtil.isEmpty(dto.getBake_num())) {
throw new BadRequestException("烘干次数不能为空!");
}
if (ObjectUtil.isEmpty(dto.getQuality_type())) {
throw new BadRequestException("品质类型不能为空!");
}
if (ObjectUtil.isEmpty(dto.getBox_type())) {
throw new BadRequestException("料箱类型不能为空!");
}
}
}

View File

@@ -109,6 +109,7 @@ public class GroupController {
@Log("导入数据")
@SaIgnore
public ResponseEntity<Object> importExcel(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
return new ResponseEntity<>(iMdPbGroupplateService.importExcel(file, request),HttpStatus.OK);
iMdPbGroupplateService.importExcel(file, request);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -10,7 +10,6 @@ import org.nl.wms.warehouse_management.service.dao.GroupPlate;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -60,6 +59,7 @@ public interface IMdPbGroupplateService extends IService<GroupPlate> {
/**
* 查询物料集合
*
* @return List<MdMeMaterialbase>
*/
List<MdMeMaterialbase> queryMaterList();
@@ -92,15 +92,16 @@ public interface IMdPbGroupplateService extends IService<GroupPlate> {
/**
* 打印物料标签后删除
*
* @param dto 实体类
*/
void printDelete(GroupPlate dto);
/**
* 导入excel
* @param file 文件
*
* @param file 文件
* @param request post请求
* @return ArrayList<JSONObject>
*/
ArrayList<JSONObject> importExcel(MultipartFile file, HttpServletRequest request);
void importExcel(MultipartFile file, HttpServletRequest request);
}

View File

@@ -3,8 +3,7 @@ package org.nl.wms.warehouse_management.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -12,9 +11,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.IdUtil;
import org.nl.config.excel.group.GroupExcelDTO;
import org.nl.config.excel.group.GroupExcelListener;
import org.nl.wms.basedata_manage.service.IMdCsSupplierbaseService;
import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService;
import org.nl.wms.basedata_manage.service.IMdPbMeasureunitService;
@@ -28,17 +28,17 @@ import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
import org.nl.wms.warehouse_management.service.dao.mapper.MdPbGroupplateMapper;
import org.nl.wms.warehouse_management.service.dto.GroupPlateDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* <p>
@@ -110,8 +110,8 @@ public class MdPbGroupplateServiceImpl extends ServiceImpl<MdPbGroupplateMapper,
MdMeMaterialbase mater = iMdMeMaterialbaseService.getById(dto.getMaterial_id());
DateTime parse = DateUtil.parse(dto.getProduce_time().substring(0, 10));
String quality_time = DateUtil.offsetDay(parse, mater.getQuality_time()).toString();
dto.setQuality_time(quality_time.substring(0,10));
dto.setProduce_time(dto.getProduce_time().substring(0,10));
dto.setQuality_time(quality_time.substring(0, 10));
dto.setProduce_time(dto.getProduce_time().substring(0, 10));
dto.setCreate_id(SecurityUtils.getCurrentUserId());
dto.setCreate_name(SecurityUtils.getCurrentNickName());
dto.setCreate_time(DateUtil.now());
@@ -124,8 +124,8 @@ public class MdPbGroupplateServiceImpl extends ServiceImpl<MdPbGroupplateMapper,
MdMeMaterialbase mater = iMdMeMaterialbaseService.getById(dto.getMaterial_id());
DateTime parse = DateUtil.parse(dto.getProduce_time().substring(0, 10));
String quality_time = DateUtil.offsetDay(parse, mater.getQuality_time()).toString();
dto.setQuality_time(quality_time.substring(0,10));
dto.setProduce_time(dto.getProduce_time().substring(0,10));
dto.setQuality_time(quality_time.substring(0, 10));
dto.setProduce_time(dto.getProduce_time().substring(0, 10));
this.updateById(dto);
}
@@ -138,8 +138,8 @@ public class MdPbGroupplateServiceImpl extends ServiceImpl<MdPbGroupplateMapper,
public List<MdMeMaterialbase> queryMaterList() {
return iMdMeMaterialbaseService.list(
new QueryWrapper<MdMeMaterialbase>().lambda()
.eq(MdMeMaterialbase::getIs_delete, IOSConstant.ZERO)
.eq(MdMeMaterialbase::getIs_used, IOSConstant.ONE)
.eq(MdMeMaterialbase::getIs_delete, IOSConstant.ZERO)
.eq(MdMeMaterialbase::getIs_used, IOSConstant.ONE)
);
}
@@ -169,7 +169,7 @@ public class MdPbGroupplateServiceImpl extends ServiceImpl<MdPbGroupplateMapper,
@Override
@Transactional
public void printDelete(GroupPlate dto) {
if(ObjectUtil.isNotEmpty(dto.getOut_type()) && ObjectUtil.isNotEmpty(dto.getIs_need_delete())) {
if (ObjectUtil.isNotEmpty(dto.getOut_type()) && ObjectUtil.isNotEmpty(dto.getIs_need_delete())) {
if (dto.getOut_type().equals(IOSEnum.OUT_BILL_TYPE.code("烘干出库")) && dto.getIs_need_delete().equals(IOSConstant.ONE)) {
Set<String> set = new HashSet<>();
set.add(dto.getGroup_id());
@@ -180,59 +180,18 @@ public class MdPbGroupplateServiceImpl extends ServiceImpl<MdPbGroupplateMapper,
@Override
@Transactional(rollbackFor = Exception.class)
public ArrayList<JSONObject> importExcel(MultipartFile file, HttpServletRequest request) {
// 1.获取上传文件输入流
InputStream inputStream = null;
public void importExcel(MultipartFile file, HttpServletRequest request) {
try {
inputStream = file.getInputStream();
} catch (Exception e) {
if (file.isEmpty()) {
throw new BadRequestException("文件不能为空!");
}
// 读取Excel逐行解析自动触发监听器
EasyExcel.read(file.getInputStream(), GroupExcelDTO.class, new GroupExcelListener())
.sheet()
.doRead();
} catch (IOException e) {
e.printStackTrace();
throw new BadRequestException("导入失败!" + e.getMessage());
}
ExcelReader excelReader = ExcelUtil.getReader(inputStream);
List<List<Object>> read = excelReader.read(0, excelReader.getRowCount());
for (int i = 0; i < read.size(); i++) {
List list = read.get(i);
// 载具编码
String storagevehicle_code = list.get(0).toString();
// 物料编码
String material_code = list.get(1).toString();
// 批次
String pcsn = list.get(2).toString();
// 组盘数量
String qty = list.get(3).toString();
// 备注
String remark = list.get(4).toString();
// 供应商编码
String supp_code = list.get(5).toString();
// 生产日期
String produce_time = list.get(6).toString();
// 烘干次数
String bake_num = list.get(7).toString();
// 品质类型
String quality_type = list.get(8).toString();
// 料箱类型
String box_type = list.get(9).toString();
// 机台编码
String device_code = list.get(10).toString();
GroupPlate groupPlate = new GroupPlate();
groupPlate.setStoragevehicle_code(storagevehicle_code);
MdMeMaterialbase materDao = iMdMeMaterialbaseService.getByCode(material_code);
groupPlate.setMaterial_id(materDao.getMaterial_id());
groupPlate.setPcsn(pcsn);
groupPlate.setQty(BigDecimal.valueOf(Double.parseDouble(qty)));
groupPlate.setRemark(remark);
MdCsSupplierbase suppDao = iMdCsSupplierbaseService.getByCode(supp_code);
groupPlate.setSupp_code(suppDao.getSupp_code());
groupPlate.setProduce_time(produce_time);
groupPlate.setBake_num(Integer.parseInt(bake_num));
groupPlate.setQuality_type(quality_type);
groupPlate.setBox_type(box_type);
groupPlate.setDevice_code(device_code);
this.create(groupPlate);
}
return null;
}
}

View File

@@ -99,8 +99,8 @@ export default {
formdata.append('file', this.file1.raw)
// excelImport请求接口 formdata传递参数
crudGroup.excelImport(formdata).then((res) => {
this.crud.toQuery()
this.crud.notify('导入成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.$emit('tableChanged', res)
this.$emit('update:dialogShow', false)
})
} else {

View File

@@ -81,7 +81,7 @@
>
物料标签
</el-button>
<!-- <el-button
<el-button
slot="left"
class="filter-item"
type="primary"
@@ -90,7 +90,7 @@
@click="Import"
>
组盘信息导入
</el-button>-->
</el-button>
</crudOperation>
<el-dialog
:close-on-click-modal="false"