Blame view

src/main/java/com/huaheng/api/wcs/service/overrideHandle/OverrideHandleServiceImpl.java 9.76 KB
pengcheng authored
1
2
package com.huaheng.api.wcs.service.overrideHandle;
pengcheng authored
3
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4
5
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
周鸿 authored
6
import com.huaheng.common.utils.Wrappers;
pengcheng authored
7
import com.huaheng.api.wcs.domain.TaskFinishDomain;
8
import com.huaheng.api.wcs.service.warecellAllocation.LocationAllocationService;
9
import com.huaheng.api.wcs.service.warecellAllocation.WarecellAllocationService;
10
import com.huaheng.common.constant.QuantityConstant;
pengcheng authored
11
12
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
游杰 authored
13
import com.huaheng.common.utils.security.ShiroUtils;
pengcheng authored
14
import com.huaheng.framework.web.domain.AjaxResult;
15
import com.huaheng.framework.web.service.ConfigService;
16
17
import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail;
import com.huaheng.pc.config.FilterConfigDetail.service.FilterConfigDetailService;
18
19
import com.huaheng.pc.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
pengcheng authored
20
21
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.location.service.LocationService;
22
23
import com.huaheng.pc.config.locationType.domain.LocationType;
import com.huaheng.pc.config.locationType.service.LocationTypeService;
24
25
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
pengcheng authored
26
27
28
29
import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService;
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader;
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
30
import com.huaheng.pc.receipt.receiving.service.ReceivingService;
pengcheng authored
31
32
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
pengcheng authored
33
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
pengcheng authored
34
35
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import org.springframework.beans.factory.annotation.Autowired;
pengcheng authored
36
import org.springframework.stereotype.Service;
pengcheng authored
37
38
import org.springframework.transaction.annotation.Transactional;
39
import javax.annotation.Resource;
pengcheng authored
40
import java.util.ArrayList;
41
import java.util.HashMap;
pengcheng authored
42
import java.util.List;
43
44
import java.util.Map;
import java.util.stream.Collectors;
pengcheng authored
45
46
47
48

@Service
public class OverrideHandleServiceImpl implements OverrideHandleService {
pengcheng authored
49
50
51
52
53
54
55
56
57
58
59

    @Autowired
    private TaskHeaderService taskHeaderService;
    @Autowired
    private TaskDetailService taskDetailService;
    @Autowired
    private LocationService locationService;
    @Autowired
    private ReceiptContainerHeaderService receiptContainerHeaderService;
    @Autowired
    private ReceiptContainerDetailService receiptContainerDetailService;
60
61
62
63
    @Resource
    private WarecellAllocationService warecellAllocationService;
    @Resource
    private FilterConfigDetailService filterConfigDetailService;
64
65
66
67
68
69
    @Resource
    private LocationTypeService locationTypeService;
    @Resource
    private ReceivingService receivingService;
    @Resource
    private ContainerService containerService;
70
71
72
73
74
75
    @Resource
    private LocationAllocationService locationAllocationService;
    @Resource
    private ConfigService configService;
    @Resource
    private MaterialService materialService;
pengcheng authored
76
77
78
    /**
     * 重入处理
     * 1、判断非空字段
pengcheng authored
79
80
     * 2、根据任务号查找任务
     * 3、修改任务目的库位,修改入库组盘的库位,修改库位状态
pengcheng authored
81
82
83
     */

