Blame view

src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java 32.1 KB
mahuandong authored
1
2
package com.huaheng.pc.task.taskHeader.service;
pengcheng authored
3
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
wangyanxiong authored
4
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
pengcheng authored
5
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
wangyanxiong authored
6
import com.huaheng.common.exception.service.ServiceException;
wangyanxiong authored
7
import com.huaheng.common.utils.DataUtils;
wangyanxiong authored
8
import com.huaheng.common.utils.StringUtils;
pengcheng authored
9
10
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
xqs authored
11
import com.huaheng.pc.config.container.domain.Container;
pengcheng authored
12
13
14
15
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.location.service.LocationService;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
16
17
import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader;
import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
wangyanxiong authored
18
import com.huaheng.pc.inventory.inventoryTransaction.domain.InventoryTransaction;
19
import com.huaheng.pc.inventory.inventoryTransaction.service.InventoryTransactionService;
xqs authored
20
21
import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService;
mahuandong authored
22
23
24
25
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader;
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
xqs authored
26
27
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
pengcheng authored
28
29
30
31
32
33
34
import com.huaheng.pc.shipment.shipmentContainerDetail.domain.ShipmentContainerDetail;
import com.huaheng.pc.shipment.shipmentContainerDetail.service.ShipmentContainerDetailService;
import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentContainerHeader;
import com.huaheng.pc.shipment.shipmentContainerHeader.service.ShipmentContainerHeaderService;
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
import com.huaheng.pc.task.taskHeader.domain.ShipmentTaskCreateModel;
pengcheng authored
35
pengcheng authored
36
import org.springframework.beans.factory.annotation.Autowired;
mahuandong authored
37
import org.springframework.stereotype.Service;
pengcheng authored
38
39
import java.math.BigDecimal;
import java.util.Date;
mahuandong authored
40
import java.util.List;
wangyanxiong authored
41
import java.util.Map;
mahuandong authored
42
43
44
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.mapper.TaskHeaderMapper;
pengcheng authored
45
46
import org.springframework.transaction.annotation.Transactional;
wangyanxiong authored
47
48
import javax.annotation.Resource;
mahuandong authored
49
@Service
wangyanxiong authored
50
public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHeader> implements TaskHeaderService {
mahuandong authored
51
pengcheng authored
52
53
54
55
56
57
58
59
60
61
    @Autowired
    private ShipmentContainerHeaderService shipmentContainerHeaderService;
    @Autowired
    private ShipmentContainerDetailService shipmentContainerDetailService;
    @Autowired
    private LocationService locationService;
    @Autowired
    private InventoryDetailService inventoryDetailService;
    @Autowired
    private TaskDetailService taskDetailService;
wangyanxiong authored
62
63
    @Autowired
    private TaskHeaderService taskHeaderService;
pengcheng authored
64
65
66
67
68
69
70
    @Autowired
    private InventoryHeaderService inventoryHeaderService;

    @Autowired
    private InventoryTransactionService  inventoryTransactionService;
xqs authored
71
72
73
    @Autowired
    private ReceiptHeaderService receiptHeaderService;
mahuandong authored
74
75
76
    @Resource
    private ReceiptDetailService receiptDetailService;
xqs authored
77
78
79
    @Autowired
    private ReceiptContainerDetailService receiptContainerDetailService;
mahuandong authored
80
81
82
    @Resource
    private ReceiptContainerHeaderService receiptContainerHeaderService;
xqs authored
83
84
85
wangyanxiong authored
86
87
88
    @Resource
    private TaskHeaderMapper taskHeaderMapper;
pengcheng authored
89
90
    /**
     * 生成出库任务
wangyanxiong authored
91
     *
pengcheng authored
92
93
94
95
96
     * @param shipmentTaskCreateModel
     * @return
     */
    @Override
    @Transactional
wangyanxiong authored
97
    public AjaxResult createTaskFromShipmentContainers(ShipmentTaskCreateModel shipmentTaskCreateModel) {
pengcheng authored
98
99
100
        Integer shipmentContainerHeaderId = shipmentTaskCreateModel.getShipmentContainerHeaderIds();
        //获取表头
        ShipmentContainerHeader shipmentContainerHeader = shipmentContainerHeaderService.getById(shipmentContainerHeaderId);
wangyanxiong authored
101
        if (shipmentContainerHeader == null) {
pengcheng authored
102
103
            return AjaxResult.error("出库货箱" + shipmentContainerHeaderId + "未找到,操作中止");
        }
wangyanxiong authored
104
        if (shipmentContainerHeader.getStatus() > 9) {
pengcheng authored
105
106
107
            return AjaxResult.error("出库货箱" + shipmentContainerHeader.getContainerCode() + "已经生成任务,请不要重复生成,操作中止");
        }
        //获取所有子货箱
wangyanxiong authored
108
109
        LambdaQueryWrapper<ShipmentContainerDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
        lambdaQueryWrapper.eq(ShipmentContainerDetail::getShippingContainerId, shipmentContainerHeader.getId());
pengcheng authored
110
        List<ShipmentContainerDetail> shipmentContainerDetails = shipmentContainerDetailService.list(lambdaQueryWrapper);
wangyanxiong authored
111
        if (shipmentContainerDetails == null || shipmentContainerDetails.size() == 0) {
pengcheng authored
112
113
114
            return AjaxResult.error("货箱" + shipmentContainerHeader.getContainerCode() + "没有子任务,操作中止");
        }
        //检测库位
wangyanxiong authored
115
116
117
118
        LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery();
        locationLambdaQueryWrapper.eq(Location::getCode, shipmentContainerHeader.getLocationCode())
                .eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode())
                .eq(Location::getDeleted, false);
pengcheng authored
119
        Location location = locationService.getOne(locationLambdaQueryWrapper);
wangyanxiong authored
120
        if (location == null) {
pengcheng authored
121
122
123
124
125
126
            return AjaxResult.error("库位禁用或不存在!");
        }
        //创建任务头
        TaskHeader task = new TaskHeader();
        //分拣出库
        task.setTaskType(400);
mahuandong authored
127
        task.setToLocation(shipmentContainerHeader.getLocationCode());
pengcheng authored
128
        //判断是否整出任务,钱柜和AGV不能整出
wangyanxiong authored
129
        if (shipmentContainerHeader.getStatus().intValue() == 300) {
pengcheng authored
130
131
132
133
134
135
            //表示整出优先
            //判断当前子货箱所有数量是否等于该托盘对应的所有库存的数量,
            //这里必须与库存的在库数量对比,后期可能存在一个配盘在执行任务,后一个配盘又在配这个的情况(这个时候不能整出)
            // 如果相等,则说明这个货箱包含了所有的数量,则可以整出,否则,创建拣选任务;
            //查询所有库存
            InventoryDetail inventoryCondition = new InventoryDetail();
wangyanxiong authored
136
137
138
            LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
            inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getLocationCode, shipmentContainerHeader.getLocationCode())
                    .eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode());
