From 55331431565cffc4328bbbe83533e1e11da3ffd6 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期五, 15 八月 2025 13:33:59 +0800 Subject: [PATCH] 基础物料同步接口 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java | 171 +++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 119 insertions(+), 52 deletions(-) diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java index 576f97b..4508bcd 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java @@ -10,11 +10,13 @@ import com.vincent.rsf.server.api.service.ReceiveMsgService; import com.vincent.rsf.server.api.service.ReportMsgService; import com.vincent.rsf.server.common.utils.DateUtils; +import com.vincent.rsf.server.manager.controller.dto.DashboardDto; +import com.vincent.rsf.server.manager.controller.dto.StockTrandDto; +import com.vincent.rsf.server.manager.controller.dto.StockTransItemDto; import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams; import com.vincent.rsf.server.manager.controller.params.BatchUpdateParam; import com.vincent.rsf.server.manager.entity.*; -import com.vincent.rsf.server.manager.enums.AsnExceStatus; -import com.vincent.rsf.server.manager.enums.POExceStatus; +import com.vincent.rsf.server.manager.enums.*; import com.vincent.rsf.server.manager.mapper.AsnOrderMapper; import com.vincent.rsf.server.manager.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -28,6 +30,9 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.text.DateFormat; +import java.text.ParsePosition; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -39,7 +44,7 @@ * @time 2025/3/7 08:02 */ @Service("asnOrderService") -public class AsnOrderServiceImpl extends ServiceImpl<AsnOrderMapper, AsnOrder> implements AsnOrderService { +public class AsnOrderServiceImpl extends ServiceImpl<AsnOrderMapper, WkOrder> implements AsnOrderService { @Autowired private ReceiveMsgService receiveMsgService; @@ -60,13 +65,17 @@ private PurchaseService purchaseService; @Autowired private PurchaseItemService purchaseItemService; + @Autowired + private AsnOrderService asnOrderService; + @Autowired + private TaskService taskService; @Override - public boolean notifyInspect(List<AsnOrder> orders) { + public boolean notifyInspect(List<WkOrder> orders) { if (orders.isEmpty()) { throw new CoolException("涓婃姤鍙傛暟涓嶈兘涓虹┖锛侊紒"); } - Set<Long> asnIds = orders.stream().map(AsnOrder::getId).collect(Collectors.toSet()); + Set<Long> asnIds = orders.stream().map(WkOrder::getId).collect(Collectors.toSet()); if (asnIds.isEmpty()) { throw new CoolException("ASN鍗曟嵁涓嶈兘涓虹┖锛侊紒"); } @@ -82,17 +91,17 @@ } @Override - public List<AsnOrder> getListByMatnr(Map<String, String> params) { + public List<WkOrder> getListByMatnr(Map<String, String> params) { if (Objects.isNull(params)) { throw new CoolException("鏌ヨ鏉′欢涓嶈兘涓虹┖锛侊紒"); } - List<AsnOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>() - .like(!Objects.isNull(params.get("maktx")), AsnOrderItem::getMaktx, params.get("maktx")) - .eq(!Objects.isNull(params.get("matnrCode")), AsnOrderItem::getMatnrCode, params.get("matnrCode"))); + List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>() + .like(!Objects.isNull(params.get("maktx")), WkOrderItem::getMaktx, params.get("maktx")) + .eq(!Objects.isNull(params.get("matnrCode")), WkOrderItem::getMatnrCode, params.get("matnrCode"))); if (orderItems.isEmpty()) { return new ArrayList<>(); } - List<Long> longList = orderItems.stream().map(AsnOrderItem::getAsnId).collect(Collectors.toList()); + List<Long> longList = orderItems.stream().map(WkOrderItem::getOrderId).collect(Collectors.toList()); return this.listByIds(longList); } @@ -103,7 +112,7 @@ if (Objects.isNull(params.getOrders())) { throw new CoolException("涓诲崟淇℃伅涓嶈兘涓虹┖"); } - AsnOrder orders = params.getOrders(); + WkOrder orders = params.getOrders(); if (Objects.isNull(orders)) { throw new CoolException("鍗曟嵁涓嶈兘涓虹┖锛侊紒"); } @@ -137,7 +146,7 @@ @Override @Transactional(rollbackFor = Exception.class) public R updateOrderItem(AsnOrderAndItemsParams params, Long loginUserId) throws Exception { - AsnOrder orders = params.getOrders(); + WkOrder orders = params.getOrders(); if (Objects.isNull(orders)) { throw new CoolException("涓诲崟淇℃伅涓嶈兘涓虹┖锛侊紒"); } @@ -165,10 +174,10 @@ */ @Transactional(rollbackFor = Exception.class) public void svaeOrUpdateOrderItem(AsnOrderAndItemsParams params, Long loginUserId) throws Exception { - AsnOrder orders = params.getOrders(); + WkOrder orders = params.getOrders(); params.getItems().forEach(item -> { - item.put("asnId", orders.getId()); - item.put("asnCode", orders.getCode()); + item.put("orderId", orders.getId()); + item.put("orderCode", orders.getCode()); item.put("poCode", orders.getPoCode()); item.put("createBy", loginUserId); item.put("updateBy", loginUserId); @@ -176,9 +185,9 @@ throw new CoolException("鏄庣粏淇濆瓨澶辫触锛侊紒"); } }); - List<AsnOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>() - .eq(AsnOrderItem::getAsnId, params.getOrders().getId())); - double sum = orderItems.stream().mapToDouble(AsnOrderItem::getAnfme).sum(); + List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>() + .eq(WkOrderItem::getOrderId, params.getOrders().getId())); + double sum = orderItems.stream().mapToDouble(WkOrderItem::getAnfme).sum(); orders.setAnfme(sum); if (!this.updateById(orders)) { throw new CoolException("璁″垝鏀惰揣鏁伴噺淇敼澶辫触锛侊紒"); @@ -194,18 +203,18 @@ */ @Override public boolean batchUpdate(BatchUpdateParam params, Long userId) { - AsnOrder order = params.getOrder(); + WkOrder order = params.getOrder(); if (Objects.isNull(order)) { throw new CoolException("淇敼鍙傛暟涓嶈兘涓虹┖锛侊紒"); } - return this.update(new LambdaUpdateWrapper<AsnOrder>() - .in(AsnOrder::getId, params.getIds()) - .set(!Objects.isNull(order.getRleStatus()), AsnOrder::getRleStatus, order.getRleStatus()) - .set(!Objects.isNull(order.getNtyStatus()), AsnOrder::getNtyStatus, order.getNtyStatus()) - .set(!Objects.isNull(order.getStatus()), AsnOrder::getStatus, order.getStatus()) - .set(!Objects.isNull(order.getWkType()), AsnOrder::getWkType, order.getWkType()) - .set(!Objects.isNull(order.getExceStatus()), AsnOrder::getExceStatus, order.getExceStatus()) - .set(AsnOrder::getUpdateBy, userId)); + return this.update(new LambdaUpdateWrapper<WkOrder>() + .in(WkOrder::getId, params.getIds()) + .set(!Objects.isNull(order.getRleStatus()), WkOrder::getRleStatus, order.getRleStatus()) + .set(!Objects.isNull(order.getNtyStatus()), WkOrder::getNtyStatus, order.getNtyStatus()) + .set(!Objects.isNull(order.getStatus()), WkOrder::getStatus, order.getStatus()) + .set(!Objects.isNull(order.getWkType()), WkOrder::getWkType, order.getWkType()) + .set(!Objects.isNull(order.getExceStatus()), WkOrder::getExceStatus, order.getExceStatus()) + .set(WkOrder::getUpdateBy, userId)); } /** @@ -219,13 +228,13 @@ @Override @Transactional(rollbackFor = Exception.class) public R completeOrder(Long id, Long loginUserId) { - AsnOrder asnOrder = this.getById(id); - if (Objects.isNull(asnOrder)) { + WkOrder wkOrder = this.getById(id); + if (Objects.isNull(wkOrder)) { throw new CoolException("鍗曟嵁涓嶅瓨鍦�!!"); } //涓�閿姞鍏ュ巻鍙叉。 try { - operateOrderLogs(asnOrder); + operateOrderLogs(wkOrder); } catch (Exception e) { throw new CoolException("鏀惰揣瀹屾垚澶辫触锛侊紒"); } @@ -235,7 +244,7 @@ @Override @Transactional(rollbackFor = Exception.class) public R closeOrder(Long id) { - AsnOrder order = this.getById(id); + WkOrder order = this.getById(id); if (Objects.isNull(order)) { throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�"); } @@ -265,7 +274,7 @@ if (Objects.isNull(purchase)) { throw new CoolException("PO鍗曟嵁涓嶅瓨鍦紒锛�"); } - AsnOrder order = new AsnOrder(); + WkOrder order = new WkOrder(); //鏍规嵁缂栫爜瑙勫垯鐢熸垚ASN鍗曞彿 String code = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, purchase); order.setCode(code) @@ -277,9 +286,9 @@ if (!this.save(order)) { throw new CoolException("ASN鍗曟嵁淇濆瓨澶辫触锛侊紒"); } - List<AsnOrderItem> orderItems = new ArrayList<>(); + List<WkOrderItem> orderItems = new ArrayList<>(); for (PurchaseItem item : itemList) { - AsnOrderItem orderItem = new AsnOrderItem(); + WkOrderItem orderItem = new WkOrderItem(); Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getCode, item.getMatnrCode())); if (Objects.isNull(matnr)) { throw new CoolException("鏁版嵁閿欒锛氬綋鍓嶇墿鏂欎笉瀛樺湪!!"); @@ -295,9 +304,9 @@ throw new CoolException("鏂板缓鍗曟嵁鏁伴噺涓嶈兘澶т簬璁″垝鏁伴噺锛侊紒"); } orderItem.setAnfme(item.getAnfme()) - .setAsnId(order.getId()) + .setOrderId(order.getId()) .setSplrName(item.getSplrName()) - .setAsnCode(code) + .setOrderCode(code) .setSplrBatch(item.getSplrBatch()) .setSplrCode(item.getSplrCode()) .setPoDetlId(item.getId()) @@ -324,7 +333,7 @@ } } - double sum = orderItems.stream().mapToDouble(AsnOrderItem::getAnfme).sum(); + double sum = orderItems.stream().mapToDouble(WkOrderItem::getAnfme).sum(); if (!asnOrderItemService.saveBatch(orderItems)) { throw new CoolException(("Asn鍗曟嵁鏄庣粏淇濆瓨澶辫触锛侊紒")); @@ -355,8 +364,8 @@ @Transactional(rollbackFor = Exception.class) public R removeOrders(List<Long> ids) { for (Long id : ids) { - List<AsnOrderItem> list = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>() - .eq(AsnOrderItem::getAsnId, id)); + List<WkOrderItem> list = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>() + .eq(WkOrderItem::getOrderId, id)); if (list.isEmpty()) { continue; } @@ -372,7 +381,7 @@ } }); - double sum = list.stream().mapToDouble(AsnOrderItem::getAnfme).sum(); + double sum = list.stream().mapToDouble(WkOrderItem::getAnfme).sum(); Purchase purchase = purchaseService.getOne(new LambdaQueryWrapper<Purchase>() .eq(Purchase::getCode, list.stream().findFirst().get().getPoCode())); @@ -387,19 +396,77 @@ } } - if (!this.remove(new LambdaQueryWrapper<AsnOrder>() - .in(AsnOrder::getId, ids) - .eq(AsnOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val))) { + if (!this.remove(new LambdaQueryWrapper<WkOrder>() + .in(WkOrder::getId, ids) + .eq(WkOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val))) { throw new CoolException("浠诲姟涓崟鎹笉鍙垹闄わ紒锛�"); } - - if (!asnOrderItemService.remove(new LambdaQueryWrapper<AsnOrderItem>() - .in(AsnOrderItem::getAsnId, ids))) { + if (!asnOrderItemService.remove(new LambdaQueryWrapper<WkOrderItem>() + .in(WkOrderItem::getOrderId, ids))) { // throw new CoolException("Details Delete Fail"); } return R.ok("鎿嶄綔鎴愬姛锛侊紒"); + } + + /** + * 鑾峰彇棣栭〉琛ㄥご鏁版嵁 + * @return + */ + @Override + public R getDashbord() { + DashboardDto dto = new DashboardDto(); + //鑾峰彇鍏ュ簱鏁伴噺 + DashboardDto trandDto = this.baseMapper.getDashbord(OrderType.ORDER_IN.type, TaskType.TASK_TYPE_IN.type + ""); + dto.setInAnf(trandDto.getAnfme()).setTaskIn(trandDto.getRealAnfme()).setTotalIn(trandDto.getAnfme() + trandDto.getRealAnfme()); + + //鑾峰彇鍑哄簱鍗曟暟閲� + DashboardDto outTrand = this.baseMapper.getDashbord(OrderType.ORDER_OUT.type, TaskType.TASK_TYPE_OUT.type + ""); + dto.setOutAnf(outTrand.getAnfme()).setTaskOut(outTrand.getRealAnfme()).setTotalOut(outTrand.getAnfme() + outTrand.getRealAnfme()); + + //鑾峰彇鎵ц涓换鍔℃暟閲� + List<Task> tasks = taskService.list(new LambdaQueryWrapper<>()); + if (!tasks.isEmpty()) { + dto.setTaskQty(tasks.size()); + } + return R.ok().add(dto); + } + + /** + * 鑾峰彇鍑哄叆搴撹秼鍔� + * @return + */ + @Override + public R getStockTrand() { + List<String> days = DateUtils.getLastMonthDays("yyyy-MM-dd"); + LambdaQueryWrapper<StockStatistic> queryWrapper = new LambdaQueryWrapper<StockStatistic>() + .in(StockStatistic::getTaskType, Arrays.asList(TaskType.TASK_TYPE_IN.type, TaskType.TASK_TYPE_OUT.type)); + List<StockTransItemDto> items = this.baseMapper.getStockTrand(queryWrapper); + if (items.isEmpty()) { + return R.ok(); + } + List<StockTransItemDto> stockDtos = new ArrayList<>(); + days.forEach(day -> { + StockTransItemDto itemDto = new StockTransItemDto(); + itemDto.setInQty(0).setOutQty(0).setOutAnfme(0).setOutAnfme(0); + items.forEach(item -> { + if (item.getOrderTime().equals(day)) { + BeanUtils.copyProperties(item, itemDto); + } + }); + itemDto.setOrderTime(day); + stockDtos.add(itemDto); + }); + + //鑾峰彇鏈�澶у�� + Optional<Integer> max = stockDtos.stream().map(StockTransItemDto::getInQty).filter(Objects::nonNull).max(Comparator.naturalOrder()); + Optional<Integer> maxOut = stockDtos.stream().map(StockTransItemDto::getOutQty).filter(Objects::nonNull).max(Comparator.naturalOrder()); + int maxed = Math.max(max.orElse(Integer.MIN_VALUE), maxOut.orElse(Integer.MIN_VALUE)); + + StockTrandDto trandDto = new StockTrandDto(); + trandDto.setMaxQty(maxed).setTrandItem(stockDtos); + return R.ok().add(trandDto); } /** @@ -410,7 +477,7 @@ * @time 2025/3/19 19:53 */ @Transactional(rollbackFor = Exception.class) - public synchronized void operateOrderLogs(AsnOrder asrder) throws Exception { + public synchronized void operateOrderLogs(WkOrder asrder) throws Exception { if (Objects.isNull(asrder) || Objects.isNull(asrder.getId())) { throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } @@ -419,14 +486,14 @@ if (!this.updateById(asrder)) { throw new CoolException("鍗曟嵁鍏抽棴澶辫触锛侊紒"); } - List<AsnOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, asrder.getId())); + List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, asrder.getId())); if (orderItems.isEmpty()) { throw new CoolException("鏀惰揣鏄庣粏涓虹┖锛侊紒"); } // if (Objects.isNull(asrder.getAnfme()) || asrder.getAnfme().compareTo(0.00) == 0) { // throw new CoolException("鏀惰揣鏁伴噺涓嶈兘涓洪浂锛侊紒"); // } - AsnOrder order = this.getById(asrder.getId()); + WkOrder order = this.getById(asrder.getId()); AsnOrderLog orderLog = new AsnOrderLog(); // order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val); BeanUtils.copyProperties(order, orderLog); @@ -441,20 +508,20 @@ throw new CoolException("涓诲崟鍘嗗彶妗f坊鍔犲け璐ワ紒锛�"); } List<AsnOrderItemLog> logs = new ArrayList<>(); - List<AsnOrderItem> items = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, order.getId())); + List<WkOrderItem> items = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId())); items.forEach(item -> { AsnOrderItemLog itemLog = new AsnOrderItemLog(); BeanUtils.copyProperties(item, itemLog); itemLog.setAsnItemId(itemLog.getId()) .setLogId(orderLog.getId()) - .setAsnId(item.getAsnId()); + .setAsnId(item.getOrderId()); logs.add(itemLog); }); if (!asnOrderItemLogService.saveBatch(logs)) { throw new CoolException("閫氱煡鍗曟槑缁嗗巻鍙叉。淇濆瓨澶辫触锛侊紒"); } - if (!asnOrderItemService.remove(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, order.getId()))) { + if (!asnOrderItemService.remove(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId()))) { throw new CoolException("鍘熷崟鎹槑缁嗗垹闄ゅけ璐ワ紒锛�"); } if (!this.removeById(asrder.getId())) { -- Gitblit v1.9.1