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 { @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 pageQuery(String name, Query query) { return this.getBaseMapper().pageQuery(Condition.getPage(query),name); } /** * 分工i表导入 * @param file */ @Transactional public ImportResult importDivision(MultipartFile file) { List list = ExcelUtil.read(file, DivisionExcel.class); return transAndSave(list); } /** * 将人员姓名转换未对应用户的id * @param list */ @Transactional ImportResult transAndSave(List list){ List 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 notMatchList = entityList.stream() .filter(d -> d.getProgrammerId()==null || d.getCheckerId()==null || d.getSeniorId()==null || d.getTeamLeaderId()==null).toList(); List 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 queryProgrammer(String programmer) { return baseMapper.queryProgrammer(programmer); } }