pengcheng authored
139
            List<InventoryDetail> inventories = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
wangyanxiong authored
140
141
            BigDecimal inventoryTotal = new BigDecimal("0");
            for (InventoryDetail item : inventories) {
pengcheng authored
142
143
144
                inventoryTotal = inventoryTotal.add(item.getQty());
            }
            BigDecimal containerTotal = new BigDecimal("0");
wangyanxiong authored
145
            for (ShipmentContainerDetail item : shipmentContainerDetails) {
pengcheng authored
146
147
                containerTotal = containerTotal.add(item.getQty());
            }
wangyanxiong authored
148
            if (inventoryTotal.compareTo(containerTotal) == 0) {
pengcheng authored
149
                task.setTaskType(300);//整盘出库
mahuandong authored
150
                task.setToLocation("");
pengcheng authored
151
152
153
154
            }
        }
        task.setWarehouseCode(shipmentContainerHeader.getWarehouseCode());
        task.setCompanyCode(shipmentContainerHeader.getCompanyCode());
wangyanxiong authored
155
        task.setInternalTaskType(null);
pengcheng authored
156
157
158
159
160
161
162
163
164
165
        task.setAssignedUser(ShiroUtils.getLoginName());
        task.setConfirmedBy(ShiroUtils.getLoginName());
        task.setStatus(1);
        task.setContainerCode(shipmentContainerHeader.getContainerCode());
        task.setCreatedBy(ShiroUtils.getLoginName());
        task.setCreated(new Date());
        task.setLastUpdatedBy(ShiroUtils.getLoginName());
        task.setLastUpdated(null);
        this.save(task);
        //遍历子货箱创建子任务
