From d11feb8336d609a47695f849cc377a0a5f8dbb3b Mon Sep 17 00:00:00 2001
From: cuilei <ray_tsu1@163.com>
Date: 星期二, 26 八月 2025 15:01:14 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/main/java/org/jeecg/modules/mes/service/impl/MesMaterialTransferRequestServiceImpl.java |  121 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 119 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/jeecg/modules/mes/service/impl/MesMaterialTransferRequestServiceImpl.java b/src/main/java/org/jeecg/modules/mes/service/impl/MesMaterialTransferRequestServiceImpl.java
index fb4b473..118e09f 100644
--- a/src/main/java/org/jeecg/modules/mes/service/impl/MesMaterialTransferRequestServiceImpl.java
+++ b/src/main/java/org/jeecg/modules/mes/service/impl/MesMaterialTransferRequestServiceImpl.java
@@ -1,24 +1,141 @@
 package org.jeecg.modules.mes.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.modules.base.entity.LineSideWarehouse;
+import org.jeecg.modules.base.service.ILineSideWarehouseService;
 import org.jeecg.modules.mes.entity.MesMaterialTransferRequest;
+import org.jeecg.modules.mes.entity.MesProductionWorkOrder;
+import org.jeecg.modules.mes.enums.MaterialTransferPublishStatus;
+import org.jeecg.modules.mes.enums.MaterialTransferRequestStatus;
+import org.jeecg.modules.mes.enums.ProductionWorkOrderStatus;
 import org.jeecg.modules.mes.mapper.MesMaterialTransferRequestMapper;
 import org.jeecg.modules.mes.service.IMesMaterialTransferRequestService;
