Blame view

src/main/java/com/huaheng/api/wcs/service/overrideHandle/OverrideHandleServiceImpl.java 9.58 KB
pengcheng authored
1
2
package com.huaheng.api.wcs.service.overrideHandle;
pengcheng authored
3
4
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
pengcheng authored
5
import com.huaheng.api.wcs.domain.TaskFinishDomain;
pengcheng authored
6
import com.huaheng.api.wcs.domain.WcsTask;
7
import com.huaheng.api.wcs.service.warecellAllocation.WarecellAllocationService;
pengcheng authored
8
9
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
pengcheng authored
10
import com.huaheng.common.utils.security.ShiroUtils;
pengcheng authored
11
import com.huaheng.framework.web.domain.AjaxResult;
12
13
import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail;
import com.huaheng.pc.config.FilterConfigDetail.service.FilterConfigDetailService;
pengcheng authored
14
15
16
17
18
19
20
21
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.location.service.LocationService;
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;
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
pengcheng authored
22
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
pengcheng authored
23
24
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import org.springframework.beans.factory.annotation.Autowired;
pengcheng authored
25
import org.springframework.stereotype.Service;
pengcheng authored
26
27
import org.springframework.transaction.annotation.Transactional;
28
import javax.annotation.Resource;
pengcheng authored
29
30
import java.util.ArrayList;
import java.util.List;
pengcheng authored
31
32
33
34

@Service
public class OverrideHandleServiceImpl implements OverrideHandleService {
pengcheng authored
35
36
37
38
39
40
41
42
43
44
45

    @Autowired
    private TaskHeaderService taskHeaderService;
    @Autowired
    private TaskDetailService taskDetailService;
    @Autowired
    private LocationService locationService;
    @Autowired
    private ReceiptContainerHeaderService receiptContainerHeaderService;
    @Autowired
    private ReceiptContainerDetailService receiptContainerDetailService;
46
47
48
49
    @Resource
    private WarecellAllocationService warecellAllocationService;
    @Resource
    private FilterConfigDetailService filterConfigDetailService;
pengcheng authored
50
pengcheng authored
51
52
53
    /**
     * 重入处理
     * 1、判断非空字段
pengcheng authored
54
55
     * 2、根据任务号查找任务
     * 3、修改任务目的库位,修改入库组盘的库位,修改库位状态
pengcheng authored
56
57
58
     */

    @Override
pengcheng authored
59
    @Transactional
pengcheng authored
60
    public AjaxResult OverrideHandle(TaskFinishDomain taskFinishDomain) {
pengcheng authored
61
62
        Boolean flag = true;
pengcheng authored
63
        //1、判断非空字段
pengcheng authored
64
        if(StringUtils.isEmpty(taskFinishDomain.getTaskNo())){
pengcheng authored
65
66
            return AjaxResult.error("任务号为空");
        }
pengcheng authored
67
        if(StringUtils.isEmpty(taskFinishDomain.getToLocationCode())){
pengcheng authored
68
69
            return AjaxResult.error("目的库位为空");
        }
pengcheng authored
70
        if(StringUtils.isEmpty(taskFinishDomain.getRedirectionLocationCode())){
71
            return AjaxResult.error("重入的库位编码为空");
pengcheng authored
72
73
74
        }
pengcheng authored
75
pengcheng authored
76
        //2、根据任务号查找任务
pengcheng authored
77
        TaskHeader taskHeader = taskHeaderService.getById(Integer.valueOf(taskFinishDomain.getTaskNo()));
pengcheng authored
78
79
80
        if(taskHeader == null){
            return AjaxResult.error("任务号错误,没有找到该任务");
        }
81
82
83
        if(taskHeader.getStatus() == 100){
            return AjaxResult.error("任务已完成");
        }
pengcheng authored
84
85
86
87
88
89
90
91
92
93
94

        //3、修改任务目的库位,修改入库组盘的库位,修改库位状态
        //修改原来目的库位的状态
        LambdaQueryWrapper<Location> locationLam = Wrappers.lambdaQuery();
        locationLam.eq(Location::getCode,taskHeader.getToLocation())
                .eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode());
        Location location = locationService.getOne(locationLam);
        if(location == null){
            return AjaxResult.error("此任务的原目的库位在系统中不存在");
        }
        location.setStatus("empty");
95
        location.setContainerCode("");
pengcheng authored
96
97
98
99
100
        flag = locationService.updateById(location);
        if(flag == false){
            return AjaxResult.error("修改此任务的原目的库位错误");
        }
pengcheng authored
101
102
103
104
105
106
107
108

        /**
         *  查看新库位有两种情况
         *  1、重入的库位由wcs提供
         *  2、重入的库位由wms提供
         */

