From 2656ae9bce8544d81da66c07aaede5386d6fbebb Mon Sep 17 00:00:00 2001 From: liding <756868258@qq.com> Date: 星期五, 25 七月 2025 15:41:01 +0800 Subject: [PATCH] 1.序列化问题 2.设备领用逻辑优化 --- main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentManagementServiceImpl.java | 6 main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java | 93 +++++++++++++----- main-business/src/main/java/com/ruoyi/business/entity/SalesRecord.java | 2 main-business/src/main/java/com/ruoyi/business/service/EquipmentUsageDetailService.java | 6 main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageDetailServiceImpl.java | 113 ++++++++++------------ main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageRecordServiceImpl.java | 37 +++--- main-business/src/main/java/com/ruoyi/business/entity/EquipmentManagement.java | 2 main-business/src/main/java/com/ruoyi/business/controller/EquipmentUsageDetailController.java | 13 - main-business/src/main/java/com/ruoyi/business/vo/EquipmentManagementVo.java | 4 9 files changed, 156 insertions(+), 120 deletions(-) diff --git a/main-business/src/main/java/com/ruoyi/business/controller/EquipmentUsageDetailController.java b/main-business/src/main/java/com/ruoyi/business/controller/EquipmentUsageDetailController.java index 466c033..72cf267 100644 --- a/main-business/src/main/java/com/ruoyi/business/controller/EquipmentUsageDetailController.java +++ b/main-business/src/main/java/com/ruoyi/business/controller/EquipmentUsageDetailController.java @@ -1,19 +1,14 @@ 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.EquipmentManagementDto; import com.ruoyi.business.dto.EquipmentUsageDetailDto; -import com.ruoyi.business.entity.EquipmentManagement; -import com.ruoyi.business.entity.EquipmentUsageDetail; -import com.ruoyi.business.mapper.EquipmentUsageDetailMapper; -import com.ruoyi.business.service.EquipmentManagementService; import com.ruoyi.business.service.EquipmentUsageDetailService; import com.ruoyi.common.core.domain.R; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.RestController; + +import java.util.List; /** * <p> @@ -35,8 +30,8 @@ * 璁惧棰嗙敤褰掕繕璁板綍鏌ヨ */ @GetMapping("/list") - public R<IPage<EquipmentUsageDetailDto>> list(Page<EquipmentUsageDetail> page,EquipmentUsageDetailDto equipmentUsageDetailDto) { - IPage<EquipmentUsageDetailDto> list = equipmentUsageDetailService.selectEquipmentUsageDetailList(page,equipmentUsageDetailDto); + public R<List<EquipmentUsageDetailDto>> list(EquipmentUsageDetailDto equipmentUsageDetailDto) { + List<EquipmentUsageDetailDto> list = equipmentUsageDetailService.selectEquipmentUsageDetailList(equipmentUsageDetailDto); return R.ok(list); } diff --git a/main-business/src/main/java/com/ruoyi/business/entity/EquipmentManagement.java b/main-business/src/main/java/com/ruoyi/business/entity/EquipmentManagement.java index 7ad6c05..9e03627 100644 --- a/main-business/src/main/java/com/ruoyi/business/entity/EquipmentManagement.java +++ b/main-business/src/main/java/com/ruoyi/business/entity/EquipmentManagement.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import com.ruoyi.common.core.domain.MyBaseEntity; @@ -80,5 +81,6 @@ * 鏄惁鑰楁潗绫� */ @TableField(value = "is_consumables") + @JsonProperty("isConsumables") private boolean isConsumables; } \ No newline at end of file diff --git a/main-business/src/main/java/com/ruoyi/business/entity/SalesRecord.java b/main-business/src/main/java/com/ruoyi/business/entity/SalesRecord.java index 7bd1688..809680e 100644 --- a/main-business/src/main/java/com/ruoyi/business/entity/SalesRecord.java +++ b/main-business/src/main/java/com/ruoyi/business/entity/SalesRecord.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.MyBaseEntity; import lombok.Data; @@ -131,5 +132,6 @@ * 鏄惁娣诲姞鑷冲緟琛ュ簱 */ @TableField(value = "is_add") + @JsonProperty("isAdd") private boolean isAdd; } \ No newline at end of file diff --git a/main-business/src/main/java/com/ruoyi/business/service/EquipmentUsageDetailService.java b/main-business/src/main/java/com/ruoyi/business/service/EquipmentUsageDetailService.java index 6dd1ff2..0ef1273 100644 --- a/main-business/src/main/java/com/ruoyi/business/service/EquipmentUsageDetailService.java +++ b/main-business/src/main/java/com/ruoyi/business/service/EquipmentUsageDetailService.java @@ -1,10 +1,10 @@ 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.EquipmentUsageDetailDto; import com.ruoyi.business.entity.EquipmentUsageDetail; import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; /** * <p> @@ -16,5 +16,5 @@ */ public interface EquipmentUsageDetailService extends IService<EquipmentUsageDetail> { - IPage<EquipmentUsageDetailDto> selectEquipmentUsageDetailList(Page<EquipmentUsageDetail> page, EquipmentUsageDetailDto equipmentUsageDetailDto); + List<EquipmentUsageDetailDto> selectEquipmentUsageDetailList(EquipmentUsageDetailDto equipmentUsageDetailDto); } diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentManagementServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentManagementServiceImpl.java index e2fe1bf..9c88381 100644 --- a/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentManagementServiceImpl.java +++ b/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentManagementServiceImpl.java @@ -3,23 +3,22 @@ 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.business.dto.EquipmentManagementDto; import com.ruoyi.business.entity.EquipmentManagement; import com.ruoyi.business.entity.EquipmentUsageRecord; import com.ruoyi.business.mapper.EquipmentManagementMapper; import com.ruoyi.business.mapper.EquipmentUsageRecordMapper; import com.ruoyi.business.service.EquipmentManagementService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.business.vo.EquipmentManagementVo; import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; -import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; -import java.beans.Transient; import java.util.Arrays; import java.util.List; import java.util.Objects; @@ -108,6 +107,7 @@ vo.setId(equipment.getId()); // 璁惧id vo.setEquipmentName(equipment.getEquipmentName()); // 璁惧鍚嶇О vo.setQuantity(equipment.getQuantity()); // 鏁伴噺 + vo.setConsumables(equipment.isConsumables()); // 鏄惁鑰楁潗绫� return vo; }) .toList(); diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageDetailServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageDetailServiceImpl.java index cb19b1a..3f0025b 100644 --- a/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageDetailServiceImpl.java +++ b/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageDetailServiceImpl.java @@ -1,9 +1,7 @@ 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.EquipmentManagementDto; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.business.dto.EquipmentUsageDetailDto; import com.ruoyi.business.entity.EquipmentManagement; import com.ruoyi.business.entity.EquipmentUsageDetail; @@ -11,14 +9,11 @@ import com.ruoyi.business.mapper.EquipmentManagementMapper; import com.ruoyi.business.mapper.EquipmentUsageDetailMapper; import com.ruoyi.business.mapper.EquipmentUsageRecordMapper; -import com.ruoyi.business.service.EquipmentManagementService; import com.ruoyi.business.service.EquipmentUsageDetailService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.business.service.EquipmentUsageRecordService; import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.utils.bean.BeanUtils; -import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; import java.util.Collections; import java.util.HashMap; @@ -47,72 +42,70 @@ @Override - public IPage<EquipmentUsageDetailDto> selectEquipmentUsageDetailList(Page<EquipmentUsageDetail> page,EquipmentUsageDetailDto equipmentUsageDetailDto) { - // 蹇呴』浼犻�抲sageId鍙傛暟 + public List<EquipmentUsageDetailDto> selectEquipmentUsageDetailList(EquipmentUsageDetailDto equipmentUsageDetailDto) { + // 蹇呴』浼犻�� usageId 鍙傛暟 if (equipmentUsageDetailDto.getUsageId() == null) { throw new BaseException("璇烽�夋嫨浣跨敤璁板綍"); } + + // 鏌ヨ鏄庣粏鍒楄〃锛堜笉鍒嗛〉锛� LambdaQueryWrapper<EquipmentUsageDetail> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(EquipmentUsageDetail::getUsageId, equipmentUsageDetailDto.getUsageId()); + List<EquipmentUsageDetail> details = equipmentUsageDetailMapper.selectList(queryWrapper); - Page<EquipmentUsageDetail> entityPage = equipmentUsageDetailMapper.selectPage(page, queryWrapper); - IPage<EquipmentUsageDetailDto> dtoPage = new Page<>(); - BeanUtils.copyProperties(entityPage, dtoPage); - // 鍏堣幏鍙栦富琛ㄨ褰� - List<Long> usageIds = entityPage.getRecords().stream() + // 濡傛灉娌℃湁鏁版嵁锛岀洿鎺ヨ繑鍥炵┖鍒楄〃 + if (details.isEmpty()) { + return Collections.emptyList(); + } + + // 鑾峰彇鎵�鏈夊叧鑱旂殑 usageId + List<Long> usageIds = details.stream() .map(EquipmentUsageDetail::getUsageId) .distinct() .collect(Collectors.toList()); - if (!usageIds.isEmpty()) { - // 鏌ヨ鍏宠仈鐨勪娇鐢ㄨ褰� - List<EquipmentUsageRecord> usageRecords = equipmentUsageRecordMapper.selectList( - new LambdaQueryWrapper<EquipmentUsageRecord>() - .in(EquipmentUsageRecord::getId, usageIds) - ); + // 鏌ヨ鍏宠仈鐨勪娇鐢ㄨ褰� + List<EquipmentUsageRecord> usageRecords = equipmentUsageRecordMapper.selectList( + new LambdaQueryWrapper<EquipmentUsageRecord>() + .in(EquipmentUsageRecord::getId, usageIds) + ); - // 鑾峰彇鎵�鏈夎澶嘔D - List<Long> equipmentIds = usageRecords.stream() - .map(EquipmentUsageRecord::getEquipmentId) - .distinct() - .collect(Collectors.toList()); + // 鑾峰彇鎵�鏈夎澶嘔D + List<Long> equipmentIds = usageRecords.stream() + .map(EquipmentUsageRecord::getEquipmentId) + .distinct() + .collect(Collectors.toList()); - // 鏌ヨ璁惧淇℃伅 - Map<Long, EquipmentManagement> equipmentMap; - if (!equipmentIds.isEmpty()) { - equipmentMap = equipmentManagementMapper.selectList( - new LambdaQueryWrapper<EquipmentManagement>() - .in(EquipmentManagement::getId, equipmentIds) - ).stream().collect(Collectors.toMap(EquipmentManagement::getId, Function.identity())); - } else { - equipmentMap = new HashMap<>(); + // 鏌ヨ璁惧淇℃伅 + Map<Long, EquipmentManagement> equipmentMap; + if (!equipmentIds.isEmpty()) { + equipmentMap = equipmentManagementMapper.selectList( + new LambdaQueryWrapper<EquipmentManagement>() + .in(EquipmentManagement::getId, equipmentIds) + ).stream().collect(Collectors.toMap(EquipmentManagement::getId, Function.identity())); + } else { + equipmentMap = new HashMap<>(); + } + + // 鏋勫缓 usageId 鈫� equipmentId 鐨勬槧灏� + Map<Long, Long> usageIdToEquipmentIdMap = usageRecords.stream() + .collect(Collectors.toMap(EquipmentUsageRecord::getId, EquipmentUsageRecord::getEquipmentId)); + + // 杞崲涓� DTO 骞跺~鍏呰澶囦俊鎭� + return details.stream().map(detail -> { + EquipmentUsageDetailDto detailDto = new EquipmentUsageDetailDto(); + BeanUtils.copyProperties(detail, detailDto); + + // 鑾峰彇鍏宠仈鐨勮澶囦俊鎭� + Long equipmentId = usageIdToEquipmentIdMap.get(detail.getUsageId()); + if (equipmentId != null && equipmentMap.containsKey(equipmentId)) { + EquipmentManagement equipment = equipmentMap.get(equipmentId); + detailDto.setEquipmentNo(equipment.getEquipmentNo()); + detailDto.setEquipmentName(equipment.getEquipmentName()); + detailDto.setSpecification(equipment.getSpecification()); } - // 鏋勫缓浣跨敤璁板綍ID鍒拌澶嘔D鐨勬槧灏� - Map<Long, Long> usageIdToEquipmentIdMap = usageRecords.stream() - .collect(Collectors.toMap(EquipmentUsageRecord::getId, EquipmentUsageRecord::getEquipmentId)); - - // 杞崲DTO骞跺~鍏呰澶囦俊鎭� - List<EquipmentUsageDetailDto> dtoList = entityPage.getRecords().stream().map(detail -> { - EquipmentUsageDetailDto detailDto = new EquipmentUsageDetailDto(); - BeanUtils.copyProperties(detail, detailDto); - - // 鑾峰彇鍏宠仈鐨勮澶嘔D - Long equipmentId = usageIdToEquipmentIdMap.get(detail.getUsageId()); - if (equipmentId != null && equipmentMap.containsKey(equipmentId)) { - EquipmentManagement equipment = equipmentMap.get(equipmentId); - detailDto.setEquipmentNo(equipment.getEquipmentNo()); - detailDto.setEquipmentName(equipment.getEquipmentName()); - detailDto.setSpecification(equipment.getSpecification()); - } - - return detailDto; - }).collect(Collectors.toList()); - - dtoPage.setRecords(dtoList); - } else { - dtoPage.setRecords(Collections.emptyList()); - } - return dtoPage; + return detailDto; + }).collect(Collectors.toList()); } } diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageRecordServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageRecordServiceImpl.java index 13c1d08..c272fa3 100644 --- a/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageRecordServiceImpl.java +++ b/main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageRecordServiceImpl.java @@ -3,9 +3,7 @@ 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.basic.entity.Supply; -import com.ruoyi.basic.mapper.CoalInfoMapper; -import com.ruoyi.business.dto.EquipmentManagementDto; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.business.dto.EquipmentUsageRecordDto; import com.ruoyi.business.entity.EquipmentManagement; import com.ruoyi.business.entity.EquipmentUsageDetail; @@ -14,12 +12,11 @@ import com.ruoyi.business.mapper.EquipmentUsageDetailMapper; import com.ruoyi.business.mapper.EquipmentUsageRecordMapper; import com.ruoyi.business.service.EquipmentUsageRecordService; -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.system.mapper.SysUserMapper; -import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; @@ -133,7 +130,7 @@ } // 澶勭悊褰掕繕閫昏緫 - if (equipmentUsageRecordDto.getEquipmentStatus() == 2) { + if (equipmentUsageRecordDto.getEquipmentStatus() != 1) { result = handleReturnOperation(equipmentUsageRecordDto, equipment, originalRecord, userId, username); } else { // 澶勭悊鏅�氱紪杈戦�昏緫锛堥潪褰掕繕鐘舵�侊級 @@ -173,7 +170,7 @@ private int handleReturnOperation(EquipmentUsageRecordDto dto, EquipmentManagement equipment, EquipmentUsageRecord originalRecord, Long userId, String username) { - // 鑾峰彇鏈褰掕繕鏁伴噺 + // 鏍¢獙褰掕繕鏁伴噺 Integer returnQuantity = dto.getReturnQuantity(); if (returnQuantity == null || returnQuantity <= 0) { throw new RuntimeException("褰掕繕鏁伴噺蹇呴』澶т簬0"); @@ -185,18 +182,19 @@ throw new RuntimeException("褰掕繕鏁伴噺涓嶈兘瓒呰繃鏈綊杩樻暟閲忥紝鍓╀綑鏈綊杩樻暟閲忥細" + remainingQuantity); } - // 鏇存柊涓昏褰� + // 鍑嗗鏇存柊璁板綍 EquipmentUsageRecord updateRecord = new EquipmentUsageRecord(); updateRecord.setId(originalRecord.getId()); - updateRecord.setReturnQuantity(originalRecord.getReturnQuantity() + returnQuantity); - updateRecord.setEquipmentStatus(2); // 宸插綊杩樼姸鎬� - updateRecord.setUsageEndTime(LocalDate.now()); - // 濡傛灉鍏ㄩ儴褰掕繕锛屾洿鏂扮姸鎬佸拰鏃堕棿 -// if (updateRecord.getReturnQuantity().equals(originalRecord.getUsageQuantity())) { -// -// } + int newReturnQuantity = originalRecord.getReturnQuantity() + returnQuantity; + updateRecord.setReturnQuantity(newReturnQuantity); - // 鎭㈠搴撳瓨 + // 鍒ゆ柇鏄惁鍏ㄩ儴褰掕繕 + boolean isFullReturn = newReturnQuantity == originalRecord.getUsageQuantity(); + int newStatus = isFullReturn ? 3 : 2; // 3琛ㄧず鍏ㄩ儴褰掕繕锛�2琛ㄧず閮ㄥ垎褰掕繕 + updateRecord.setEquipmentStatus(newStatus); + updateRecord.setUsageEndTime(LocalDate.now()); + + // 鎭㈠搴撳瓨鏁伴噺 equipment.setQuantity(equipment.getQuantity() + returnQuantity); equipmentManagementMapper.updateById(equipment); @@ -205,10 +203,11 @@ // 淇濆瓨褰掕繕鏄庣粏璁板綍 if (result > 0) { - String remark = "璁惧褰掕繕" + (updateRecord.getEquipmentStatus() == 2 ? "锛堝叏閮ㄥ綊杩橈級" : "锛堥儴鍒嗗綊杩橈級"); - saveUsageDetail(originalRecord.getId(), originalRecord.getEquipmentId(), 2, returnQuantity, userId, username, remark); + String remark = isFullReturn ? "璁惧褰掕繕锛堝叏閮ㄥ綊杩橈級" : "璁惧褰掕繕锛堥儴鍒嗗綊杩橈級"; + int operationType = isFullReturn ? 3 : 2; // 涓庝富璁板綍鐘舵�佷繚鎸佷竴鑷� + saveUsageDetail(originalRecord.getId(), originalRecord.getEquipmentId(), + operationType, returnQuantity, userId, username, remark); } - return result; } diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java index 1a9c849..da90280 100644 --- a/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java +++ b/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java @@ -9,7 +9,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.entity.CoalInfo; import com.ruoyi.basic.entity.Customer; -import com.ruoyi.basic.entity.Supply; import com.ruoyi.basic.mapper.CoalInfoMapper; import com.ruoyi.basic.mapper.CustomerMapper; import com.ruoyi.business.dto.SalesRecordDto; @@ -40,13 +39,9 @@ import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.time.temporal.TemporalAdjusters; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; -import java.util.*; /** * <p> @@ -153,23 +148,20 @@ // 鍙傛暟鏍¢獙 validateSalesRecordDto(salesRecordDto); - // 鏇存柊姝e紡搴撳緟琛ュ簱鏁伴噺 + // 鑾峰彇鐓ょ搴撳瓨淇℃伅 OfficialInventory officialInventory = officialInventoryMapper.selectById(salesRecordDto.getCoalId()); if (officialInventory == null) { throw new BaseException("姝e紡搴撶叅绉嶄俊鎭笉瀛樺湪"); } - if (salesRecordDto.getSaleQuantity().compareTo(officialInventory.getInventoryQuantity()) > 0) { - throw new BaseException("閿�鍞暟閲忎笉鑳藉ぇ浜庡簱瀛樻暟閲�"); - } - officialInventory.setInventoryQuantity(officialInventory.getInventoryQuantity().subtract(salesRecordDto.getSaleQuantity())); - if (salesRecordDto.isAdd()){ - officialInventory.setPendingReplenishment(salesRecordDto.getSaleQuantity()); - } - officialInventoryMapper.updateById(officialInventory); + // 澶勭悊閿�鍞暟閲忓彉鏇撮�昏緫 + SalesRecord existingRecord = salesRecordDto.getId() == null ? null : salesRecordMapper.selectById(salesRecordDto.getId()); + handleQuantityChanges(salesRecordDto, officialInventory, existingRecord); // 鏋勫缓閿�鍞褰曞疄浣� SalesRecord salesRecord = buildSalesRecord(salesRecordDto, officialInventory.getCoalId()); + // 璁剧疆閿�鍞褰曚腑鐨勫簱瀛樻暟閲� + salesRecord.setInventoryQuantity(officialInventory.getInventoryQuantity()); // 澶勭悊鏂板/鏇存柊閫昏緫 if (salesRecordDto.getId() == null) { @@ -179,18 +171,52 @@ } } - private void validateSalesRecordDto(SalesRecordDto dto) { - if (dto == null) { - throw new BaseException("閿�鍞褰曟暟鎹笉鑳戒负绌�"); + private void handleQuantityChanges(SalesRecordDto dto, OfficialInventory officialInventory, SalesRecord existingRecord) { + if (existingRecord == null) { + // 鏂板璁板綍 + if (dto.getSaleQuantity().compareTo(officialInventory.getInventoryQuantity()) > 0) { + throw new BaseException("閿�鍞暟閲忎笉鑳藉ぇ浜庡簱瀛樻暟閲�"); + } + // 鏇存柊搴撳瓨鏁伴噺 + officialInventory.setInventoryQuantity(officialInventory.getInventoryQuantity().subtract(dto.getSaleQuantity())); + // 璁剧疆寰呰ˉ搴撴暟閲� + if (dto.isAdd()) { + officialInventory.setPendingReplenishment( + officialInventory.getPendingReplenishment() == null ? + dto.getSaleQuantity() : + officialInventory.getPendingReplenishment().add(dto.getSaleQuantity()) + ); + } + } else { + // 鏇存柊璁板綍 + // 姣旇緝閿�鍞暟閲忔槸鍚︽湁鍙樺寲 + int quantityComparison = dto.getSaleQuantity().compareTo(existingRecord.getSaleQuantity()); + if (quantityComparison != 0) { + // 璁$畻鏁伴噺宸�� + BigDecimal quantityDiff = dto.getSaleQuantity().subtract(existingRecord.getSaleQuantity()); + + // 妫�鏌ユ柊鏁伴噺鏄惁浼氬鑷村簱瀛樹笉瓒� + if (quantityComparison > 0 && quantityDiff.compareTo(officialInventory.getInventoryQuantity()) > 0) { + throw new BaseException("閿�鍞暟閲忓鍔犲悗涓嶈兘澶т簬搴撳瓨鏁伴噺"); + } + + // 鏇存柊搴撳瓨鏁伴噺 + officialInventory.setInventoryQuantity(officialInventory.getInventoryQuantity().subtract(quantityDiff)); + + // 鏇存柊寰呰ˉ搴撴暟閲忥紙濡傛灉鏄渶瑕佽ˉ搴撶殑璁板綍锛� + if (dto.isAdd()) { + BigDecimal pendingDiff = officialInventory.getPendingReplenishment() == null ? + quantityDiff : + officialInventory.getPendingReplenishment().add(quantityDiff); + officialInventory.setPendingReplenishment(pendingDiff); + } + } } - if (dto.getRegistrantId() == null) { - throw new BaseException("鐧昏浜篒D涓嶈兘涓虹┖"); - } - if (dto.getCustomerId() == null) { - throw new BaseException("瀹㈡埛ID涓嶈兘涓虹┖"); - } - if (dto.getCoalId() == null) { - throw new BaseException("璇烽�夋嫨涓�鏉$叅绉嶄俊鎭�"); + + // 鏇存柊搴撳瓨璁板綍 + int updateResult = officialInventoryMapper.updateById(officialInventory); + if (updateResult <= 0) { + throw new BaseException("搴撳瓨鏇存柊澶辫触"); } } @@ -234,6 +260,21 @@ return record; } + private void validateSalesRecordDto(SalesRecordDto dto) { + if (dto == null) { + throw new BaseException("閿�鍞褰曟暟鎹笉鑳戒负绌�"); + } + if (dto.getRegistrantId() == null) { + throw new BaseException("鐧昏浜篒D涓嶈兘涓虹┖"); + } + if (dto.getCustomerId() == null) { + throw new BaseException("瀹㈡埛ID涓嶈兘涓虹┖"); + } + if (dto.getCoalId() == null) { + throw new BaseException("璇烽�夋嫨涓�鏉$叅绉嶄俊鎭�"); + } + } + private int insertSalesRecord(SalesRecord record) { int result = salesRecordMapper.insert(record); if (result <= 0) { diff --git a/main-business/src/main/java/com/ruoyi/business/vo/EquipmentManagementVo.java b/main-business/src/main/java/com/ruoyi/business/vo/EquipmentManagementVo.java index 3ec641c..b137ddf 100644 --- a/main-business/src/main/java/com/ruoyi/business/vo/EquipmentManagementVo.java +++ b/main-business/src/main/java/com/ruoyi/business/vo/EquipmentManagementVo.java @@ -1,5 +1,6 @@ package com.ruoyi.business.vo; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; @Data @@ -10,4 +11,7 @@ private String equipmentName; //璁惧鍚嶇О private Integer quantity; //鏁伴噺 + + @JsonProperty("isConsumables") + private boolean isConsumables; //鏄惁鑰楁潗绫� } -- Gitblit v1.9.3