新火炬后端单体项目初始化代码
zhangherong
19 小时以前 e5199245eb5304daf88b86621e829d5711788de8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package org.jeecg.modules.mes.service.impl;
 
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.*;
 
/**
 * @Description: 物料拉动申请
 * @Author: jeecg-boot
 * @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("数据状态不可请求WMS!");
        }
        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;
    }
}