Commit 554ae5ff authored by 刘林's avatar 刘林

fix(jg):车用气瓶历史平台登记功能开发

parent 567c6949
package com.yeejoin.amos.boot.module.cylinder.flc.biz.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.yeejoin.amos.boot.module.cylinder.api.dto.CylinderFillingMessageModel;
import com.yeejoin.amos.boot.module.cylinder.api.dto.ESEquipmentCategoryDto;
import com.yeejoin.amos.boot.module.cylinder.api.dto.KeyValueDto;
import com.yeejoin.amos.boot.module.cylinder.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.cylinder.api.entity.ESCylinderFillingRecordDto;
import com.yeejoin.amos.boot.module.cylinder.api.service.ITzBaseEnterpriseInfoService;
import com.yeejoin.amos.boot.module.cylinder.biz.dao.ESCylinderFillingRecordRepository;
import com.yeejoin.amos.boot.module.cylinder.biz.dao.ESEquipmentCategory;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CityCylinderInfoDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderAreaDataDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderInfoStatisticsDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.entity.CylinderAreaData;
import com.yeejoin.amos.boot.module.cylinder.flc.api.mapper.CylinderAreaDataMapper;
import com.yeejoin.amos.boot.module.cylinder.flc.api.service.ICylinderAreaDataService;
import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.RegionModel;
import joptsimple.internal.Strings;
import org.apache.lucene.search.comparators.DoubleComparator;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
......@@ -34,7 +26,6 @@ import org.elasticsearch.client.core.CountRequest;
import org.elasticsearch.client.core.CountResponse;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
......
package com.yeejoin.amos.boot.module.jg.api.dto;
import cn.hutool.json.JSONArray;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
......@@ -11,6 +12,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.List;
/**
* @author LiuLin
......@@ -267,4 +269,7 @@ public class EquipInfoCylinderExcelDto extends BaseDto {
@ExcelProperty(value = "热处理温度(℃)", index = 52)
@ApiModelProperty(value = "热处理温度(℃)")
private String qpHeatTreatmentTemperature;
@ExcelIgnore
private List fileData;
}
......@@ -165,27 +165,18 @@ public class IdxBizJqEquipmentRegisterController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/importData")
@ApiOperation(httpMethod = "POST", value = "气瓶批量导入", notes = "气瓶批量导入")
public ResponseModel<List<EquipInfoCylinderExcelDto>> ImportData (@RequestPart("file") MultipartFile multipartFile) throws Exception {
List<EquipInfoCylinderExcelDto> aircraftList = new ArrayList<>();
try {
EasyExcel.read(multipartFile.getInputStream(), EquipInfoCylinderExcelDto.class, new AnalysisEventListener<EquipInfoCylinderExcelDto>() {
// 每读取一行就调用该方法
@Override
public void invoke(EquipInfoCylinderExcelDto data, AnalysisContext context) {
EquipInfoCylinderExcelDto fireExperts = new EquipInfoCylinderExcelDto();
BeanUtils.copyProperties(data,fireExperts);
aircraftList.add(fireExperts);
}
// 全部读取完成就调用该方法
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
System.out.println("读取完成");
}
}).headRowNumber(4).sheet().doRead();
return ResponseHelper.buildResponse(aircraftList);
} catch (Exception e) {
throw new Exception("系统异常");
public ResponseModel<?> importPressureData (@RequestPart("file") MultipartFile multipartFile) throws Exception {
return ResponseHelper.buildResponse(idxBizJgRegisterInfoService.importPressureData(multipartFile));
}
/**
* 气瓶批量保存
* **/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/savePressureVesselData")
@ApiOperation(httpMethod = "POST", value = "气瓶批量保存", notes = "气瓶批量保存")
public ResponseModel<?> savePressureVesselData(@RequestBody Map<String, Object> paramMap) {
return ResponseHelper.buildResponse(idxBizJgRegisterInfoService.savePressureVesselData(paramMap));
}
/**
......
package com.yeejoin.amos.boot.module.jg.biz.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
......@@ -37,4 +36,8 @@ public interface IIdxBizJgRegisterInfoService {
Page<JSONObject> queryEquipCanUsedByVesselPage(JSONObject jsonObject);
Object importPressureVesselData(Map<String, Object> paramMap, MultipartFile multipartFile);
Object importPressureData(MultipartFile multipartFile) throws Exception;
Object savePressureVesselData(Map<String, Object> paramMap);
}
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.read.metadata.holder.ReadRowHolder;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
......@@ -50,6 +54,7 @@ import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
......@@ -67,10 +72,14 @@ import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.io.IOException;
import java.lang.reflect.Field;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import static com.alibaba.fastjson.JSON.toJSONString;
import static com.yeejoin.amos.boot.module.jg.api.enums.CylinderTypeEnum.SPECIAL_CYLINDER;
/**
......@@ -112,6 +121,8 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
private static final String IS_COPY = "isCopy";
// 设备种类
public static final String EQU_LIST = "EQU_LIST";
//模版上传集合
public static final String EQU_LISTS = "equLists";
// 设备类别
public static final String EQU_CATEGORY = "EQU_CATEGORY";
// 设备品种
......@@ -127,6 +138,13 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
// 设备来源 jg:新设备录入 jg_his:历史数据录入
public static final String DATA_SOURCE = "DATA_SOURCE";
private static final String ATTACHMENT_UPLOAD = "attachmentUpload";
private final List<String> resultError = new ArrayList<>();
List<String> useInnerCodeList = new ArrayList<>();//单位内部编号集合
List<String> equCodeList = new ArrayList<>();//设备代码集合
List<String> factoryNumList = new ArrayList<>();//出厂编码集合
/**
* 业务类型 0:单个新增 1:批量导入
*/
......@@ -204,6 +222,8 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
private IdxBizJgTechParamsVesselServiceImpl idxBizJgTechParamsVesselService;
@Autowired
private IdxBizJgInspectionDetectionInfoServiceImpl idxBizJgInspectionDetectionInfoService;
@Autowired
private IIdxBizJgOtherInfoService idxBizJgOtherInfoService;
/**
* 将对象的属性由驼峰转为纯大写下划线格式
......@@ -2011,6 +2031,346 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
}
}
@Override
public Object importPressureData(MultipartFile multipartFile) throws Exception {
List<EquipInfoCylinderExcelDto> aircraftList = new ArrayList<>();
resultError.clear();useInnerCodeList.clear();
equCodeList.clear();
factoryNumList.clear();
try {
EasyExcel.read(multipartFile.getInputStream(), EquipInfoCylinderExcelDto.class, new AnalysisEventListener<EquipInfoCylinderExcelDto>() {
// 每读取一行就调用该方法
@Override
public void invoke(EquipInfoCylinderExcelDto data, AnalysisContext context) {
EquipInfoCylinderExcelDto fireExperts = new EquipInfoCylinderExcelDto();
BeanUtils.copyProperties(data,fireExperts);
resultError.add(checkExcelData(data, context).toString());
aircraftList.add(fireExperts);
useInnerCodeList.add(data.getUseInnerCode());
equCodeList.add(data.getEquCode());
factoryNumList.add("0".equals(data.getWhetherVehicleCylinder()) ? data.getFactoryNum() : null);
}
// 全部读取完成就调用该方法
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
if (CollectionUtils.isEmpty(aircraftList)) {
log.info("你上传了一个空数据的Excel文档!");
resultError.add("你上传了一个空数据的Excel文档!");
throw new BadRequest("你上传了一个空数据的Excel文档!");
}
}
}).headRowNumber(4).sheet().doRead();
// 如果存在错误信息,则抛出 BadRequest 异常
if (!resultError.removeIf(String::isEmpty)) {
throw new BadRequest("校验失败");
}else{
return aircraftList;
}
} catch (Exception e) {
throw new Exception(resultError.stream()
.filter(s -> !s.isEmpty())
.collect(Collectors.joining("\n ")));
}
}
public static String getUrlByKey(List<Map<String, Object>> dataList, String key) {
if (dataList == null || dataList.isEmpty()) {
return null; // 如果 dataList 为空或 null,返回 null
}
for (Map<String, Object> item : dataList) {
if (key.equals(item.get("key"))) {
List<Map<String, String>> value = (List<Map<String, String>>) item.get("value");
if (value != null && !value.isEmpty()) {
return value.get(0).get("url");
}
}
}
return null; // 如果找不到对应的 URL,返回 null
}
@Override
public Object savePressureVesselData(Map<String, Object> paramMap) {
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
CompanyBo company = reginParams.getCompany();
List<IdxBizJgUseInfo> useInfoList = new ArrayList<>();
List<IdxBizJgRegisterInfo> registerInfoList = new ArrayList<>();
List<IdxBizJgDesignInfo> designInfoList = new ArrayList<>();
List<IdxBizJgFactoryInfo> factoryInfoList = new ArrayList<>();
List<IdxBizJgOtherInfo> otherInfoList = new ArrayList<>();
List<IdxBizJgTechParamsVessel> paramsVesselList = new ArrayList<>();
List<IdxBizJgInspectionDetectionInfo> inspectionDetectionInfoList = new ArrayList<>();
List<ESEquipmentCategoryDto> esEquipmentCategoryList = new ArrayList<>();
if (paramMap == null) {
throw new IllegalArgumentException("参数Map不能为空");
}
LinkedHashMap equipmentClassForm = (LinkedHashMap) checkAndCast(paramMap.get(EQUIP_CLASS_FORM_ID));
LinkedHashMap attachmentUpload = (LinkedHashMap) checkAndCast(paramMap.get(ATTACHMENT_UPLOAD));
String equListCode = (String) equipmentClassForm.get("EQU_LIST");
String equCategoryCode = (String) equipmentClassForm.get("EQU_CATEGORY");
String equDefineCode = (String) equipmentClassForm.get("EQU_DEFINE");
String dataSource = (String) equipmentClassForm.get("DATA_SOURCE");
List<EquipInfoCylinderExcelDto> equipInfoCylinderExcelDtoList =JSON.parseArray(JSON.toJSONString(attachmentUpload.get(EQU_LISTS)), EquipInfoCylinderExcelDto.class);
Date date = new Date();
String record = UUID.randomUUID().toString();
equipInfoCylinderExcelDtoList.forEach(data->{
List<Map<String, Object>> fileDataList = (List<Map<String, Object>>)(data.getFileData());
String productPhoto = getUrlByKey(fileDataList,"PRODUCT_PHOTO");
String otherAccessoriesReg = getUrlByKey(fileDataList,"OTHER_ACCESSORIES_REG");
String designDoc = getUrlByKey(fileDataList,"DESIGN_DOC");
String designStandard = getUrlByKey(fileDataList,"DESIGN_STANDARD");
String otherAccessoriesDes = getUrlByKey(fileDataList,"OTHER_ACCESSORIES_DES");
String productQualityYieldProve = getUrlByKey(fileDataList,"PRODUCT_QUALITY_YIELD_PROVE");
String factoryStandard = getUrlByKey(fileDataList,"FACTORY_STANDARD");
String insUseMaintainExplain = getUrlByKey(fileDataList,"INS_USE_MAINTAIN_EXPLAIN");
String otherAccessoriesFact = getUrlByKey(fileDataList,"OTHER_ACCESSORIES_FACT");
String factSupervisionInspectionReport = getUrlByKey(fileDataList,"FACT_SUPERVISION_INSPECTION_REPORT");
//使用信息
IdxBizJgUseInfo useInfo = new IdxBizJgUseInfo();
BeanUtils.copyProperties(data, useInfo);
useInfo.setRecord(record);
useInfo.setRecDate(date);
useInfo.setDataSource(dataSource != null ? dataSource : "jg");//区分历史设备和新增设备
useInfo.setEquState(null);
useInfo.setIsIntoManagement(dataSource != null);//历史气瓶导入为已纳管设备
// 使用单位信息
if("个人主体".equals(company.getCompanyType())){
useInfo.setUseUnitCreditCode(company.getCompanyCode().split("_")[1]);
useInfo.setUseUnitName(company.getCompanyName().split("_")[1]);
}else {
useInfo.setUseUnitCreditCode(company.getCompanyCode());
useInfo.setUseUnitName(company.getCompanyName());
}
useInfoList.add(useInfo);
//设计信息
IdxBizJgDesignInfo designInfo = new IdxBizJgDesignInfo();
BeanUtils.copyProperties(data, designInfo);
designInfo.setRecord(record);
designInfo.setRecDate(date);
if (data.getDesignDate() != null){
designInfo.setDesignDate(DateUtil.parse(data.getDesignDate(), "yyyy-MM-dd"));
}
designInfo.setDesignDoc(designDoc);
designInfo.setDesignStandard(designStandard);
designInfo.setOtherAccessoriesDes(otherAccessoriesDes);
designInfoList.add(designInfo);
//制造信息
IdxBizJgFactoryInfo factoryInfo = new IdxBizJgFactoryInfo();
BeanUtils.copyProperties(data, factoryInfo);
factoryInfo.setRecord(record);
factoryInfo.setRecDate(date);
factoryInfo.setProductQualityYieldProve(productQualityYieldProve);
factoryInfo.setFactoryStandard(factoryStandard);
factoryInfo.setInsUseMaintainExplain(insUseMaintainExplain);
factoryInfo.setOtherAccessoriesFact(otherAccessoriesFact);
factoryInfo.setFactSupervisionInspectionReport(factSupervisionInspectionReport);
factoryInfo.setProduceDate(DateUtil.parse(data.getProduceDate(), "yyyy-MM-dd"));
factoryInfo.setImported(Optional.ofNullable(data.getImported()).orElse("0"));
factoryInfoList.add(factoryInfo);
//注册登记
IdxBizJgRegisterInfo registerInfo = new IdxBizJgRegisterInfo();
BeanUtils.copyProperties(data, registerInfo);
registerInfo.setRecord(record);
registerInfo.setRecDate(date);
registerInfo.setEquCategory(equCategoryCode);
registerInfo.setEquDefine(equDefineCode);
registerInfo.setEquList(equListCode);
registerInfo.setRegisterState(idxBizJgRegisterInfoService.getRegCode());
registerInfo.setProductPhoto(productPhoto);
registerInfo.setOtherAccessoriesReg(otherAccessoriesReg);
registerInfoList.add(registerInfo);
//检验检测
IdxBizJgInspectionDetectionInfo inspectionDetectionInfo = new IdxBizJgInspectionDetectionInfo();
BeanUtils.copyProperties(data, inspectionDetectionInfo);
inspectionDetectionInfo.setInspectOrgCode( data.getInspectOrgCode());
inspectionDetectionInfo.setRecord(record);
inspectionDetectionInfo.setRecDate(date);
inspectionDetectionInfo.setInspectType("ZZJDJY");
inspectionDetectionInfo.setInspectConclusion("6040");//默认合格
inspectionDetectionInfo.setInspectDate(DateUtil.parse(data.getInspectDate(), "yyyy-MM-dd"));
// 根据条件确定增加的年数
inspectionDetectionInfo.setNextInspectDate(Date.from(
LocalDate.parse(data.getInspectDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd"))
.plusYears(SPECIAL_CYLINDER.getCode().equals(equDefineCode) ? 3 : 4)
.atStartOfDay(ZoneId.systemDefault())
.toInstant()));
inspectionDetectionInfoList.add(inspectionDetectionInfo);
// 其他信息
IdxBizJgOtherInfo otherInfo = new IdxBizJgOtherInfo();
BeanUtils.copyProperties(data, otherInfo);
otherInfo.setRecord(record);
otherInfo.setRecDate(date);
otherInfoList.add(otherInfo);
//技术参数
IdxBizJgTechParamsVessel paramsVessel = new IdxBizJgTechParamsVessel();
BeanUtils.copyProperties(data, paramsVessel);
paramsVessel.setRecord(record);
paramsVessel.setRecDate(date);
paramsVesselList.add(paramsVessel);
ESEquipmentCategoryDto dto = JSON.parseObject(toJSONString(data), ESEquipmentCategoryDto.class);
List<EquipmentCategory> equList = commonService.getEquipmentCategoryList(equListCode, null);
List<EquipmentCategory> equCategory = commonService.getEquipmentCategoryList(equCategoryCode, null);
List<EquipmentCategory> equDefine = commonService.getEquipmentCategoryList(equDefineCode, null);
// 使用单位信息
dto.setDATA_SOURCE(useInfo.getDataSource());
dto.setNEXT_INSPECT_DATE(inspectionDetectionInfo.getNextInspectDate() + "");
dto.setREC_DATE(System.currentTimeMillis());
dto.setSEQUENCE_NBR(record);
dto.setFACTORY_NUM(factoryInfo.getFactoryNum());
dto.setUSE_INNER_CODE(useInfo.getUseInnerCode());
dto.setEQU_CATEGORY_CODE(equCategoryCode);
if (CollectionUtils.isNotEmpty(equCategory)) {
dto.setEQU_CATEGORY(equCategory.get(0).getName());
}
dto.setEQU_LIST_CODE(equListCode);
if (CollectionUtils.isNotEmpty(equList)) {
dto.setEQU_LIST(equList.get(0).getName());
}
dto.setEQU_DEFINE_CODE(equDefineCode);
if (CollectionUtils.isNotEmpty(equDefine)) {
dto.setEQU_DEFINE(equDefine.get(0).getName());
}
// 使用单位信息
if("个人主体".equals(company.getCompanyType())){
dto.setUSE_UNIT_CREDIT_CODE(company.getCompanyCode().split("_")[1]);
dto.setUSE_UNIT_NAME(company.getCompanyName().split("_")[1]);
}else {
dto.setUSE_UNIT_CREDIT_CODE(company.getCompanyCode());
dto.setUSE_UNIT_NAME(company.getCompanyName());
}
esEquipmentCategoryList.add(dto);
});
Optional.of(useInfoList).filter(list -> !list.isEmpty()).ifPresent(idxBizJgUseInfoService::saveBatch);
Optional.of(designInfoList).filter(list -> !list.isEmpty()).ifPresent(idxBizJgDesignInfoService::saveBatch);
Optional.of(registerInfoList).filter(list -> !list.isEmpty()).ifPresent(idxBizJgRegisterInfoService::saveBatch);
Optional.of(factoryInfoList).filter(list -> !list.isEmpty()).ifPresent(idxBizJgFactoryInfoService::saveBatch);
Optional.of(otherInfoList).filter(list -> !list.isEmpty()).ifPresent(idxBizJgOtherInfoService::saveBatch);
Optional.of(paramsVesselList).filter(list -> !list.isEmpty()).ifPresent(idxBizJgTechParamsVesselService::saveBatch);
Optional.of(inspectionDetectionInfoList).filter(list -> !list.isEmpty()).ifPresent(idxBizJgInspectionDetectionInfoService::saveBatch);
Optional.of(esEquipmentCategoryList).filter(list -> !list.isEmpty()).ifPresent(esEquipmentCategory::saveAll);
return String.format("导入完成,成功导入: %d 条数据!", useInfoList.size());
}
public StringBuilder checkExcelData(EquipInfoCylinderExcelDto data, AnalysisContext context) {
StringBuilder result = new StringBuilder();
ReadRowHolder readRowHolder = context.readRowHolder();
int rowIndex = readRowHolder.getRowIndex() + 1;
try {
log.info("解析第{}行数据:{}", rowIndex, JSON.toJSONString(data));
// 检查各字段是否为空,如果为空则追加错误信息
checkNotBlank(data.getProductName(), "设备名称不能为空;", result);
checkNotBlank(data.getBrandName(), "品牌名称不能为空;", result);
checkNotBlank(data.getEquType(), "设备型号不能为空;", result);
checkNotBlank(data.getUseInnerCode(), "单位内部编号不能为空;", result);
if (useInnerCodeList.contains(data.getUseInnerCode())) {
result.append("单位内部编号不能重复;");
}
checkNotBlank(data.getWhetherVehicleCylinder(), "是否车用气瓶不能为空;", result);
checkNotBlank(data.getEquCodeType(), "是否有设备代码不能为空;", result);
if ("1".equals(data.getEquCodeType())) {
checkNotBlank(data.getEquCode(), "设备代码不能为空;", result);
String equCode = data.getEquCode();
if (equCode.matches("[a-zA-Z0-9]+")) {
if (equCode.length() <= 17) {
result.append("设备代码不能小于17位;");
}
if (equCode.length() >= 20) {
result.append("设备代码不能大于20位;");
}
} else {
result.append("设备代码不能包含特殊字符;");
}
if (equCodeList.contains(data.getEquCode())) {
result.append("设备代码不能重复;");
}
this.checkEquCodeUniqueness(data.getEquCode(), result);
} else {
data.setEquCode("");
}
checkNotBlank(data.getDesignUnitCreditCode(), "设计单位统一社会信用代码不能为空;", result);
checkNotBlank(data.getDesignUnitName(), "设计单位名称不能为空;", result);
Optional.ofNullable(data.getDesignDate()).ifPresent(v -> checkDateFormatCorrect(v, "设计日期格式不正确;", result));
Optional.ofNullable(data.getAppraisalDate()).ifPresent(v -> checkDateFormatCorrect(v, "设计文件鉴定日期格式不正确;", result));
checkNotBlank(data.getProduceUnitCreditCode(), "制造单位统一社会信用代码不能为空;", result);
checkNotBlank(data.getProduceUnitName(), "制造单位名称不能为空;", result);
checkNotBlank(data.getProduceLicenseNum(), "制造许可编号不能为空;", result);
checkNotBlank(data.getFactoryNum(), "出厂编号/产品编码不能为空;", result);
if ("0".equals(data.getWhetherVehicleCylinder()) && factoryNumList.contains(data.getFactoryNum()))
result.append("出厂编号/产品编码不能重复;");
checkFactoryNumUniqueness(data.getFactoryNum(), null, result);
checkNotBlank(data.getProduceDate(), "制造日期不能为空;", result);
Optional.ofNullable(data.getProduceDate()).ifPresent(v -> checkDateFormatCorrect(v, "制造日期格式不正确;", result));
checkNotBlank(data.getInspectOrgName(), "检测机构名称不能为空;", result);
checkNotBlank(data.getInspectOrgCode(), "检测机构代码不能为空;", result);
checkInspectOrg(data.getInspectOrgCode(), result);
checkNotBlank(data.getInspectStaff(), "检测人员名称不能为空;", result);
checkNotBlank(data.getInspectDate(), "检测日期不能为空;", result);
checkDateFormatCorrect(data.getInspectDate(), "检测日期格式不正确;", result);
checkNotBlank(data.getSingleBottleVolume(), "单瓶容积不能为空;", result);
checkNotBlank(data.getChargingMedium(), "充装介质不能为空;", result);
checkNotBlank(data.getNominalWorkingPressure(), "公称工作压力不能为空;", result);
// 如果存在错误信息,则抛出 BadRequest 异常
if (result.length() > 0) {
result.insert(0, "Excel第[" + rowIndex + "]行 -> ");
}
} catch (Exception e) {
log.error(String.format("行索引数: [%s] -> 失败的 Excel 数据: [%s]", rowIndex, JSON.toJSONString(data)), e);
throw e;
}
return result;
}
private void checkEquCodeUniqueness(String equCode, StringBuilder result) {
// 根据设备代码检查唯一性
LambdaQueryWrapper<RegistrationInfo> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(RegistrationInfo::getEquCode, equCode);
Integer count = tzsJgRegistrationInfoMapper.selectCount(wrapper);
if (count > 0) {
result.append("设备代码系统中已存在;");
}
}
// 检查上传Excel中的日期格式是否正确
private void checkDateFormatCorrect(String date, String errorMessage, StringBuilder result) {
if (!date.matches("\\d{4}-\\d{2}-\\d{2}")) {
result.append(errorMessage);
}
}
private void checkInspectOrg(String inspectOrgCode, StringBuilder result){
List<Map<String, Object>> InspectOrgList = commonService.getAllInspectionInfo("inspection");
if (findUseCode(InspectOrgList, inspectOrgCode) == null) {
result.append("未查询到该检验机构;");
}
}
// 检查字段是否为空,如果为空则追加错误信息到result
private void checkNotBlank(String value, String errorMessage, StringBuilder result) {
if (org.apache.commons.lang3.StringUtils.isBlank(value)) {
result.append(errorMessage);
}
}
private void checkFactoryNumUniqueness(String factoryNum, String sequenceNbr, StringBuilder result) {
// 车用气瓶业务里面的 出厂编号/产品编码 校验唯一性(产品编号在车用气瓶范围内全局唯一)
if (commonService.checkFactoryNumUniquenessForVehicleCylinder(factoryNum, sequenceNbr) > 0) {
result.append("出厂编号/产品编码系统中已存在!");
}
}
// 注入依赖
private void injectDependencies(PressureVesselListener listener, Map<String, Object> paramMap) {
listener.setIdxBizJgRegisterInfoService(idxBizJgRegisterInfoService);
......@@ -2032,4 +2392,12 @@ public class IdxBizJgRegisterInfoServiceImpl extends BaseService<IdxBizJgRegiste
CompanyBo company = reginParams.getCompany();
listener.setCompany(company);
}
public String findUseCode(List<Map<String, Object>> unitList, String inspectOrgCode) {
Optional<Map<String, Object>> optional = unitList.stream()
.filter(map -> map.get("useCode").equals(inspectOrgCode))
.findFirst();
return optional.map(map -> (String) map.get("useCode")).orElse(null);
}
}
\ No newline at end of file
......@@ -6,7 +6,6 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.bo.CompanyBo;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
......@@ -24,14 +23,10 @@ import com.yeejoin.amos.boot.module.jg.api.service.IJgInstallationNoticeService;
import com.yeejoin.amos.boot.module.jg.api.service.IJgMaintenanceContractService;
import com.yeejoin.amos.boot.module.jg.api.vo.JgMaintenanceContractVo;
import com.yeejoin.amos.boot.module.jg.api.vo.SortVo;
import com.yeejoin.amos.boot.module.jg.biz.context.EquipUsedCheckStrategyContext;
import com.yeejoin.amos.boot.module.jg.biz.dao.ESEquipmentCategory;
import com.yeejoin.amos.boot.module.jg.biz.feign.TzsServiceFeignClient;
import com.yeejoin.amos.boot.module.jg.biz.service.ICmWorkflowService;
import com.yeejoin.amos.boot.module.jg.biz.service.IIdxBizJgUseInfoService;
import com.yeejoin.amos.boot.module.ymt.api.dto.ESEquipmentCategoryDto;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgMaintenanceRecordInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgUseInfo;
import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
import com.yeejoin.amos.feign.systemctl.model.TaskV2Model;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment