李林
2023-10-07 658d4927d468c47208fd012d9128b09249c07eff
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
package com.chinaztt.mes.production.service.impl;
 
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chinaztt.mes.production.dto.UnitWorkDTO;
import com.chinaztt.mes.production.entity.UnitWork;
import com.chinaztt.mes.production.mapper.UnitWorkMapper;
import com.chinaztt.mes.production.service.UnitWorkService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
 
 
/**
 * 单位工时系数
 *
 * @author yy
 * @date 2022-12-02 10:48:37
 */
@Service
@AllArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class UnitWorkServiceImpl extends ServiceImpl<UnitWorkMapper, UnitWork> implements UnitWorkService {
 
    private final static BigDecimal param = new BigDecimal("1.5");
 
 
    @Override
    public IPage<List<UnitWorkDTO>> getUnitWorkPage(Page page, QueryWrapper<UnitWorkDTO> gen) {
        return baseMapper.getUnitWorkPage(page,gen);
    }
 
    @Override
    public UnitWorkDTO getUnitWorkById(Long id) {
        return baseMapper.getUnitWorkById(id);
    }
 
    @Override
    public Boolean saveUnitWork(UnitWork unitWork) {
        checkNull(unitWork);
        if (unitWork.getOperationId() == null) {
            UnitWork unitWorkBySelect = baseMapper.selectOne(Wrappers.<UnitWork>lambdaQuery()
                    .isNull(UnitWork::getOperationId)
                    .eq(UnitWork::getPartId, unitWork.getPartId())
                    .eq(UnitWork::getWorkstationId, unitWork.getWorkstationId()));
            if(unitWorkBySelect!=null){
                throw new RuntimeException("已根据机台+零件号维护定额值");
            }
        } else {
            UnitWork unitWorkBySelect = baseMapper.selectOne(Wrappers.<UnitWork>lambdaQuery()
                    .eq(UnitWork::getOperationId, unitWork.getOperationId())
                    .eq(UnitWork::getPartId, unitWork.getPartId())
                    .eq(UnitWork::getWorkstationId, unitWork.getWorkstationId()));
            if(unitWorkBySelect!=null){
                throw new RuntimeException("已根据工序+机台+零件号维护定额值");
            }
        }
 
        BigDecimal unitWorkFactor = param.divide(unitWork.getQuota(), 5, RoundingMode.HALF_UP);
        unitWork.setUnitWorkFactor(unitWorkFactor);
        save(unitWork);
        return true;
    }
 
    public void checkNull(UnitWork unitWork){
        if(unitWork.getWorkstationId()==null || unitWork.getPartId()==null || unitWork.getQuota()==null){
            throw new RuntimeException("机台,零件,定额不能为空");
        }
    }
 
    @Override
    public Boolean updateUnitWork(UnitWork unitWork) {
        checkNull(unitWork);
        if (unitWork.getOperationId() == null) {
            UnitWork unitWorkBySelect = baseMapper.selectOne(Wrappers.<UnitWork>lambdaQuery()
                    .isNull(UnitWork::getOperationId)
                    .eq(UnitWork::getPartId, unitWork.getPartId())
                    .eq(UnitWork::getWorkstationId, unitWork.getWorkstationId())
                    .ne(UnitWork::getId,unitWork.getId()));
            if(unitWorkBySelect!=null){
                throw new RuntimeException("已根据机台+零件号维护定额值");
            }
        } else {
            UnitWork unitWorkBySelect = baseMapper.selectOne(Wrappers.<UnitWork>lambdaQuery()
                    .eq(UnitWork::getOperationId, unitWork.getOperationId())
                    .eq(UnitWork::getPartId, unitWork.getPartId())
                    .eq(UnitWork::getWorkstationId, unitWork.getWorkstationId())
                    .ne(UnitWork::getId,unitWork.getId()));
            if (unitWorkBySelect != null) {
                throw new RuntimeException("已根据工序+机台+零件号维护定额值");
            }
        }
 
        BigDecimal unitWorkFactor = param.divide(unitWork.getQuota(), 5, RoundingMode.HALF_UP);
        unitWork.setUnitWorkFactor(unitWorkFactor);
        updateById(unitWork);
        return true;
    }
 
    @Override
    public Boolean updateQuota(UnitWorkDTO unitWorkDTO) {
        List<UnitWork> unitWorkList = new ArrayList<>();
        BigDecimal unitWorkFactor = param.divide(unitWorkDTO.getQuota(), 5, RoundingMode.HALF_UP);
        for (Long id:unitWorkDTO.getIdList()) {
            UnitWork unitWork = new UnitWork();
            unitWork.setId(id);
            unitWork.setUnitWorkFactor(unitWorkFactor);
            unitWork.setQuota(unitWorkDTO.getQuota());
            unitWorkList.add(unitWork);
        }
        this.updateBatchById(unitWorkList);
        return true;
    }
}