        Location newlocation =new Location();
109
        String code=ShiroUtils.getWarehouseCode();
pengcheng authored
110
111
        //重入的库位由wcs提供
        if(!taskFinishDomain.getRedirectionLocationCode().equals("0")) {
112
113
114
            LambdaQueryWrapper<Location> locationLa = Wrappers.lambdaQuery();
            locationLa.eq(Location::getCode, taskFinishDomain.getRedirectionLocationCode())
                    .eq(Location::getStatus,"empty")
pengcheng authored
115
                    .eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode());
116
            newlocation = locationService.getOne(locationLa);
pengcheng authored
117
            if (newlocation == null) {
118
119
120
121
                throw new ServiceException("新目的库位在系统中不存在或非空闲");
            }
            if(StringUtils.isNotEmpty(newlocation.getContainerCode())){
                throw new ServiceException("新目的库位在系统中已经有容器");
pengcheng authored
122
123
124
            }
        }else {
            //重入的库位由wms提供
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
            //查询任务明细
            LambdaQueryWrapper<TaskDetail> taskDetailLambda = Wrappers.lambdaQuery();
            taskDetailLambda.eq(TaskDetail::getTaskId, taskFinishDomain.getTaskNo());
            List<TaskDetail> taskDetailList = taskDetailService.list(taskDetailLambda);
            //查询入库组盘明细
            List<ReceiptContainerDetail> receiptContainerDetailList = new ArrayList<>();
            for (TaskDetail taskDetail : taskDetailList) {
                receiptContainerDetailList.add(receiptContainerDetailService.getById(taskDetail.getAllocationId()));
            }
            ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(receiptContainerDetailList.get(0).getReceiptContainerId());
            String locatingRule = warecellAllocationService.taskPositioning(receiptContainerDetailList.get(0));

            LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambda = Wrappers.lambdaQuery();
            filterConfigDetailLambda.eq(FilterConfigDetail::getCode, locatingRule);
            FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(filterConfigDetailLambda);
pengcheng authored
140
141
142
143
144
            //根据定位规则查询库位编码
            LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery();
            locationLambda.last(filterConfigDetail.getStatement());
            newlocation = locationService.getOne(locationLambda);
pengcheng authored
145
        }
pengcheng authored
146
pengcheng authored
147
        //修改任务
pengcheng authored
148
149
        taskHeader.setToLocation(newlocation.getCode());
        taskHeader.setExceptionCode("重入处理");
pengcheng authored
150
151
152
153
154
155
156
157
158
159
160
161
162
        flag = taskHeaderService.updateById(taskHeader);
        if(flag == false){
            throw new ServiceException("修改此任务错误");
        }

        //修改子任务
        LambdaQueryWrapper<TaskDetail> taskDetailLam = Wrappers.lambdaQuery();
        taskDetailLam.eq(TaskDetail::getWarehouseCode,ShiroUtils.getWarehouseCode())
                .eq(TaskDetail::getTaskId,taskHeader.getId());
        List<TaskDetail> taskDetails = taskDetailService.list(taskDetailLam);
        List<TaskDetail> taskDetailList = new ArrayList<>();
        if(taskDetails != null && taskDetails.size()> 0){
            for(TaskDetail taskDetail : taskDetails){
pengcheng authored
163
                taskDetail.setToLocation(newlocation.getCode());
pengcheng authored
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
                taskDetailList.add(taskDetail);
            }
            flag = taskDetailService.updateBatchById(taskDetailList);
            if(flag == false){
                throw new ServiceException("修改此任务的明细错误");
            }
        }

        //修改入库组盘
        if(taskHeader.getAllocationHeadId() == null){
            throw new ServiceException("找不到此任务的组盘头id");
        }
        ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(taskHeader.getAllocationHeadId());
        if(receiptContainerHeader == null){
            throw new ServiceException("找不到此任务的组盘头");
        }
pengcheng authored
180
        receiptContainerHeader.setToLocation(newlocation.getCode());
pengcheng authored
181
182
183
184
185
186
187
188
189
190
        flag = receiptContainerHeaderService.updateById(receiptContainerHeader);
        if(flag == false){
            throw new ServiceException("修改此任务对应的组盘头错误");
        }

        //修改入库组盘明细
        LambdaQueryWrapper<ReceiptContainerDetail> lam = Wrappers.lambdaQuery();
        lam.eq(ReceiptContainerDetail::getReceiptContainerId,receiptContainerHeader.getId())
                .eq(ReceiptContainerDetail::getWarehouseCode,ShiroUtils.getWarehouseCode());
        List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(lam);
pengcheng authored
191
pengcheng authored
192
193
194
        List<ReceiptContainerDetail> receiptContainerDetailList = new ArrayList<>();
        if(receiptContainerDetails != null && receiptContainerDetails.size()> 0){
            for(ReceiptContainerDetail receiptContainerDetail : receiptContainerDetails){
pengcheng authored
195
                receiptContainerDetail.setLocationCode(newlocation.getCode());
pengcheng authored
196
197
198
199
200
201
202
203
                receiptContainerDetailList.add(receiptContainerDetail);
            }
            flag = receiptContainerDetailService.updateBatchById(receiptContainerDetailList);
            if(flag == false){
                throw new ServiceException("修改此任务的组盘明细错误");
            }
        }
        return AjaxResult.success("重入处理成功");
pengcheng authored
204
205
    }
}