9 天以前 2e84a447af471fe5ada907c28849838a6bc3a340
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
130
131
132
133
134
135
136
137
138
package cn.iocoder.yudao.module.mes.service.wm.miscissue;
 
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.controller.admin.wm.miscissue.vo.line.MesWmMiscIssueLinePageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.miscissue.vo.line.MesWmMiscIssueLineSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscissue.MesWmMiscIssueLineDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.miscissue.MesWmMiscIssueLineMapper;
import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
 
import java.util.List;
 
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_MISC_ISSUE_LINE_NOT_EXISTS;
 
/**
 * MES 杂项出库单行 Service 实现类
 */
@Service
@Validated
public class MesWmMiscIssueLineServiceImpl implements MesWmMiscIssueLineService {
 
    @Resource
    private MesWmMiscIssueLineMapper miscIssueLineMapper;
 
    @Resource
    @Lazy
    private MesWmMiscIssueService miscIssueService;
    @Resource
    @Lazy
    private MesWmMiscIssueDetailService miscIssueDetailService;
    @Resource
    private MesMdmItemService mdmItemService;
    @Resource
    private MesWmWarehouseAreaService warehouseAreaService;
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Long createMiscIssueLine(MesWmMiscIssueLineSaveReqVO createReqVO) {
        // 1. 校验数据
        validateMiscIssueLineSaveData(createReqVO.getIssueId(), createReqVO);
 
        // 2. 新增行
        MesWmMiscIssueLineDO line = BeanUtils.toBean(createReqVO, MesWmMiscIssueLineDO.class);
        miscIssueLineMapper.insert(line);
 
        // 3.自动创建明细
        createReqVO.setId(line.getId());
        miscIssueDetailService.createMiscIssueDetail(createReqVO);
        return line.getId();
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateMiscIssueLine(MesWmMiscIssueLineSaveReqVO updateReqVO) {
        // 1.1 校验存在
        MesWmMiscIssueLineDO line = validateAndGetMiscIssueLine(updateReqVO.getId());
        // 1.2 校验数据
        validateMiscIssueLineSaveData(line.getIssueId(), updateReqVO);
 
        // 2. 更新行
        MesWmMiscIssueLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmMiscIssueLineDO.class);
        miscIssueLineMapper.updateById(updateObj);
 
        // 3. 更新明细(基于行信息)
        miscIssueDetailService.updateMiscIssueDetail(updateReqVO);
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deleteMiscIssueLine(Long id) {
        // 校验存在
        MesWmMiscIssueLineDO line = validateAndGetMiscIssueLine(id);
        // 校验父单据存在且为可编辑状态
        miscIssueService.validateMiscIssueEditable(line.getIssueId());
 
        // 删除行
        miscIssueLineMapper.deleteById(id);
        // 删除明细
        miscIssueDetailService.deleteMiscIssueDetailByLineId(id);
    }
 
    @Override
    public MesWmMiscIssueLineDO getMiscIssueLine(Long id) {
        return miscIssueLineMapper.selectById(id);
    }
 
    @Override
    public PageResult<MesWmMiscIssueLineDO> getMiscIssueLinePage(MesWmMiscIssueLinePageReqVO pageReqVO) {
        return miscIssueLineMapper.selectPage(pageReqVO);
    }
 
    @Override
    public List<MesWmMiscIssueLineDO> getMiscIssueLineListByIssueId(Long issueId) {
        return miscIssueLineMapper.selectListByIssueId(issueId);
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deleteMiscIssueLineByIssueId(Long issueId) {
        // 删除明细
        miscIssueDetailService.deleteMiscIssueDetailByIssueId(issueId);
        // 删除行
        miscIssueLineMapper.deleteByIssueId(issueId);
    }
 
    @Override
    public void validateMiscIssueLineExists(Long id) {
        if (miscIssueLineMapper.selectById(id) == null) {
            throw exception(WM_MISC_ISSUE_LINE_NOT_EXISTS);
        }
    }
 
    private MesWmMiscIssueLineDO validateAndGetMiscIssueLine(Long id) {
        MesWmMiscIssueLineDO line = miscIssueLineMapper.selectById(id);
        if (line == null) {
            throw exception(WM_MISC_ISSUE_LINE_NOT_EXISTS);
        }
        return line;
    }
 
    private void validateMiscIssueLineSaveData(Long issueId, MesWmMiscIssueLineSaveReqVO reqVO) {
        // 校验父单据存在且为可编辑状态
        miscIssueService.validateMiscIssueEditable(issueId);
        // 校验物料存在
        mdmItemService.validateItemExistsAndEnable(reqVO.getItemId());
        // 校验仓库、库区、库位的父子关系
        warehouseAreaService.validateWarehouseAreaExists(reqVO.getWarehouseId(),
                reqVO.getLocationId(), reqVO.getAreaId());
    }
 
}