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);
|
}
|
}
|
}
|