list = certificateService.listScope(certificateNo, certificateName, equipmentNo,
+ equipmentName, subcontractorName, createTimeStart, createTimeEnd,
+ equipmentManufactureNo,certificateValidStart,certificateValidEnd,checkDateStart,checkDateEnd,
+ ids);
super.exportExcel(SubcontractCertificate.class, list, "");
}
+
+ @ApiOperation("批量导入")
+ @PostMapping("/import")
+ @ResponseBody
+ public ReturnDTO infoImport(@RequestParam("file") MultipartFile file) throws IOException {
+ if(Objects.isNull(file)){
+ throw new BusinessException(BusinessExceptionEnum.UPLOAD_FILE_NULL);
+ }
+ certificateService.batchImport(file);
+ return ReturnUtil.success();
+ }
}
diff --git a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml
index cfbdcfd..84ca460 100644
--- a/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml
+++ b/casic-metering-eqpt-api/src/main/resources/config/application-dev.yml
@@ -4,7 +4,7 @@
spring:
datasource:
# driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true&nullCatalogMeansCurrent=true
+ url: jdbc:mysql://111.198.10.15:11336/casic_metering_xichang?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&&allowMultiQueries=true&nullCatalogMeansCurrent=true
username: root
password: Casic203
redis:
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/SubcontractCertificateImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/SubcontractCertificateImportDTO.java
new file mode 100644
index 0000000..2f3877b
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/certificate/SubcontractCertificateImportDTO.java
@@ -0,0 +1,59 @@
+package com.casic.missiles.dto.certificate;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.casic.missiles.converter.DateExcelConverter;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+@Getter
+@Setter
+public class SubcontractCertificateImportDTO {
+
+ @ExcelProperty(value = "证书编号")
+ private String certificateNo;
+
+ @ExcelProperty(value = "证书名称")
+ private String certificateName;
+
+ @ExcelProperty("检测单位编号")
+ private String subcontractorNo;
+
+ @ExcelProperty("检测单位名称")
+ private String subcontractorName;
+
+ @ExcelIgnore
+ private Long subcontractorId;
+
+ @ExcelIgnore
+ private Long equipmentId;
+
+ @ExcelProperty("受检设备编号")
+ private String equipmentNo;
+
+ @ExcelProperty("设备名称")
+ private String equipmentName;
+
+ @ExcelProperty(value = "规格型号")
+ private String equipmentModel;
+
+ @ExcelProperty(value = "辅助字段")
+ private String helpInstruction;
+
+ @ExcelProperty(value = "出厂编号")
+ private String equipmentManufactureNo;
+
+ @ExcelProperty(value = "检定(校准)日期", converter = DateExcelConverter.class)
+ private Date checkDate;
+
+ @ExcelProperty(value = "证书有效期", converter = DateExcelConverter.class)
+ private Date certificateValid;
+
+ @ExcelProperty("计量标识")
+ private String meterIdentify;
+
+ @ExcelProperty("证书报告附件")
+ private String certificateReport;
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/subcontract/SubcontractCertificate.java b/casic-metering-model/src/main/java/com/casic/missiles/model/subcontract/SubcontractCertificate.java
index ad5c82e..c4e453a 100644
--- a/casic-metering-model/src/main/java/com/casic/missiles/model/subcontract/SubcontractCertificate.java
+++ b/casic-metering-model/src/main/java/com/casic/missiles/model/subcontract/SubcontractCertificate.java
@@ -14,6 +14,8 @@
import java.io.Serializable;
import java.util.Date;
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.constants.MeterDictCode;
import com.casic.missiles.converter.DateExcelConverter;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
@@ -51,7 +53,7 @@
*/
@ApiModelProperty("证书编号")
@TableField("certificate_no")
- @ExcelProperty(value = "证书号",index = 0)
+ @ExcelProperty(value = "证书编号",index = 0)
private String certificateNo;
/**
@@ -81,7 +83,7 @@
*/
@ApiModelProperty("检测单位名称")
@TableField(exist = false)
- @ExcelProperty(value = "检测单位",index = 6)
+ @ExcelProperty(value = "检测单位",index = 5)
private String subcontractorName;
/**
@@ -96,7 +98,7 @@
*/
@ApiModelProperty("受检设备编号")
@TableField(exist = false)
- @ExcelProperty(value = "样品编号",index = 2)
+ //@ExcelProperty(value = "样品编号",index = 2)
private String equipmentNo;
/**
@@ -104,7 +106,7 @@
*/
@ApiModelProperty("受检设备名称")
@TableField(exist = false)
- @ExcelProperty(value = "样品名称",index = 3)
+ @ExcelProperty(value = "设备名称",index = 2)
private String equipmentName;
/**
@@ -112,7 +114,7 @@
*/
@ApiModelProperty("出厂编号")
@TableField(exist = false)
- @ExcelProperty(value = "出厂编号",index = 5)
+ @ExcelProperty(value = "出厂编号",index = 4)
private String equipmentManufactureNo;
/**
@@ -120,7 +122,7 @@
*/
@ApiModelProperty("型号")
@TableField(exist = false)
- @ExcelProperty(value = "型号",index = 4)
+ @ExcelProperty(value = "规格型号",index = 3)
private String equipmentModel;
/**
@@ -128,6 +130,7 @@
*/
@ApiModelProperty("检定(校准)日期")
@TableField("check_date")
+ @ExcelProperty(value = "检定(校准)日期",index = 6, converter = DateExcelConverter.class)
private Date checkDate;
/**
@@ -135,6 +138,7 @@
*/
@ApiModelProperty("证书有效期")
@TableField("certificate_valid")
+ @ExcelProperty(value = "证书有效期",index = 7, converter = DateExcelConverter.class)
private Date certificateValid;
/**
@@ -142,8 +146,14 @@
*/
@ApiModelProperty("计量标识")
@TableField("meter_identify")
+ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY)
private String meterIdentify;
+ @ApiModelProperty("计量标识名称")
+ @TableField(exist = false)
+ @ExcelProperty(value = "计量标识", index = 8)
+ private String meterIdentifyName;
+
/**
* 原始记录附件
*/
@@ -163,7 +173,7 @@
*/
@ApiModelProperty("创建时间")
@TableField("create_time")
- @ExcelProperty(value = "创建时间",index = 7, converter = DateExcelConverter.class)
+ //@ExcelProperty(value = "创建时间",index = 7, converter = DateExcelConverter.class)
private Date createTime;
/**
diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java
index 514e0e8..759cb30 100644
--- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java
+++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/board/NoticeBoardServiceImpl.java
@@ -433,9 +433,12 @@
}
- res.setStatistic(getEquipmentCommonAggrs(list,EquipmentInfo::getCategory, MeterDictCode.EQUIPMENT_CATEGORY));
- res.setNameAggrList(getEquipmentCommonAggrs(list,EquipmentInfo::getEquipmentName, null));
- res.setMeterAggrList(getEquipmentCommonAggrs(list,EquipmentInfo::getMeterIdentify, MeterDictCode.EQUIPMENT_METER_IDENTITY));
+ res.setStatistic(getEquipmentCommonAggrs(list.stream().filter(l->ObjectUtil.isNotEmpty(l.getCategory())).collect(Collectors.toList()),
+ EquipmentInfo::getCategory, MeterDictCode.EQUIPMENT_CATEGORY));
+ res.setNameAggrList(getEquipmentCommonAggrs(list.stream().filter(l->ObjectUtil.isNotEmpty(l.getEquipmentName())).collect(Collectors.toList()),
+ EquipmentInfo::getEquipmentName, null));
+ res.setMeterAggrList(getEquipmentCommonAggrs(list.stream().filter(l->ObjectUtil.isNotEmpty(l.getMeterIdentify())).collect(Collectors.toList()),
+ EquipmentInfo::getMeterIdentify, MeterDictCode.EQUIPMENT_METER_IDENTITY));
return res;
}
diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/subcontract/SubcontractCertificateServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/subcontract/SubcontractCertificateServiceImpl.java
index 4dd3d44..c053371 100644
--- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/subcontract/SubcontractCertificateServiceImpl.java
+++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/subcontract/SubcontractCertificateServiceImpl.java
@@ -1,25 +1,56 @@
package com.casic.missiles.service.impl.subcontract;
+import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
+import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.constants.MeterDictCode;
import com.casic.missiles.core.application.context.AbstractPermissionContext;
+import com.casic.missiles.core.application.service.AbstractDictService;
import com.casic.missiles.core.datascope.DataScope;
+import com.casic.missiles.core.model.auth.AuthUser;
import com.casic.missiles.dto.ReturnDTO;
+import com.casic.missiles.dto.ReturnUtil;
+import com.casic.missiles.dto.board.EquipmentStatisticsList;
+import com.casic.missiles.dto.certificate.SubcontractCertificateImportDTO;
import com.casic.missiles.dto.equipment.EquipmentCertificateDTO;
+import com.casic.missiles.dto.equipment.EquipmentImportDTO;
+import com.casic.missiles.enums.BusinessExceptionEnum;
+import com.casic.missiles.exception.BusinessException;
+import com.casic.missiles.listeners.CommonExcelListener;
+import com.casic.missiles.model.equipment.EquipmentInfo;
import com.casic.missiles.model.subcontract.SubcontractCertificate;
import com.casic.missiles.mapper.subcontract.SubcontractCertificateMapper;
+import com.casic.missiles.model.subcontract.Subcontractor;
+import com.casic.missiles.modular.system.model.Dict;
import com.casic.missiles.service.equipment.IEquipmentInfoService;
import com.casic.missiles.service.subcontract.ISubcontractCertificateService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.service.subcontract.ISubcontractorService;
+import com.casic.missiles.utils.DictCodeUtils;
+import com.casic.missiles.utils.FileUtil;
+import com.casic.missiles.utils.MinioUtil;
import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
-import java.util.List;
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipInputStream;
/**
*
@@ -34,20 +65,185 @@
public class SubcontractCertificateServiceImpl extends ServiceImpl implements ISubcontractCertificateService {
private final AbstractPermissionContext permissionContext;
- private IEquipmentInfoService equipmentInfoService;
+ private final MinioUtil minioUtil;
+ private final AbstractDictService dictService;
+ private IEquipmentInfoService equipmentInfoService;
+ private ISubcontractorService subcontractorService;
@Autowired
- public void setEquipmentInfoService(IEquipmentInfoService equipmentInfoService){
+ public void setEquipmentInfoService(IEquipmentInfoService equipmentInfoService,ISubcontractorService subcontractorService){
this.equipmentInfoService = equipmentInfoService;
+ this.subcontractorService = subcontractorService;
}
@Override
- public ReturnDTO batchImport(MultipartFile file) {
- // todo
- return null;
+ @Transactional
+ public ReturnDTO batchImport(MultipartFile file) throws IOException {
+ //获取文件输入流,压缩文件直接读取
+ InputStream in = new BufferedInputStream(file.getInputStream());
+ ZipInputStream zin = new ZipInputStream(in, Charset.forName("GBK"));
+ //MultipartFile转File,外层zip
+ File realFile = FileUtil.multipartFileToFile(file);
+ ZipFile zipFile = new ZipFile(realFile, Charset.forName("GBK"));
+ BufferedInputStream bs = new BufferedInputStream(zin);
+ ZipEntry ze;
+ ZipEntry eze = null;
+ List multipartFileList = new ArrayList<>();
+ try {
+ //读取zip包中pdf证书文件
+ while ((ze = zin.getNextEntry()) != null) {
+ if (ze.isDirectory()) {
+ continue;
+ }
+ if (ze.toString().endsWith("pdf")) {
+ InputStream inputStream = zipFile.getInputStream(ze);
+ //File转MultipartFile,zip内部文件
+ MultipartFile multipartFile = FileUtil.getMultipartFile(inputStream, ze.getName());
+ multipartFileList.add(multipartFile);
+ }
+ if (ze.toString().endsWith("xlsx") || ze.toString().endsWith("xls")) {
+ eze = ze;
+ }
+ }
+ if(CollectionUtils.isEmpty(multipartFileList) || Objects.isNull(eze)){
+ //无证书或证书文件非pdf或无Excel
+ throw new BusinessException(BusinessExceptionEnum.OUTSOURCE_CERTIFICATE_NO_FILES);
+ }
+
+ //读取zip包中excel文件
+ InputStream inputStream = zipFile.getInputStream(eze);
+ //转换为MultipartFile
+ MultipartFile excelFile = FileUtil.getMultipartFile(inputStream, eze.getName());
+ //解析excel文件,对应文件名转换minio上传文件名,批量存储
+ CommonExcelListener listener = new CommonExcelListener<>();
+ EasyExcel.read(excelFile.getInputStream(), SubcontractCertificateImportDTO.class, listener)
+ .headRowNumber(1).autoTrim(true).sheet(0).doRead();
+ List certificateImportList = listener.getList();
+ validImport(certificateImportList);
+
+
+ List minioNameList = minioUtil.upload(multipartFileList.toArray(new MultipartFile[multipartFileList.size()]));
+ //Map:pdf文件名-minio上传文件名
+ Map minioMap = new HashMap<>();
+ for (int i = 0; i < minioNameList.size(); i++) {
+ minioMap.put(multipartFileList.get(i).getOriginalFilename(), minioNameList.get(i));
+ }
+ saveImport(certificateImportList,minioMap);
+
+
+ }finally {
+ in.close();
+ zin.closeEntry();
+ zin.close();
+ bs.close();
+ }
+ return ReturnUtil.success();
}
+ void validImport(List list){
+ if(CollectionUtils.isEmpty(list)){
+ throw new BusinessException(BusinessExceptionEnum.IMPORT_NO_DATA);
+ }
+ List subcontractorList = subcontractorService.list();
+ List equipmentInfoList = equipmentInfoService.list();
+ List meterIdentityDicts = dictService.findInDictByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY);
+ String validMsg = "第%d行数据校验失败:%s";
+ for (int i = 0; i < list.size(); i++) {
+ SubcontractCertificateImportDTO importDTO = list.get(i);
+ if (StrUtil.isBlank(importDTO.getCertificateNo())) {
+ throw new BusinessException(1500, String.format(validMsg, i + 1, "证书编号不能为空"));
+ }
+ if (StrUtil.isBlank(importDTO.getCertificateName())) {
+ throw new BusinessException(1500, String.format(validMsg, i + 1, "证书名称不能为空"));
+ }
+ // 检测单位
+ if (StrUtil.isBlank(importDTO.getSubcontractorNo())) {
+ throw new BusinessException(1500, String.format(validMsg, i + 1, "检测单位编号不能为空"));
+ }
+ Optional subcontractorOpt = subcontractorList.stream().filter(s->s.getSubcontractorNo().equals(importDTO.getSubcontractorNo())).findFirst();
+ if(subcontractorOpt.isPresent()){
+ Subcontractor subcontractor = subcontractorOpt.get();
+ if(!subcontractor.getCompanyName().equals(importDTO.getSubcontractorName())){
+ throw new BusinessException(1500, String.format(validMsg, i + 1, "检测单位名称与名录不一致"));
+ }
+ importDTO.setSubcontractorId(subcontractor.getId());
+ }else {
+ throw new BusinessException(1500, String.format(validMsg, i + 1, "检测单位不存在"));
+ }
+ // 受检设备
+ if (StrUtil.isBlank(importDTO.getEquipmentNo())) {
+ throw new BusinessException(1500, String.format(validMsg, i + 1, "受检设备编号不能为空"));
+ }
+ Optional equipmentInfoOpt = equipmentInfoList.stream().filter(s->s.getEquipmentNo().equals(importDTO.getEquipmentNo())).findFirst();
+ if(equipmentInfoOpt.isPresent()){
+ EquipmentInfo equipmentInfo = equipmentInfoOpt.get();
+ if(!equipmentInfo.getEquipmentName().equals(importDTO.getEquipmentName())
+ ||!equipmentInfo.getModel().equals(importDTO.getEquipmentModel())
+ ||!equipmentInfo.getManufactureNo().equals(importDTO.getEquipmentManufactureNo())
+ ||(StrUtil.isNotEmpty(equipmentInfo.getHelpInstruction()) && !equipmentInfo.getHelpInstruction().equals(importDTO.getHelpInstruction()))){
+ throw new BusinessException(1500, String.format(validMsg, i + 1, "受检设备信息与设备台账不一致"));
+ }
+
+ importDTO.setEquipmentId(equipmentInfo.getId());
+ }else {
+ throw new BusinessException(1500, String.format(validMsg, i + 1, "受检设备编号不存在"));
+ }
+ // 检定校准日期
+ if (ObjectUtil.isEmpty(importDTO.getCheckDate())) {
+ throw new BusinessException(1500, String.format(validMsg, i + 1, "检定(校准)日期不能为空"));
+ }
+ // 证书有效期
+ if (ObjectUtil.isEmpty(importDTO.getCertificateValid())) {
+ throw new BusinessException(1500, String.format(validMsg, i + 1, "证书有效期不能为空"));
+ }
+ // 计量标识
+ if (StrUtil.isBlank(importDTO.getMeterIdentify())){
+ throw new BusinessException(1500, String.format(validMsg, i + 1, "计量标识不能为空"));
+ }
+ Optional dictOpt = meterIdentityDicts.stream().filter(s->s.getCode().equals(importDTO.getMeterIdentify())).findFirst();
+ if(!dictOpt.isPresent()){
+ throw new BusinessException(1500, String.format(validMsg, i + 1, "计量标识不合法"));
+ }
+ // 证书文件
+ if(StrUtil.isBlank(importDTO.getCertificateReport())){
+ throw new BusinessException(1500, String.format(validMsg, i + 1, "证书报告附件不能为空"));
+ }
+ }
+ }
+
+ void saveImport(List list,Map minioMap){
+ AuthUser user = permissionContext.getAuthService().getLoginUser();
+ List resultList = new ArrayList<>();
+ list.forEach(cert -> {
+ List excelFileList = Arrays.asList(cert.getCertificateReport().split(";"));
+ excelFileList.forEach(f -> {
+ SubcontractCertificate certificate = new SubcontractCertificate();
+ BeanUtil.copyProperties(cert,certificate);
+ certificate.setCertificateReport(minioMap.get(f));
+ certificate.setCreateUserId(user.getId());
+ certificate.setCreateUserName(user.getName());
+ certificate.setCreateDeptId(user.getDeptId());
+ certificate.setCreateTime(new Date());
+ certificate.setUpdateTime(new Date());
+ resultList.add(certificate);
+ });
+ });
+ // 保存证书信息
+ this.saveBatch(resultList);
+ // 取最新的证书更新设备信息
+ Map> equipmentMaps = resultList.stream().collect(Collectors.groupingBy(SubcontractCertificate::getEquipmentId));
+ for (Long equipmentId : equipmentMaps.keySet()) {
+ List subList = equipmentMaps.get(equipmentId);
+ if(subList.size() > 1){
+ subList.sort(Comparator.comparing(SubcontractCertificate::getCertificateValid));
+ }
+ SubcontractCertificate latest = subList.get(subList.size()-1);
+ equipmentInfoService.updateCertificateInfo(equipmentId,latest.getSubcontractorName(),latest.getCheckDate(),latest.getCertificateValid(),latest.getMeterIdentify());
+ }
+ }
+
+
@Override
@Transactional
public void saveOrUpdateInfo(SubcontractCertificate entity) {
@@ -63,16 +259,33 @@
}
@Override
- public Page listScopePage(Page page, String certificateNo, String certificateName, String equipmentNo, String equipmentName, String subcontractorName, String createTimeStart, String createTimeEnd) {
+ public Page listScopePage(Page page, String certificateNo, String certificateName,
+ String equipmentNo, String equipmentName, String subcontractorName,
+ String createTimeStart, String createTimeEnd,
+ String equipmentManufactureNo,
+ String certificateValidStart,String certificateValidEnd,
+ String checkDateStart, String checkDateEnd) {
DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope();
dataScope.setScopeName("c.create_dept_id");
- QueryWrapper queryWrapper = commonQuery(certificateNo, certificateName, equipmentNo, equipmentName, subcontractorName, createTimeStart, createTimeEnd);
- page.setRecords(this.baseMapper.listScopePage(dataScope,page,queryWrapper));
+ QueryWrapper queryWrapper = commonQuery(certificateNo, certificateName, equipmentNo,
+ equipmentName, subcontractorName, createTimeStart, createTimeEnd,
+ equipmentManufactureNo,certificateValidStart,certificateValidEnd,checkDateStart,checkDateEnd);
+ List list = this.baseMapper.listScopePage(dataScope,page,queryWrapper);
+ for (SubcontractCertificate certificate : list) {
+ warp(certificate);
+ }
+ page.setRecords(list);
return page;
}
@Override
- public List listScope(String certificateNo, String certificateName, String equipmentNo, String equipmentName, String subcontractorName, String createTimeStart, String createTimeEnd, List ids) {
+ public List listScope(String certificateNo, String certificateName, String equipmentNo,
+ String equipmentName, String subcontractorName,
+ String createTimeStart, String createTimeEnd,
+ String equipmentManufactureNo,
+ String certificateValidStart,String certificateValidEnd,
+ String checkDateStart, String checkDateEnd,
+ List ids) {
DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope();
dataScope.setScopeName("c.create_dept_id");
QueryWrapper queryWrapper;
@@ -80,9 +293,23 @@
queryWrapper = new QueryWrapper<>();
queryWrapper.in("c.id",ids);
}else {
- queryWrapper = commonQuery(certificateNo, certificateName, equipmentNo, equipmentName, subcontractorName, createTimeStart, createTimeEnd);
+ queryWrapper = commonQuery(certificateNo, certificateName, equipmentNo, equipmentName, subcontractorName,
+ createTimeStart, createTimeEnd,
+ equipmentManufactureNo,certificateValidStart,certificateValidEnd,checkDateStart,checkDateEnd);
}
- return this.baseMapper.listScope(dataScope,queryWrapper);
+ List list = this.baseMapper.listScope(dataScope,queryWrapper);
+ for (SubcontractCertificate certificate : list) {
+ warp(certificate);
+ }
+ return list;
+ }
+
+ public void warp(SubcontractCertificate i) {
+ try {
+ DictCodeUtils.convertDictCodeToName(i);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
}
@Override
@@ -95,7 +322,12 @@
return this.baseMapper.listByEquipment(equipmentId);
}
- private QueryWrapper commonQuery(String certificateNo, String certificateName, String equipmentNo, String equipmentName, String subcontractorName, String createTimeStart, String createTimeEnd){
+ private QueryWrapper commonQuery(String certificateNo, String certificateName, String equipmentNo,
+ String equipmentName, String subcontractorName,
+ String createTimeStart, String createTimeEnd,
+ String equipmentManufactureNo,
+ String certificateValidStart,String certificateValidEnd,
+ String checkDateStart, String checkDateEnd){
QueryWrapper queryWrapper = new QueryWrapper<>();
if(StrUtil.isNotEmpty(certificateNo)){
queryWrapper.like("c.certificate_no",certificateNo);
@@ -109,6 +341,9 @@
if(StrUtil.isNotEmpty(equipmentName)){
queryWrapper.like("e.equipment_name",equipmentName);
}
+ if(StrUtil.isNotEmpty(equipmentManufactureNo)){
+ queryWrapper.like("e.manufacture_no",equipmentManufactureNo);
+ }
if(StrUtil.isNotEmpty(subcontractorName)){
queryWrapper.like("s.company_name",subcontractorName);
}
@@ -118,6 +353,10 @@
if(StrUtil.isNotEmpty(createTimeEnd)){
queryWrapper.le("c.create_time",createTimeEnd);
}
+ queryWrapper.ge(StrUtil.isNotEmpty(certificateValidStart),"c.certificate_valid",certificateValidStart);
+ queryWrapper.le(StrUtil.isNotEmpty(certificateValidEnd),"c.certificate_valid",certificateValidEnd);
+ queryWrapper.ge(StrUtil.isNotEmpty(checkDateStart),"c.check_date",checkDateStart);
+ queryWrapper.le(StrUtil.isNotEmpty(checkDateEnd),"c.check_date",checkDateEnd);
return queryWrapper;
}
}
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/FileUtil.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/FileUtil.java
new file mode 100644
index 0000000..d406e4b
--- /dev/null
+++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/FileUtil.java
@@ -0,0 +1,116 @@
+package com.casic.missiles.utils;
+
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileItemFactory;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.MediaType;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
+
+import java.io.*;
+
+/**
+ * @Description:
+ * @Author: wangpeng
+ * @Date: 2023/4/7 15:37
+ */
+public class FileUtil {
+ private static Logger log = LoggerFactory.getLogger(FileUtil.class);
+
+ /**
+ * MultipartFile转File
+ */
+ public static File multipartFileToFile(MultipartFile multipartFile) {
+ File file = null;
+ InputStream inputStream = null;
+ OutputStream outputStream = null;
+ try {
+ inputStream = multipartFile.getInputStream();
+ file = new File(multipartFile.getOriginalFilename());
+ outputStream = new FileOutputStream(file);
+ //项目根目录下放置文件
+ write(inputStream, outputStream);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (inputStream != null) {
+ try {
+ inputStream.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ if (outputStream != null) {
+ try {
+ outputStream.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return file;
+ }
+
+ public static void write(InputStream inputStream, OutputStream outputStream) {
+ byte[] buffer = new byte[4096];
+ try {
+ int count = inputStream.read(buffer, 0, buffer.length);
+ while (count != -1) {
+ outputStream.write(buffer, 0, count);
+ count = inputStream.read(buffer, 0, buffer.length);
+ }
+ } catch (RuntimeException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new RuntimeException(e.getMessage(), e);
+ }
+ }
+
+ public static MultipartFile getMultipartFile(InputStream inputStream, String fileName) {
+ FileItem fileItem = createFileItem(inputStream, fileName);
+ //CommonsMultipartFile是feign对multipartFile的封装,但是要FileItem类对象
+ return new CommonsMultipartFile(fileItem);
+ }
+
+ /**
+ * FileItem类对象创建
+ */
+ public static FileItem createFileItem(InputStream inputStream, String fileName) {
+ FileItemFactory factory = new DiskFileItemFactory(16, null);
+ String textFieldName = "file";
+ FileItem item = factory.createItem(textFieldName, MediaType.APPLICATION_OCTET_STREAM_VALUE, true, fileName);
+ int bytesRead = 0;
+ byte[] buffer = new byte[8192];
+ OutputStream os = null;
+ //使用输出流输出输入流的字节
+ try {
+ os = item.getOutputStream();
+ while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {
+ os.write(buffer, 0, bytesRead);
+ }
+ inputStream.close();
+ } catch (IOException e) {
+ log.error("Stream copy exception", e);
+ throw new IllegalArgumentException("文件上传失败");
+ } finally {
+ if (os != null) {
+ try {
+ os.close();
+ } catch (IOException e) {
+ log.error("Stream close exception", e);
+ }
+ }
+ if (inputStream != null) {
+ try {
+ inputStream.close();
+ } catch (IOException e) {
+ log.error("Stream close exception", e);
+ }
+ }
+ }
+ return item;
+ }
+
+}
diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml
index 754fb3f..171f90d 100644
--- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml
+++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoMapper.xml
@@ -39,11 +39,18 @@
+
+
+
- id, equipment_no as equipmentNo, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no as manufactureNo, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time
+ id, equipment_no as equipmentNo, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no as manufactureNo,
+ product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file,
+ check_organization, check_date, certificate_valid as certificateValid, meter_identify, use_position, director_name, RFID, use_sign,
+ install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time,
+ is_del,model_id,help_instruction