wangyanxiong authored
166
        for (ShipmentContainerDetail shipmentContainerDetail : shipmentContainerDetails) {
pengcheng authored
167
168
169
170
            TaskDetail taskDetail = new TaskDetail();
            taskDetail.setTaskId(task.getId());
            taskDetail.setWarehouseCode(task.getWarehouseCode());
            taskDetail.setCompanyCode(task.getCompanyCode());
mahuandong authored
171
172
            taskDetail.setTaskType(2);
            taskDetail.setBillCode(shipmentContainerDetail.getShipmentCode());
pengcheng authored
173
174
175
176
            taskDetail.setBillCode(shipmentContainerDetail.getShipmentCode());
            taskDetail.setBillDetailId(shipmentContainerDetail.getShipmentDetailId());
            taskDetail.setMaterialCode(shipmentContainerDetail.getMaterialCode());
            taskDetail.setMaterialName(shipmentContainerDetail.getMaterialName());
pengcheng authored
177
178
            taskDetail.setMaterialSpec(shipmentContainerDetail.getMaterialSpec());
            taskDetail.setMaterialUnit(shipmentContainerDetail.getMaterialUnit());
pengcheng authored
179
180
181
            taskDetail.setFromInventoryId(shipmentContainerDetail.getInventoryId());
            taskDetail.setQty(shipmentContainerDetail.getQty());
            taskDetail.setContainerCode(task.getContainerCode());
mahuandong authored
182
183
            taskDetail.setFromLocation(task.getFromLocation());
            taskDetail.setToLocation(task.getToLocation());
pengcheng authored
184
            taskDetail.setStatus(1);
mahuandong authored
185
            taskDetail.setTaskType(2);
pengcheng authored
186
187
188
189
190
191
192
193
194
195
196
197
198
            taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
            taskDetail.setLastUpdated(null);
            taskDetailService.save(taskDetail);
        }
        //更新货位状态
        ShipmentContainerHeader record = new ShipmentContainerHeader();
        record.setId(shipmentContainerHeaderId);
        record.setStatus(10);
        record.setStatus(task.getTaskType());//实际出库类型
        shipmentContainerHeaderService.saveOrUpdate(record);
        return AjaxResult.success(task.getId());

    }
