yangys
2025-08-14 6043e2e1c832db2bf7bb1868ae9ca727f7b988b3
blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/service/ProduceDivisionService.java
@@ -1,6 +1,8 @@
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;
@@ -8,14 +10,22 @@
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
@@ -71,4 +81,85 @@
   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);
      }
   }
}