#
Junjie
2024-08-30 17b66b7fba1c980638b6db24a12959cd3ddbdcad
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
package com.zy.asrs.wms.asrs.manage;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wms.asrs.entity.dto.OutDetlDto;
import com.zy.asrs.wms.asrs.entity.dto.OutLocDto;
import com.zy.asrs.wms.asrs.entity.enums.LocStsType;
import com.zy.asrs.wms.asrs.entity.param.OutParam;
import com.zy.asrs.wms.asrs.entity.*;
import com.zy.asrs.wms.asrs.service.*;
import com.zy.asrs.wms.utils.OutUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.Date;
import java.util.HashMap;
import java.util.List;
 
/**
 * 出库管理
 */
@Service
public class OutManage {
 
    private static Logger logger = LoggerFactory.getLogger(LocManage.class);
 
    @Autowired
    private TaskService taskService;
    @Autowired
    private TaskDetlService taskDetlService;
    @Autowired
    private TaskDetlFieldService taskDetlFieldService;
    @Autowired
    private LocService locService;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private LocDetlFieldService locDetlFieldService;
    @Autowired
    private WorkService workService;
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private OutUtils outUtils;
 
 
    /**
     * 出库
     */
    @Transactional
    public void out(OutParam outParam) {
        if (outParam.getOperationPort() == null) {
            throw new CoolException("作业口不存在");
        }
 
        List<OutLocDto> list = outUtils.merge(outParam);
        processTask(list);
    }
 
    private void processTask(List<OutLocDto> list) {
        for (OutLocDto locDto : list) {
            long taskType = locDto.getAll() ? 101L : 103L;
 
            Loc loc = locService.getById(locDto.getLocId());
            if(loc == null) {
                throw new CoolException("库位不存在");
            }
 
            if (!loc.getLocStsId().equals(LocStsType.F.val())) {
                throw new CoolException("库位状态不在库");
            }
 
            Task task = new Task();
            task.setTaskNo(workService.generateTaskNo(1L));
            task.setTaskSts(101L);
            task.setTaskType(taskType);
            task.setIoPri(workService.generateIoPri(taskType));
            task.setOriginLoc(loc.getLocNo());
            task.setTargetSite(locDto.getOperationPort());
            task.setBarcode(loc.getBarcode());
            boolean res = taskService.save(task);
            if (!res) {
                throw new CoolException("保存工作档失败");
            }
            // 工作档明细保存
            for (OutDetlDto detl : locDto.getDetls()) {
                LocDetl locDetl = locDetlService.getById(detl.getDetlId());
                if(locDetl == null) {
                    throw new CoolException("明细不存在");
                }
 
                TaskDetl taskDetl = new TaskDetl();
                taskDetl.sync(locDetl);
                taskDetl.setTaskId(task.getId());
                taskDetl.setAnfme(detl.getAnfme());
                taskDetl.setStock(detl.getStock());
                taskDetl.setOrderId(null);
                taskDetl.setOrderNo(null);
                if (!taskDetlService.save(taskDetl)) {
                    throw new CoolException("保存工作档明细失败");
                }
 
                List<LocDetlField> locDetlFields = locDetlFieldService.list(new LambdaQueryWrapper<LocDetlField>().eq(LocDetlField::getDetlId, locDetl.getId()));
                for (LocDetlField locDetlField : locDetlFields) {
                    TaskDetlField taskDetlField = new TaskDetlField();
                    taskDetlField.sync(locDetlField);
                    taskDetlField.setDetlId(taskDetl.getId());
                    boolean taskDetlFieldSave = taskDetlFieldService.save(taskDetlField);
                    if(!taskDetlFieldSave){
                        throw new CoolException("明细扩展生成失败");
                    }
                }
            }
 
            //库位F => R
            loc.setLocStsId(LocStsType.R.val());
            loc.setUpdateTime(new Date());
            boolean locUpdate = locService.updateById(loc);
            if(!locUpdate){
                throw new CoolException("库位状态更新失败");
            }
        }
    }
}