wangyanxiong authored
199
200
201

    @Override
    public AjaxResult<TaskHeader> sendTaskToWcs(Integer[] taskIds) {
wangyanxiong authored
202
203
        TaskHeader task = null;
        for (Integer taskId : taskIds) {
wangyanxiong authored
204
            task = taskHeaderService.getById(taskId);
wangyanxiong authored
205
            if (task.getStatus() > 9) {
wangyanxiong authored
206
207
208
209
210
211
212
                return AjaxResult.error("任务" + taskId + "已经下发,请不要重复下发,操作中止");
            }
            //修改任务头表
            task.setStatus(10);
            task.setStartPickDateTime(new Date());   //生成时间
            task.setLastUpdated(new Date());
            task.setLastUpdatedBy(ShiroUtils.getLoginName());
wangyanxiong authored
213
214
215
            LambdaUpdateWrapper<TaskHeader> HeaderUpdateWrapper = Wrappers.lambdaUpdate();
            HeaderUpdateWrapper.eq(TaskHeader::getId, taskId);
            taskHeaderService.update(task, HeaderUpdateWrapper);
wangyanxiong authored
216
217
218
219
220
            //修改任务明细状态
            TaskDetail record = new TaskDetail();
            record.setStatus(10);
            record.setLastUpdated(new Date());
            record.setLastUpdatedBy(ShiroUtils.getLoginName());
wangyanxiong authored
221
222
223
            LambdaUpdateWrapper<TaskDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
            lambdaUpdateWrapper.eq(TaskDetail::getTaskId, task.getId());
            taskDetailService.update(record, lambdaUpdateWrapper);
wangyanxiong authored
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255


//            if (task.getInternalTaskType().equals("100"))
//            {
//                List<Map<String, Object>> maps = taskDetailService.selectListMapByEqual("billId, billDetailId", condition);
//                for (Map<String, Object> item : maps){
//                    Integer billDetailId = DataUtils.getInteger(item.get("billDetailId"));
//                    receiptHeaderService.updateDetailStatus(billDetailId, (short)300);
//                }
//                maps.stream().map(X -> X.get("billId")).distinct().forEach(X -> receiptHeaderService.receiptStatusUpdate(DataUtils.getInteger(X), (short)300));
//            }
//            //盘点单执行
//            if(task.getType() == 700){
//                CyclecountDetail cyclecountDetai = cyclecountDetailService.selectEntityById(
//                        task.getAllocationHeadId());
//                cyclecountDetai.setStatus(10);
//                cyclecountDetailService.updateByModel(cyclecountDetai);
//            }
////            //如果是单排人工库,那么出入库都是先完成,在下发AGV任务
////            if (task.getType().intValue() == 300 || task.getType().intValue() == 600)   {
////                if (task.getSourceLocation().startsWith("L03") == false )   {
////                    taskAgvService.createTaskAgv(task);
////                }
////            }
////            else    {
////                taskAgvService.createTaskAgv(task);
////            }
//            //任务类型是出库,那就完成任务在叫agv
//            if (task.getType().intValue() == 100 || task.getType().intValue() == 500)   {
//                taskAgvService.createTaskAgv(task);
//            }
        }
wangyanxiong authored
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
        return AjaxResult.success("下发任务成功", task);
    }

    @Override
    public AjaxResult completeTaskByWMS(Integer[] taskIds) throws Exception {
        for (int taskId : taskIds) {
            TaskHeader task = taskHeaderService.getById(taskId);
            if (task == null) {
                throw new ServiceException("任务" + taskId + "未找到,执行中止");
            }
            //如果已完成则不管
            if (task.getStatus() == 100) {
                throw new ServiceException("任务(" + taskId + ")任务已经是完成的!");
            }
            //如果没有库位不能完成
mahuandong authored
271
            if (StringUtils.isEmpty(task.getToLocation())) {
wangyanxiong authored
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
                throw new ServiceException("任务" + taskId + "没有库位,执行中止");
            }
            this.completeTask(task);
        }

        return AjaxResult.success("完成任务成功!");
    }

    /**
     * 完成任务
     *
     * @param task
     * @throws Exception
     */
    public void completeTask(TaskHeader task) throws Exception {
        //区分任务类型
        if (task.getInternalTaskType() == 100 || task.getInternalTaskType() == 200) {
            //入库任务
            completeReceiptTask(task);
        }
        if (task.getInternalTaskType() == 300 || task.getInternalTaskType() == 400) {
//            //出库任务
//            completeShipmentTask(task);
        }
        //...其他任务类型暂时不处理    // 700 盘点   800 移库  900 出库查看
        if (task.getInternalTaskType() == 700 || task.getInternalTaskType() == 900) {
//            completeCycleCountOrSeeOutTask(task);
        }
        if (task.getInternalTaskType() == 800) {
//            //移库
//            completeTransferTask(task);
        }
        if (task.getInternalTaskType() == 500) {
//            //空托盘入库
//            completeEmptyIn(task);
        }
        if (task.getInternalTaskType() == 600) {
//            //空托盘出库
//            completeEmptyOut(task);
        }
    }

    @Override
    public AjaxResult completeReceiptTask(TaskHeader task) throws Exception {
        List<Map<String, Object>> taskReceiptContainerDetail =taskHeaderMapper.getReceiptTask(task.getId());
317
318
319
        if (taskReceiptContainerDetail.size()<1){
            return AjaxResult.success("未找到对应任务的入库单号!!!");
        }
wangyanxiong authored
320
321
322
        for (Map<String, Object> map : taskReceiptContainerDetail) {
            //将未完成的任务数量更新到库存表
            if (DataUtils.getInteger(map.get("status")) < 100) {
323
324
                LambdaQueryWrapper<InventoryDetail> inventory =Wrappers.lambdaQuery();
                inventory.eq(InventoryDetail::getWarehouseCode,ShiroUtils.getWarehouseCode())
mahuandong authored
325
                         .eq(InventoryDetail::getLocationCode,task.getToLocation())
xqs authored
326
                         .eq(InventoryDetail::getReceiptDetailId,DataUtils.getString(map.get("receiptDetailId")))
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
                         .eq(InventoryDetail::getContainerCode,DataUtils.getString(map.get("containerCode")));
                         InventoryDetail detail=inventoryDetailService.getOne(inventory);
                if (detail == null)
                {
                    //添加库存单
                    InventoryHeader header = new InventoryHeader();
                    header.setWarehouseCode(DataUtils.getString(map.get("warehouseCode")));//仓库
                    header.setCompanyCode(task.getCompanyCode());//货主
                    header.setContainerCode(DataUtils.getString(map.get("containerCode")));//容器号
                    header.setTotalQty(DataUtils.getInteger(map.get("totalQty")));//总数量
                    header.setLocking(1);
                    header.setEnable(1);
                    header.setCreatedBy(ShiroUtils.getLoginName());
                    header.setCreated(new Date());
                    header.setLastUpdated(new Date());
                    inventoryHeaderService.save(header);
                    //库存明细添加
                    detail = new InventoryDetail();
                    detail.setInventoryHeaderId(header.getId());//库存头ID
                    detail.setWarehouseCode(DataUtils.getString(map.get("warehouseCode")));//仓库
                    detail.setCompanyCode(task.getCompanyCode());//货主
mahuandong authored
348
                    detail.setLocationCode(task.getToLocation());//库位号
349
350
351
352
353
                    detail.setContainerCode(DataUtils.getString(map.get("containerCode")));//容器号
                    detail.setMaterialCode(DataUtils.getString(map.get("materialCode")));//物料号
                    detail.setMaterialName(DataUtils.getString(map.get("materialName")));//物料名称
                    detail.setMaterialSpec(DataUtils.getString(map.get("materialSpec")));//物料规格
                    detail.setReceiptCode(DataUtils.getString(map.get("receiptCode")));//入库单编码
xqs authored
354
                    detail.setReceiptDetailId(DataUtils.getInteger(map.get("receiptDetailId")));//入库单明细ID
355
356
357
358
359
360
                    detail.setBatch(DataUtils.getString(map.get("batch")));//批次
                    detail.setLot(DataUtils.getString(map.get("lot")));//批号
                    detail.setInventorySts(DataUtils.getString(map.get("inventorySts")));//库存状态
                    detail.setManufactureDate(DataUtils.getDateTime(map.get("manufactureDate")));//生产日期
                    detail.setExpirationDate(DataUtils.getDateTime(map.get("expirationDate")));//失效日期
                    detail.setQty(DataUtils.getBigDecimal(map.get("qty")));//数量
xqs authored
361
                    detail.setTaskQty(DataUtils.getBigDecimal(map.get("qty")));
362
363
364
365
366
367
368
369
370
                    detail.setCreatedBy(ShiroUtils.getLoginName());//创建人
                    detail.setLastUpdatedBy(ShiroUtils.getLoginName());//创建时间
                    inventoryDetailService.save(detail);
                }
                else
                {
                    detail.setQty(detail.getQty().add(DataUtils.getBigDecimal(map.get("qty"))));
                    detail.setLastUpdatedBy(ShiroUtils.getLoginName());
                    LambdaUpdateWrapper<InventoryDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
xqs authored
371
                    lambdaUpdateWrapper.eq(InventoryDetail::getId,DataUtils.getInteger(map.get("receiptDetailId")));
372
373
374
375
376
377
378
                    inventoryDetailService.update(detail, lambdaUpdateWrapper);
                }
                //记录库存交易记录
                InventoryTransaction inventoryTransaction = new InventoryTransaction();
                inventoryTransaction.setTransactionType(10);
                inventoryTransaction.setWarehouseCode(DataUtils.getString(map.get("warehouseCode")));
                inventoryTransaction.setCompanyCode(task.getCompanyCode());
mahuandong authored
379
                inventoryTransaction.setLocationCode(task.getToLocation());
380
381
382
383
                inventoryTransaction.setContainerCode(DataUtils.getString(map.get("containerCode")));
                inventoryTransaction.setMaterialCode(DataUtils.getString(map.get("materialCode")));
                inventoryTransaction.setMaterialName(DataUtils.getString(map.get("materialName")));
                inventoryTransaction.setBillCode(DataUtils.getString(map.get("receiptCode")));
xqs authored
384
                inventoryTransaction.setBillDetailId(DataUtils.getInteger(map.get("receiptDetailId")));
385
386
387
388
389
                inventoryTransaction.setBatch(DataUtils.getString(map.get("batch")));
                inventoryTransaction.setLot(DataUtils.getString(map.get("lot")));
                inventoryTransaction.setManufactureDate(DataUtils.getDateTime(map.get("manufactureDate")));
                inventoryTransaction.setExpirationDate(DataUtils.getDateTime(map.get("expirationDate")));
                inventoryTransaction.setInventorySts(DataUtils.getString((map.get("inventorySts"))));
xqs authored
390
                inventoryTransaction.setTaskQty(DataUtils.getInteger(map.get("qty")));
391
392
393
                inventoryTransaction.setCreated(new Date());
                inventoryTransaction.setCreatedBy(ShiroUtils.getLoginName());
                inventoryTransactionService.save(inventoryTransaction);
xqs authored
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
                //修改任务明细的状态为完成
                TaskDetail taskDetail = new TaskDetail();
                taskDetail.setStatus(100);
                taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
                taskDetail.setAgingDate(new Date());   //入库时间
                LambdaUpdateWrapper<TaskDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
                lambdaUpdateWrapper.eq(TaskDetail::getTaskId, DataUtils.getInteger(map.get("taskDetailId")));
                taskDetailService.update(taskDetail, lambdaUpdateWrapper);
                //修改入库单的状态
                ReceiptHeader receiptHeader =new ReceiptHeader();
                receiptHeader.setFirstStatus(100);
                receiptHeader.setLastStatus(100);
                LambdaUpdateWrapper<ReceiptHeader> receiptHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate();
                receiptHeaderLambdaUpdateWrapper.eq(ReceiptHeader::getId, DataUtils.getInteger(map.get("receiptId")));
                receiptHeaderService.update(receiptHeader, receiptHeaderLambdaUpdateWrapper);

        //修改任务主表状态,因为立库任务表单头只对应一个货箱,表单详情的任务会同时完成
                task.setStatus(100);
                task.setLastUpdatedBy(ShiroUtils.getLoginName());
                task.setLastUpdated(new Date());
                LambdaUpdateWrapper<TaskHeader> taskHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate();
                taskHeaderLambdaUpdateWrapper.eq(TaskHeader::getId, task.getId());
                taskHeaderService.update(task, taskHeaderLambdaUpdateWrapper);
        //修改库位状态和对应的容器
                Location location =new Location();
                location.setContainerCode(task.getContainerCode());
                location.setStatus("empty");
                LambdaUpdateWrapper<Location> locationLambdaUpdateWrapper = Wrappers.lambdaUpdate();
mahuandong authored
422
                locationLambdaUpdateWrapper.eq(Location::getCode, task.getToLocation());
xqs authored
423
424
425
                locationService.update(location, locationLambdaUpdateWrapper);
        //修改容器状态和对应的库位
                Container container =new Container();
mahuandong authored
426
                container.setLocationCode(task.getToLocation());
xqs authored
427
428
429
430
431
432
433
                container.setStatus("some");
        //修改组盘表状态为20
         ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail();
         receiptContainerDetail.setStatus(20);
         LambdaUpdateWrapper<ReceiptContainerDetail> receiptContainerDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate();
         receiptContainerDetailLambdaUpdateWrapper.eq(ReceiptContainerDetail::getReceiptId,DataUtils.getInteger(map.get("receiptId")));
         receiptContainerDetailService.update(receiptContainerDetail, receiptContainerDetailLambdaUpdateWrapper);
wangyanxiong authored
434
435
436
           }
        }
                return AjaxResult.success("完成入库任务");
wangyanxiong authored
437
    }
