From c2478aba3b4db1f7c97ddd40eb636eed42368f28 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期一, 25 八月 2025 16:39:50 +0800 Subject: [PATCH] 库存调整单功能优化修改 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogServiceImpl.java | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 111 insertions(+), 9 deletions(-) diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogServiceImpl.java index d8d00e7..ba1f45c 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/ReviseLogServiceImpl.java @@ -1,19 +1,27 @@ package com.vincent.rsf.server.manager.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.vincent.rsf.framework.common.R; +import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.manager.controller.params.ReviseLogParams; -import com.vincent.rsf.server.manager.entity.LocRevise; -import com.vincent.rsf.server.manager.entity.ReviseLogItem; +import com.vincent.rsf.server.manager.entity.*; +import com.vincent.rsf.server.manager.enums.CommonExceStatus; +import com.vincent.rsf.server.manager.enums.OrderType; +import com.vincent.rsf.server.manager.enums.OrderWorkType; import com.vincent.rsf.server.manager.mapper.ReviseLogMapper; -import com.vincent.rsf.server.manager.entity.ReviseLog; -import com.vincent.rsf.server.manager.service.LocReviseService; -import com.vincent.rsf.server.manager.service.ReviseLogService; +import com.vincent.rsf.server.manager.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; @Service("reviseLogService") public class ReviseLogServiceImpl extends ServiceImpl<ReviseLogMapper, ReviseLog> implements ReviseLogService { @@ -24,33 +32,127 @@ @Autowired private ReviseLogService reviseLogService; + @Autowired + private LocItemService locItemService; + + @Autowired + private LocService locService; + + @Autowired + private ReviseLogItemService reviseLogItemService; + /** * 搴撳瓨璋冩暣鍗曟槑缁嗘坊鍔� + * * @param revise * @param loginUserId * @return */ @Override + @Transactional(rollbackFor = Exception.class) public List<ReviseLog> reviseLoc(ReviseLogParams revise, Long loginUserId) { LocRevise locRevise = locReviseService.getById(revise.getReviseId()); if (Objects.isNull(locRevise)) { - throw new RuntimeException("璋冩暣鍗曟嵁涓嶅瓨鍦紒锛�"); + throw new CoolException("璋冩暣鍗曟嵁涓嶅瓨鍦紒锛�"); } List<ReviseLog> items = revise.getItems(); if (items.isEmpty()) { - throw new RuntimeException("璋冩暣鍗曟槑缁嗗弬鏁颁负绌猴紒锛�"); + throw new CoolException("璋冩暣鍗曟槑缁嗗弬鏁颁负绌猴紒锛�"); } items.forEach(item -> { ReviseLog reviseLog = new ReviseLog(); BeanUtils.copyProperties(item, reviseLog); reviseLog.setAreaId(locRevise.getAreaId()) .setReviseId(locRevise.getId()) - .setReviseCode(locRevise.getCode()) ; + .setCreateBy(loginUserId) + .setUpdateBy(loginUserId) + .setReviseCode(locRevise.getCode()); if (!reviseLogService.save(reviseLog)) { - throw new RuntimeException("璋冩暣鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�"); + throw new CoolException("璋冩暣鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�"); } + + List<LocItem> locItems = locItemService.list(new LambdaQueryWrapper<LocItem>() + .eq(LocItem::getLocCode, item.getLocCode())); + if (!locItems.isEmpty()) { + locItems.forEach(ote -> { + ReviseLogItem logItem = new ReviseLogItem(); + BeanUtils.copyProperties(ote, logItem); + logItem.setReviseLogId(reviseLog.getId()); + if (!reviseLogItemService.save(logItem)) { + throw new CoolException("鏄庣粏淇濆瓨澶辫触锛侊紒"); + } + }); + } + + Double sum = locItems.stream().mapToDouble(LocItem::getAnfme).sum(); + + locRevise.setAnfme(Math.round((sum + locRevise.getAnfme()) * 10000) / 10000.0); }); + locRevise.setExceStatus(CommonExceStatus.COMMON_EXCE_STATUS_UN_EXCE.val); + + if (!locReviseService.updateById(locRevise)) { + throw new CoolException("鐘舵�佹洿鏂板け璐ワ紒锛�"); + } return items; } + + /** + * @author Ryan + * @date 2025/8/18 + * @description: 纭璋冩暣搴撳瓨 + * @version 1.0 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R complete(Long id, Long loginUserId) { + LocRevise revise = locReviseService.getById(id); + if (Objects.isNull(revise)) { + throw new CoolException("璋冩暣鍗曚笉瀛樺湪锛侊紒"); + } + if (!revise.getExceStatus().equals(CommonExceStatus.COMMON_EXCE_STATUS_EXCE_ING.val)) { + throw new CoolException("鍗曟嵁鐘舵�佹湭鎵ц鎴栧凡瀹屾垚锛屾棤娉曟墽琛屽畬鎴愭搷浣滐紒锛�"); + } + List<ReviseLog> logs = reviseLogService.list(new LambdaQueryWrapper<ReviseLog>().eq(ReviseLog::getReviseId, revise.getId())); + if (logs.isEmpty()) { + throw new CoolException("搴撳瓨鏃ュ織涓嶅瓨鍦紒锛�"); + } + Set<Long> longs = logs.stream().map(ReviseLog::getId).collect(Collectors.toSet()); + List<ReviseLogItem> logItems = reviseLogItemService.list(new LambdaQueryWrapper<ReviseLogItem>().in(ReviseLogItem::getReviseLogId, longs)); + if (logItems.isEmpty()) { + throw new CoolException("璋冩暣鏄庣粏涓虹┖!!"); + } + Map<Long, List<ReviseLogItem>> listMap = logItems.stream().collect(Collectors.groupingBy(ReviseLogItem::getLocId)); + listMap.keySet().forEach(items -> { + Loc loc = locService.getById(items); + if (Objects.isNull(loc)) { + throw new CoolException("搴撲綅涓嶅瓨鍦紒锛�"); + } + List<LocItem> list = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, loc.getId())); + if (!list.isEmpty()) { + throw new CoolException("搴撲綅:" + loc.getCode() + ", 璋冩暣淇℃伅涓虹┖锛侊紒"); + } + locItemService.remove(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, loc.getId())); + listMap.get(items).forEach(logItem -> { + LocItem locDetl = new LocItem(); + BeanUtils.copyProperties(logItem, locDetl); + locDetl.setLocId(loc.getId()) + .setType(OrderType.ORDER_REVISE.type) + .setWkType(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_STOCK_REVISE.type)) + .setLocCode(loc.getCode()) + .setAnfme(logItem.getReviseQty()) + .setUpdateBy(loginUserId) + .setId(null) + .setCreateBy(loginUserId); + if (!locItemService.save(locDetl)) { + throw new CoolException("搴撳瓨鏄庣粏淇濆瓨澶辫触锛侊紒"); + } + }); + }); + revise.setExceStatus(CommonExceStatus.COMMON_EXCE_STATUS_TASK_DONE.val); + if (!locReviseService.updateById(revise)) { + throw new CoolException("璋冩暣鍗曚慨鏀瑰け璐ワ紒锛�"); + } + return R.ok(); + } } -- Gitblit v1.9.1