修改出入库数据 导入功能

This commit is contained in:
furongxin 2024-08-08 17:27:07 +08:00
parent 3ebb715544
commit a3937a440f
6 changed files with 82 additions and 98 deletions

View File

@ -163,11 +163,13 @@ public class FactoryDataController {
@PostMapping("/import") @PostMapping("/import")
@Operation(summary = "导入出入库数据") @Operation(summary = "导入出入库数据")
@Parameter(name = "file", description = "Excel 文件", required = true) @Parameter(name = "file", description = "Excel 文件", required = true)
@Parameter(name = "type", description = "出入库类型 | 1入库 2出库", required = true)
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:import')") @PreAuthorize("@ss.hasPermission('smartfactory:factory-data:import')")
public CommonResult<FactoryImportRespVO> importExcel(@RequestParam("file") MultipartFile file) throws Exception { public CommonResult<FactoryImportRespVO> importExcel(@RequestParam("file") MultipartFile file,
@RequestParam("type") Integer type) throws Exception {
List<FactoryDataImportVO> list = ExcelUtils.read(file, FactoryDataImportVO.class); List<FactoryDataImportVO> list = ExcelUtils.read(file, FactoryDataImportVO.class);
return success(dataService.importUserList(list)); return success(dataService.importUserList(list, type));
} }
} }

View File

@ -1,7 +1,6 @@
package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo; package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -9,11 +8,9 @@ import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import javax.swing.border.TitledBorder;
import java.time.LocalDate; import java.time.LocalDate;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/** /**
* 出入库数据导入 VO * 出入库数据导入 VO
@ -35,24 +32,33 @@ public class FactoryDataImportVO {
@ExcelProperty("规格") @ExcelProperty("规格")
private String sizeName; private String sizeName;
@ExcelProperty("手动打包数") // @ExcelProperty("手动打包数")
// private Integer num;
//
// @ExcelProperty("自动打包数")
// private Integer autoNum;
//
// @ExcelProperty("入库数")
// private Integer inNum;
//
// @ExcelProperty("打包破损数")
// private Integer damageNum;
//
// @ExcelProperty("入库破损数")
// private Integer inDamageNum;
//
// @ExcelProperty("出库数")
// private Integer outNum;
//
// @ExcelProperty("出库破损数")
// private Integer outDamageNum;
@ExcelProperty("规格片数")
private Integer sizePieces;
@ExcelProperty("出入库数")
private Integer num; private Integer num;
@ExcelProperty("自动打包数") @ExcelProperty("破损数")
private Integer autoNum;
@ExcelProperty("入库数")
private Integer inNum;
@ExcelProperty("打包破损数")
private Integer damageNum; private Integer damageNum;
@ExcelProperty("入库破损数")
private Integer inDamageNum;
@ExcelProperty("出库数")
private Integer outNum;
@ExcelProperty("出库破损数")
private Integer outDamageNum;
} }

View File

@ -39,10 +39,11 @@ public interface FactoryDataSizeMapper extends BaseMapperX<FactoryDataSizeDO> {
.betweenIfPresent(FactoryDataSizeDO::getCreateTime, dateTimes)); .betweenIfPresent(FactoryDataSizeDO::getCreateTime, dateTimes));
} }
default Long selectCountByType(Long factoryId, LocalDate date, Collection<Integer> types) { default Long selectCountByType(Long factoryId, Long sizeId, LocalDate date, Collection<Integer> types) {
return selectCount(new LambdaQueryWrapperX<FactoryDataSizeDO>() return selectCount(new LambdaQueryWrapperX<FactoryDataSizeDO>()
.eq(FactoryDataSizeDO::getFactoryId, factoryId) .eq(FactoryDataSizeDO::getFactoryId, factoryId)
.eqIfPresent(FactoryDataSizeDO::getSizeId, sizeId)
.eq(FactoryDataSizeDO::getDate, date) .eq(FactoryDataSizeDO::getDate, date)
.in(FactoryDataSizeDO::getType, types)); .in(FactoryDataSizeDO::getType, types));
} }

View File

@ -96,5 +96,5 @@ public interface FactoryDataService {
* @param list 数据 * @param list 数据
* @return 结果 * @return 结果
*/ */
FactoryImportRespVO importUserList(List<FactoryDataImportVO> list); FactoryImportRespVO importUserList(List<FactoryDataImportVO> list, Integer type);
} }

View File

