8 天以前 1c1daebcb9f89138a84e9a7643d1909bb1a5a342
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 cn.iocoder.yudao.module.mes.service.wm.outsourceissue;
 
import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.controller.admin.wm.outsourceissue.vo.detail.MesWmOutsourceIssueDetailSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourceissue.MesWmOutsourceIssueDetailDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourceissue.MesWmOutsourceIssueLineDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.outsourceissue.MesWmOutsourceIssueDetailMapper;
import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService;
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.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.*;
 
/**
 * MES 外协发料单明细 Service 实现类
 *
 * @author 芋道源码
 */
@Service
@Validated
public class MesWmOutsourceIssueDetailServiceImpl implements MesWmOutsourceIssueDetailService {
 
    @Resource
    private MesWmOutsourceIssueDetailMapper outsourceIssueDetailMapper;
 
    @Resource
    @Lazy
    private MesWmOutsourceIssueLineService outsourceIssueLineService;
    @Resource
    private MesMdmItemService mdmItemService;
    @Resource
    private MesWmWarehouseAreaService warehouseAreaService;
    @Resource
    private MesWmMaterialStockService materialStockService;
 
    @Override
    public Long createOutsourceIssueDetail(MesWmOutsourceIssueDetailSaveReqVO createReqVO) {
        // 校验数据
        validateOutsourceIssueDetailSaveData(createReqVO);
 
        // 插入
        MesWmOutsourceIssueDetailDO detail = BeanUtils.toBean(createReqVO, MesWmOutsourceIssueDetailDO.class);
        outsourceIssueDetailMapper.insert(detail);
        return detail.getId();
    }
 
    @Override
    public void updateOutsourceIssueDetail(MesWmOutsourceIssueDetailSaveReqVO updateReqVO) {
        // 校验存在
        validateOutsourceIssueDetailExists(updateReqVO.getId());
        // 校验数据
        validateOutsourceIssueDetailSaveData(updateReqVO);
 
        // 更新
        MesWmOutsourceIssueDetailDO updateObj = BeanUtils.toBean(updateReqVO, MesWmOutsourceIssueDetailDO.class);
        outsourceIssueDetailMapper.updateById(updateObj);
    }
 
    @Override
    public void deleteOutsourceIssueDetail(Long id) {
        // 校验存在
        validateOutsourceIssueDetailExists(id);
        // 删除
        outsourceIssueDetailMapper.deleteById(id);
    }
 
    @Override
    public MesWmOutsourceIssueDetailDO getOutsourceIssueDetail(Long id) {
        return outsourceIssueDetailMapper.selectById(id);
    }
 
    @Override
    public List<MesWmOutsourceIssueDetailDO> getOutsourceIssueDetailListByIssueId(Long issueId) {
        return outsourceIssueDetailMapper.selectListByIssueId(issueId);
    }
 
    @Override
    public List<MesWmOutsourceIssueDetailDO> getOutsourceIssueDetailListByLineId(Long lineId) {
        return outsourceIssueDetailMapper.selectListByLineId(lineId);
    }
 
    @Override
    public void deleteOutsourceIssueDetailByIssueId(Long issueId) {
        outsourceIssueDetailMapper.deleteByIssueId(issueId);
    }
 
    @Override
    public void deleteOutsourceIssueDetailByLineId(Long lineId) {
        outsourceIssueDetailMapper.deleteByLineId(lineId);
    }
 
    private void validateOutsourceIssueDetailExists(Long id) {
        if (outsourceIssueDetailMapper.selectById(id) == null) {
            throw exception(WM_OUTSOURCE_ISSUE_DETAIL_NOT_EXISTS);
        }
    }
 
    private void validateOutsourceIssueDetailSaveData(MesWmOutsourceIssueDetailSaveReqVO saveReqVO) {
        // 校验父数据(行)存在
        MesWmOutsourceIssueLineDO line = outsourceIssueLineService.getOutsourceIssueLine(saveReqVO.getLineId());
        if (line == null) {
            throw exception(WM_OUTSOURCE_ISSUE_LINE_NOT_EXISTS);
        }
        if (ObjUtil.notEqual(line.getIssueId(), saveReqVO.getIssueId())) {
            throw exception(WM_OUTSOURCE_ISSUE_DETAIL_LINE_NOT_MATCH);
        }
        // 校验物料存在
        mdmItemService.validateItemExistsAndEnable(saveReqVO.getItemId());
        if (ObjUtil.notEqual(line.getItemId(), saveReqVO.getItemId())) {
            throw exception(WM_OUTSOURCE_ISSUE_DETAIL_ITEM_MISMATCH);
        }
        // 校验仓库、库区、库位的关联关系
        warehouseAreaService.validateWarehouseAreaExists(
                saveReqVO.getWarehouseId(), saveReqVO.getLocationId(), saveReqVO.getAreaId());
        // 校验库存记录存在且物料一致
        materialStockService.validateSelectedStock(
                saveReqVO.getMaterialStockId(), saveReqVO.getItemId(), saveReqVO.getBatchId(), null,
                saveReqVO.getWarehouseId(), saveReqVO.getLocationId(), saveReqVO.getAreaId(), saveReqVO.getQuantity());
    }
 
}