wangyanxiong authored
438
mahuandong authored
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
    @Override
    public AjaxResult createTransferTask(String sourceLocation, String destinationLocation) {
        return null;
    }

    @Override
    public AjaxResult createCheckOutTask(String[] ids) {
        return null;
    }

    @Override
    public AjaxResult completeCycleCountOrSeeOutTask(TaskHeader taskHeader) {
        return null;
    }
wangyanxiong authored
454
455
456
457
458
//    @Override
//    public List<Map<String, Object>> getReceiptTask(Integer taskId) {
//        return taskHeaderMapper.getReceiptTask(taskId) ;
//    }
xqs authored
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
    /**
     * 立库移库
     * */
    @Transactional
    public AjaxResult createTransferTask(String sourceLocation, String destinationLocation, String companyCode) {
       /* Location temp1 = new Location();
        temp1.setCode(sourceLocation);
        temp1.setWarehouseId(ShiroUtils.getWarehouseId());
        Location loc1 = locationService.selectFirstEntity(temp1);
        if(loc1==null){
            return AjaxResult.error("源库位:"+sourceLocation+"未找到");
        }
        if(!loc1.getStatus().equals("empty")){
            return AjaxResult.error("源库位:"+sourceLocation+"状态非空闲");
        }
        if(StringUtils.isEmpty(loc1.getContainerCode())){
            return AjaxResult.error("源库位:"+sourceLocation+"不存在托盘");
        }
        //这里增加组盘校验,如果此托盘存在未完成的组盘数据,则不能移库
        //校验入库组盘
        int count1 = inventoryService.getUncompleteReceiptContainer(sourceLocation,ShiroUtils.getWarehouseId());
        if(count1>0){
            return AjaxResult.error("源库位:"+sourceLocation+"存在入库组盘,不能移库");
        }
        int count2 = inventoryService.getUncompleteShipmentContainer(sourceLocation,ShiroUtils.getWarehouseId());
        if(count2>0){
            return AjaxResult.error("源库位:"+sourceLocation+"存在出库组盘,不能移库");
        }

        Location temp2 = new Location();
        temp2.setWarehouseId(ShiroUtils.getWarehouseId());
        temp2.setCode(destinationLocation);
        Location loc2 = locationService.selectFirstEntity(temp2);
        if(loc2 == null){
            return  AjaxResult.error("目标库位:"+destinationLocation+"未找到");
        }
        if(!loc2.getStatus().equals("empty")){
            return AjaxResult.error("目标库位:"+destinationLocation+"状态非空闲");
        }
        if(StringUtils.isNotEmpty(loc2.getContainerCode())){
            return AjaxResult.error("目标库位:"+destinationLocation+"已存在托盘");
        }
        int count3 = inventoryService.getUncompleteReceiptContainer(destinationLocation,ShiroUtils.getWarehouseId());
        if(count3>0){
            return AjaxResult.error("目标库位:"+sourceLocation+"存在入库组盘,不能移库");
        }
        //hack:这里暂时写死第五层不能往其他四层移库
        if(loc1.getLayer()==5){
            if(loc2.getLayer()<4){
                return AjaxResult.error("高货位不能往底货位移库");
            }
        }
        Task task = new Task();
        task.setWarehouseId(ShiroUtils.getWarehouseId());
        task.setWarehouseCode(ShiroUtils.getWarehouseCode());
        task.setCompanyId(ShiroUtils.getCompanyIdList().get(0));//获取第一个货主
        task.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0));
        //这里默认一个0
        task.setPriority(0);
        task.setType((short)800);
        //对移库来说,这个没啥用
        task.setStation(null);
        task.setContainerCode(loc1.getContainerCode());
        task.setFirstStatus((short)1);
        task.setLastStatus((short)1);
        task.setBeginTime(new Date());
        task.setSourceLocation(sourceLocation);
        task.setDestinationLocation(destinationLocation);
        task.setCreated(new Date());
        task.setCreatedBy(ShiroUtils.getLoginName());
        insert(task);
        //更新货位状态为预定
        loc1.setStatus("lock");
        loc2.setStatus("lock");
        locationService.updateByModel(loc1);
        locationService.updateByModel(loc2);
        return AjaxResult.success(task.getId());*/
       return null;
    }