    @Override
pengcheng authored
84
    @Transactional
pengcheng authored
85
    public AjaxResult OverrideHandle(TaskFinishDomain taskFinishDomain) {
游杰 authored
86
87

        String taskNo = taskFinishDomain.getTaskNo();
pengcheng authored
88
pengcheng authored
89
        //1、判断非空字段
90
        if(StringUtils.isEmpty(taskNo)) {
pengcheng authored
91
92
            return AjaxResult.error("任务号为空");
        }
93
94
95
        if(StringUtils.isEmpty(taskFinishDomain.getWarehouseCode())){
            throw new ServiceException("仓库号为空");
        }
pengcheng authored
96
        //2、根据任务号查找任务
97
        TaskHeader taskHeader = taskHeaderService.getById(taskNo);
pengcheng authored
98
99
100
        if(taskHeader == null){
            return AjaxResult.error("任务号错误,没有找到该任务");
        }
101
        String warehouseCode = taskHeader.getWarehouseCode();
游杰 authored
102
        int status = taskHeader.getStatus();
103
        if(status == QuantityConstant.TASK_STATUS_COMPLETED) {
104
105
            return AjaxResult.error("任务已完成");
        }
pengcheng authored
106
107
108
109
110

        //3、修改任务目的库位,修改入库组盘的库位,修改库位状态
        //修改原来目的库位的状态
        LambdaQueryWrapper<Location> locationLam = Wrappers.lambdaQuery();
        locationLam.eq(Location::getCode,taskHeader.getToLocation())
111
                .eq(Location::getWarehouseCode, warehouseCode);
pengcheng authored
112
        Location location = locationService.getOne(locationLam);
游杰 authored
113
        if(location == null) {
pengcheng authored
114
115
            return AjaxResult.error("此任务的原目的库位在系统中不存在");
        }
pengcheng authored
116
        /**
游杰 authored
117
         *  重入的库位由wms提供
pengcheng authored
118
         */
119
        String newLocationCode = null;
游杰 authored
120
121
        //重入的库位由wms提供
        //查询任务明细
122
        String value = configService.getKey(QuantityConstant.RULE_ALLOCATION,warehouseCode);
游杰 authored
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
        if (StringUtils.isEmpty(value)) {
            return AjaxResult.error("未绑定定位规则");
        }
        int allocationRule = Integer.parseInt(value);
        List<String> locationTypeCodeList = new ArrayList<>();
        String locationType = location.getLocationType();
        if(StringUtils.isNotEmpty(locationType)) {
            locationTypeCodeList.add(locationType);
        }
        int high = location.getHigh();
        String area = location.getArea();
        String roadWay = location.getRoadway();
        List<String> roadWays = new ArrayList<>();
        roadWays.add(roadWay);
        String containerCode = taskHeader.getContainerCode();
        List<TaskDetail> taskDetailList = taskDetailService.findByTaskId(taskHeader.getId());
        String materialAreaCode = null;
        if(taskDetailList != null && taskDetailList.size() > 0) {
            String materialCode = taskDetailList.get(0).getMaterialCode();
肖超群 authored
142
            Material material = materialService.getMaterialByCode(materialCode, warehouseCode);
游杰 authored
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
            materialAreaCode = material.getMaterialAreaCode();
        }
        String locationCode = locationAllocationService.allocation(allocationRule,
              locationTypeCodeList, high, area, roadWays, warehouseCode, containerCode, materialAreaCode);
        if (StringUtils.isEmpty(locationCode)) {
            return AjaxResult.error("没有库位可分配");
        }
        int taskType = taskHeader.getTaskType();
        if (taskType == QuantityConstant.TASK_TYPE_WHOLERECEIPT ||
                taskType == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT) {
            //查询入库组盘明细
            List<ReceiptContainerDetail> receiptContainerDetailList = new ArrayList<>();
            if(taskDetailList != null) {
                for (TaskDetail taskDetail : taskDetailList) {
                    receiptContainerDetailList.add(receiptContainerDetailService.
                            getById(taskDetail.getAllocationId()));
159
160
                }
            }
游杰 authored
161
162
163
164
165
166
167
            ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(receiptContainerDetailList.get(0).getReceiptContainerId());
            LambdaUpdateWrapper<ReceiptContainerDetail> wrapper = Wrappers.lambdaUpdate();
            wrapper.set(ReceiptContainerDetail::getLocationCode, locationCode)
                    .in(ReceiptContainerDetail::getId, receiptContainerDetailList.stream().map(ReceiptContainerDetail::getId).collect(Collectors.toList()));
            receiptContainerDetailService.update(wrapper);
            receiptContainerHeader.setToLocation(locationCode);
            receiptContainerHeaderService.updateById(receiptContainerHeader);
168
        }
游杰 authored
169
170
        newLocationCode = locationCode;
游杰 authored
171
172
173
        if (StringUtils.isEmpty(newLocationCode)) {
            return AjaxResult.error("没有库位可以分配");
pengcheng authored
174
        }
175
176
        locationService.updateStatus(newLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
        String toLocationCode = taskHeader.getToLocation();
pengcheng authored
177
pengcheng authored
178
        //修改任务
179
        taskHeader.setToLocation(newLocationCode);
pengcheng authored
180
        taskHeader.setExceptionCode("重入处理");
181
        taskHeader.setIsDoubleIn(QuantityConstant.DOUBLE_IN);
游杰 authored
182
183
184
185
        String originLocationCode = taskHeader.getOriginLocation();
        if(StringUtils.isEmpty(originLocationCode)) {
            taskHeader.setOriginLocation(toLocationCode);
        }
186
        if(!taskHeaderService.updateById(taskHeader)){
pengcheng authored
187
188
189
190
191
            throw new ServiceException("修改此任务错误");
        }

        //修改子任务
        LambdaQueryWrapper<TaskDetail> taskDetailLam = Wrappers.lambdaQuery();
192
        taskDetailLam.eq(TaskDetail::getWarehouseCode, warehouseCode)
pengcheng authored
193
194
                .eq(TaskDetail::getTaskId,taskHeader.getId());
        List<TaskDetail> taskDetails = taskDetailService.list(taskDetailLam);
游杰 authored
195
        taskDetailList = new ArrayList<>();
196
        if(taskDetails != null && taskDetails.size()> 0) {
pengcheng authored
197
            for(TaskDetail taskDetail : taskDetails){
198
                taskDetail.setToLocation(newLocationCode);
pengcheng authored
199
200
                taskDetailList.add(taskDetail);
            }
201
            if(!taskDetailService.updateBatchById(taskDetailList)) {
pengcheng authored
202
203
204
205
                throw new ServiceException("修改此任务的明细错误");
            }
        }
206
207
208
209
        Map<String, String> map = new HashMap<>();
        map.put("RedirectionLocationCode", newLocationCode);
        map.put("taskNo", String.valueOf(taskHeader.getId()));
        return AjaxResult.success("重入处理成功").setData(map);
pengcheng authored
210
211
    }
}