main-business/src/main/java/com/ruoyi/business/controller/QrCodeController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,55 @@ package com.ruoyi.business.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.business.dto.ProductionDto; import com.ruoyi.business.dto.QrCodeDto; import com.ruoyi.business.entity.Production; import com.ruoyi.business.entity.QrCode; import com.ruoyi.business.service.QrCodeService; import com.ruoyi.common.core.domain.R; import org.springframework.web.bind.annotation.*; import lombok.AllArgsConstructor; /** * <p> * äºç»´ç 管ç表 å端æ§å¶å¨ * </p> * * @author ld * @since 2025-06-24 */ @RestController @AllArgsConstructor @RequestMapping("/qrCode") public class QrCodeController { private QrCodeService qrCodeService; /** * äºç»´ç 管ç表æ¥è¯¢ */ @GetMapping("/list") public R<IPage<QrCode>> list(Page page, QrCodeDto qrCodeDto) { IPage<QrCode> list = qrCodeService.selectQrCodeList(page, qrCodeDto); return R.ok(list); } /** * äºç»´ç 管ç表æ°å¢ä¿®æ¹ */ @PostMapping("/addOrEditQrCode") public R<Long> addOrEditQrCode(@RequestBody QrCodeDto qrCodeDto) { return R.ok(qrCodeService.addOrEditQrCode(qrCodeDto)); } /** * äºç»´ç 管ç表å é¤ */ @DeleteMapping("/delQrCode") public R remove(@RequestBody Long[] ids) { return R.ok(qrCodeService.delByIds(ids)); } } main-business/src/main/java/com/ruoyi/business/controller/QrCodeScanRecordController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,56 @@ package com.ruoyi.business.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.business.dto.QrCodeDto; import com.ruoyi.business.dto.QrCodeScanRecordDto; import com.ruoyi.business.entity.QrCode; import com.ruoyi.business.entity.QrCodeScanRecord; import com.ruoyi.business.service.QrCodeScanRecordService; import com.ruoyi.business.service.QrCodeService; import com.ruoyi.common.core.domain.R; import org.springframework.web.bind.annotation.*; import lombok.AllArgsConstructor; /** * <p> * äºç»´ç æ«ç è®°å½è¡¨ å端æ§å¶å¨ * </p> * * @author ld * @since 2025-06-24 */ @RestController @AllArgsConstructor @RequestMapping("/qrCodeScanRecord") public class QrCodeScanRecordController { private final QrCodeScanRecordService qrCodeScanRecordService; /** * äºç»´ç æ«ç è®°å½è¡¨æ¥è¯¢ */ @GetMapping("/list") public R<IPage<QrCodeScanRecordDto>> list(Page<QrCodeScanRecord> page, QrCodeScanRecordDto qrCodeScanRecordDto) { IPage<QrCodeScanRecordDto> list = qrCodeScanRecordService.selectQrCodeScanRecordList(page, qrCodeScanRecordDto); return R.ok(list); } /** * äºç»´ç æ«ç è®°å½è¡¨æ°å¢ä¿®æ¹ */ @PostMapping("/addOrEditQrCodeRecord") public R addOrEditQrCodeRecord(@RequestBody QrCodeScanRecordDto qrCodeScanRecordDto) { return R.ok(qrCodeScanRecordService.addOrEditQrCodeRecord(qrCodeScanRecordDto)); } /** * äºç»´ç æ«ç è®°å½è¡¨å é¤ */ @DeleteMapping("/delSalesRecord") public R remove(@RequestBody Long[] ids) { return R.ok(qrCodeScanRecordService.delByIds(ids)); } } main-business/src/main/java/com/ruoyi/business/dto/QrCodeDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,8 @@ package com.ruoyi.business.dto; import com.ruoyi.business.entity.QrCode; import lombok.Data; @Data public class QrCodeDto extends QrCode { } main-business/src/main/java/com/ruoyi/business/dto/QrCodeScanRecordDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.ruoyi.business.dto; import com.ruoyi.basic.entity.dto.StorageBlobDTO; import com.ruoyi.business.entity.QrCode; import com.ruoyi.business.entity.QrCodeScanRecord; import lombok.Data; import java.util.List; @Data public class QrCodeScanRecordDto extends QrCodeScanRecord { private QrCode qrCode; private String scanner; private List<StorageBlobDTO> storageBlobDTO; } main-business/src/main/java/com/ruoyi/business/entity/OfficialInventory.java
@@ -40,8 +40,8 @@ /** * ç ¤ç§ */ @TableField(value = "coal") private String coal; @TableField(value = "coal_id") private Long coalId; /** * åä½ */ main-business/src/main/java/com/ruoyi/business/entity/PendingInventory.java
@@ -38,6 +38,11 @@ @TableField(value = "supplier_name") private String supplierName; /** * ä¾è´§ååç§° */ @TableField(value = "supplier_id") private Long supplierId; /** * ç ¤ç§ */ @TableField(value = "coal_id") main-business/src/main/java/com/ruoyi/business/entity/PurchaseRegistration.java
@@ -47,11 +47,7 @@ */ @TableField(value = "coal_id") private Long coalId; /** * ç ¤ç§ç±»å */ @TableField(value = "coal") private String coal; /** * éè´æ°é */ main-business/src/main/java/com/ruoyi/business/entity/QrCode.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,34 @@ package com.ruoyi.business.entity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import com.ruoyi.common.core.domain.MyBaseEntity; /** * äºç»´ç 管ç表 å®ä½ç±» * * @author ld * @date 2025-06-24 */ @Data @TableName("qr_code") public class QrCode extends MyBaseEntity { private static final long serialVersionUID = 1L; /** * äºç»´ç å¯ä¸æ è¯ */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 设å¤åç§° */ @TableField(value = "device_name") private String deviceName; /** * æå¨ä½ç½®æè¿° */ @TableField(value = "location") private String location; } main-business/src/main/java/com/ruoyi/business/entity/QrCodeScanRecord.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,43 @@ package com.ruoyi.business.entity; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import com.ruoyi.common.core.domain.MyBaseEntity; import java.time.LocalDateTime; /** * äºç»´ç æ«ç è®°å½è¡¨ å®ä½ç±» * * @author ld * @date 2025-06-24 */ @Data @TableName("qr_code_scan_record") public class QrCodeScanRecord extends MyBaseEntity { private static final long serialVersionUID = 1L; /** * æ«ç è®°å½å¯ä¸æ è¯ */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * å ³èçäºç»´ç ID */ @TableField(value = "qr_code_id") private Long qrCodeId; /** * æ«ç äººç¨æ·ID */ @TableField(value = "scanner_id") private Long scannerId; /** * å®é æ«ç æ¶é´ */ @TableField(value = "scan_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime scanTime; } main-business/src/main/java/com/ruoyi/business/mapper/QrCodeMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.business.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.business.entity.QrCode; import org.apache.ibatis.annotations.Mapper; /** * <p> * äºç»´ç 管ç表 Mapper æ¥å£ * </p> * * @author ld * @since 2025-06-24 */ @Mapper public interface QrCodeMapper extends BaseMapper<QrCode> { } main-business/src/main/java/com/ruoyi/business/mapper/QrCodeScanRecordMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.business.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.business.entity.QrCodeScanRecord; import org.apache.ibatis.annotations.Mapper; /** * <p> * äºç»´ç æ«ç è®°å½è¡¨ Mapper æ¥å£ * </p> * * @author ld * @since 2025-06-24 */ @Mapper public interface QrCodeScanRecordMapper extends BaseMapper<QrCodeScanRecord> { } main-business/src/main/java/com/ruoyi/business/service/QrCodeScanRecordService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.ruoyi.business.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.business.dto.QrCodeScanRecordDto; import com.ruoyi.business.entity.QrCodeScanRecord; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * äºç»´ç æ«ç è®°å½è¡¨ æå¡ç±» * </p> * * @author ld * @since 2025-06-24 */ public interface QrCodeScanRecordService extends IService<QrCodeScanRecord> { IPage<QrCodeScanRecordDto> selectQrCodeScanRecordList(Page<QrCodeScanRecord> page, QrCodeScanRecordDto qrCodeScanRecordDto); int addOrEditQrCodeRecord(QrCodeScanRecordDto qrCodeScanRecordDto); int delByIds(Long[] ids); } main-business/src/main/java/com/ruoyi/business/service/QrCodeService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.ruoyi.business.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.business.dto.QrCodeDto; import com.ruoyi.business.entity.QrCode; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * äºç»´ç 管ç表 æå¡ç±» * </p> * * @author ld * @since 2025-06-24 */ public interface QrCodeService extends IService<QrCode> { IPage<QrCode> selectQrCodeList(Page page, QrCodeDto qrCodeDto); Long addOrEditQrCode(QrCodeDto qrCodeDto); int delByIds(Long[] ids); } main-business/src/main/java/com/ruoyi/business/service/impl/ArchiveServiceImpl.java
@@ -48,6 +48,7 @@ private final StorageBlobMapper storageBlobMapper; private final StorageAttachmentMapper storageAttachmentMapper; private final MinioUtils minioUtils; main-business/src/main/java/com/ruoyi/business/service/impl/PurchaseRegistrationServiceImpl.java
@@ -52,7 +52,7 @@ LambdaQueryWrapper<PurchaseRegistration> queryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.isNotBlank(purchaseRegistrationDto.getSearchAll())){ queryWrapper.and(wrapper -> wrapper .like(PurchaseRegistration::getCoal, purchaseRegistrationDto.getSearchAll()) .like(PurchaseRegistration::getCoalId, purchaseRegistrationDto.getSearchAll()) .or() .like(PurchaseRegistration::getSupplierName, purchaseRegistrationDto.getSearchAll()) ); @@ -74,7 +74,7 @@ if (coalInfo == null) { throw new BaseException("ç ¤ç§ä¿¡æ¯ä¸åå¨"); } purchaseRegistration.setCoal(coalInfo.getCoal()); // purchaseRegistration.setCoal(coalInfo.getCoal()); Supply supply = supplyMapper.selectById(purchaseRegistrationDto.getSupplierId()); if (supply == null) { throw new BaseException("ä¾åºåä¿¡æ¯ä¸åå¨"); @@ -109,6 +109,7 @@ BeanUtils.copyProperties(purchaseRegistration, pendingInventory); // è®¾ç½®å¾ å ¥åºè®°å½ç¹æç屿§ï¼å¦ææï¼ pendingInventory.setCoalId(purchaseRegistration.getCoalId()); pendingInventory.setInventoryQuantity(purchaseRegistration.getPurchaseQuantity()); return pendingInventory; } main-business/src/main/java/com/ruoyi/business/service/impl/QrCodeScanRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,189 @@ package com.ruoyi.business.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.basic.entity.StorageAttachment; import com.ruoyi.basic.entity.StorageBlob; import com.ruoyi.basic.entity.dto.StorageBlobDTO; import com.ruoyi.basic.mapper.StorageAttachmentMapper; import com.ruoyi.basic.mapper.StorageBlobMapper; import com.ruoyi.basic.service.StorageAttachmentService; import com.ruoyi.business.dto.QrCodeDto; import com.ruoyi.business.dto.QrCodeScanRecordDto; import com.ruoyi.business.entity.Archive; import com.ruoyi.business.entity.QrCode; import com.ruoyi.business.entity.QrCodeScanRecord; import com.ruoyi.business.mapper.QrCodeMapper; import com.ruoyi.business.mapper.QrCodeScanRecordMapper; import com.ruoyi.business.service.QrCodeScanRecordService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.file.MinioUtils; import com.ruoyi.system.mapper.SysUserMapper; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; import static com.ruoyi.common.constant.StorageAttachmentConstants.StorageAttachmentFile; import static com.ruoyi.common.enums.StorageAttachmentRecordType.Archives; import static com.ruoyi.common.enums.StorageAttachmentRecordType.QrCodeScanRecords; /** * <p> * äºç»´ç æ«ç è®°å½è¡¨ æå¡å®ç°ç±» * </p> * * @author ld * @since 2025-06-24 */ @Service @RequiredArgsConstructor public class QrCodeScanRecordServiceImpl extends ServiceImpl<QrCodeScanRecordMapper, QrCodeScanRecord> implements QrCodeScanRecordService { private final QrCodeScanRecordMapper qrCodeScanRecordMapper; private final QrCodeMapper qrCodeMapper; private final StorageAttachmentService storageAttachmentService; private final StorageBlobMapper storageBlobMapper; private final StorageAttachmentMapper storageAttachmentMapper; private final MinioUtils minioUtils; private final SysUserMapper sysUserMapper; @Override public IPage<QrCodeScanRecordDto> selectQrCodeScanRecordList(Page<QrCodeScanRecord> page, QrCodeScanRecordDto qrCodeScanRecordDto) { // 1. æå»ºåºç¡æ¥è¯¢æ¡ä»¶ LambdaQueryWrapper<QrCodeScanRecord> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.orderByDesc(QrCodeScanRecord::getCreateTime); // 2. æ§è¡å页æ¥è¯¢ IPage<QrCodeScanRecord> scanRecordIPage = qrCodeScanRecordMapper.selectPage(page, queryWrapper); // 3. æ æ°æ®æåè¿å if (CollectionUtils.isEmpty(scanRecordIPage.getRecords())) { return new Page<>(scanRecordIPage.getCurrent(), scanRecordIPage.getSize(), scanRecordIPage.getTotal()); } // 4. æ¹éè·åææè®°å½IDåäºç»´ç ID List<Long> recordIds = scanRecordIPage.getRecords().stream() .map(QrCodeScanRecord::getId) .collect(Collectors.toList()); Set<Long> qrCodeIds = scanRecordIPage.getRecords().stream() .map(QrCodeScanRecord::getQrCodeId) .filter(Objects::nonNull) .collect(Collectors.toSet()); // 5. æ¹éæ¥è¯¢å ³èæ°æ®ï¼ä½¿ç¨ææ°APIï¼ // 5.1 æ¥è¯¢äºç»´ç ä¿¡æ¯ï¼æ¿æ¢selectBatchIds为selectByIdsï¼ Map<Long, QrCode> qrCodeMap = qrCodeIds.isEmpty() ? Collections.emptyMap() : qrCodeMapper.selectByIds(qrCodeIds).stream() .collect(Collectors.toMap(QrCode::getId, Function.identity())); // 5.2 æ¥è¯¢éä»¶å ³èå ³ç³» Map<Long, List<StorageAttachment>> attachmentsMap = storageAttachmentMapper .selectList(new LambdaQueryWrapper<StorageAttachment>() .in(StorageAttachment::getRecordId, recordIds) .eq(StorageAttachment::getRecordType, QrCodeScanRecords.ordinal())) .stream() .collect(Collectors.groupingBy(StorageAttachment::getRecordId)); // 5.3 æ¥è¯¢æä»¶æ°æ®ï¼ä½¿ç¨selectByIdsï¼ Set<Long> blobIds = attachmentsMap.values().stream() .flatMap(List::stream) .map(StorageAttachment::getStorageBlobId) .collect(Collectors.toSet()); Map<Long, StorageBlob> blobMap = blobIds.isEmpty() ? Collections.emptyMap() : storageBlobMapper.selectByIds(blobIds).stream() .collect(Collectors.toMap(StorageBlob::getId, Function.identity())); // 6. ç»è£ DTOæ°æ® List<QrCodeScanRecordDto> dtoList = scanRecordIPage.getRecords().stream().map(record -> { QrCodeScanRecordDto dto = new QrCodeScanRecordDto(); BeanUtils.copyProperties(record, dto); SysUser sysUser = sysUserMapper.selectUserById(record.getScannerId()); dto.setScanner(sysUser.getNickName()); // 6.1 设置äºç»´ç ä¿¡æ¯ Optional.ofNullable(qrCodeMap.get(record.getQrCodeId())) .ifPresent(qrCode -> { BeanUtils.copyProperties(qrCode, dto); // å¤å¶å°ç¶ç±» dto.setQrCode(qrCode); // è®¾ç½®å®æ´å¯¹è±¡ }); // 6.2 设置éä»¶ä¿¡æ¯ dto.setStorageBlobDTO( Optional.ofNullable(attachmentsMap.get(record.getId())) .orElse(Collections.emptyList()) .stream() .map(att -> { StorageBlobDTO blobDTO = new StorageBlobDTO(); Optional.ofNullable(blobMap.get(att.getStorageBlobId())) .ifPresent(blob -> { BeanUtils.copyProperties(blob, blobDTO); blobDTO.setUrl(minioUtils.getPreviewUrls(blob.getBucketFilename(), blob.getBucketName(), true)); blobDTO.setDownloadUrl(minioUtils.getDownloadUrls(blob.getBucketFilename(),blob.getBucketName(),blob.getOriginalFilename(),true)); }); return blobDTO; }) .filter(blobDTO -> blobDTO.getId() != null) // è¿æ»¤æ æéä»¶ .collect(Collectors.toList()) ); return dto; }).collect(Collectors.toList()); // 7. æå»ºè¿åå页对象 IPage<QrCodeScanRecordDto> resultPage = new Page<>(); BeanUtils.copyProperties(scanRecordIPage, resultPage); resultPage.setRecords(dtoList); return resultPage; } @Override public int addOrEditQrCodeRecord(QrCodeScanRecordDto qrCodeScanRecordDto) { QrCodeScanRecord qrCodeScanRecord = new QrCodeScanRecord(); BeanUtils.copyProperties(qrCodeScanRecordDto, qrCodeScanRecord); int i; if (Objects.isNull(qrCodeScanRecordDto.getId())) { i = qrCodeScanRecordMapper.insert(qrCodeScanRecord); } else { i = qrCodeScanRecordMapper.updateById(qrCodeScanRecord); } if (qrCodeScanRecordDto.getStorageBlobDTO() != null && !qrCodeScanRecordDto.getStorageBlobDTO().isEmpty()) { List<StorageAttachment> attachments = new ArrayList<>(); for (StorageBlobDTO storageBlobDTO : qrCodeScanRecordDto.getStorageBlobDTO()) { StorageAttachment storageAttachment = new StorageAttachment( StorageAttachmentFile, (long) QrCodeScanRecords.ordinal(), qrCodeScanRecord.getId() ); storageAttachment.setStorageBlobDTO(storageBlobDTO); attachments.add(storageAttachment); } storageAttachmentService.saveStorageAttachment(attachments, qrCodeScanRecord.getId(), QrCodeScanRecords, StorageAttachmentFile); } return i; } @Override public int delByIds(Long[] ids) { return qrCodeScanRecordMapper.deleteByIds(Arrays.asList(ids)); } } main-business/src/main/java/com/ruoyi/business/service/impl/QrCodeServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,56 @@ package com.ruoyi.business.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.business.dto.QrCodeDto; import com.ruoyi.business.entity.Production; import com.ruoyi.business.entity.QrCode; import com.ruoyi.business.mapper.QrCodeMapper; import com.ruoyi.business.service.QrCodeService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.utils.bean.BeanUtils; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; import java.util.Arrays; import java.util.Objects; /** * <p> * äºç»´ç 管ç表 æå¡å®ç°ç±» * </p> * * @author ld * @since 2025-06-24 */ @Service @RequiredArgsConstructor public class QrCodeServiceImpl extends ServiceImpl<QrCodeMapper, QrCode> implements QrCodeService { private final QrCodeMapper qrCodeMapper; @Override public IPage<QrCode> selectQrCodeList(Page page, QrCodeDto qrCodeDto) { LambdaQueryWrapper<QrCode> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.orderByDesc(QrCode::getCreateTime); return qrCodeMapper.selectPage(page, queryWrapper); } @Override public Long addOrEditQrCode(QrCodeDto qrCodeDto) { QrCode qrCode = new QrCode(); BeanUtils.copyProperties(qrCodeDto, qrCode); if (Objects.isNull(qrCodeDto.getId())) { qrCodeMapper.insert(qrCode); } else { qrCodeMapper.updateById(qrCode); } return qrCode.getId(); } @Override public int delByIds(Long[] ids) { return qrCodeMapper.deleteByIds(Arrays.asList(ids)); } } main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java
@@ -69,7 +69,7 @@ officialInventoryMapper.updateById(officialInventory); // æå»ºéå®è®°å½å®ä½ SalesRecord salesRecord = buildSalesRecord(salesRecordDto,officialInventory.getCoal()); SalesRecord salesRecord = buildSalesRecord(salesRecordDto,officialInventory.getCoalId()); // å¤çæ°å¢/æ´æ°é»è¾ if (salesRecordDto.getId() == null) { @@ -94,7 +94,7 @@ } } private SalesRecord buildSalesRecord(SalesRecordDto dto,String coal) { private SalesRecord buildSalesRecord(SalesRecordDto dto,Long coalId) { SalesRecord record = new SalesRecord(); BeanUtils.copyProperties(dto, record); @@ -129,7 +129,7 @@ } // ç ¤ç§ record.setCoal(coal); record.setCoalId(coalId); return record; } main-business/src/main/resources/db/migration/postgresql/V20250604104500__create_table_pending_inventory.sql
@@ -16,6 +16,7 @@ registration_date DATE, -- ç»è®°æ¥æ supplier_id BIGINT, -- ä¾è´§åID coal_id BIGINT, -- ç ¤ç§ID master_id BIGINT, -- ç产å å·¥id deleted INTEGER DEFAULT 0, -- 软å 餿 å¿ï¼0=æªå é¤ï¼1=å·²å é¤ create_by VARCHAR(255), -- å建该记å½çç¨æ· @@ -43,6 +44,7 @@ COMMENT ON COLUMN pending_inventory.registration_date IS 'ç»è®°æ¥æ'; COMMENT ON COLUMN pending_inventory.supplier_id IS 'ä¾è´§åID'; COMMENT ON COLUMN pending_inventory.coal_id IS 'ç ¤ç§ID'; COMMENT ON COLUMN pending_inventory.master_id IS 'ç产å å·¥id'; COMMENT ON COLUMN pending_inventory.deleted IS '软å 餿 å¿ï¼0=æªå é¤ï¼1=å·²å é¤'; COMMENT ON COLUMN pending_inventory.create_by IS 'å建该记å½çç¨æ·'; main-business/src/main/resources/db/migration/postgresql/V20250604111200__create_table_official_inventory.sql
@@ -3,7 +3,7 @@ ( id BIGSERIAL PRIMARY KEY, -- 主é®ID supplier_name VARCHAR(255) NOT NULL, -- ä¾è´§ååç§° coal VARCHAR(50) NOT NULL, -- ç ¤ç§ coal_id BIGINT NOT NULL, -- ç ¤ç§ unit VARCHAR(50) NOT NULL, -- åä½ inventory_quantity DECIMAL(10, 0), -- åºåæ°é price_including_tax DECIMAL(10, 2) NOT NULL, -- åä»·ï¼å«ç¨ï¼ @@ -30,7 +30,7 @@ -- æ·»å åæ®µæ³¨é COMMENT ON COLUMN official_inventory.id IS '主é®ID'; COMMENT ON COLUMN official_inventory.supplier_name IS 'ä¾è´§ååç§°'; COMMENT ON COLUMN official_inventory.coal IS 'ç ¤ç§'; COMMENT ON COLUMN official_inventory.coal_id IS 'ç ¤ç§id'; COMMENT ON COLUMN official_inventory.unit IS 'åä½'; COMMENT ON COLUMN official_inventory.inventory_quantity IS 'åºåæ°é'; COMMENT ON COLUMN official_inventory.price_including_tax IS 'åä»·ï¼å«ç¨ï¼'; main-business/src/main/resources/db/migration/postgresql/V20250624092100__create_table_qr_code.sql
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,26 @@ -- å建äºç»´ç 管ç表 CREATE TABLE qr_code ( id BIGSERIAL PRIMARY KEY, -- ID (主é®ï¼èªå¢é¿) device_name VARCHAR(255), -- 设å¤åç§° location VARCHAR(255), -- å°ç¹ deleted INT NOT NULL DEFAULT 0, -- 软å 餿 å¿ï¼0=æªå é¤ï¼1=å·²å é¤ create_by VARCHAR(255), -- åå»ºäººç¨æ·å create_time TIMESTAMP WITHOUT TIME ZONE, -- å建æ¶é´ï¼é»è®¤å½åæ¶é´ update_by VARCHAR(255), -- æåæ´æ°äººç¨æ·å update_time TIMESTAMP WITHOUT TIME ZONE -- æåæ´æ°æ¶é´ï¼é»è®¤å½åæ¶é´ ); -- æ·»å 表注é COMMENT ON TABLE qr_code IS 'äºç»´ç 管ç表'; -- æ·»å åæ®µæ³¨é COMMENT ON COLUMN qr_code.id IS 'äºç»´ç å¯ä¸æ è¯'; COMMENT ON COLUMN qr_code.device_name IS '设å¤åç§°'; COMMENT ON COLUMN qr_code.location IS 'æå¨ä½ç½®æè¿°'; COMMENT ON COLUMN qr_code.deleted IS '软å 餿 å¿ï¼0=æªå é¤ï¼1=å·²å é¤'; COMMENT ON COLUMN qr_code.create_by IS 'å建该记å½çç¨æ·'; COMMENT ON COLUMN qr_code.create_time IS 'è®°å½å建æ¶é´'; COMMENT ON COLUMN qr_code.update_by IS 'æåä¿®æ¹è¯¥è®°å½çç¨æ·'; COMMENT ON COLUMN qr_code.update_time IS 'è®°å½æåæ´æ°æ¶é´'; main-business/src/main/resources/db/migration/postgresql/V20250624092400__create_table_qr_code_scan_record.sql
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ -- å建äºç»´ç æ«ç è®°å½è¡¨ CREATE TABLE qr_code_scan_record ( id BIGSERIAL PRIMARY KEY, -- ID (主é®ï¼èªå¢é¿) qr_code_id BIGINT, -- å ³èçäºç»´ç ID scanner_id BIGINT, -- æ«ç 人ID scan_time TIMESTAMP WITHOUT TIME ZONE, -- æ«ç æ¶é´ deleted INT NOT NULL DEFAULT 0, -- 软å 餿 å¿ï¼0=æªå é¤ï¼1=å·²å é¤ create_by VARCHAR(255), -- åå»ºäººç¨æ·å create_time TIMESTAMP WITHOUT TIME ZONE, -- å建æ¶é´ï¼é»è®¤å½åæ¶é´ update_by VARCHAR(255), -- æåæ´æ°äººç¨æ·å update_time TIMESTAMP WITHOUT TIME ZONE -- æåæ´æ°æ¶é´ï¼é»è®¤å½åæ¶é´ ); -- æ·»å 表注é COMMENT ON TABLE qr_code_scan_record IS 'äºç»´ç æ«ç è®°å½è¡¨'; -- æ·»å åæ®µæ³¨é COMMENT ON COLUMN qr_code_scan_record.id IS 'æ«ç è®°å½å¯ä¸æ è¯'; COMMENT ON COLUMN qr_code_scan_record.qr_code_id IS 'å ³èçäºç»´ç ID'; COMMENT ON COLUMN qr_code_scan_record.scanner_id IS 'æ«ç äººç¨æ·ID'; COMMENT ON COLUMN qr_code_scan_record.scan_time IS 'å®é æ«ç æ¶é´'; COMMENT ON COLUMN qr_code_scan_record.deleted IS '软å 餿 å¿ï¼0=æªå é¤ï¼1=å·²å é¤'; COMMENT ON COLUMN qr_code_scan_record.create_by IS 'å建该记å½çç¨æ·'; COMMENT ON COLUMN qr_code_scan_record.create_time IS 'è®°å½å建æ¶é´'; COMMENT ON COLUMN qr_code_scan_record.update_by IS 'æåä¿®æ¹è¯¥è®°å½çç¨æ·'; COMMENT ON COLUMN qr_code_scan_record.update_time IS 'è®°å½æåæ´æ°æ¶é´'; main-business/src/main/resources/mapper/PendingInventoryMapper.xml
@@ -11,7 +11,7 @@ <result column="update_by" property="updateBy"/> <result column="update_time" property="updateTime"/> <result column="supplier_name" property="supplierName"/> <result column="coal" property="coal"/> <result column="coal_id" property="coalId"/> <result column="unit" property="unit"/> <result column="inventory_quantity" property="inventoryQuantity"/> <result column="price_including_tax" property="priceIncludingTax"/> @@ -27,7 +27,7 @@ create_time, update_by, update_time, id, supplier_name, coal, unit, inventory_quantity, price_including_tax, total_price_including_tax, registrant, registration_time id, supplier_name,coal_id, unit, inventory_quantity, price_including_tax, total_price_including_tax, registrant, registration_time </sql> <select id="getPendingInventoryForUpdateById" resultType="com.ruoyi.business.entity.PendingInventory"> main-business/src/main/resources/mapper/PurchaseRegistrationMapper.xml
@@ -14,7 +14,6 @@ <result column="supplier_name" property="supplierName" /> <result column="unit" property="unit" /> <result column="coal_id" property="coalId" /> <result column="coal" property="coal" /> <result column="purchase_quantity" property="purchaseQuantity" /> <result column="price_including_tax" property="priceIncludingTax" /> <result column="total_price_including_tax" property="totalPriceIncludingTax" /> main-business/src/main/resources/mapper/QrCodeMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.business.mapper.QrCodeMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.business.entity.QrCode"> <id column="id" property="id" /> <result column="deleted" property="deleted" /> <result column="create_by" property="createBy" /> <result column="create_time" property="createTime" /> <result column="update_by" property="updateBy" /> <result column="update_time" property="updateTime" /> <result column="device_name" property="deviceName" /> <result column="location" property="location" /> </resultMap> <!-- éç¨æ¥è¯¢ç»æå --> <sql id="Base_Column_List"> deleted, create_by, create_time, update_by, update_time, id, device_name, location </sql> </mapper> main-business/src/main/resources/mapper/QrCodeScanRecordMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.business.mapper.QrCodeScanRecordMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.business.entity.QrCodeScanRecord"> <id column="id" property="id" /> <result column="deleted" property="deleted" /> <result column="create_by" property="createBy" /> <result column="create_time" property="createTime" /> <result column="update_by" property="updateBy" /> <result column="update_time" property="updateTime" /> <result column="qr_code_id" property="qrCodeId" /> <result column="scanner_id" property="scannerId" /> <result column="scan_time" property="scanTime" /> </resultMap> <!-- éç¨æ¥è¯¢ç»æå --> <sql id="Base_Column_List"> deleted, create_by, create_time, update_by, update_time, id, qr_code_id, scanner_id, scan_time </sql> </mapper> ruoyi-common/src/main/java/com/ruoyi/common/enums/StorageAttachmentRecordType.java
@@ -1,27 +1,23 @@ package com.ruoyi.common.enums; import lombok.AllArgsConstructor; import lombok.Getter; /** * éä»¶è®°å½ç±»åæä¸¾ * */ @Getter @AllArgsConstructor public enum StorageAttachmentRecordType { // ä¾å å®é å¼å请å é¤ Template("Template","èä¾"), Archives("Archives","ææ¡£ç®¡ç"), InspectionTasks("InspectionTasks","ç产巡æ£"); InspectionTasks("InspectionTasks","ç产巡æ£"), QrCodeScanRecords("QrCodeScanRecords","äºç»´ç æ«ç è®°å½æä»¶"); private final String code; private final String info; public String getCode() { return code; } public String getInfo() { return info; } }