From 9cd4074a456fd5c422506279191b6015836347e5 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 30 十月 2026 10:08:35 +0800
Subject: [PATCH] feat: 设备台账启用状态、审批签核展示与导入健壮性
---
src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java | 137 ++++++++++++++++++++++++++++++++++++---------
1 files changed, 109 insertions(+), 28 deletions(-)
diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
index 420ed9a..bce327f 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
@@ -2,9 +2,10 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -12,32 +13,35 @@
import com.ruoyi.device.execl.DeviceLedgerExeclDto;
import com.ruoyi.device.mapper.DeviceLedgerMapper;
import com.ruoyi.device.pojo.DeviceLedger;
+import com.ruoyi.basic.dto.StorageAttachmentDTO;
+import com.ruoyi.basic.enums.RecordTypeEnum;
+import com.ruoyi.basic.service.StorageAttachmentService;
import com.ruoyi.device.service.IDeviceLedgerService;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
-import lombok.AllArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
-import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
-import java.time.ZoneOffset;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Service
-@AllArgsConstructor
+@RequiredArgsConstructor
@Slf4j
public class DeviceLedgerServiceImpl extends ServiceImpl<DeviceLedgerMapper, DeviceLedger> implements IDeviceLedgerService {
- @Autowired
- private DeviceLedgerMapper deviceLedgerMapper;
- @Autowired
- private SysUserMapper sysUserMapper;
+ private final DeviceLedgerMapper deviceLedgerMapper;
+ private final SysUserMapper sysUserMapper;
+ private final StorageAttachmentService storageAttachmentService;
@Override
public IPage<DeviceLedgerDto> queryPage(Page page, DeviceLedgerDto deviceLedger) {
@@ -46,25 +50,66 @@
}
@Override
- public AjaxResult saveDeviceLedger(DeviceLedger deviceLedger) {
+ public List<DeviceLedgerDto> selectDeviceOptions(Long areaId) {
+ return deviceLedgerMapper.selectDeviceOptions(areaId);
+ }
+
+ @Override
+ public AjaxResult saveDeviceLedger(DeviceLedgerDto deviceLedgerDto) {
LambdaQueryWrapper<DeviceLedger> deviceLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>();
- deviceLedgerLambdaQueryWrapper.eq(DeviceLedger::getDeviceModel,deviceLedger.getDeviceModel());
+ deviceLedgerLambdaQueryWrapper.eq(DeviceLedger::getDeviceName,deviceLedgerDto.getDeviceName());
if (this.count(deviceLedgerLambdaQueryWrapper) > 0) {
- return AjaxResult.error("璁惧鍨嬪彿宸插瓨鍦�");
+ return AjaxResult.error("璁惧鍚嶇О宸插瓨鍦�");
}
+ DeviceLedger deviceLedger = new DeviceLedger();
+ BeanUtils.copyProperties(deviceLedgerDto, deviceLedger);
boolean save = this.save(deviceLedger);
if (save){
+ if (deviceLedgerDto.getStorageBlobDTOs() != null) {
+ StorageAttachmentDTO attachmentDTO = new StorageAttachmentDTO();
+ attachmentDTO.setApplication("image");
+ attachmentDTO.setRecordType(RecordTypeEnum.DEVICE_LEDGER.getType());
+ attachmentDTO.setRecordId(deviceLedger.getId());
+ attachmentDTO.setStorageBlobDTOs(deviceLedgerDto.getStorageBlobDTOs());
+ storageAttachmentService.saveStorageAttachment(attachmentDTO);
+ }
return AjaxResult.success();
}
return AjaxResult.error();
}
@Override
- public AjaxResult updateDeviceLedger(DeviceLedger deviceLedger) {
+ public AjaxResult updateDeviceLedger(DeviceLedgerDto deviceLedgerDto) {
+ DeviceLedger deviceLedger = new DeviceLedger();
+ BeanUtils.copyProperties(deviceLedgerDto, deviceLedger);
if (this.updateById(deviceLedger)) {
+ if (deviceLedgerDto.getStorageBlobDTOs() != null) {
+ StorageAttachmentDTO attachmentDTO = new StorageAttachmentDTO();
+ attachmentDTO.setApplication("image");
+ attachmentDTO.setRecordType(RecordTypeEnum.DEVICE_LEDGER.getType());
+ attachmentDTO.setRecordId(deviceLedger.getId());
+ attachmentDTO.setStorageBlobDTOs(deviceLedgerDto.getStorageBlobDTOs());
+ storageAttachmentService.saveStorageAttachment(attachmentDTO);
+ }
return AjaxResult.success();
}
return AjaxResult.error();
+ }
+
+ @Override
+ public DeviceLedgerDto getDeviceLedgerDetail(Long id) {
+ DeviceLedger deviceLedger = this.getById(id);
+ if (deviceLedger != null) {
+ DeviceLedgerDto deviceLedgerDto = new DeviceLedgerDto();
+ BeanUtils.copyProperties(deviceLedger, deviceLedgerDto);
+ StorageAttachmentDTO dto = new StorageAttachmentDTO();
+ dto.setRecordType(RecordTypeEnum.DEVICE_LEDGER.getType());
+ dto.setRecordId(id);
+ dto.setApplication("image");
+ deviceLedgerDto.setStorageBlobVOs(storageAttachmentService.list(dto));
+ return deviceLedgerDto;
+ }
+ return null;
}
@Override
@@ -84,9 +129,7 @@
util.exportExcel(response, deviceLedgerExeclDtos, "璁惧鍙拌处瀵煎嚭");
}else {
ArrayList<Long> arrayList = new ArrayList<>();
- Arrays.stream(ids).map(id -> {
- return arrayList.add( id);
- });
+ Arrays.stream(ids).map(arrayList::add);
List<DeviceLedger> supplierManageList = deviceLedgerMapper.selectBatchIds(arrayList);
ArrayList<DeviceLedgerExeclDto> deviceLedgerExeclDtos = new ArrayList<>();
supplierManageList.stream().forEach(deviceLedger -> {
@@ -102,21 +145,59 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public Boolean importData(MultipartFile file) throws IOException {
ExcelUtil<DeviceLedgerExeclDto> util = new ExcelUtil<DeviceLedgerExeclDto>(DeviceLedgerExeclDto.class);
List<DeviceLedgerExeclDto> userList = util.importExcel(file.getInputStream());
- userList.forEach(c -> {
- DeviceLedger deviceLedger = new DeviceLedger();
- SysUser sysUser = sysUserMapper.selectUserByUserName(c.getCreateUser());
- if (sysUser!=null) {
- deviceLedger.setCreateUser(sysUser.getUserId().intValue());
- }else {
- deviceLedger.setCreateUser(SecurityUtils.getUserId().intValue());
+ if (userList == null || userList.isEmpty()) {
+ // 琛ㄥご涓庢ā鏉夸笉涓�鑷存椂瑙f瀽涓嶅埌浠讳綍鏁版嵁锛屾槑纭彁绀猴紝閬垮厤鍓嶇鍙湅鍒扳�滃鍏ユ垚鍔熲�濆嵈娌℃湁浠讳綍鏁版嵁
+ throw new ServiceException("鏈鍙栧埌鍙鍏ョ殑鏁版嵁锛岃纭鏂囦欢琛ㄥご涓庡鍏ユā鏉夸竴鑷村悗閲嶈瘯");
+ }
+ int importCount = 0;
+ for (int i = 0; i < userList.size(); i++) {
+ DeviceLedgerExeclDto c = userList.get(i);
+ if (c == null) {
+ continue;
}
- BeanUtils.copyProperties(c,deviceLedger);
- deviceLedgerMapper.insert(deviceLedger);
- });
-
+ DeviceLedger deviceLedger;
+ try {
+ deviceLedger = buildDeviceLedger(c);
+ } catch (Exception e) {
+ throw new ServiceException("绗�" + (i + 2) + "琛屾暟鎹湁璇細" + e.getMessage());
+ }
+ try {
+ deviceLedgerMapper.insert(deviceLedger);
+ } catch (Exception e) {
+ throw new ServiceException("绗�" + (i + 2) + "琛屼繚瀛樺け璐ワ細" + e.getMessage());
+ }
+ importCount++;
+ }
+ if (importCount == 0) {
+ throw new ServiceException("鏈鍙栧埌鍙鍏ョ殑鏁版嵁锛岃纭鏂囦欢琛ㄥご涓庡鍏ユā鏉夸竴鑷村悗閲嶈瘯");
+ }
return true;
}
+
+ /**
+ * 灏嗗鍏ヨ杞崲涓鸿澶囧彴璐﹀疄浣�
+ */
+ private DeviceLedger buildDeviceLedger(DeviceLedgerExeclDto c) {
+ DeviceLedger deviceLedger = new DeviceLedger();
+ SysUser sysUser = sysUserMapper.selectUserByUserName(c.getCreateUser());
+ if (sysUser != null) {
+ deviceLedger.setCreateUser(sysUser.getUserId().intValue());
+ } else {
+ deviceLedger.setCreateUser(SecurityUtils.getUserId().intValue());
+ }
+ BeanUtils.copyProperties(c, deviceLedger);
+ // 閫氳繃鍚◣鍗曚环銆佹暟閲忋�佺◣鐜囪绠楀惈绋庢�讳环锛屼笉鍚◣鎬讳环
+ deviceLedger.setTaxIncludingPriceTotal(c.getTaxIncludingPriceUnit());
+ deviceLedger.setNumber(BigDecimal.ONE);
+ deviceLedger.setPlanRuntimeTime(DateUtils.toLocalDate(c.getPlanRuntimeTime()));
+ // 璁$畻涓嶅惈绋庢�讳环锛屽鐞嗙┖鍊兼儏鍐�
+ if (deviceLedger.getTaxIncludingPriceTotal() != null && c.getTaxRate() != null) {
+ deviceLedger.setUnTaxIncludingPriceTotal(deviceLedger.getTaxIncludingPriceTotal().divide(BigDecimal.ONE.add(c.getTaxRate()), 2, RoundingMode.HALF_UP));
+ }
+ return deviceLedger;
+ }
}
--
Gitblit v1.9.3