¶Ô±ÈÐÂÎļþ |
| | |
| | | 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)); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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)); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.business.dto; |
| | | |
| | | import com.ruoyi.business.entity.QrCode; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class QrCodeDto extends QrCode { |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | |
| | | } |
| | |
| | | /** |
| | | * ç
¤ç§ |
| | | */ |
| | | @TableField(value = "coal") |
| | | private String coal; |
| | | @TableField(value = "coal_id") |
| | | private Long coalId; |
| | | /** |
| | | * åä½ |
| | | */ |
| | |
| | | @TableField(value = "supplier_name") |
| | | private String supplierName; |
| | | /** |
| | | * ä¾è´§ååç§° |
| | | */ |
| | | @TableField(value = "supplier_id") |
| | | private Long supplierId; |
| | | /** |
| | | * ç
¤ç§ |
| | | */ |
| | | @TableField(value = "coal_id") |
| | |
| | | */ |
| | | @TableField(value = "coal_id") |
| | | private Long coalId; |
| | | /** |
| | | * ç
¤ç§ç±»å |
| | | */ |
| | | @TableField(value = "coal") |
| | | private String coal; |
| | | |
| | | /** |
| | | * éè´æ°é |
| | | */ |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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> { |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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> { |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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); |
| | | } |
| | |
| | | private final StorageBlobMapper storageBlobMapper; |
| | | |
| | | private final StorageAttachmentMapper storageAttachmentMapper; |
| | | |
| | | private final MinioUtils minioUtils; |
| | | |
| | | |
| | |
| | | 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()) |
| | | ); |
| | |
| | | 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("ä¾åºåä¿¡æ¯ä¸åå¨"); |
| | |
| | | BeanUtils.copyProperties(purchaseRegistration, pendingInventory); |
| | | |
| | | // 设置å¾
å
¥åºè®°å½ç¹æç屿§ï¼å¦ææï¼ |
| | | pendingInventory.setCoalId(purchaseRegistration.getCoalId()); |
| | | pendingInventory.setInventoryQuantity(purchaseRegistration.getPurchaseQuantity()); |
| | | return pendingInventory; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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)); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | 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)); |
| | | } |
| | | } |
| | |
| | | officialInventoryMapper.updateById(officialInventory); |
| | | |
| | | // æå»ºéå®è®°å½å®ä½ |
| | | SalesRecord salesRecord = buildSalesRecord(salesRecordDto,officialInventory.getCoal()); |
| | | SalesRecord salesRecord = buildSalesRecord(salesRecordDto,officialInventory.getCoalId()); |
| | | |
| | | // å¤çæ°å¢/æ´æ°é»è¾ |
| | | if (salesRecordDto.getId() == null) { |
| | |
| | | } |
| | | } |
| | | |
| | | private SalesRecord buildSalesRecord(SalesRecordDto dto,String coal) { |
| | | private SalesRecord buildSalesRecord(SalesRecordDto dto,Long coalId) { |
| | | SalesRecord record = new SalesRecord(); |
| | | BeanUtils.copyProperties(dto, record); |
| | | |
| | |
| | | } |
| | | |
| | | // ç
¤ç§ |
| | | record.setCoal(coal); |
| | | record.setCoalId(coalId); |
| | | |
| | | return record; |
| | | } |
| | |
| | | -- å建å¾
å
¥åºè¡¨ |
| | | CREATE TABLE pending_inventory |
| | | ( |
| | | id BIGSERIAL PRIMARY KEY, -- 主é®ID |
| | | supplier_name VARCHAR(255) NOT NULL, -- ä¾è´§ååç§° |
| | | coal VARCHAR(50) NOT NULL, -- ç
¤ç§ |
| | | unit VARCHAR(50) NOT NULL, -- åä½ |
| | | inventory_quantity NUMERIC(10,2) NOT NULL, -- åºåæ°é |
| | | price_including_tax NUMERIC(10,2) NOT NULL, -- åä»·ï¼å«ç¨ï¼ |
| | | total_price_including_tax NUMERIC(10,2) NOT NULL, -- æ»ä»·ï¼å«ç¨ï¼ |
| | | registrant VARCHAR(50), -- ç»è®°äºº |
| | | registration_time TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP, -- ç»è®°æ¶é´ |
| | | price_excluding_tax VARCHAR(255), -- åä»·ï¼ä¸å«ç¨ï¼ |
| | | total_price_excluding_tax VARCHAR(255), -- æ»ä»·ï¼ä¸å«ç¨ï¼ |
| | | registrant_id VARCHAR(32), -- ç»è®°äººID |
| | | registration_date DATE, -- ç»è®°æ¥æ |
| | | supplier_id BIGINT, -- ä¾è´§åID |
| | | coal_id BIGINT, -- ç
¤ç§ID |
| | | id BIGSERIAL PRIMARY KEY, -- 主é®ID |
| | | supplier_name VARCHAR(255) NOT NULL, -- ä¾è´§ååç§° |
| | | coal VARCHAR(50) NOT NULL, -- ç
¤ç§ |
| | | unit VARCHAR(50) NOT NULL, -- åä½ |
| | | inventory_quantity NUMERIC(10, 2) NOT NULL, -- åºåæ°é |
| | | price_including_tax NUMERIC(10, 2) NOT NULL, -- åä»·ï¼å«ç¨ï¼ |
| | | total_price_including_tax NUMERIC(10, 2) NOT NULL, -- æ»ä»·ï¼å«ç¨ï¼ |
| | | registrant VARCHAR(50), -- ç»è®°äºº |
| | | registration_time TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP, -- ç»è®°æ¶é´ |
| | | price_excluding_tax VARCHAR(255), -- åä»·ï¼ä¸å«ç¨ï¼ |
| | | total_price_excluding_tax VARCHAR(255), -- æ»ä»·ï¼ä¸å«ç¨ï¼ |
| | | registrant_id VARCHAR(32), -- ç»è®°äººID |
| | | 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), -- å建该记å½çç¨æ· |
| | | create_time TIMESTAMP(6), -- è®°å½å建æ¶é´ |
| | | update_by VARCHAR(255), -- æåä¿®æ¹è¯¥è®°å½çç¨æ· |
| | | update_time TIMESTAMP(6) -- è®°å½æåæ´æ°æ¶é´ |
| | | deleted INTEGER DEFAULT 0, -- 软å 餿 å¿ï¼0=æªå é¤ï¼1=å·²å é¤ |
| | | create_by VARCHAR(255), -- å建该记å½çç¨æ· |
| | | create_time TIMESTAMP(6), -- è®°å½å建æ¶é´ |
| | | update_by VARCHAR(255), -- æåä¿®æ¹è¯¥è®°å½çç¨æ· |
| | | update_time TIMESTAMP(6) -- è®°å½æåæ´æ°æ¶é´ |
| | | |
| | | ); |
| | | |
| | |
| | | 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 'å建该记å½çç¨æ·'; |
| | |
| | | ( |
| | | 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, -- åä»·ï¼å«ç¨ï¼ |
| | |
| | | registrant_id VARCHAR(50) NOT NULL, -- ç»è®°äººid |
| | | type VARCHAR(50), -- ç±»å 1 éè´/ 2 æ£å¼ å
¥åº |
| | | pending_id BIGINT, -- å¾
å
¥åºid |
| | | merge_id VARCHAR(255), -- åå¹¶id |
| | | merge_id VARCHAR(255), -- åå¹¶id |
| | | registration_date TIMESTAMP WITHOUT TIME ZONE, |
| | | |
| | | deleted INT NOT NULL DEFAULT 0, -- 软å 餿 å¿ï¼0=æªå é¤ï¼1=å·²å é¤ |
| | |
| | | -- æ·»å åæ®µæ³¨é |
| | | 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 'åä»·ï¼å«ç¨ï¼'; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | -- å建äºç»´ç 管ç表 |
| | | 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 'è®°å½æåæ´æ°æ¶é´'; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | -- å建äºç»´ç æ«ç è®°å½è¡¨ |
| | | 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 'è®°å½æåæ´æ°æ¶é´'; |
| | |
| | | <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"/> |
| | |
| | | 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"> |
| | |
| | | <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" /> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?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> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?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> |
| | |
| | | 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; |
| | | } |
| | | } |