@ -281,7 +281,7 @@ public class FactoryDataServiceImpl implements FactoryDataService {
@Override @Override
@Transactional(rollbackFor = Exception.class) // 添加事务异常则回滚所有导入 @Transactional(rollbackFor = Exception.class) // 添加事务异常则回滚所有导入
public FactoryImportRespVO importUserList(List<FactoryDataImportVO> list) { public FactoryImportRespVO importUserList(List<FactoryDataImportVO> list, Integer type) {
if (CollUtil.isEmpty(list)) { if (CollUtil.isEmpty(list)) {
throw exception(FACTORY_IMPORT_LIST_IS_EMPTY); throw exception(FACTORY_IMPORT_LIST_IS_EMPTY);
@ -294,7 +294,7 @@ public class FactoryDataServiceImpl implements FactoryDataService {
//校验判断是否有不符合的原因 //校验判断是否有不符合的原因
Long factoryId = null; Long factoryId = null;
try { try {
factoryId = validateFactoryForCreate(data.getFactoryName(), data.getSizeName(), data.getDate()); factoryId = validateFactoryForCreate(data.getFactoryName(), data.getSizeName(), data.getDate(), type);
} catch (Exception ex) { } catch (Exception ex) {
respVO.getFailureUsernames().put(data.getFactoryName() + "-" + data.getDate(), ex.getMessage()); respVO.getFailureUsernames().put(data.getFactoryName() + "-" + data.getDate(), ex.getMessage());
@ -337,84 +337,50 @@ public class FactoryDataServiceImpl implements FactoryDataService {
// } // }
List<FactoryDataSizeDO> factoryDataSizeDOs = new ArrayList<>(); List<FactoryDataSizeDO> factoryDataSizeDOs = new ArrayList<>();
if (data.getInDamageNum() != null || data.getInNum() != null || data.getOutNum() != null) {
if (data.getInDamageNum() != null && data.getInDamageNum() != 0) { if (data.getNum() != null) {
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO(); FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
//设置规格信息 //设置规格信息
dataSizeDO.setSizeId(sizeId); dataSizeDO.setSizeId(sizeId);
dataSizeDO.setSizeName(sizeName); dataSizeDO.setSizeName(sizeName);
// dataSizeDO.setSizePieces(packageDO == null ? null : packageDO.getSizePieces()); dataSizeDO.setSizePieces(data.getSizePieces());
//设置工厂和日期 //设置工厂和日期
dataSizeDO.setFactoryId(factoryId); dataSizeDO.setFactoryId(factoryId);
dataSizeDO.setDate(data.getDate()); dataSizeDO.setDate(data.getDate());
//设置入库破损 // 根据type 设置入库数还是出库
dataSizeDO.setType(1); dataSizeDO.setType(type == 1 ? 4 : 2);
dataSizeDO.setNum(data.getInDamageNum()); dataSizeDO.setNum(data.getNum());
factoryDataSizeDOs.add(dataSizeDO); factoryDataSizeDOs.add(dataSizeDO);
}
if (data.getInNum() != null && data.getInNum() != 0) {
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
//设置规格信息
dataSizeDO.setSizeId(sizeId);
dataSizeDO.setSizeName(sizeName);
// dataSizeDO.setSizePieces(packageDO == null ? null : packageDO.getSizePieces());
//设置工厂和日期
dataSizeDO.setFactoryId(factoryId);
dataSizeDO.setDate(data.getDate());
//设置入库破损数
dataSizeDO.setType(4);
dataSizeDO.setNum(data.getInNum());
factoryDataSizeDOs.add(dataSizeDO);
}
if (data.getOutNum() != null && data.getOutNum() != 0) {
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
//设置规格信息
dataSizeDO.setSizeId(sizeId);
dataSizeDO.setSizeName(sizeName);
//设置工厂和日期
dataSizeDO.setFactoryId(factoryId);
dataSizeDO.setDate(data.getDate());
//设置入库破损数
dataSizeDO.setType(2);
dataSizeDO.setNum(data.getOutNum());
factoryDataSizeDOs.add(dataSizeDO);
}
if (data.getOutDamageNum() != null && data.getOutDamageNum() != 0) {
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
//设置规格信息
dataSizeDO.setSizeId(sizeId);
dataSizeDO.setSizeName(sizeName);
//设置工厂和日期
dataSizeDO.setFactoryId(factoryId);
dataSizeDO.setDate(data.getDate());
//设置入库破损数
dataSizeDO.setType(3);
dataSizeDO.setNum(data.getOutDamageNum());
factoryDataSizeDOs.add(dataSizeDO);
}
factoryDataSizeMapper.insertBatch(factoryDataSizeDOs);
} }
if (data.getDamageNum() != null) {
FactoryDataSizeDO dataSizeDamageDO = new FactoryDataSizeDO();
//设置规格信息
dataSizeDamageDO.setSizeId(sizeId);
dataSizeDamageDO.setSizeName(sizeName);
dataSizeDamageDO.setSizePieces(data.getSizePieces());
//设置工厂和日期
dataSizeDamageDO.setFactoryId(factoryId);
dataSizeDamageDO.setDate(data.getDate());
// 根据type 设置入库破损还是出库破损
dataSizeDamageDO.setType(type == 1 ? 1 : 3);
dataSizeDamageDO.setNum(data.getDamageNum());
factoryDataSizeDOs.add(dataSizeDamageDO);
}
factoryDataSizeMapper.insertBatch(factoryDataSizeDOs);
respVO.getCreateUsernames().add(data.getFactoryName() + "-" + data.getDate()); respVO.getCreateUsernames().add(data.getFactoryName() + "-" + data.getDate());
}); });
return respVO; return respVO;
} }
private Long validateFactoryForCreate(String factoryName, String sizeName, LocalDate date) { private Long validateFactoryForCreate(String factoryName, String sizeName, LocalDate date, Integer type) {
if (factoryName == null) { if (factoryName == null) {
throw exception(FACTORY_INFO_NOT_EXISTS); throw exception(FACTORY_INFO_NOT_EXISTS);
@ -426,10 +392,19 @@ public class FactoryDataServiceImpl implements FactoryDataService {
FactoryInfoDO factoryInfoDO = factoryInfoService.getFactoryByName(factoryName); FactoryInfoDO factoryInfoDO = factoryInfoService.getFactoryByName(factoryName);
Long count = factoryDataSizeMapper.selectCountByType(factoryInfoDO.getId(), date, Arrays.asList(1,2,3,4)); List<Integer> dataType = new ArrayList<>();
List<PackageDataDO> packageDOs = packageDataService.getListByFactoryIdAndDate(factoryInfoDO.getId(), date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); if (type == 1) {
dataType = Arrays.asList(1,4);
} else if (type == 2) {
dataType = Arrays.asList(2,3);
}
if (count > 0L || !packageDOs.isEmpty()) { // 获取 规格ID
Long sizeId = Long.valueOf(sizeName.split(":")[0]);
Long count = factoryDataSizeMapper.selectCountByType(factoryInfoDO.getId(), sizeId, date, dataType);
// List<PackageDataDO> packageDOs = packageDataService.getListByFactoryIdAndDate(factoryInfoDO.getId(), date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
if (count > 0L) {
throw exception(PACKAGE_DATA_EXISTS); throw exception(PACKAGE_DATA_EXISTS);
} }

View File

@ -50,13 +50,13 @@ public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
//校验 当前日期得 入库数据是否已经录入 //校验 当前日期得 入库数据是否已经录入
if (createReqVO.getType() == 2) { if (createReqVO.getType() == 2) {
Long count = factoryDataSizeMapper.selectCountByType(createReqVO.getFactoryId(), createReqVO.getDate(), Arrays.asList(1,4)); Long count = factoryDataSizeMapper.selectCountByType(createReqVO.getFactoryId(), null, createReqVO.getDate(), Arrays.asList(1,4));
if (count > 0L) { if (count > 0L) {
throw exception(PACKAGE_DATA_EXISTS); throw exception(PACKAGE_DATA_EXISTS);
} }
}else if (createReqVO.getType() == 1) { //校验 当前日期得 出库数据是否已经录入 }else if (createReqVO.getType() == 1) { //校验 当前日期得 出库数据是否已经录入
Long count = factoryDataSizeMapper.selectCountByType(createReqVO.getFactoryId(), createReqVO.getDate(), Arrays.asList(2,3)); Long count = factoryDataSizeMapper.selectCountByType(createReqVO.getFactoryId(), null, createReqVO.getDate(), Arrays.asList(2,3));
if (count > 0L) { if (count > 0L) {
throw exception(PACKAGE_DATA_EXISTS); throw exception(PACKAGE_DATA_EXISTS);
} }