From cf6b1cf6fa8f7784c6d7c64b7326d4662bc3d4b3 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期二, 14 十月 2025 17:39:06 +0800
Subject: [PATCH] yys 1.智能排产 2.物料看板 3.报表分析
---
main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageRecordServiceImpl.java | 202 +++++++++++++++++++++++++++++++++++---------------
1 files changed, 140 insertions(+), 62 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 fde6bd6..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,6 +84,15 @@
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);
@@ -97,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);
@@ -111,20 +118,10 @@
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());
- return equipmentUsageRecordMapper.insert(equipmentUsageRecord);
+ result = handleNewUsage(equipmentUsageRecordDto, equipment, userId, username);
} else {
// 缂栬緫璁板綍閫昏緫
EquipmentUsageRecord originalRecord = equipmentUsageRecordMapper.selectById(equipmentUsageRecordDto.getId());
@@ -133,46 +130,127 @@
}
// 澶勭悊褰掕繕閫昏緫
- if (equipmentUsageRecordDto.getEquipmentStatus() == 2) {
- // 妫�鏌ュ綊杩樻暟閲忔槸鍚﹀悎娉�
- if (newUsageQuantity > originalRecord.getUsageQuantity()) {
- throw new RuntimeException("褰掕繕鏁伴噺涓嶈兘瓒呰繃鍘熼鐢ㄦ暟閲�");
- }
-
- // 璁$畻瀹為檯褰掕繕鏁伴噺锛堝師棰嗙敤鏁伴噺 - 鏂伴鐢ㄦ暟閲忥級
- int returnedQuantity = originalRecord.getUsageQuantity() - newUsageQuantity;
-
- // 鎭㈠閮ㄥ垎搴撳瓨
- equipment.setQuantity(equipment.getQuantity() + returnedQuantity);
- equipmentManagementMapper.updateById(equipment);
-
- // 濡傛灉鍏ㄩ儴褰掕繕锛岃缃綊杩樻椂闂�
- if (newUsageQuantity == 0) {
- equipmentUsageRecord.setUsageEndTime(LocalDate.now());
- }
- return equipmentUsageRecordMapper.updateById(equipmentUsageRecord);
+ if (equipmentUsageRecordDto.getEquipmentStatus() != 1) {
+ result = handleReturnOperation(equipmentUsageRecordDto, equipment, originalRecord, userId, username);
+ } else {
+ // 澶勭悊鏅�氱紪杈戦�昏緫锛堥潪褰掕繕鐘舵�侊級
+ result = handleEditOperation(equipmentUsageRecordDto, equipment, originalRecord, userId, username);
}
-
- // 澶勭悊鏅�氱紪杈戦�昏緫锛堥潪褰掕繕鐘舵�侊級
- if (!newUsageQuantity.equals(originalRecord.getUsageQuantity())) {
- // 璁$畻搴撳瓨鍙樺寲閲忥紙鏃ф暟閲� - 鏂版暟閲忥級
- int quantityDelta = originalRecord.getUsageQuantity() - newUsageQuantity;
-
- // 妫�鏌ヨ皟鏁村悗搴撳瓨鏄惁鍏呰冻
- int newInventory = equipment.getQuantity() + quantityDelta;
- if (newInventory < 0) {
- throw new RuntimeException("搴撳瓨涓嶈冻锛岃皟鏁村悗搴撳瓨灏嗕负锛�" + newInventory);
- }
-
- // 璋冩暣搴撳瓨
- equipment.setQuantity(newInventory);
- if (equipmentManagementMapper.updateById(equipment) == 0) {
- throw new RuntimeException("搴撳瓨鏇存柊澶辫触锛屽彲鑳藉凡琚叾浠栨搷浣滀慨鏀�");
- }
- }
-
- // 鏇存柊棰嗙敤璁板綍
- 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