yangys
2025-09-07 56f5157ae8dba22eb30fb6c7cb132f80b7161932
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
package org.springblade.mdm.basesetting.producedivision.service;
 
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BizServiceImpl;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.mdm.basesetting.producedivision.entity.ProduceDivision;
import org.springblade.mdm.basesetting.producedivision.entity.QinzheFgb;
import org.springblade.mdm.basesetting.producedivision.mapper.ProduceDivisionMapper;
import org.springblade.mdm.basesetting.producedivision.vo.DivisionExcel;
import org.springblade.mdm.basesetting.producedivision.vo.ImportResult;
import org.springblade.mdm.basesetting.producedivision.vo.ProduceDivisionVO;
import org.springblade.mdm.basesetting.producedivision.vo.ProduceDivisionViewVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
 
import java.util.ArrayList;
import java.util.List;
 
@Service
public class ProduceDivisionService extends BizServiceImpl<ProduceDivisionMapper, ProduceDivision> {
    @Autowired
    private MdmUserService tUserService;
    @Autowired
    private QinzheFgbService qinzheFgbService;
 
    /**
     * 新增分工表
     * @param vo
     */
    @Transactional
    public void saveDivision(ProduceDivisionVO vo){
        /*
        if(drawingNoExists(vo.getpro,null)){
            throw new ServiceException("图号已存在:"+vo.getDrawingNo());
        }*/
        ProduceDivision plan = new ProduceDivision();
        BeanUtil.copyProperties(vo, plan);
        this.save(plan);
    }
 
    /**
     * 判断图号是否已存在
     * @param drawingNo 图号
     * @param excludeId 排除id
     * @return 是否存在
     */
    /*
    boolean drawingNoExists(String drawingNo,Long excludeId){
        return this.lambdaQuery()
            .eq(ProduceDivision::getDrawingNo, drawingNo)
            .ne(excludeId!=null,ProduceDivision::getId,excludeId).count()>0;
    }*/
 
    /**
     * 修改分工表
     * @param vo 数据VO
     * @return 是否成功
     */
    public boolean updateDivision(ProduceDivisionVO vo) {
        if(vo.getId() == null){
            throw new ServiceException("id不能未空");
        }
        /*
        if(drawingNoExists(vo.getDrawingNo(),vo.getId())){
            throw new ServiceException("图号已存在:"+vo.getDrawingNo());
        }*/
 
        ProduceDivision plan = this.getById(vo.getId());
 
        plan.setTeamLeaderId(vo.getTeamLeaderId());
        plan.setProgrammerId(vo.getProgrammerId());
        plan.setCheckerId(vo.getCheckerId());
        plan.setSeniorId(vo.getSeniorId());
        return this.updateById(plan);
    }
    /**
     * 查询分页
     * @param query 查询参数
     * @return 分页数据
     */
    public IPage<ProduceDivisionViewVO> pageQuery(String name, Query query) {
        return this.getBaseMapper().pageQuery(Condition.getPage(query),name);
    }
 
    /**
     * 分工i表导入
     * @param file
     */
    @Transactional
    public ImportResult importDivision(MultipartFile file) {
        List<DivisionExcel> list = ExcelUtil.read(file, DivisionExcel.class);
        return transAndSave(list);
    }
 
    /**
     * 将人员姓名转换未对应用户的id
     * @param list
     */
    @Transactional
    ImportResult transAndSave(List<DivisionExcel> list){
 
        List<ProduceDivision> entityList = new ArrayList<>();
 
        for(DivisionExcel divisionExcel:list){
            ProduceDivision division = new ProduceDivision();
 
            division.setProgrammerId(tUserService.getUserIdByName(divisionExcel.getProgrammer()));
            division.setCheckerId(tUserService.getUserIdByName(divisionExcel.getChecker()));
            division.setSeniorId(tUserService.getUserIdByName(divisionExcel.getSenior()));
            division.setTeamLeaderId(tUserService.getUserIdByName(divisionExcel.getTeamLeader()));
            division.setProgrammer(divisionExcel.getProgrammer());
            entityList.add(division);
        }
 
        List<ProduceDivision> notMatchList =  entityList.stream()
            .filter(d -> d.getProgrammerId()==null || d.getCheckerId()==null || d.getSeniorId()==null || d.getTeamLeaderId()==null).toList();
 
        List<ProduceDivision> matchList =  entityList.stream()
            .filter(d -> d.getProgrammerId()!=null && d.getCheckerId()!=null && d.getSeniorId()!=null && d.getTeamLeaderId()!=null).toList();
 
        for(ProduceDivision division : matchList){
            if(!this.existsSame(division)){
                this.save(division);
            }
        }
 
        ImportResult ir = new ImportResult();
        ir.setSuccess(matchList.size());
        ir.setFailure(notMatchList.size());
 
        if(ir.getFailure() > 0){
            String msg = "";
            StringBuilder sb = new StringBuilder();
            sb.append("编程人员:");
            for(ProduceDivision division:notMatchList){
                sb.append(division.getProgrammer()).append(",");
            }
            msg = StringUtils.removeEnd(sb.toString(),",")+"有姓名无法匹配用户数据";
            ir.setMessage(msg);
        }else{
            ir.setMessage("导入成功");
        }
        return ir;
    }
 
    /**
     * 检查记录是否已经存在 通过4个人的id
     * @param division 分工表数据
     * @return 是否存在
     */
    boolean existsSame(ProduceDivision division){
        return this.lambdaQuery().eq(ProduceDivision::getProgrammerId,division.getProgrammerId())
            .eq(ProduceDivision::getCheckerId,division.getCheckerId()).eq(ProduceDivision::getSeniorId,division.getSeniorId())
            .eq(ProduceDivision::getTeamLeaderId,division.getTeamLeaderId()).count()>0;
    }
 
 
    /**
     * 根据勤哲零件号于主管编制获取分工表数据 图号->勤哲数据(编制) ->  主制分工表数据
     *
     * @param drawingNo
     * @return
     */
    public ProduceDivision getByDrawingNoWithQinzhe(String drawingNo){
        QinzheFgb qinzheFgb = qinzheFgbService.getByLjh(drawingNo);
        if(qinzheFgb == null){
            throw new ServiceException("未找到零组件号:"+drawingNo);
        }
 
        Long programmerId = tUserService.getUserIdByName(qinzheFgb.getZggy());
        if(programmerId == null){
            throw new ServiceException("根据["+qinzheFgb.getZggy()+"]未找到对应的系统用户,请检查用户是否存在");
        }
        ProduceDivision division = lambdaQuery().eq(ProduceDivision::getProgrammerId, programmerId).list().stream().findFirst().orElse(null);
        if(division == null){
            throw new ServiceException("人员职责表无主管工艺["+qinzheFgb.getZggy()+"]对应的数据");
        }
 
        return division;
    }
 
    /**
     * 选择主管工艺数据
     * @param programmer
     * @return
     */
    public List<ProduceDivisionViewVO> queryProgrammer(String programmer) {
        return baseMapper.queryProgrammer(programmer);
    }
}