yangys
2025-08-14 a049dda2f63d59f5092994b44387fe0aa889d375
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
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.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;
    /**
     * 新增分工表
     * @param vo
     */
    @Transactional
    public void saveDivision(ProduceDivisionVO vo){
        if(drawingNoExists(vo.getDrawingNo(),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;
    }
 
    public ProduceDivision getByDrawingNo(String drawingNo){
        List<ProduceDivision> divs = lambdaQuery().eq(ProduceDivision::getDrawingNo, drawingNo).list();
        if(divs.isEmpty()){
            return null;
        }else{
            return divs.get(0);
        }
    }
}