From c94f3d2d0a31edd7b96b1c499f83bae695adfd6d Mon Sep 17 00:00:00 2001 From: "liang.chao" <1360241448@qq.com> Date: Wed, 4 Dec 2024 17:19:41 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A3=85=E5=A4=87=E6=89=B9=E9=87=8F=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=EF=BC=8C=E5=AF=BC=E5=85=A5=E6=A8=A1=E7=89=88=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=EF=BC=8C=E5=AE=89=E5=85=A8=E8=AF=81=E4=B9=A6=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/controller/DevInfoController.java | 36 ++++++ .../device/controller/SafeBookController.java | 53 +++++++++ .../bonus/material/device/domain/DevInfo.java | 3 +- .../material/device/domain/SafeBookInfo.java | 41 +++++++ .../device/domain/dto/DevInfoImpDto.java | 67 +++++++++++ .../device/mapper/SafeBookMapper.java | 21 ++++ .../device/service/DevInfoService.java | 6 + .../device/service/SafeBookService.java | 18 +++ .../service/impl/DevInfoServiceImpl.java | 111 ++++++++++++++++-- .../service/impl/SafeBookServiceImpl.java | 61 ++++++++++ .../mapper/material/device/DevInfoMapper.xml | 8 +- .../mapper/material/device/SafeBookMapper.xml | 32 +++++ .../src/main/resources/template/template.xlsx | Bin 0 -> 10822 bytes 13 files changed, 442 insertions(+), 15 deletions(-) create mode 100644 bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/controller/SafeBookController.java create mode 100644 bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/SafeBookInfo.java create mode 100644 bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/dto/DevInfoImpDto.java create mode 100644 bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/mapper/SafeBookMapper.java create mode 100644 bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/SafeBookService.java create mode 100644 bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/impl/SafeBookServiceImpl.java create mode 100644 bonus-modules/bonus-material-mall/src/main/resources/mapper/material/device/SafeBookMapper.xml create mode 100644 bonus-modules/bonus-material-mall/src/main/resources/template/template.xlsx diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/controller/DevInfoController.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/controller/DevInfoController.java index b909e2e..543f307 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/controller/DevInfoController.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/controller/DevInfoController.java @@ -9,19 +9,26 @@ import com.bonus.common.core.utils.poi.ExcelUtil; import com.bonus.common.core.web.controller.BaseController; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.core.web.page.TableDataInfo; +import com.bonus.common.security.utils.SecurityUtils; import com.bonus.material.device.domain.DevInfo; +import com.bonus.material.device.domain.dto.DevInfoImpDto; import com.bonus.material.device.domain.dto.InfoMotionDto; import com.bonus.material.device.domain.vo.DevInfoVo; import com.bonus.material.device.service.DevInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.java.Log; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import javax.validation.constraints.NotNull; +import java.io.IOException; import java.util.List; @@ -193,4 +200,33 @@ public class DevInfoController extends BaseController { util.exportExcel(response, list, "设备信息数据"); } + @ApiOperation(value = "装备批量录入") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception { + String fileName = file.getOriginalFilename(); + if (fileName != null) { + String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1); + long fileSize = file.getSize(); + if (!fileExtension.equalsIgnoreCase("xls") && !fileExtension.equalsIgnoreCase("xlsx")) { + // 文件后缀名不符合要求 + return error("文件后缀名不符合要求"); + } else if (fileSize > 10 * 1024 * 1024) { + // 文件大小超过10M + return error("文件大小超过10M"); + } + } + ExcelUtil util = new ExcelUtil(DevInfoImpDto.class); + List maPropInfoList = util.importExcel(file.getInputStream()); + Long userId = SecurityUtils.getLoginUser().getUserid(); + String message = devInfoService.importMaProp(maPropInfoList, updateSupport, userId); + return success(message); + } + + + @ApiOperation(value = "装备模版下载") + @PostMapping("/downLoad") + public void downLoadExcelFile() throws IOException { + HttpServletResponse resp = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); + devInfoService.downLoadTemplate(resp); + } } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/controller/SafeBookController.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/controller/SafeBookController.java new file mode 100644 index 0000000..3f635ee --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/controller/SafeBookController.java @@ -0,0 +1,53 @@ +package com.bonus.material.device.controller; + +import com.bonus.common.core.web.controller.BaseController; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.material.device.domain.SafeBookInfo; +import com.bonus.material.device.service.SafeBookService; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author:liang.chao + * @Date:2024/12/4 - 16:24 + */ +public class SafeBookController extends BaseController { + + @Resource + private SafeBookService safeBookService; + + @ApiOperation(value = "查询安全证书") + @GetMapping("/getSafeBookByMaId") + public AjaxResult getSafeBookByMaId(SafeBookInfo safeBookInfo) { + startPage(); + List list = safeBookService.getSafeBookByMaId(safeBookInfo); + return AjaxResult.success(getDataTable(list)); + } + + @ApiOperation(value = "新增安全证书") + @PostMapping("/addSafeBook") + public AjaxResult addSafeBook(SafeBookInfo safeBookInfo) { + Integer i = safeBookService.addSafeBook(safeBookInfo); + if (i > 0) { + return AjaxResult.success("新增成功"); + } else { + return AjaxResult.error("新增失败"); + } + } + + + @ApiOperation(value = "删除安全证书") + @PostMapping("/delSafeBook") + public AjaxResult delSafeBook(SafeBookInfo safeBookInfo) { + Integer i = safeBookService.delSafeBook(safeBookInfo); + if (i > 0) { + return AjaxResult.success("删除成功"); + } else { + return AjaxResult.error("删除失败"); + } + } +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/DevInfo.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/DevInfo.java index 8b23094..6e47749 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/DevInfo.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/DevInfo.java @@ -119,7 +119,8 @@ public class DevInfo extends BaseEntity { @Excel(name = "出厂日期") @ApiModelProperty(value = "出厂日期") @NotBlank - private String productionDate; + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date productionDate; /** 工作时长 */ @Excel(name = "工作时长") diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/SafeBookInfo.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/SafeBookInfo.java new file mode 100644 index 0000000..d8c63a2 --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/SafeBookInfo.java @@ -0,0 +1,41 @@ +package com.bonus.material.device.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @Author:liang.chao + * @Date:2024/12/4 - 16:22 + */ +@Data +public class SafeBookInfo { + @ApiModelProperty(value = "主键id") + private Integer id; + + @ApiModelProperty(value = "证书编号") + private String code; + + @ApiModelProperty(value = "关联装备") + private Integer maId; + + @ApiModelProperty(value = "证书附件") + private String url; + + @ApiModelProperty(value = "上传人Id") + private Long uploadPerson; + + @ApiModelProperty(value = "上传时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @ApiModelProperty(value = "更新时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; + + private String startTime; + + private String endTime; +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/dto/DevInfoImpDto.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/dto/DevInfoImpDto.java new file mode 100644 index 0000000..a42da7d --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/domain/dto/DevInfoImpDto.java @@ -0,0 +1,67 @@ +package com.bonus.material.device.domain.dto; + +import com.bonus.common.core.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Size; +import java.util.Date; + +/** + * @Author:liang.chao + * @Date:2024/12/4 - 13:59 + */ +@Data +public class DevInfoImpDto { + + /** 设备编码 */ + @ApiModelProperty(value = "设备编码") + private String code; + + @ApiModelProperty(value = "装备名称") + @Excel(name = "设备名称") + private String deviceName; + + /** 设备品牌 */ + @Excel(name = "设备品牌") + @ApiModelProperty(value = "设备品牌") + private String brand; + + @Excel(name = "出厂日期") + @ApiModelProperty(value = "出厂日期") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date productionDate; + + @ApiModelProperty(value = "创建人") + private Long creator; + + @ApiModelProperty(value = "联系人") + @Excel(name = "联系人") + private String person; + + @ApiModelProperty(value = "联系电话") + @Excel(name = "联系电话") + @Size(min = 11, max = 11, message = "手机号长度不能超过11位") + private String personPhone; + + @ApiModelProperty(value = "整机装备重量(kg)") + @Excel(name = "整机装备重量(kg)") + private String deviceWeight; + + @ApiModelProperty(value = "上传人Id") + private Long ownId; + + @ApiModelProperty(value = "校验日期") + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "校验日期") + private Date checkDate; + + @ApiModelProperty(value = "校验周期(月)") + @Excel(name = "校验周期(月)") + private Integer checkCycle; + + @ApiModelProperty(value = "设备状态") + private Integer maStatus; + +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/mapper/SafeBookMapper.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/mapper/SafeBookMapper.java new file mode 100644 index 0000000..f685fbb --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/mapper/SafeBookMapper.java @@ -0,0 +1,21 @@ +package com.bonus.material.device.mapper; + +import com.bonus.material.device.domain.SafeBookInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +/** + * @Author:liang.chao + * @Date:2024/12/4 - 16:41 + */ +public interface SafeBookMapper { + public List getSafeBookByMaId(SafeBookInfo safeBookInfo); + + Integer addSafeBook(SafeBookInfo safeBookInfo); + + String selectTaskNumByMonth(@Param("date") Date nowDate); + + Integer delSafeBook(SafeBookInfo safeBookInfo); +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/DevInfoService.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/DevInfoService.java index e18dc79..9a0be72 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/DevInfoService.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/DevInfoService.java @@ -4,9 +4,11 @@ package com.bonus.material.device.service; import com.bonus.common.biz.domain.BmCompanyInfo; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.material.device.domain.DevInfo; +import com.bonus.material.device.domain.dto.DevInfoImpDto; import com.bonus.material.device.domain.dto.InfoMotionDto; import com.bonus.material.device.domain.vo.DevInfoVo; +import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; @@ -97,4 +99,8 @@ public interface DevInfoService { List selectCompanyList(BmCompanyInfo obj); AjaxResult updateUpDown(DevInfo devInfo); + + String importMaProp(List maPropInfoList, boolean updateSupport, Long operName); + + void downLoadTemplate(HttpServletResponse resp); } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/SafeBookService.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/SafeBookService.java new file mode 100644 index 0000000..1c008a8 --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/SafeBookService.java @@ -0,0 +1,18 @@ +package com.bonus.material.device.service; + +import com.bonus.material.device.domain.SafeBookInfo; + +import java.util.List; + +/** + * @Author:liang.chao + * @Date:2024/12/4 - 16:36 + */ +public interface SafeBookService { + + List getSafeBookByMaId(SafeBookInfo safeBookInfo); + + Integer addSafeBook(SafeBookInfo safeBookInfo); + + Integer delSafeBook(SafeBookInfo safeBookInfo); +} diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/impl/DevInfoServiceImpl.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/impl/DevInfoServiceImpl.java index ea9941a..dad1402 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/impl/DevInfoServiceImpl.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/impl/DevInfoServiceImpl.java @@ -8,10 +8,12 @@ import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.utils.StringUtils; import com.bonus.common.core.utils.bean.BeanUtils; +import com.bonus.common.core.utils.bean.BeanValidators; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.security.utils.SecurityUtils; import com.bonus.material.book.domain.BookCarInfoDto; import com.bonus.material.device.domain.DevInfo; +import com.bonus.material.device.domain.dto.DevInfoImpDto; import com.bonus.material.device.domain.dto.InfoMotionDto; import com.bonus.material.device.domain.vo.DevInfoVo; import com.bonus.material.device.domain.vo.DevNameVo; @@ -23,12 +25,19 @@ import com.bonus.system.api.model.LoginUser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Validator; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -41,6 +50,7 @@ import static com.bonus.common.biz.enums.MaStatusEnum.*; * @author syruan */ @Service +@Slf4j public class DevInfoServiceImpl implements DevInfoService { // 装备主展示图片字典 private final Integer MAIN_IMAGES_DICT_VALUE = 0; @@ -60,6 +70,9 @@ public class DevInfoServiceImpl implements DevInfoService { @Resource private BmFileInfoMapper bmFileInfoMapper; + @Resource + protected Validator validator; + /** * 查询设备信息 * @@ -129,6 +142,7 @@ public class DevInfoServiceImpl implements DevInfoService { /** * 更新设备搜索量 + * * @param maId */ private void updateHotSearch(Long maId) { @@ -195,7 +209,7 @@ public class DevInfoServiceImpl implements DevInfoService { } extractedFile(hotList); for (DevInfoVo devInfoVo : hotList) { - if (devInfoVo.getDeviceCount() <= 0){ + if (devInfoVo.getDeviceCount() <= 0) { // 下架 devInfoVo.setMaStatus(1); devInfoMapper.upMaStatus(devInfoVo); @@ -222,6 +236,7 @@ public class DevInfoServiceImpl implements DevInfoService { /** * 提取主图文件地址,方便用于列表页面回显 + * * @param hotList */ private void extractedFile(List hotList) { @@ -309,7 +324,7 @@ public class DevInfoServiceImpl implements DevInfoService { Long userId = SecurityUtils.getLoginUser().getUserid(); //保存用户信息 devInfo.setCreator(userId).setMaStatus(ON_HIRE.getCode()).setOwnId(userId); - if (org.apache.commons.lang3.StringUtils.isBlank(code)){ + if (org.apache.commons.lang3.StringUtils.isBlank(code)) { code = getString(); } devInfo.setCode(code); @@ -320,7 +335,9 @@ public class DevInfoServiceImpl implements DevInfoService { } //把文件保存到附件中 AjaxResult error = uploadFiles(devInfo, userId); - if (error != null) {return error;} + if (error != null) { + return error; + } return AjaxResult.success("保存成功"); } @@ -347,7 +364,9 @@ public class DevInfoServiceImpl implements DevInfoService { return AjaxResult.error("装备草稿保存失败,请修改后重试"); } AjaxResult error = uploadFiles(devInfo, userId); - if (error != null) {return error;} + if (error != null) { + return error; + } } catch (Exception e) { return AjaxResult.error("装备草稿保存失败,执行异常:" + e.getMessage()); } @@ -356,8 +375,9 @@ public class DevInfoServiceImpl implements DevInfoService { /** * 物资设备文件处理并上传 + * * @param devInfo 设备附件对象 - * @param userId 用户ID + * @param userId 用户ID * @return 无异常返回null ,报错返回AjaxResult */ private AjaxResult uploadFiles(DevInfo devInfo, Long userId) { @@ -539,19 +559,25 @@ public class DevInfoServiceImpl implements DevInfoService { for (Long maId : maIds) { DevInfo dto = devInfoMapper.getMaStatusByMaId(maId); Integer newStatus = devInfo.getMaStatus(); - if (dto.getDeviceCount() == 0 && newStatus.equals(LISTING.getCode())){ + if (dto.getDeviceCount() == 0 && newStatus.equals(LISTING.getCode())) { return AjaxResult.warn("设备ID:" + maId + "库存为0,无法上架"); } // 根据旧状态和新状态进行状态转换检查 switch (dto.getMaStatus()) { case 0: - if (newStatus.equals(TO_BE_LISTED.getCode()) || newStatus.equals(ON_HIRE.getCode())) {continue;} + if (newStatus.equals(TO_BE_LISTED.getCode()) || newStatus.equals(ON_HIRE.getCode())) { + continue; + } return AjaxResult.warn("设备ID:" + maId + "是草稿状态,只能进行保存操作:" + newStatus); case 1: - if (newStatus.equals(LISTING.getCode()) || newStatus.equals(ON_HIRE.getCode())) {continue;} + if (newStatus.equals(LISTING.getCode()) || newStatus.equals(ON_HIRE.getCode())) { + continue; + } return AjaxResult.warn("设备ID:" + maId + "已下架,只能进行上下架操作!"); case 2: - if (newStatus.equals(ON_HIRE.getCode()) || newStatus.equals(LISTING.getCode())) {continue;} + if (newStatus.equals(ON_HIRE.getCode()) || newStatus.equals(LISTING.getCode())) { + continue; + } return AjaxResult.warn("设备ID:" + maId + "设备已上架,只能进行上下架操作!!"); case 3: return AjaxResult.warn("设备ID:" + maId + "设备已出租,非法状态修改!!"); @@ -570,6 +596,71 @@ public class DevInfoServiceImpl implements DevInfoService { return AjaxResult.success("操作成功"); } + @Override + public String importMaProp(List maPropInfoList, boolean updateSupport, Long userId) { + if (StringUtils.isNull(maPropInfoList) || maPropInfoList.size() == 0) { + throw new ServiceException("导入的数据不能为空!"); + } + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + for (DevInfoImpDto devInfo : maPropInfoList) { + try { + BeanValidators.validateWithException(validator, devInfo); + devInfo.setCreator(userId); + devInfo.setOwnId(userId); + devInfo.setCode(getString()); + DevInfo devInfo1 = new DevInfo(); + BeanUtils.copyProperties(devInfo, devInfo1); + devInfo1.setCompanyId(SecurityUtils.getLoginUser().getSysUser().getCompanyId().toString()); + devInfo1.setMaStatus(0); + devInfoMapper.insertDevInfo(devInfo1); + successNum++; + successMsg.append("
" + successNum + "、资产名称 " + devInfo.getDeviceName() + " 导入成功"); + } catch (Exception e) { + failureNum++; + String msg = "
" + failureNum + "、资产名称 " + devInfo.getDeviceName() + " 导入失败:"; + failureMsg.append(msg + e.getMessage()); + log.error(msg, e); + } + } + if (failureNum > 0) { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new ServiceException(failureMsg.toString()); + } else { + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } + + @Override + public void downLoadTemplate(HttpServletResponse response) { + String templateName = "template.xlsx"; + OutputStream out = null; + InputStream input = null; + try { + input = this.getClass().getClassLoader().getResourceAsStream("template/template.xlsx"); + response.setCharacterEncoding("UTF-8"); + response.setHeader("content-Type", "application/vnd.ms-excel"); + response.setHeader("Content-Disposition", + "attachment;filename=" + new String((templateName).getBytes(), "iso-8859-1")); + response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); + out = response.getOutputStream(); + byte[] buffer = new byte[1024]; // 缓冲区 + int bytesToRead = -1; + // 通过循环将读入内容输出到浏览器中 + while ((bytesToRead = input.read(buffer)) != -1) { + out.write(buffer, 0, bytesToRead); + } + } catch (IOException e) { + log.error(e.getMessage()); + } finally { + IOUtils.closeQuietly(input); + IOUtils.closeQuietly(out); + } + } + @Override public void insertOutType(String devInfo) { ObjectMapper objectMapper = new ObjectMapper(); @@ -589,7 +680,7 @@ public class DevInfoServiceImpl implements DevInfoService { //设备型号 String modelName = (String) map.get("modelName"); //出厂日期 - String outFacTime = (String) map.get("outFacTime"); + Date outFacTime = (Date) map.get("outFacTime"); DevInfo devInfo1 = new DevInfo(); devInfo1.setCreateTime(new Date()); //获取用户信息 diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/impl/SafeBookServiceImpl.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/impl/SafeBookServiceImpl.java new file mode 100644 index 0000000..f30e305 --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/device/service/impl/SafeBookServiceImpl.java @@ -0,0 +1,61 @@ +package com.bonus.material.device.service.impl; + +import com.bonus.common.core.utils.DateUtils; +import com.bonus.common.security.utils.SecurityUtils; +import com.bonus.material.device.domain.SafeBookInfo; +import com.bonus.material.device.mapper.SafeBookMapper; +import com.bonus.material.device.service.SafeBookService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import java.text.SimpleDateFormat; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; + +/** + * @Author:liang.chao + * @Date:2024/12/4 - 16:37 + */ +@Service +public class SafeBookServiceImpl implements SafeBookService { + + @Resource + private SafeBookMapper safeBookMapper; + @Override + public List getSafeBookByMaId(SafeBookInfo safeBookInfo) { + return safeBookMapper.getSafeBookByMaId(safeBookInfo); + } + + @Override + public Integer addSafeBook(SafeBookInfo safeBookInfo) { + safeBookInfo.setCode(getString()); + safeBookInfo.setUploadPerson(SecurityUtils.getLoginUser().getUserid()); + return safeBookMapper.addSafeBook(safeBookInfo); + } + + @Override + public Integer delSafeBook(SafeBookInfo safeBookInfo) { + return safeBookMapper.delSafeBook(safeBookInfo); + } + + private String getString() { + //根据前台传过来的数据,生成需求编号 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); + Date nowDate = DateUtils.getNowDate(); + String format = dateFormat.format(nowDate); + String taskNum = safeBookMapper.selectTaskNumByMonth(nowDate); + if (StringUtils.isNotBlank(taskNum)) { + // 将字符串转换为整数 + int num = Integer.parseInt(taskNum); + // 执行加一操作 + num++; + // 将结果转换回字符串格式,并确保结果是4位数,不足4位则在前面补0 + taskNum = String.format("%04d", num); + } else { + taskNum = "0001"; + } + return format + "-" + taskNum; + } + +} diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/device/DevInfoMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/device/DevInfoMapper.xml index 37a3175..082dc59 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/device/DevInfoMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/device/DevInfoMapper.xml @@ -267,7 +267,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" device_count, code, type_id, - ma_status, + ma_status, lease_scope, location, province_id, @@ -275,7 +275,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" area_id, brand, model_name, - production_date, + production_date, working_hours, serial_number, pic_url, @@ -305,7 +305,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{deviceCount}, #{code}, #{typeId}, - #{maStatus}, + #{maStatus}, #{leaseScope}, #{location}, #{provinceId}, @@ -313,7 +313,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{areaId}, #{brand}, #{modelName}, - #{productionDate}, + #{productionDate}, #{workingHours}, #{serialNumber}, #{picUrl}, diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/device/SafeBookMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/device/SafeBookMapper.xml new file mode 100644 index 0000000..25fa05d --- /dev/null +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/device/SafeBookMapper.xml @@ -0,0 +1,32 @@ + + + + + insert into safe_book(code,ma_id,url,upload_person,create_time) + values(#{code},#{maId},#{url},#{uploadPerson},now()) + + + + delete from safe_book where id = #{id} + + + + + + \ No newline at end of file diff --git a/bonus-modules/bonus-material-mall/src/main/resources/template/template.xlsx b/bonus-modules/bonus-material-mall/src/main/resources/template/template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2eddd2cc8c56fb8444d83b5fb5917a86d1eef605 GIT binary patch literal 10822 zcmeHtWmsIx(k{W>0wFjI?oMzgxO;F7?iwJ$83+>G-95OwLvRT01b2c3!rUR*=VT{m zf9Lt`&-*;LfApHQrmDKvTdS+9s!LG@3K|jOu?5R-2t8i^)eyixOzeym9qsI$m=wWe zSl|cnKge#8JV3lpARz1@At2EIPG)Ft&**MrofbVJ4aI^LcBvH(QWY4 zCIeq7@df4Cn_94^@_6g}Q?L-BMnab&SU>6QutV~&Oy&H#I@z@sk7kF1PwZ>zy5VhF zlii@Khet@z6g@ZpN;EE{ElJnMvVSZNfx0>72~_}?BLs)ijk~TXJ2Ype;eTqU?1apmm-Y2+NfHlz7Li6 zS_J7jW$FPoMEEx^?a5I*kPXG;L-BDMU= zS_sVBX}#SZ8JKX^-CDsnkBOsw$xbo=MIoJ3WEw^^ne@(=&$uy~j|scS912!0W-3Nf zRW=sy*jdZB4)^(3RIFik=)}-MsG)TaBBCwij-tFyY}49j{!2^^ot9IIwGSWIbbP)< zYe(Q`>R*c0NJvkRm1v~ZL(nj9Df(2wPWfyQSHS2d3gW*qU884hE?SbmYY?r&N}Fq* zr923C(S^G#3|~K2xo2;0wbQs{n^}^EkOt5sj(6A;#f&ZA%^q($HHV*OF6c1t^o=f8 z;@}RH$T`{*(xJ}gpCpp-Cj`6fp$%>BexppwA}3!Tpn94SM3WaL|D1GeWKI9OTwA%~ zVLwQLfHzg4kB0lTaTjF*)W(w!VmG@A`Raa<;R1L_aTT zOs1O|tN+9gBs$1H5?QCswh&RKE6hh-*eoqIRW?peAypuHzdDkr!skA*xp{ZfGUmyo z-8MwZ1#j$G<|rhB44Ktn>sdS8Ic1EZg04ARSchAK$<2j`6yJNP=4$tqI_w}2g->Lj z;4lpz2VScUr>Zh5GERZV#$?mW!d22ucT7C*mORiAXv8P#RV6RO^>)1@sh+E$9iTm; z;OctkPS9!_<=qu2Or^WJy;deYR4i=|xfc}o!JsOL-pC2461JBd&!KIzBFvngOare< z_Ix_vV0w@Ci0nUG87MHa?$$r-%RdvK z{v>d-bF^|YH#K$s(-v8*itz@4rA)y?Ks^5s+8-<|kGhIemy1~B#9G1GC4@iD5d@*p z!?9g)J{u{w%97uKPlK>;t~Z)Im+-OJXUR_?Lkxem+wCZ%;f0 zy}Z7jU#fIYMA43jC2ep4nX^qP9o3Ij?z^uSHJrj~NKNG%s4YS>iux)vR^L{a2ELhw zlSY9IQZBeL2x~zUO(QfHb|xWbFnmp=Dvaz^>|L0bP3|TQgBC-b90X%XafPh0Z^hMP z+t1pBp`|uH>5eJR&9c@mz+8l1S8!i)<0x(ktUW8(+~_;0@j7!~)9+-ZsF_P5c`ClE zi~q6_9;cP-y|vI+ra@ZZo6;>hl6dqbsLfA&&Gz`gh1?g@E`-y{a9SSc*)f^!&y=gn zYcP6)p8ILYxIvz%HN4tJt}>4#qG^&jbMbOXF!;dRBk|H|S&K}R=$NJ;DT_N6@nsz} zQGk0*M?Fa>eLa-s%V=EJT&p3E&=(GnreCYsjAji0);7+w;jLwKDc6W!oF!;&Kl_0O z9GxW3AYW9WWw+&6zhhqe^qfoycU1ZtA-^)J_GouGGPN>abv|2XC+dB+-+Xp|A&G(j zz|J@pdP?cFL2ToFnhsEbT#pdow9h=N$Bzql(ZI%794Wug{9@mMIX$(1E1L)UxU}0# zITEK6upjn*U+8$+P@sgW`U0Y!u}6TvsC$Vk1Df#2#8rvVHO(av|DYNa#bYifPqCe{Mc&!;JeS9T1mO4)l)7b&e) zikqFmf4>(nI>I1J*grGjd4sXtcOu$a&$)p^<#<5)R03mcosm8pSJqo}k%;z9<=wX6 zl8=CeDF3{9l6Qoc-9>MlXoxp?YNvGub!SebX+8A zH68OQvY1vjk(E?(!xjAw$w%2=##OevJ-&|KxHw#xvwK1iV=Y8iRHd?gX3=+6};k zRwX5f%dqn0R>Cm1%8OFxZkG9@jT(w}DI8S184!+vW*@E9(J+gjvtoloFT&xo_*h8K z(GvH$dcx~(Va5Eg)-)v(K&^$_SgXp1*YYYEz7N&(WZw<#aWD=y>^<|a`STobgoT(= z9SEu?0!!=0Xyu>PG+_#*kfJA-kq?#tmOILD)FuiWdiVB|g6p<2H29vW+!gq-r1n@h zo$zlMT6)iJof9i0vSdk3B|-*i)6iW^jgFy z2ouyESLxNyqT;ubJmJ{6wsWE06+DQ6B;`X9hd*zsXq~CSMy7qQo#BEV6rfz>iDm4s$%-w{yc?6|af}C7TSm#57gOE_3 z`iAmDav*?O83dDlG}t3gko_zm(^8%-ebw_Var^as6rBb!IXhRc4thLi*JLj>vOSLp zS+qRf`qA6#F5BnuA(I%{^u6Ks5#sJHpzqh^nf$n$&~PLfq5RYE#x&KfX@o2RhUAP@ z$OWf1pWOY(Th0eZfjMmBDdTC5STnAeVw230N|2T(>0i6P2ack`^cG=R8c2F5SoF|! zOw{BGyl*sDB1#1;zzbgk(=N}TaAC0!5Qy;%bKk9xKEx5$Bp@j@3V)71*w<%FKnlw@ z<)_L(4wa&dv&?f<+?|D>opnfiQ}DS6`x`q1O7L2KW$#3zc12Ax_h-l?iOAzo+r}lA z)A$D&D^9oJ5&y!&HI9MZiqiFi8MEe%4UU1e5~~{-B|1xWg70`Hr?nhj1+OgBcv1EI zjie{{@OVOpYUMd3a6Yi)1narCs_YZhINe~vSW_3~MX z5!7!EUt>cm4VwxrVS*{c0k_aS@XafUU0iZG`1FTOP;Rb3=x8`;VH}T5 zhP-nWsCKAF=eZnN7AcBZ7^U|wm-3?3W^w(*mqi_C?x#Wzbr~+la^>z8iB47CZ!(Z% zV2ry&Cj1n`PV$?{8oC9Ivn1xg@X~9N+=Y;lv$V{?!m$HR0hcI6bl{t?6XX4WGrVM} z*c;U=C6OZ^Vp80@u)~qt@jjP;09gfQQ{mSEfv1B@TWb|@Uk}Cw?kxoKFM7lsrSb*R zB!DdV^JY`(VbPz0kD}P?Dv5zKidZmIvftMFKb4_hqIwAJ^*OJS&PiQgy|l;YDX^K0 zCfOej^K|q;VGC|=DbS}PUtVY#K|WbMxv%TlzZ%&pZ!YoG-@iW(jEBn(cv4o z1L(S-z5tWakI^Jf9ckY2DcPud)}Gdvrs`a3e8OK3Y;oCECzM4r3h2Sa>F?|i`rxfesdoX~rZ9VLtl8~zDAMy&(29M`JPsu6> z1%I~xNMs1V;X3-|glU}F6b4LmzqLt_%$wyQtMWu`-tA8xcj@Vh81@pehu4i*mb+Ys zi^YM4m-S_=sn81@?qM&vu7x@5H=*dyWQYMXWi0{?RxK07ag45zuCW@Bb*Z0N&8dQ1jV7#xiYgSuI-Q)>YLR}H}FQr3fy6qW8mT4j<_af)zJ?suV__fbkp z&L1<$=S$oBmSB02GKh{8_p%&TLbCwJ~_ugr(*VzJDYa>d{}eGsu^0qmC1iKyxt zT`Cts>yS~@Rn(n4bA1E>VS@vQ6_1u_y``RECWxG zbEqSY>8+9EOZEwBqNIE+5#&+^`o{qPygr8fUSH=8w z1W)+k%hIWVa1(XL#p~O%&w7!KRBn#+S|@SUWGIPQm8Q5i5z!*?OA&~fS>lD_NnJ)( zJn+FYD|O;b`YKOZEq3zA;v6$rQ|@qp6KSdj)OG+psV=LMemr}2)_A>ekz%Zs znIUVzDDJbI<&W_+M7D7b?#2TjjqTQx;(2t@{p&rk95A;Y?HE~=XI8jNZI zS${YAVX~Jh`kbv>>dZF=J5g1qsG)Cx1(awXU$k8r2H6}VZQd<)X!5__&=fe2$iaoS z=Xe(K@=FY11k%&`E7Sm=3Nr!%mxQMHb;zSuQUBE}{O>sC=FOY1?V^!*E^-Lu6g84W z*j4!$EG~q0mKcZT$F&ypJk&&Mt5Jd>sT0%qVa6|r!j_BJfY~Ky9r}G_patEP^81@H zk6wx4MBT&2t&r$fW@d>4(KU2!?hMBP>;tl;qw9nQCilvS`1cPty=K)nb-LdC`oa&~ijcg) z!JaF8+@QPDKYTpCXWbstV9!uh4FUq?uchnkVQu%as)U5uY306+ znNT)o+~9Cse{&eCt$3Y!#Mh!lvpMSl8f{eYJoq-z5p}G><7_pfz7O5Y2Je#P8X# z8r}YGn3}`HVk@OPeXl{Zgo0R`?DpH$Yh;8GCbB=vE zm?iL!vp52Hy=U#UQ6?dmFox@rAteY3i>XrB62 zDKF=lyvoW7UIbiU2eFi{8{b#$DkA-8Ki-P#wQPWl?*w5zoaIt{8-?!ORjpOr;-uBq zjRb|))ku9`Ip`J5O_qY!P91pynNng!@)kb&_mg3X&L_`enga9kZDDa7X|gEd;PY%% zF|R6-2(AxiU*i{1-4?{=t-Nn2I1X|(Tgk|h*ES!ZDnPLQ$Ow5I@DlF=g(9iOk9DFCMTJ8b_~y#yxHo2?TCK=Md;-z zh{%IBT0P6FklpTG1qJ@Ppd&X;)z|aG00BnyVX4Hps4q} z9A0hJ+wj&t9k8Zx&gw&{sgTC2d1Y+KMyr6b#qMKk#Wxm|NAeP zNmB`_9y6vX{ZcvQn^o?eqg%P8uY)*@J15ODmD$*H^vFhaRS`{+o>6jR6f&Su4J0Uu zwRl#kj)2Id#|yqiXUR5~>SoTGU^c(wh4 zxu-Xu&q$qDgP0pgTZTKGoYGgWKN*YXg{ukpMIFrXXZOAhu3NtP_?l3QS<`2fLULI~ zuYAJR2)8IjqgGaGgaRpapEXW`%e z_DGiMQ+&qAN9n51b-082GKo?5wE-UDx)7R*udIID;0}U94f8k6o)?`o>Y=F<=h=(P zDH+BR=q#={mbRhg7>}(8lC-yZO7;zvpEN^p?aptv@v;+g(Mw=WFl7ap%4lX;4?a98 zWqw)05#sBX#P?i!;F519usHg_L6LisYxcs|A)#i3;Lf%Ionw~q{?N~+tF%3uzXFer zzM+sau$tT^?mmiWU`aBMW_vE4GBLP|U3{g%_lYY0P47Iep|`>1;Teg1n>ztcF8$!< ztzvsFutEO7q_A}MQd+m7xVB@*W90qenzZCDLmg)PivS=%A09(^6de#MJ~yE5aJ~Sf zKA#7|JA$uzGkxj2L20BcMBS2rAir$`M!AL2Msi4*oyo0Q7x^~em*=qb(Ni3Z=F&_t z30<=5=iY52OPkfx@F||V{LT#hjZ(?C#9ucV1LQgP2`(o_ap$JQT-82|aBrbgg1Wmi zo6%FP?UEu|1qn1o=SmDc+LkGJ`J3!5VHVjUz9H1{EF-Z+R+tbG@$|zE6ioWFDf*_> zTHpZFR)Jp)5>~$ItnPnvj#P*FqeMeEG616T4~J`caOJV3>z$?Z_OFf=-D zD}hVP|K^v8SG!?Ug6?F|U(PKObjBs@Jj6WVDqMr7VW&olq1WL<^?BebNErV3Z%4X=jVA zG2SV1iO31p?;EViRv{8SqUh0R5a3a(Ndsh5K|DA2md=7rSFtQh7qQ{m?c{^GZ4po~ z%-#j!@dybZ9b3PsOAr+4hJmiNfoSrh4M~0h*=1x|gjpXH z&g^R_Tr0)^OEaw@BvZHqGlMCSia*g2j;mJKI*GMoKj?yqm`Bk^F)M_lE>qsi7#p7{ zs}q8__|?9F-g+?ypo1BX^eW_IyuFSh0|w*FMjgNAFu3E|=(X|u7!U63d)_Zz88Cpm zH6Tv?QRk~?^+&=Ovuh1EYPwME&s1fw9LgGO&^}jzyS^_Ai|MR-iD>bA6NuhN%1B=) zl|YkpmnKz!r6)ewgTkog5|Cn>VhwT>p%1%-`H#Flq4ED$%Of9Krw zcYVIK$~&! z8TwwQi$G*_pMhPOYN@J=cY^7B-Y)BvOkW^W6hIsbqx7 zqu@AViAjhJV04>sY%cP&D0}X~Nbba}k}^A}(d}&Q_UmjUfIFA$leu4{ub6fw!0p}D z-tBw>4%(RB+tU?~=yYc#T>fSDj9BjPv-(W(tC7&rD*!T|5Iy0R(Tsc3^OWm?cEPl_ zH}$}XudC>~r?&wC`BRbdOac$0V!~8W7$M`|cOnI!e95PZ^ssQYOqfs)yn*kLa`4Dy zD+_~i2V8X0xrgrg=YW} zIT}iZ4Dvnv;NDIp77+$>H2}bUcQITY%z_Y!kjReyK~|7E>0xhT>*0j*`dD7@8zBFS z14hgDbaq-Fuh96>uOHoux>D00E}Y+-uSyamQFozY7+Ie0YTfhcbEuM%Q)Z;~j$N25 z2AVf;-Oj%+P%y$ILMlc_ieVBE1oi87+-wbYzmF8;1AQq#t~;H7GD>NPSrTU_Nnt^W zPejKYiy@|zF&5O17RCW>ZFw<&n&{W*;}hPI%EhEcq?!B?(&P<=nW%&_vT>(GO!UpC zuZYIoo2UXpq|8)PbYUn2q&JpET=|ulI7IeP{X)Po*$QS(J~IwdGq%>QxzmA}fPs-m z7BUSSfQC<8LzN|;*}A8<->%7fpWc&oJo2i^FH|Yg)W9JSne=J zm^Cl9ssrJzo6xJ1^bD=tKkbWrGJ9lb`)KZB8wBFQvphZx z>bF({&i|N+V~NPtPY&(80aH=e-G#d?q-1Af@1=S;uglUlZr6M5vyu2u5$!Uom%h8f z3au8a4&FoA6xEwA2AaKuHHLZ4SD$wdyPeX7^EXp~oa=S%jt}uHi|O$&6Tf z7O2kf9;FfHXerU9xskALIpw5CguZQ5c%z>D#q4xmX>P1yH-!vN;C?T#FKB4hWcC#+ z55hDR?km_@e^3#|7o~gd=_3%-V?6ZFnNV1;`>XG0YW?RKrYDzc3kdw*Dmc1D`Zo>Z zBV}3im~;;_dfy4Slw!M0&J7!5-kAw-C}-mBlPC)sr+gZ%b=1}>tVBQE1Q(ffyPdM? zWzvklOrpni%@@1CNFJr@ zr993W%u5qvF|ntrD3rm=Azr{OXiVnM*=nn3J9PfCFM~)?j<0ux7U%bM*a%*Q- zd@#DkpOhmy#zwcL8kOc^{Q*17-z#UX9sN=q7M6R=(M4eR#7#Q5w9JeFMO-H^Q6+Tg zi%z=(eNw-UJaH&R=E$wk)YMK_XVipt&9Ed-07dozh@7>*XDi-AfJ0x>@tmQ=?SIDd zudMPv!71(zbh!h=I1N5l!UJEy$%3C`kB7+r3PgXP+Zxkp+0Bd`bmHIUKjG~VZEG6K z(;6mRp?w8GskAZPgBoAQVJ8?PoFX#Fn1$2Lv5PQUnNd%@XdcLc?I%4#6zDLM z<8tKv>7K_rg0MMx<||?u(=T({!Kui3{c5OlH6D7>B;k$u@XCeS>X|$dTj3O_Ftw*9JkSx5d@@U%B|JSmyAa6{+A5JZ3SSsvBYPQ5fP z0qXL-pXon(cei%tK>QYLNuEGr{m6Iyth@SCOJGGoJb@qq_qSyKsI#8}{%2$KDBx!a zmkQ}G)AakGe;TJpj-P|N{hQ~w{Fzw&B_|2=O87Is^Gky2v!4?F zo$dMGzq=Ij57vL38UFr-{CR5lYef6Mv;8_l{Bz2G<|uy&5Ctcf!Akl&Z2xW2kHtwp z+oOhqe`@%*Ql;N#{%5h$BkxbGRsRR?uhOMIr~hZ!#4jm!;3BBMrvF#5)Q`)LB8vaL h6dka^_y;LJPUjV6U>>~~@FwvTA_hF?G>XT&{{!sN#u@+s literal 0 HcmV?d00001