mahuandong authored
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
    /**
     * 创建上架任务
     * @param ids
     * @return
     */
    @Override
    public AjaxResult createReceiptTask(List<Integer> ids) {
        for (Integer id : ids)  {
            ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(id);
            if (receiptContainerHeader == null)
                throw new ServiceException("任务不存在!");
            if (receiptContainerHeader.getWarehouseCode() != ShiroUtils.getWarehouseCode())
                throw new ServiceException("任务不在当前仓库!");
            LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery();
            containerDetailLambda.eq(ReceiptContainerDetail::getReceiptId, id);
            List<ReceiptContainerDetail> list = receiptContainerDetailService.list(containerDetailLambda);
            if (list.size() < 1)
                throw new ServiceException("没有组盘明细,请先组盘!");
            if (receiptContainerHeader.getStatus() == 0) {
                if (receiptContainerHeader.getStatus().intValue() < 10) {
                    receiptContainerHeader.setStatus((short)10);
                    receiptContainerHeaderService.updateById(receiptContainerHeader);
                }
                //添加任务主表
                TaskHeader task = new TaskHeader();
                task.setWarehouseCode(receiptContainerHeader.getWarehouseCode());
                task.setCompanyCode(receiptContainerHeader.getCompanyCode());
                task.setFromLocation(receiptContainerHeader.getFromLocation());
                task.setTaskType(Integer.valueOf(receiptContainerHeader.getTaskType()));
                task.setFromLocation(receiptContainerHeader.getFromLocation());
                task.setToLocation(receiptContainerHeader.getToLocation());
                task.setContainerCode(receiptContainerHeader.getContainerCode());
                task.setCreated(new Date());
                task.setCreatedBy(ShiroUtils.getLoginName());
                this.save(task);
                //添加任务明细表
                for(ReceiptContainerDetail item : list) {
                    TaskDetail taskDetail = new TaskDetail();
                    taskDetail.setTaskId(task.getId());
                    taskDetail.setWarehouseCode(task.getWarehouseCode());
                    taskDetail.setCompanyCode(task.getCompanyCode());
                    taskDetail.setCompanyCode(task.getCompanyCode());
                    taskDetail.setMaterialCode(item.getMaterialCode());
                    taskDetail.setMaterialName(item.getMaterialName());
                    taskDetail.setBillCode(item.getReceiptCode());
                    taskDetail.setBillDetailId(item.getReceiptDetailId());
                    taskDetail.setBillCode(item.getReceiptCode());
                    taskDetail.setQty(BigDecimal.valueOf(item.getQty()));
                    taskDetail.setContainerCode(task.getContainerCode());
                    taskDetail.setFromLocation(task.getFromLocation());
                    taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
                    taskDetail.setBatch(item.getBatch());
                    taskDetailService.save(taskDetail);

                    ReceiptDetail receiptDetail = receiptDetailService.getById(item.getReceiptDetailId());
                    if ("300".equals(receiptDetail.getProcessStamp())){
                        ReceiptDetail detail = receiptDetailService.queryflow(receiptDetail);
                        if (!receiptDetailService.updateById(detail)){
                            throw new ServiceException("更新入库单详情失败");
                        }
                        receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId());
                    }
                }
xqs authored
602
603
mahuandong authored
604
605
606
607
            }
        }
        return  AjaxResult.success("生成任务成功!");
    }
xqs authored
608
wangyanxiong authored
609
mahuandong authored
610
}