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/EquipmentUsageRecordServiceImpl.java | 201 +++++++++++++++++++++++++++++++++++-------------- 1 files changed, 143 insertions(+), 58 deletions(-) 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 5c2366c..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,21 +3,20 @@ 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; import com.ruoyi.business.entity.EquipmentUsageRecord; import com.ruoyi.business.mapper.EquipmentManagementMapper; +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; @@ -43,6 +42,8 @@ private final EquipmentUsageRecordMapper equipmentUsageRecordMapper; private final EquipmentManagementMapper equipmentManagementMapper; + + private final EquipmentUsageDetailMapper equipmentUsageDetailMapper; private final SysUserMapper sysUserMapper; @@ -83,9 +84,17 @@ if (sysUser != null) { dto.setUserName(sysUser.getNickName()); } + int totalReturnNo = equipmentUsageDetailMapper.selectList( + new LambdaQueryWrapper<EquipmentUsageDetail>() + .eq(EquipmentUsageDetail::getUsageId, entity.getId()) + .eq(EquipmentUsageDetail::getOperationType,2)) + .stream() + .mapToInt(EquipmentUsageDetail::getQuantity) + .sum(); + + dto.setTotalReturnNo(totalReturnNo); return dto; }).toList(); - dtoPage.setRecords(dtoRecords); return dtoPage; } @@ -98,13 +107,10 @@ throw new IllegalArgumentException("璁惧浣跨敤璁板綍鍙傛暟涓嶈兘涓虹┖"); } - // 澶嶅埗灞炴�у埌瀹炰綋瀵硅薄 - EquipmentUsageRecord equipmentUsageRecord = new EquipmentUsageRecord(); - BeanUtils.copyProperties(equipmentUsageRecordDto, equipmentUsageRecord); - - // 鑾峰彇璁惧ID鍜岄鐢ㄦ暟閲� + // 鑾峰彇璁惧ID鍜屾搷浣滄暟閲� Long equipmentId = equipmentUsageRecordDto.getEquipmentId(); - Integer newUsageQuantity = equipmentUsageRecordDto.getUsageQuantity(); + Long userId = equipmentUsageRecordDto.getUserId(); + String username = sysUserMapper.selectUserById(userId).getNickName(); // 鏌ヨ璁惧淇℃伅 EquipmentManagement equipment = equipmentManagementMapper.selectById(equipmentId); @@ -112,60 +118,139 @@ throw new RuntimeException("璁惧涓嶅瓨鍦�"); } + int result; // 鏂板璁板綍閫昏緫 if (Objects.isNull(equipmentUsageRecordDto.getId())) { - // 妫�鏌ュ簱瀛樻槸鍚﹀厖瓒� - if (equipment.getQuantity() < newUsageQuantity) { - throw new RuntimeException("搴撳瓨涓嶈冻锛屽綋鍓嶅簱瀛橈細" + equipment.getQuantity()); - } - - // 鎵e噺搴撳瓨 - equipment.setQuantity(equipment.getQuantity() - newUsageQuantity); - equipmentManagementMapper.updateById(equipment); - - // 璁剧疆浣跨敤寮�濮嬫椂闂翠负褰撳墠鏃堕棿 - equipmentUsageRecord.setUsageStartTime(LocalDate.now()); - - // 濡傛灉鐘舵�佷负1(宸插綊杩�)锛屽垯璁剧疆缁撴潫鏃堕棿 - if ("1".equals(equipmentUsageRecordDto.getEquipmentStatus())) { - equipmentUsageRecord.setUsageEndTime(LocalDate.now()); - } - - return equipmentUsageRecordMapper.insert(equipmentUsageRecord); - } - // 鏇存柊璁板綍閫昏緫 - else { - // 1. 鏌ヨ鍘熼鐢ㄨ褰� + result = handleNewUsage(equipmentUsageRecordDto, equipment, userId, username); + } else { + // 缂栬緫璁板綍閫昏緫 EquipmentUsageRecord originalRecord = equipmentUsageRecordMapper.selectById(equipmentUsageRecordDto.getId()); if (originalRecord == null) { throw new RuntimeException("棰嗙敤璁板綍涓嶅瓨鍦�"); } - // 2. 璁$畻搴撳瓨鍙樺寲閲忥紙鏂版暟閲� - 鏃ф暟閲忥級 - int quantityDelta = newUsageQuantity - originalRecord.getUsageQuantity(); - - if (quantityDelta != 0) { - // 3. 妫�鏌ヨ皟鏁村悗搴撳瓨鏄惁鍏呰冻 - int newInventory = equipment.getQuantity() - quantityDelta; - if (newInventory < 0) { - throw new RuntimeException("搴撳瓨涓嶈冻锛岃皟鏁村悗搴撳瓨灏嗕负锛�" + newInventory); - } - - // 4. 璋冩暣搴撳瓨 - equipment.setQuantity(newInventory); - if (equipmentManagementMapper.updateById(equipment) == 0) { - throw new RuntimeException("搴撳瓨鏇存柊澶辫触锛屽彲鑳藉凡琚叾浠栨搷浣滀慨鏀�"); - } + // 澶勭悊褰掕繕閫昏緫 + if (equipmentUsageRecordDto.getEquipmentStatus() != 1) { + result = handleReturnOperation(equipmentUsageRecordDto, equipment, originalRecord, userId, username); + } else { + // 澶勭悊鏅�氱紪杈戦�昏緫锛堥潪褰掕繕鐘舵�侊級 + result = handleEditOperation(equipmentUsageRecordDto, equipment, originalRecord, userId, username); } - - // 5. 濡傛灉鐘舵�佸彉涓�1(宸插綊杩�)锛屽垯璁剧疆缁撴潫鏃堕棿涓哄綋鍓嶆椂闂� - if ("1".equals(equipmentUsageRecordDto.getEquipmentStatus()) && - (originalRecord.getEquipmentStatus() == null || !"1".equals(originalRecord.getEquipmentStatus()))) { - equipmentUsageRecord.setUsageEndTime(LocalDate.now()); - } - - // 6. 鏇存柊棰嗙敤璁板綍 - return equipmentUsageRecordMapper.updateById(equipmentUsageRecord); } + return result; + } + + private int handleNewUsage(EquipmentUsageRecordDto dto, EquipmentManagement equipment, Long userId, String username) { + // 妫�鏌ュ簱瀛� + if (equipment.getQuantity() < dto.getUsageQuantity()) { + throw new RuntimeException("搴撳瓨涓嶈冻锛屽綋鍓嶅簱瀛橈細" + equipment.getQuantity()); + } + + // 鍒涘缓涓昏褰� + EquipmentUsageRecord record = new EquipmentUsageRecord(); + BeanUtils.copyProperties(dto, record); + record.setUsageStartTime(LocalDate.now()); + record.setEquipmentStatus(1); // 浣跨敤涓姸鎬� + record.setReturnQuantity(0); + + // 鎵e噺搴撳瓨 + equipment.setQuantity(equipment.getQuantity() - dto.getUsageQuantity()); + equipmentManagementMapper.updateById(equipment); + + // 淇濆瓨涓昏褰� + int result = equipmentUsageRecordMapper.insert(record); + + // 淇濆瓨棰嗙敤鏄庣粏璁板綍 + if (result > 0) { + saveUsageDetail(record.getId(), record.getEquipmentId(), 1, dto.getUsageQuantity(), userId, username, "璁惧棰嗙敤"); + } + + return result; + } + + 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"); + } + + // 璁$畻鍓╀綑鏈綊杩樻暟閲� + int remainingQuantity = originalRecord.getUsageQuantity() - originalRecord.getReturnQuantity(); + if (returnQuantity > remainingQuantity) { + throw new RuntimeException("褰掕繕鏁伴噺涓嶈兘瓒呰繃鏈綊杩樻暟閲忥紝鍓╀綑鏈綊杩樻暟閲忥細" + remainingQuantity); + } + + // 鍑嗗鏇存柊璁板綍 + EquipmentUsageRecord updateRecord = new EquipmentUsageRecord(); + updateRecord.setId(originalRecord.getId()); + 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); + + // 鏇存柊涓昏褰� + int result = equipmentUsageRecordMapper.updateById(updateRecord); + + // 淇濆瓨褰掕繕鏄庣粏璁板綍 + if (result > 0) { + String remark = isFullReturn ? "璁惧褰掕繕锛堝叏閮ㄥ綊杩橈級" : "璁惧褰掕繕锛堥儴鍒嗗綊杩橈級"; + int operationType = isFullReturn ? 3 : 2; // 涓庝富璁板綍鐘舵�佷繚鎸佷竴鑷� + saveUsageDetail(originalRecord.getId(), originalRecord.getEquipmentId(), + operationType, returnQuantity, userId, username, remark); + } + return result; + } + + private int handleEditOperation(EquipmentUsageRecordDto dto, EquipmentManagement equipment, + EquipmentUsageRecord originalRecord, Long userId, String username) { + // 妫�鏌ラ鐢ㄦ暟閲忔槸鍚︽湁鍙樺寲 + if (!dto.getUsageQuantity().equals(originalRecord.getUsageQuantity())) { + // 璁$畻搴撳瓨鍙樺寲閲忥紙鏃ф暟閲� - 鏂版暟閲忥級 + int quantityDelta = originalRecord.getUsageQuantity() - dto.getUsageQuantity(); + + // 妫�鏌ヨ皟鏁村悗搴撳瓨鏄惁鍏呰冻 + int newInventory = equipment.getQuantity() + quantityDelta; + if (newInventory < 0) { + throw new RuntimeException("搴撳瓨涓嶈冻锛岃皟鏁村悗搴撳瓨灏嗕负锛�" + newInventory); + } + + // 璋冩暣搴撳瓨 + equipment.setQuantity(newInventory); + if (equipmentManagementMapper.updateById(equipment) == 0) { + throw new RuntimeException("搴撳瓨鏇存柊澶辫触锛屽彲鑳藉凡琚叾浠栨搷浣滀慨鏀�"); + } + + // 璁板綍鏁伴噺鍙樻洿鏄庣粏 + saveUsageDetail(originalRecord.getId(), originalRecord.getEquipmentId(), 3, dto.getUsageQuantity(), userId, username, + "棰嗙敤鏁伴噺鍙樻洿锛�" + originalRecord.getUsageQuantity() + "鈫�" + dto.getUsageQuantity()); + } + + // 鏇存柊棰嗙敤璁板綍 + EquipmentUsageRecord updateRecord = new EquipmentUsageRecord(); + BeanUtils.copyProperties(dto, updateRecord); + return equipmentUsageRecordMapper.updateById(updateRecord); + } + + private void saveUsageDetail(Long usageId, Long equipmentId, Integer operationType, Integer quantity, + Long operatorId, String operator, String remark) { + EquipmentUsageDetail detail = new EquipmentUsageDetail(); + detail.setUsageId(usageId); + detail.setEquipmentId(equipmentId); + detail.setOperationType(operationType); + detail.setQuantity(quantity); + detail.setOperatorId(operatorId); + detail.setOperator(operator); + detail.setRemark(remark); + equipmentUsageDetailMapper.insert(detail); } } -- Gitblit v1.9.3