This commit is contained in:
caozehui
2024-11-14 14:52:34 +08:00
parent 8f4483bbef
commit ea21d631c9
4 changed files with 53 additions and 50 deletions

View File

@@ -13,9 +13,9 @@ import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.LogUtil; import com.njcn.common.utils.LogUtil;
import com.njcn.gather.device.device.pojo.param.PqDevParam; import com.njcn.gather.device.device.pojo.param.PqDevParam;
import com.njcn.gather.device.device.pojo.po.PqDev;
import com.njcn.gather.device.device.pojo.vo.PqDevExcel; import com.njcn.gather.device.device.pojo.vo.PqDevExcel;
import com.njcn.gather.device.device.service.IPqDevService; import com.njcn.gather.device.device.service.IPqDevService;
import com.njcn.gather.device.device.pojo.po.PqDev;
import com.njcn.gather.device.pojo.enums.DeviceResponseEnum; import com.njcn.gather.device.pojo.enums.DeviceResponseEnum;
import com.njcn.web.controller.BaseController; import com.njcn.web.controller.BaseController;
import com.njcn.web.utils.HttpResultUtil; import com.njcn.web.utils.HttpResultUtil;
@@ -26,6 +26,7 @@ import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@@ -122,16 +123,16 @@ public class PqDevController extends BaseController {
params.setStartSheetIndex(0); params.setStartSheetIndex(0);
params.setSheetNum(1); params.setSheetNum(1);
try { try {
ExcelImportResult<PqDevExcel> excelImportResult = ExcelImportUtil.importExcelMore(file.getInputStream(), PqDevExcel.class, params); ExcelImportResult<PqDevExcel.ImportData> excelImportResult = ExcelImportUtil.importExcelMore(file.getInputStream(), PqDevExcel.ImportData.class, params);
//如果存在非法数据,将不合格的数据导出 //如果存在非法数据,将不合格的数据导出
if (excelImportResult.isVerifyFail()) { if (excelImportResult.isVerifyFail()) {
// 此处前端要做特殊处理,具体可以参考技术监督的数据导入 // 此处前端要做特殊处理,具体可以参考技术监督的数据导入
PoiUtil.exportFileByWorkbook(excelImportResult.getFailWorkbook(), "非法被检设备数据.xlsx", response); Workbook failWorkbook = excelImportResult.getFailWorkbook();
throw new BusinessException(DeviceResponseEnum.IMPORT_DATA_FAIL); PoiUtil.exportFileByWorkbook(failWorkbook, "非法被检设备数据.xlsx", response);
} else { } else {
//批量录入数据 //批量录入数据
List<PqDevExcel> sgEventExcels = excelImportResult.getList(); List<PqDevExcel.ImportData> list = excelImportResult.getList();
pqDevService.importPqDevData(sgEventExcels); pqDevService.importPqDevData(list);
} }
} catch (Exception e) { } catch (Exception e) {
throw new BusinessException(DeviceResponseEnum.IMPORT_DATA_FAIL); throw new BusinessException(DeviceResponseEnum.IMPORT_DATA_FAIL);

View File

@@ -5,6 +5,7 @@ import com.njcn.common.pojo.constant.PatternRegex;
import com.njcn.gather.device.pojo.constant.DeviceValidMessage; import com.njcn.gather.device.pojo.constant.DeviceValidMessage;
import com.njcn.web.pojo.annotation.DateTimeStrValid; import com.njcn.web.pojo.annotation.DateTimeStrValid;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
@@ -50,11 +51,6 @@ public class PqDevExcel implements Serializable {
@NotBlank(message = DeviceValidMessage.MANUFACTURER_NOT_BLANK) @NotBlank(message = DeviceValidMessage.MANUFACTURER_NOT_BLANK)
private String manufacturer; private String manufacturer;
@Excel(name = "生产日期yyyy-MM-dd", width = 25, format = "yyyy-MM-dd")
@NotNull(message = DeviceValidMessage.CREATEDATETIME_NOT_NULL)
// @DateTimeStrValid(message = DeviceValidMessage.CREATEDATETIME_FORMAT_ERROR)
private LocalDate createDate;
@Excel(name = "出厂编号", width = 40) @Excel(name = "出厂编号", width = 40)
@NotBlank(message = DeviceValidMessage.FACTORYNO_NOT_BLANK) @NotBlank(message = DeviceValidMessage.FACTORYNO_NOT_BLANK)
private String createId; private String createId;
@@ -82,7 +78,7 @@ public class PqDevExcel implements Serializable {
@Excel(name = "是否为加密版本1是/0", width = 20, replace = {"是_1", "否_0"}) @Excel(name = "是否为加密版本1是/0", width = 20, replace = {"是_1", "否_0"})
@NotNull(message = DeviceValidMessage.ENCRYPTION_NOT_NULL) @NotNull(message = DeviceValidMessage.ENCRYPTION_NOT_NULL)
private Integer encryption; private Integer encryptionFlag;
@Excel(name = "识别码(未加密)", width = 30) @Excel(name = "识别码(未加密)", width = 30)
private String series; private String series;
@@ -93,10 +89,6 @@ public class PqDevExcel implements Serializable {
@Excel(name = "样品编号", width = 40) @Excel(name = "样品编号", width = 40)
private String sampleId; private String sampleId;
@Excel(name = "送样日期yyyy-MM-dd", width = 25, format = "yyyy-MM-dd")
// @DateTimeStrValid(message = DeviceValidMessage.ARRIVE_DATE_FORMAT_ERROR)
private LocalDate arrivedDate;
@Excel(name = "所属地市名称", width = 20) @Excel(name = "所属地市名称", width = 20)
private String cityName; private String cityName;
@@ -127,4 +119,30 @@ public class PqDevExcel implements Serializable {
@Excel(name = "复检次数", width = 15) @Excel(name = "复检次数", width = 15)
@NotNull(message = DeviceValidMessage.RECHECK_NUM_NOT_NULL) @NotNull(message = DeviceValidMessage.RECHECK_NUM_NOT_NULL)
private Integer reCheckNum; private Integer reCheckNum;
@Data
@EqualsAndHashCode(callSuper = true)
public static class ExportData extends PqDevExcel {
@Excel(name = "生产日期yyyy-MM-dd", width = 25, format = "yyyy-MM-dd")
@NotNull(message = DeviceValidMessage.CREATEDATETIME_NOT_NULL)
private LocalDate createDate;
@Excel(name = "送样日期yyyy-MM-dd", width = 25, format = "yyyy-MM-dd")
private LocalDate arrivedDate;
}
@Data
@EqualsAndHashCode(callSuper = true)
public static class ImportData extends PqDevExcel {
@Excel(name = "生产日期yyyy-MM-dd", width = 25, format = "yyyy-MM-dd")
@NotNull(message = DeviceValidMessage.CREATEDATETIME_NOT_NULL)
@DateTimeStrValid(message = DeviceValidMessage.CREATEDATETIME_FORMAT_ERROR)
private String createDate;
@Excel(name = "送样日期yyyy-MM-dd", width = 25, format = "yyyy-MM-dd")
@DateTimeStrValid(message = DeviceValidMessage.ARRIVE_DATE_FORMAT_ERROR)
private String arrivedDate;
}
} }

View File

@@ -56,7 +56,7 @@ public interface IPqDevService extends IService<PqDev> {
* *
* @param sgEventExcels * @param sgEventExcels
*/ */
void importPqDevData(List<PqDevExcel> sgEventExcels); void importPqDevData(List<PqDevExcel.ImportData> sgEventExcels);
/** /**
* 导出被检设备信息 * 导出被检设备信息

View File

@@ -38,9 +38,7 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
public Page<PqDev> listPqDevs(PqDevParam.QueryParam queryParam) { public Page<PqDev> listPqDevs(PqDevParam.QueryParam queryParam) {
QueryWrapper<PqDev> queryWrapper = new QueryWrapper<>(); QueryWrapper<PqDev> queryWrapper = new QueryWrapper<>();
if (ObjectUtil.isNotNull(queryParam)) { if (ObjectUtil.isNotNull(queryParam)) {
queryWrapper.like(StrUtil.isNotBlank(queryParam.getName()), "pq_dev.name", queryParam.getName()) queryWrapper.like(StrUtil.isNotBlank(queryParam.getName()), "pq_dev.name", queryParam.getName()).eq(StrUtil.isNotBlank(queryParam.getDevType()), "pq_dev.dev_type", queryParam.getDevType()).between(ObjectUtil.isAllNotEmpty(queryParam.getSearchBeginTime(), queryParam.getSearchEndTime()), "pq_dev.Create_Date", queryParam.getSearchBeginTime(), queryParam.getSearchEndTime());
.eq(StrUtil.isNotBlank(queryParam.getDevType()), "pq_dev.dev_type", queryParam.getDevType())
.between(ObjectUtil.isAllNotEmpty(queryParam.getSearchBeginTime(), queryParam.getSearchEndTime()), "pq_dev.Create_Date", queryParam.getSearchBeginTime(), queryParam.getSearchEndTime());
//排序 //排序
if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) { if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) {
queryWrapper.orderBy(true, queryParam.getOrderBy().equals(DbConstant.ASC), StrUtil.toUnderlineCase(queryParam.getSortBy())); queryWrapper.orderBy(true, queryParam.getOrderBy().equals(DbConstant.ASC), StrUtil.toUnderlineCase(queryParam.getSortBy()));
@@ -86,19 +84,16 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
@Override @Override
public boolean deletePqDev(List<String> ids) { public boolean deletePqDev(List<String> ids) {
return this.lambdaUpdate() return this.lambdaUpdate().set(PqDev::getState, DataStateEnum.DELETED.getCode()).in(PqDev::getId, ids).update();
.set(PqDev::getState, DataStateEnum.DELETED.getCode())
.in(PqDev::getId, ids)
.update();
} }
@Override @Override
public void downloadTemplate() { public void downloadTemplate() {
ExcelUtil.exportExcel("被检设备模板.xls", "被检设备", PqDevExcel.class, new ArrayList<>()); ExcelUtil.exportExcel("被检设备模板.xlsx", "被检设备", PqDevExcel.class, new ArrayList<>());
} }
@Override @Override
public void importPqDevData(List<PqDevExcel> pqDevExcelList) { public void importPqDevData(List<PqDevExcel.ImportData> pqDevExcelList) {
List<PqDev> pqDevList = BeanUtil.copyToList(pqDevExcelList, PqDev.class); List<PqDev> pqDevList = BeanUtil.copyToList(pqDevExcelList, PqDev.class);
pqDevList.forEach(pqDev -> { pqDevList.forEach(pqDev -> {
if (Objects.nonNull(pqDev.getSeries())) { if (Objects.nonNull(pqDev.getSeries())) {
@@ -116,58 +111,47 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
public void exportPqDevData(PqDevParam.QueryParam queryParam) { public void exportPqDevData(PqDevParam.QueryParam queryParam) {
QueryWrapper<PqDev> queryWrapper = new QueryWrapper<>(); QueryWrapper<PqDev> queryWrapper = new QueryWrapper<>();
if (ObjectUtil.isNotNull(queryParam)) { if (ObjectUtil.isNotNull(queryParam)) {
queryWrapper.like(StrUtil.isNotBlank(queryParam.getName()), "pq_dev.name", queryParam.getName()) queryWrapper.like(StrUtil.isNotBlank(queryParam.getName()), "pq_dev.name", queryParam.getName()).eq(StrUtil.isNotBlank(queryParam.getDevType()), "pq_dev.dev_type", queryParam.getDevType()).between(ObjectUtil.isAllNotEmpty(queryParam.getSearchBeginTime(), queryParam.getSearchEndTime()), "pq_dev.Create_Date", queryParam.getSearchBeginTime(), queryParam.getSearchEndTime());
.eq(StrUtil.isNotBlank(queryParam.getDevType()), "pq_dev.dev_type", queryParam.getDevType())
.between(ObjectUtil.isAllNotEmpty(queryParam.getSearchBeginTime(), queryParam.getSearchEndTime()), "pq_dev.Create_Date", queryParam.getSearchBeginTime(), queryParam.getSearchEndTime());
//排序 //排序
if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) { if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) {
queryWrapper.orderBy(true, queryParam.getOrderBy().equals(DbConstant.ASC), StrUtil.toUnderlineCase(queryParam.getSortBy())); queryWrapper.orderBy(true, queryParam.getOrderBy().equals(DbConstant.ASC), StrUtil.toUnderlineCase(queryParam.getSortBy()));
} else { } else {
//没有排序参数默认根据sort字段排序没有排序字段的根据updateTime更新时间排序 //没有排序参数默认根据sort字段排序没有排序字段的根据updateTime更新时间排序
queryWrapper.orderBy(true, true, "pq_dev.Create_Time"); queryWrapper.orderBy(true, false, "pq_dev.Create_Time");
} }
} else {
queryWrapper.orderBy(true, false, "pq_dev.Create_Time");
} }
queryWrapper.eq("pq_dev.state", DataStateEnum.ENABLE.getCode()); queryWrapper.eq("pq_dev.state", DataStateEnum.ENABLE.getCode());
List<PqDev> pqDevs = this.list(queryWrapper); List<PqDev> pqDevs = this.list(queryWrapper);
List<PqDevExcel> pqDevExcels = BeanUtil.copyToList(pqDevs, PqDevExcel.class); List<PqDevExcel.ExportData> pqDevExcels = BeanUtil.copyToList(pqDevs, PqDevExcel.ExportData.class);
ExcelUtil.exportExcel("被检设备导出数据.xlsx", "被检设备", PqDevExcel.class, pqDevExcels); ExcelUtil.exportExcel("被检设备导出数据.xlsx", "被检设备", PqDevExcel.ExportData.class, pqDevExcels);
} }
@Override @Override
public List<PqDev> listUnbound() { public List<PqDev> listUnbound() {
return this.lambdaQuery() return this.lambdaQuery().eq(PqDev::getState, DataStateEnum.ENABLE.getCode()).isNull(PqDev::getPlanId).list();
.eq(PqDev::getState, DataStateEnum.ENABLE.getCode())
.isNull(PqDev::getPlanId)
.list();
} }
@Override @Override
public List<PqDev> listBoundByPlanId(String planId) { public List<PqDev> listBoundByPlanId(String planId) {
return this.lambdaQuery() return this.lambdaQuery().eq(PqDev::getState, DataStateEnum.ENABLE.getCode()).eq(PqDev::getPlanId, planId).list();
.eq(PqDev::getState, DataStateEnum.ENABLE.getCode())
.eq(PqDev::getPlanId, planId)
.list();
} }
@Override @Override
public boolean bindPlan(String planId, List<String> pqDevIds) { public boolean bindPlan(String planId, List<String> pqDevIds) {
List<String> existedBoundPqDevIds = this.listBoundByPlanId(planId) List<String> existedBoundPqDevIds = this.listBoundByPlanId(planId).stream().map(PqDev::getId).collect(Collectors.toList());
.stream().map(PqDev::getId).collect(Collectors.toList());
//共有的(交集) //共有的(交集)
List<String> intersection = existedBoundPqDevIds.stream().filter(pqDevIds::contains).collect(Collectors.toList()); List<String> intersection = existedBoundPqDevIds.stream().filter(pqDevIds::contains).collect(Collectors.toList());
//移除 已有的历史绑定而此次不绑定的 //移除 已有的历史绑定而此次不绑定的
existedBoundPqDevIds.removeAll(intersection); existedBoundPqDevIds.removeAll(intersection);
boolean result1 = this.lambdaUpdate().set(PqDev::getPlanId, null) boolean result1 = this.lambdaUpdate().set(PqDev::getPlanId, null).in(PqDev::getId, existedBoundPqDevIds).update();
.in(PqDev::getId, existedBoundPqDevIds)
.update();
//绑定 没有的历史绑定而此次绑定的 //绑定 没有的历史绑定而此次绑定的
pqDevIds.removeAll(existedBoundPqDevIds); pqDevIds.removeAll(existedBoundPqDevIds);
boolean result2 = this.lambdaUpdate().set(PqDev::getPlanId, planId) boolean result2 = this.lambdaUpdate().set(PqDev::getPlanId, planId).in(PqDev::getId, pqDevIds).update();
.in(PqDev::getId, pqDevIds)
.update();
return result1 && result2; return result1 && result2;
} }