yangys
2025-09-09 3d558e1bb5091b76a6525f6fab015574e1755200
blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/service/ProduceDivisionService.java
@@ -1,30 +1,77 @@
package org.springblade.mdm.basesetting.producedivision.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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 savePlan(ProduceDivisionVO vo){
      //TODO
   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);
   }
   public boolean updatePlan(ProduceDivisionVO vo) {
   /**
    * 判断图号是否已存在
    * @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());
@@ -41,4 +88,110 @@
   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);
    }
}