2 天以前 3be684af887afe4c0e45f281cc53adfef6f12b78
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
package cn.iocoder.yudao.module.mes.service.wm.miscreceipt;
 
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.miscreceipt.vo.line.MesWmMiscReceiptLinePageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.miscreceipt.vo.line.MesWmMiscReceiptLineSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscreceipt.MesWmMiscReceiptLineDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.miscreceipt.MesWmMiscReceiptLineMapper;
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_RECEIPT_LINE_NOT_EXISTS;
 
/**
 * MES 杂项入库单行 Service 实现类
 */
@Service
@Validated
public class MesWmMiscReceiptLineServiceImpl implements MesWmMiscReceiptLineService {
 
    @Resource
    private MesWmMiscReceiptLineMapper miscReceiptLineMapper;
 
    @Resource
    @Lazy
    private MesWmMiscReceiptService miscReceiptService;
    @Resource
    @Lazy
    private MesWmMiscReceiptDetailService miscReceiptDetailService;
    @Resource
    private MesMdmItemService mdmItemService;
    @Resource
    private MesWmWarehouseAreaService warehouseAreaService;
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Long createMiscReceiptLine(MesWmMiscReceiptLineSaveReqVO createReqVO) {
        // 1. 校验
        validateLineSaveData(createReqVO);
 
        // 2. 新增行
        MesWmMiscReceiptLineDO line = BeanUtils.toBean(createReqVO, MesWmMiscReceiptLineDO.class);
        miscReceiptLineMapper.insert(line);
 
        // 3. 自动创建明细
        createReqVO.setId(line.getId());
        miscReceiptDetailService.createMiscReceiptDetail(createReqVO);
        return line.getId();
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateMiscReceiptLine(MesWmMiscReceiptLineSaveReqVO updateReqVO) {
        // 1. 校验
        MesWmMiscReceiptLineDO line = validateMiscReceiptLineExists(updateReqVO.getId());
        updateReqVO.setReceiptId(line.getReceiptId());
 
        // 2. 更新行
        MesWmMiscReceiptLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmMiscReceiptLineDO.class);
        miscReceiptLineMapper.updateById(updateObj);
 
        // 3. 更新明细(基于行信息)
        miscReceiptDetailService.updateMiscReceiptDetail(updateReqVO);
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deleteMiscReceiptLine(Long id) {
        // 校验存在
        MesWmMiscReceiptLineDO line = validateMiscReceiptLineExists(id);
        // 校验父单据存在且为可编辑状态
        miscReceiptService.validateMiscReceiptEditable(line.getReceiptId());
 
        // 删除行
        miscReceiptLineMapper.deleteById(id);
        // 删除明细
        miscReceiptDetailService.deleteMiscReceiptDetailByLineId(id);
    }
 
    @Override
    public MesWmMiscReceiptLineDO getMiscReceiptLine(Long id) {
        return miscReceiptLineMapper.selectById(id);
    }
 
    @Override
    public List<MesWmMiscReceiptLineDO> getMiscReceiptLineListByReceiptId(Long receiptId) {
        return miscReceiptLineMapper.selectListByReceiptId(receiptId);
    }
 
    @Override
    public PageResult<MesWmMiscReceiptLineDO> getMiscReceiptLinePage(MesWmMiscReceiptLinePageReqVO pageReqVO) {
        return miscReceiptLineMapper.selectPage(pageReqVO);
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deleteByReceiptId(Long receiptId) {
        // 先删除明细
        miscReceiptDetailService.deleteMiscReceiptDetailByReceiptId(receiptId);
        // 再删除行
        miscReceiptLineMapper.deleteByReceiptId(receiptId);
    }
 
    @Override
    public MesWmMiscReceiptLineDO validateMiscReceiptLineExists(Long id) {
        MesWmMiscReceiptLineDO line = miscReceiptLineMapper.selectById(id);
        if (line == null) {
            throw exception(WM_MISC_RECEIPT_LINE_NOT_EXISTS);
        }
        return line;
    }
 
    /**
     * 校验行保存数据(物料存在、仓库层级关系)
     */
    private void validateLineSaveData(MesWmMiscReceiptLineSaveReqVO reqVO) {
        // 校验父单据存在且为可编辑状态
        miscReceiptService.validateMiscReceiptEditable(reqVO.getReceiptId());
        // 校验物料存在
        mdmItemService.validateItemExistsAndEnable(reqVO.getItemId());
        // 校验仓库层级关系(仓库 - 库位 - 库区)
        warehouseAreaService.validateWarehouseAreaExists(reqVO.getWarehouseId(),
                reqVO.getLocationId(), reqVO.getAreaId());
    }
 
}