From 0b3cdb1e0c2f495edb971c585bd6b4b0456bf93a Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期二, 14 四月 2026 14:55:34 +0800
Subject: [PATCH] 字段变更 增加类型
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 100 insertions(+), 9 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
index 0b19e52..cb3c483 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
@@ -26,11 +26,15 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@Service("locItemService")
public class LocItemServiceImpl extends ServiceImpl<LocItemMapper, LocItem> implements LocItemService {
+
+ private static final BigDecimal FULL_OUT_QTY_TOLERANCE = new BigDecimal("0.000001");
Logger logger = LoggerFactory.getLogger(LocItemServiceImpl.class);
@@ -52,7 +56,83 @@
private WaveService waveService;
@Autowired
private BasStationService basStationService;
+ @Autowired
+ private MatnrService matnrService;
+ /** 鍏ュ簱/鍑哄簱淇濆瓨鍓嶏細鑻ヨ鏍兼垨鍨嬪彿涓虹┖鍒欎粠鐗╂枡甯﹀嚭 */
+ private void fillSpecModelFromMatnr(LocItem item) {
+ if (item == null || item.getMatnrId() == null) {
+ return;
+ }
+ if (StringUtils.isNotBlank(item.getSpec()) && StringUtils.isNotBlank(item.getModel())) {
+ return;
+ }
+ Matnr matnr = matnrService.getById(item.getMatnrId());
+ if (matnr == null) {
+ return;
+ }
+ if (StringUtils.isBlank(item.getSpec())) {
+ item.setSpec(matnr.getSpec());
+ }
+ if (StringUtils.isBlank(item.getModel())) {
+ item.setModel(matnr.getModel());
+ }
+ }
+
+ @Override
+ public boolean save(LocItem entity) {
+ fillSpecModelFromMatnr(entity);
+ return super.save(entity);
+ }
+
+ @Override
+ public boolean saveBatch(Collection<LocItem> entityList) {
+ if (entityList != null) {
+ entityList.forEach(this::fillSpecModelFromMatnr);
+ }
+ return super.saveBatch(entityList);
+ }
+
+ @Override
+ public boolean saveBatch(Collection<LocItem> entityList, int batchSize) {
+ if (entityList != null) {
+ entityList.forEach(this::fillSpecModelFromMatnr);
+ }
+ return super.saveBatch(entityList, batchSize);
+ }
+
+ @Override
+ public void fillSpecModelFromMatnrForRecords(List<LocItem> records) {
+ if (records == null || records.isEmpty()) {
+ return;
+ }
+ Set<Long> matnrIds = new HashSet<>();
+ for (LocItem r : records) {
+ if (r.getMatnrId() != null && (StringUtils.isBlank(r.getSpec()) || StringUtils.isBlank(r.getModel()))) {
+ matnrIds.add(r.getMatnrId());
+ }
+ }
+ if (matnrIds.isEmpty()) {
+ return;
+ }
+ Map<Long, Matnr> matnrMap = matnrService.listByIds(matnrIds).stream()
+ .collect(Collectors.toMap(Matnr::getId, m -> m));
+ for (LocItem r : records) {
+ if (r.getMatnrId() == null) {
+ continue;
+ }
+ Matnr m = matnrMap.get(r.getMatnrId());
+ if (m == null) {
+ continue;
+ }
+ if (StringUtils.isBlank(r.getSpec())) {
+ r.setSpec(m.getSpec());
+ }
+ if (StringUtils.isBlank(r.getModel())) {
+ r.setModel(m.getModel());
+ }
+ }
+ }
/**
* 搴撳瓨鍑哄簱鐢熸垚鍑哄簱浠诲姟
@@ -127,8 +207,15 @@
if (barcodeToUse == null && !existTasks.isEmpty()) {
barcodeToUse = existTasks.get(0).getBarcode();
if (StringUtils.isNotBlank(barcodeToUse)) {
- locService.update(new LambdaUpdateWrapper<Loc>().eq(Loc::getId, loc.getId())
- .set(Loc::getBarcode, barcodeToUse).set(Loc::getUpdateBy, loginUserId).set(Loc::getUpdateTime, new Date()));
+ Task refTask = existTasks.get(0);
+ LambdaUpdateWrapper<Loc> locUw = new LambdaUpdateWrapper<Loc>().eq(Loc::getId, loc.getId())
+ .set(Loc::getBarcode, barcodeToUse)
+ .set(Loc::getUpdateBy, loginUserId)
+ .set(Loc::getUpdateTime, new Date());
+ if (refTask.getWeight() != null) {
+ locUw.set(Loc::getWeight, refTask.getWeight());
+ }
+ locService.update(locUw);
}
}
if (barcodeToUse == null) {
@@ -167,12 +254,15 @@
Double orgQty = locItems.stream().mapToDouble(LocItem::getAnfme).sum();
List<LocItem> locItemList = listMap.get(key);
Double outQty = locItemList.stream().mapToDouble(LocItem::getOutQty).sum();
+ BigDecimal orgQtyBd = BigDecimal.valueOf(orgQty).setScale(6, RoundingMode.HALF_UP);
+ BigDecimal outQtyBd = BigDecimal.valueOf(outQty).setScale(6, RoundingMode.HALF_UP);
if (map.getType().equals(Constants.TASK_TYPE_OUT_STOCK)
|| map.getType().equals(Constants.TASK_TYPE_ORDER_OUT_STOCK)
|| map.getType().equals(Constants.TASK_TYPE_WAVE_OUT_STOCK)) {
- if (orgQty.compareTo(outQty) > 0) {
- //鎷f枡鍑哄簱 -- 鐩樼偣鍑哄簱
+ // 鍑哄簱閲忚揪鍒板簱浣嶅簱瀛橈紙鍚宸級瑙嗕负鍏ㄧ増鍑哄簱锛岄伩鍏嶆诞鐐硅宸鑷磋鍒や负鎷f枡/閮ㄥ垎鍑哄簱
+ if (orgQtyBd.subtract(outQtyBd).compareTo(FULL_OUT_QTY_TOLERANCE) > 0) {
+ // 鎷f枡鍑哄簱锛堥儴鍒嗗嚭搴擄級
DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
.eq(DeviceSite::getSite, siteNo)
.eq(!Objects.isNull(loc.getChannel()),DeviceSite::getChannel, loc.getChannel())
@@ -277,17 +367,17 @@
.setUpdateTime(new Date())
.setOrderType(OrderType.ORDER_OUT.type);
if (map.getType().equals(Constants.TASK_TYPE_ORDER_OUT_STOCK)) {
- taskItem.setWkType(Short.parseShort(order.getWkType()))
+ taskItem.setWkType(order.getWkType())
.setSourceCode(order.getCode())
.setSourceId(order.getId())
.setOrderItemId(item.getOrderItemId());
} else if (map.getType().equals(Constants.TASK_TYPE_WAVE_OUT_STOCK)) {
taskItem.setSourceId(wave.getId())
- .setWkType(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_OTHER.type))
+ .setWkType(OrderWorkType.ORDER_WORK_TYPE_OTHER.type)
.setSourceCode(wave.getCode())
.setSource(item.getSource());
} else if (map.getType().equals(Constants.TASK_TYPE_OUT_CHECK) || map.getType().equals(Constants.TASK_TYPE_OUT_STOCK)) {
- taskItem.setWkType(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_STOCK_OUT.type))
+ taskItem.setWkType(OrderWorkType.ORDER_WORK_TYPE_STOCK_OUT.type)
.setSource(item.getId())
.setSourceId(item.getLocId())
.setSourceCode(item.getLocCode());
@@ -373,7 +463,8 @@
throw new CoolException("鐩爣搴撲綅涓嶅瓨鍦紒锛�");
}
- targetLoc.setUseStatus(LocStsType.LOC_STS_TYPE_S.type);
+ targetLoc.setUseStatus(LocStsType.LOC_STS_TYPE_S.type)
+ .setWeight(orgLoc.getWeight());
if (!locService.updateById(targetLoc)) {
throw new CoolException("鐩爣搴撲綅棰勭害澶辫触锛侊紒");
@@ -411,7 +502,7 @@
.setSource(item.getId())
.setUpdateTime(new Date())
.setOrderType(OrderType.ORDER_IN.type)
- .setWkType(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type));
+ .setWkType(OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type);
taskItems.add(taskItem);
}
if (!taskItemService.saveBatch(taskItems)) {
--
Gitblit v1.9.1