新火炬后端单体项目初始化代码
cuilei
7 小时以前 d11feb8336d609a47695f849cc377a0a5f8dbb3b
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
128
129
130
131
132
133
134
135
136
137
138
139
140
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.*;
 
/**
 * @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;
    }
 
    @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;
    }
}