+import org.jeecg.modules.mes.service.IMesProductionWorkOrderService;
+import org.jeecg.modules.sap.dto.MaterialRequestDTO;
+import org.jeecg.modules.sap.request.MaterialRequest;
+import org.jeecg.modules.sap.service.OrderMaterialRequestService;
+import org.jeecg.modules.wms.dto.WSResponse;
+import org.jeecg.modules.wms.request.WebReservationOrder;
+import org.jeecg.modules.wms.service.WMSWebServiceClient;
+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.*;
 
 /**
  * @Description: 鐗╂枡鎷夊姩鐢宠
  * @Author: jeecg-boot
- * @Date:   2025-07-04
+ * @Date: 2025-07-04
  * @Version: V1.0
  */
 @Service
 public class MesMaterialTransferRequestServiceImpl extends ServiceImpl<MesMaterialTransferRequestMapper, MesMaterialTransferRequest> implements IMesMaterialTransferRequestService {
 
+    @Autowired
+    private IMesProductionWorkOrderService productionWorkOrderService;
+    @Autowired
+    private OrderMaterialRequestService orderMaterialRequestService;
+    @Autowired
+    private ILineSideWarehouseService lineSideWarehouseService;
+    @Autowired
+    private WMSWebServiceClient wmsWebServiceClient;
+
     @Override
     public List<MesMaterialTransferRequest> queryMaterialTransferRequestByWorkOrderId(String workOrderId) {
         return baseMapper.queryMaterialTransferRequestByWorkOrderId(workOrderId);
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addMaterialTransferRequest(MesMaterialTransferRequest request) {
+        MesProductionWorkOrder order = productionWorkOrderService.getById(request.getWorkOrderId());
+        if (order == null) {
+            throw new JeecgBootException("鎺掍骇宸ュ崟涓嶅瓨鍦�");
+        }
+        if (!ProductionWorkOrderStatus.PUBLISHED.name().equals(order.getWorkOrderStatus())) {
+            throw new JeecgBootException("鍙湁鍙戝竷鐘舵�佺殑鎺掍骇宸ュ崟鎵嶅彲鐢宠鐗╂枡");
+        }
+        request.setPublishStatus(MaterialTransferPublishStatus.WAIT_PUBLISH.name());
+        request.setRequestStatus(MaterialTransferRequestStatus.WAIT_REQUEST.name());
+        request.setDelFlag(CommonConstant.DEL_FLAG_0);
+        this.getBaseMapper().insert(request);
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean publish(String id) {
+        MesMaterialTransferRequest entity = super.getById(id);
+        if (entity == null) {
+            throw new JeecgBootException("鏁版嵁涓嶅瓨鍦紝璇峰埛鏂伴噸璇曪紒");
+        }
+        if (!MaterialTransferPublishStatus.WAIT_PUBLISH.name().equals(entity.getPublishStatus())) {
+            throw new JeecgBootException("鏁版嵁宸插彂甯冿紒");
+        }
+        LineSideWarehouse warehouse = lineSideWarehouseService.getById(entity.getTargetWarehouseId());
+        if (warehouse == null) {
+            throw new JeecgBootException("绾胯竟搴撲笉瀛樺湪锛�");
+        }
+        MaterialRequest request = new MaterialRequest();
+        request.setMaterialNumber(entity.getMaterialNumber());
+        request.setQuantity(request.getQuantity());
+        request.setWarehouseCode(entity.getOriginalWarehouseId());
+        try {
+            Map<String, Object> response = orderMaterialRequestService.orderMaterialRequest("2301", warehouse.getWarehouseCode(), Collections.singletonList(request));
+            Object ztype = response.get("ztype");
+            if (!"S".equals(ztype)) {
+                throw new JeecgBootException("璋冪敤SAP璇锋眰棰勭暀鍙峰け璐ワ紒" + response.get("zmess"));
+            }
+            MaterialRequestDTO result = (MaterialRequestDTO) response.get("result");
+            entity.setReservationCode(result.getO_SAP_RESV());
+            entity.setPublishStatus(MaterialTransferPublishStatus.PUBLISHED.name());
+            entity.setPublishTime(new Date());
+            super.updateById(entity);
+            return true;
+        } catch (Exception e) {
+            throw new JeecgBootException("璋冪敤SAP璇锋眰棰勭暀鍙峰け璐ワ紒");
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean request(String id) {
+        MesMaterialTransferRequest entity = super.getById(id);
+        if (entity == null) {
+            throw new JeecgBootException("鏁版嵁涓嶅瓨鍦紝璇峰埛鏂伴噸璇曪紒");
+        }
+        if (!MaterialTransferPublishStatus.PUBLISHED.name().equals(entity.getPublishStatus()) || !MaterialTransferRequestStatus.WAIT_REQUEST.name().equals(entity.getRequestStatus())) {
+            throw new JeecgBootException("鏁版嵁鐘舵�佷笉鍙姹俉MS锛�");
+        }
+        WebReservationOrder request = new WebReservationOrder();
+        request.setFactoryCode("2301");
+        request.setReservationOrder(entity.getReservationCode());
+        request.setTotal(entity.getSpecifiedQuantity());
+        Map<String, Object> resultMap = wmsWebServiceClient.receiveReservation(request);
+        WSResponse result = (WSResponse) resultMap.get("result");
+        if ("Y".equals(result.getErrorCode())) {
+            entity.setRequestStatus(MaterialTransferRequestStatus.REQUESTED.name());
+            entity.setRequestTime(new Date());
+            super.updateById(entity);
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public MesMaterialTransferRequest queryByReservationCode(String reservationCode) {
+        LambdaQueryWrapper<MesMaterialTransferRequest> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(MesMaterialTransferRequest::getReservationCode, reservationCode);
+        queryWrapper.eq(MesMaterialTransferRequest::getDelFlag, CommonConstant.DEL_FLAG_0);
+        List<MesMaterialTransferRequest> list = super.list(queryWrapper);
+        if (CollectionUtil.isNotEmpty(list)) {
+            return list.get(0);
+        }
+        return null;
+    }
 }

--
Gitblit v1.9.3