#
Junjie
2024-08-30 48278d6051b6e58d648178964585d35ae000ec91
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
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());
                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("库位状态更新失败");
            }
        }
    }
}