修改出入库数据 导入功能
This commit is contained in:
parent
3ebb715544
commit
a3937a440f
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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;
|
|
||||||
}
|
}
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user