package doumeemes.service.ext.impl; 
 | 
  
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.github.pagehelper.PageHelper; 
 | 
import com.github.pagehelper.PageInfo; 
 | 
import doumeemes.core.constants.ResponseStatus; 
 | 
import doumeemes.core.exception.BusinessException; 
 | 
import doumeemes.core.model.LoginUserInfo; 
 | 
import doumeemes.core.model.PageData; 
 | 
import doumeemes.core.model.PageWrap; 
 | 
import doumeemes.core.utils.Constants; 
 | 
import doumeemes.core.utils.DateUtil; 
 | 
import doumeemes.core.utils.redis.RedisUtil; 
 | 
import doumeemes.dao.business.AppliancesMapper; 
 | 
import doumeemes.dao.business.EndcheckDetailMapper; 
 | 
import doumeemes.dao.business.WorkorderMapper; 
 | 
import doumeemes.dao.business.WorkorderRecordMapper; 
 | 
import doumeemes.dao.business.model.*; 
 | 
import doumeemes.dao.ext.AppliancesExtMapper; 
 | 
import doumeemes.dao.ext.EndcheckDetailExtMapper; 
 | 
import doumeemes.dao.ext.EndcheckExtMapper; 
 | 
import doumeemes.dao.ext.WorkorderHistoryExtMapper; 
 | 
import doumeemes.dao.ext.bean.EndCheckBean; 
 | 
import doumeemes.dao.ext.bean.EndCheckDetailBean; 
 | 
import doumeemes.dao.ext.bean.EndCheckUnQualifiedBean; 
 | 
import doumeemes.dao.ext.dto.QueryEndcheckExtDTO; 
 | 
import doumeemes.dao.ext.vo.EndcheckExtListVO; 
 | 
import doumeemes.dao.system.SystemDictDataMapper; 
 | 
import doumeemes.dao.system.model.SystemDictData; 
 | 
import doumeemes.service.business.impl.AppliancesServiceImpl; 
 | 
import doumeemes.service.ext.EndcheckExtService; 
 | 
import doumeemes.service.system.impl.SystemDictDataServiceImpl; 
 | 
import io.swagger.models.auth.In; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.apache.shiro.SecurityUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.data.redis.core.RedisTemplate; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
  
 | 
import java.math.BigDecimal; 
 | 
import java.util.*; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
/** 
 | 
 * 工单类-终检检验信息表ExtService实现 
 | 
 * @author 江蹄蹄 
 | 
 * @since 2022/07/07 16:15 
 | 
 */ 
 | 
@Service 
 | 
public class EndcheckExtServiceImpl implements EndcheckExtService { 
 | 
  
 | 
    @Autowired 
 | 
    private RedisTemplate<String, Object> redisTemplate; 
 | 
  
 | 
    @Autowired 
 | 
    private EndcheckExtMapper endcheckExtMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private WorkorderMapper workorderMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private EndcheckDetailExtMapper endcheckDetailExtMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private SystemDictDataMapper systemDictDataMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private AppliancesMapper appliancesMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private WorkorderHistoryExtMapper workorderHistoryExtMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private EndcheckDetailMapper endcheckDetailMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private WorkorderRecordMapper workorderRecordMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private SystemDictDataServiceImpl systemDictDataServiceimpl; 
 | 
  
 | 
    @Autowired 
 | 
    private AppliancesExtMapper appliancesExtMapper; 
 | 
  
 | 
    @Override 
 | 
    public PageData<EndcheckExtListVO> findPage(PageWrap<QueryEndcheckExtDTO> pageWrap) { 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); 
 | 
        } 
 | 
        //只能查看当前根组织的数据 
 | 
        pageWrap.getModel().setRootDepartId(user.getRootDepartment().getId()); 
 | 
        pageWrap.getModel().setDepartId(user.getCurComDepartment().getId()); 
 | 
        //数据权限 
 | 
  
 | 
        List<Integer> procedureIds=user.getProcedureIds();//权限范围内工序 
 | 
        if(procedureIds!=null){ 
 | 
            if(procedureIds.size()>0){ 
 | 
                pageWrap.getModel().setProcedureIds(procedureIds); 
 | 
            } 
 | 
  
 | 
        } 
 | 
        List<Integer> dataPermission = user.getDepartPermissionList(); 
 | 
        if(dataPermission!=null){ 
 | 
            pageWrap.getModel().setDepartIds(dataPermission); 
 | 
            pageWrap.getModel().setCreateUser(user.getId()); 
 | 
          /*  if(dataPermission.size() > 0){ 
 | 
                //否则走数据权限 
 | 
                pageWrap.getModel().setDepartIds(dataPermission); 
 | 
            }*/ 
 | 
        } 
 | 
        PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
  
 | 
        List<EndcheckExtListVO> result = endcheckExtMapper.selectList(pageWrap.getModel()); 
 | 
        return PageData.from(new PageInfo<>(result)); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public EndcheckExtListVO selectOneById(Integer id) { 
 | 
        EndcheckExtListVO endCheckExtListVO =  endcheckExtMapper.selectOneById(id); 
 | 
        List<EndcheckDetail> endCheckDetailList = endcheckDetailMapper.selectList(new QueryWrapper<EndcheckDetail>() 
 | 
                        .select(" * , ( select a.code  from appliances a where a.id = endcheck_detail.APPLIANCES_ID  )  as  appliancesCode " + 
 | 
                                ", ( select a.code  from appliances a where a.id = endcheck_detail.QUALIFIED_APPLIANCE_ID  )  as  unAppliancesCode ") 
 | 
                .eq("ENDCHECK_ID",id) 
 | 
        ); 
 | 
        endCheckExtListVO.setEndCheckDetailList(endCheckDetailList); 
 | 
        return endCheckExtListVO; 
 | 
    } 
 | 
  
 | 
  
 | 
    @Transactional(rollbackFor = Exception.class) 
 | 
    @Override 
 | 
    public void uploadEndCheck(EndCheckBean endCheckBean, LoginUserInfo userInfo){ 
 | 
        //检验工单是否做过外观检 
 | 
//        if(endcheckExtMapper.selectCount(new QueryWrapper<Endcheck>() 
 | 
//                .eq("OBJ_ID",endCheckBean.getWorkOrderId()) 
 | 
//                .eq("CHECK_TYPE", Constants.ONE) 
 | 
//        )>0){ 
 | 
//            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "此工单已做外观终检,无法再进行操作"); 
 | 
//        }; 
 | 
//        if(endcheckExtMapper.selectCount(new QueryWrapper<Endcheck>() 
 | 
//                .eq("OBJ_ID",endCheckBean.getWorkOrderId()) 
 | 
//                .eq("CHECK_TYPE", Constants.ZERO) 
 | 
//                .eq("DONE_TYPE", Constants.ONE) 
 | 
//        )>0){ 
 | 
//            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "此工单已检具检不合格,无法再进行操作"); 
 | 
//        }; 
 | 
        //获取工单信息 
 | 
        Workorder workorder  = workorderMapper.selectById(endCheckBean.getWorkOrderId()); 
 | 
        if(Objects.isNull(workorder)){ 
 | 
            throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), ResponseStatus.OBJECT_EMP.getMessage()+"【工单】"); 
 | 
        } 
 | 
        if(workorder.getStatus() > 3){ 
 | 
            throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), ResponseStatus.ERR_STATUS.getMessage()+"【工单状态错误】"); 
 | 
        } 
 | 
        List<EndCheckDetailBean> endCheckDetailBeanList = endCheckBean.getEndCheckDetailBeanList(); 
 | 
        //整合获取所有扫描的工装数据 
 | 
        List<EndCheckDetailBean> e = new ArrayList<>(); 
 | 
        for (EndCheckDetailBean endCheckDetailBean:endCheckDetailBeanList) { 
 | 
            if(Objects.equals(endCheckDetailBean.getAppliancesId(),endCheckDetailBean.getQualifiedAppliancesId())){ 
 | 
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), ResponseStatus.NOT_ALLOWED.getMessage()+"【扫描篮筐与不良品篮筐不可以使用相同篮筐】"); 
 | 
            } 
 | 
            if(workorder.getType()==1||workorder.getType()==2){ 
 | 
                Appliances appliances= appliancesExtMapper.selectById(endCheckDetailBean.getQualifiedAppliancesId()); 
 | 
                SystemDictData systemDictData=systemDictDataServiceimpl.findById(appliances.getType()); 
 | 
                if(endCheckDetailBean.getUnQualifiedNum().compareTo(BigDecimal.ZERO)==1&&!StringUtils.equals(Constants.APPLIANCES_TYPE_LABLE.scrap,systemDictData.getLabel()) ){ 
 | 
                    throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "当前工单为返工返修--只能选择报废工装"); 
 | 
                } 
 | 
            } 
 | 
            if(Objects.isNull(e)){ 
 | 
                e.add(endCheckDetailBean); 
 | 
            }else{ 
 | 
                if(e.indexOf(endCheckDetailBean) < Constants.ZERO){ 
 | 
                    e.add(endCheckDetailBean); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        //2022年8月17日14:44:05 处理 必须上传当前工单内所有报工篮筐数据 
 | 
//        List<Integer> iList = endCheckDetailBeanList.stream().map(EndCheckDetailBean::getAppliancesId).collect(Collectors.toList()); 
 | 
//        if(workorderRecordMapper.selectCount(new QueryWrapper<WorkorderRecord>() 
 | 
//                .eq("TYPE",1) 
 | 
//                .eq("WORKORDER_ID",workorder.getId()) 
 | 
//                .eq("DELETED",0) 
 | 
//                .notIn("APPLIANCES_ID",iList) 
 | 
//        )>0){ 
 | 
//            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), ResponseStatus.NOT_ALLOWED.getMessage()+"【请扫描此工单全部产出篮筐】"); 
 | 
//        }; 
 | 
  
 | 
        //整合获取所有扫描的工装数据验证 工装内数量是否超出 
 | 
        for (EndCheckDetailBean parent:e) { 
 | 
            BigDecimal childSumNum = new BigDecimal(0) ; 
 | 
            for (EndCheckDetailBean child : endCheckDetailBeanList) { 
 | 
                if(parent.getAppliancesId() == child.getAppliancesId()){ 
 | 
                    childSumNum  = childSumNum.add( child.getNum() ); 
 | 
                } 
 | 
            } 
 | 
            if(childSumNum.compareTo(parent.getNum())==1 ){ 
 | 
                throw new BusinessException(ResponseStatus.EXCEED_PLAN_NUM.getCode(), ResponseStatus.EXCEED_APPLIANCES_NUM.getMessage()); 
 | 
            } 
 | 
        } 
 | 
        //保存数据 
 | 
        Endcheck endcheck = endCheckBean.toEndCheck(workorder,userInfo); 
 | 
        endcheck.setCode(this.getNextCode(userInfo.getCompany().getId())); 
 | 
        endcheck.setRemark(endCheckBean.getRemark()); 
 | 
        endcheckExtMapper.insert(endcheck); 
 | 
        //保存明细数据 
 | 
        for (EndCheckDetailBean endCheckDetailBean:endCheckDetailBeanList) { 
 | 
            EndcheckDetail endcheckDetail =  endCheckDetailBean.toEndCheckDetail(userInfo); 
 | 
            endcheckDetail.setRootDepartId(workorder.getRootDepartId()); 
 | 
            endcheckDetail.setDepartId(workorder.getDepartId()); 
 | 
            endcheckDetail.setEndcheckId(endcheck.getId()); 
 | 
            endcheckDetail.setMaterialId(workorder.getMaterialId()); 
 | 
            endcheckDetail.setUnitId(workorder.getUnitId()); 
 | 
            endcheckDetail.setMaterialBatch(workorder.getBatch()); 
 | 
            endcheckDetailExtMapper.insert(endcheckDetail); 
 | 
            //更新产出记录数据 
 | 
            WorkorderRecord unWorkOrderRecord = workorderRecordMapper.selectOne(new QueryWrapper<WorkorderRecord>() 
 | 
                    .eq("WORKORDER_ID",endCheckBean.getWorkOrderId()) 
 | 
                    .eq("APPLIANCES_ID",endCheckDetailBean.getAppliancesId()).last(" limit 1")); 
 | 
            if(Objects.isNull(unWorkOrderRecord)){ 
 | 
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),  "对不起,对应工单产出记录不存在!"); 
 | 
            } 
 | 
            if(( endCheckBean.getCheckType()==Constants.ONE || endCheckBean.getDownType() ==  Constants.ONE )){// && !Objects.isNull(endCheckDetailBean.getQualifiedAppliancesId()) ){ 
 | 
                WorkorderRecord workorderRecord = new WorkorderRecord(); 
 | 
                workorderRecord.setDoneType(endCheckBean.getDownType()); 
 | 
                workorderRecord.setMaterialDonetype(endCheckBean.getDownType()); 
 | 
                workorderRecord.setNum(endCheckDetailBean.getQualifiedNum()); 
 | 
                if(!Objects.isNull(endCheckDetailBean.getQualifiedAppliancesId())){ 
 | 
                    workorderRecord.setQualifiedApplianceId(endCheckDetailBean.getQualifiedAppliancesId().toString()); 
 | 
                } 
 | 
                workorderRecordMapper.update(workorderRecord,new QueryWrapper<WorkorderRecord>() 
 | 
                        .eq("WORKORDER_ID",endCheckBean.getWorkOrderId()) 
 | 
                        .eq("APPLIANCES_ID",endCheckDetailBean.getAppliancesId()) 
 | 
                ); 
 | 
            } 
 | 
        } 
 | 
        if(( endCheckBean.getCheckType()==Constants.ONE || endCheckBean.getDownType() ==  Constants.ONE )){ 
 | 
            this.dealUnEndCheckRecord(endCheckBean,userInfo); 
 | 
        } 
 | 
        //添加工单操作记录 
 | 
        List<WorkorderHistory> whList = new ArrayList<>(); 
 | 
        workorder.setUpdateTime(DateUtil.getCurrentDate()); 
 | 
        workorder.setUpdateUser(userInfo.getId()); 
 | 
        //已完工 
 | 
        workorder.setStatus(Constants.WORKORDER_STATUS.done); 
 | 
        //工单历史数据 
 | 
        whList.add(WorkorderExtServiceImpl.initHistoryByModel(workorder,userInfo.getId(),Constants.WORKORDER_HISTORY_STATUS.done)); 
 | 
        workorderMapper.updateById(workorder); 
 | 
        if(whList.size()>0){ 
 | 
            workorderHistoryExtMapper.insertBatch(whList); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void dealUnEndCheckRecord(EndCheckBean endCheckBean,LoginUserInfo userInfo){ 
 | 
        Map<Integer, List<EndCheckDetailBean>> endCheckDetailBeanMap = endCheckBean.getEndCheckDetailBeanList().stream().filter(x -> !Objects.isNull(x.getQualifiedAppliancesId())) 
 | 
                .collect(Collectors.groupingBy(item -> item.getQualifiedAppliancesId())); 
 | 
        Iterator<Integer> iter = endCheckDetailBeanMap.keySet().iterator(); 
 | 
        while(iter.hasNext()) { 
 | 
            Integer key = iter.next(); 
 | 
            //判断当前不良篮筐是否存在于本工单产出记录中 
 | 
            if(workorderRecordMapper.selectCount(new QueryWrapper<WorkorderRecord>() 
 | 
                    .eq("WORKORDER_ID",endCheckBean.getWorkOrderId()) 
 | 
                    .eq("APPLIANCES_ID",key))>0){ 
 | 
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),  "对不起,不良篮筐数据已存在!"); 
 | 
            }; 
 | 
            List<EndCheckDetailBean> endCheckDetailBeans = endCheckDetailBeanMap.get(key); 
 | 
            EndCheckDetailBean p = endCheckDetailBeans.get(0); 
 | 
            WorkorderRecord unWorkOrderRecord = workorderRecordMapper.selectOne(new QueryWrapper<WorkorderRecord>() 
 | 
                    .eq("WORKORDER_ID",endCheckBean.getWorkOrderId()) 
 | 
                    .eq("APPLIANCES_ID",p.getAppliancesId()).last(" limit 1")); 
 | 
            p.setUnQualifiedNum(endCheckDetailBeans.stream().map(s -> s.getUnQualifiedNum()).reduce(BigDecimal.ZERO, BigDecimal::add)); 
 | 
            unWorkOrderRecord.setId(null); 
 | 
            unWorkOrderRecord.setCreateUser(userInfo.getId()); 
 | 
            unWorkOrderRecord.setCreateTime(new Date()); 
 | 
            unWorkOrderRecord.setDoneType(Constants.ONE); 
 | 
            unWorkOrderRecord.setMaterialDonetype(Constants.ONE); 
 | 
            unWorkOrderRecord.setAppliancesId(key); 
 | 
            unWorkOrderRecord.setNum(p.getUnQualifiedNum()); 
 | 
            workorderRecordMapper.insert(unWorkOrderRecord); 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public synchronized  String  getNextCode(Integer comId ){ 
 | 
        String prefix =  "JY-" + DateUtil.getDate(new Date(),"yyyyMMdd") +"-"; 
 | 
        Integer countNum  = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_ENDCHECK_KEY+comId,Integer.class); 
 | 
        countNum = Constants.formatIntegerNum(countNum)+1; 
 | 
        //更新缓存 
 | 
        RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_ENDCHECK_KEY+comId,countNum); 
 | 
        String nextIndex =Integer.toString( countNum); 
 | 
        return prefix + StringUtils.leftPad(nextIndex,4,"0"); 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    @Transactional(rollbackFor = Exception.class) 
 | 
    @Override 
 | 
    public void uploadEndCheckNew(EndCheckBean endCheckBean, LoginUserInfo userInfo){ 
 | 
        //检验工单是否做过外观检 
 | 
//        if(endcheckExtMapper.selectCount(new QueryWrapper<Endcheck>() 
 | 
//                .eq("OBJ_ID",endCheckBean.getWorkOrderId()) 
 | 
//                .eq("CHECK_TYPE", Constants.ONE) 
 | 
//        )>0){ 
 | 
//            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "此工单已做外观终检,无法再进行操作"); 
 | 
//        }; 
 | 
//        if(endcheckExtMapper.selectCount(new QueryWrapper<Endcheck>() 
 | 
//                .eq("OBJ_ID",endCheckBean.getWorkOrderId()) 
 | 
//                .eq("CHECK_TYPE", Constants.ZERO) 
 | 
//                .eq("DONE_TYPE", Constants.ONE) 
 | 
//        )>0){ 
 | 
//            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "此工单已检具检不合格,无法再进行操作"); 
 | 
//        }; 
 | 
        //获取工单信息 
 | 
        Workorder workorder  = workorderMapper.selectById(endCheckBean.getWorkOrderId()); 
 | 
        if(Objects.isNull(workorder)){ 
 | 
            throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), ResponseStatus.OBJECT_EMP.getMessage()+"【工单】"); 
 | 
        } 
 | 
        if(workorder.getStatus() > 3){ 
 | 
            throw new BusinessException(ResponseStatus.ERR_STATUS.getCode(), ResponseStatus.ERR_STATUS.getMessage()+"【工单状态错误】"); 
 | 
        } 
 | 
        List<EndCheckDetailBean> endCheckDetailBeanList = endCheckBean.getEndCheckDetailBeanList(); 
 | 
        //整合获取所有扫描的工装数据 
 | 
        List<EndCheckDetailBean> e = new ArrayList<>(); 
 | 
        for (EndCheckDetailBean endCheckDetailBean:endCheckDetailBeanList) { 
 | 
  
 | 
            List<EndCheckUnQualifiedBean> endCheckUnQualifiedBeanList = endCheckDetailBean.getEndCheckUnQualifiedBeanList(); 
 | 
  
 | 
            for (EndCheckUnQualifiedBean endCheckUnQualifiedBean:endCheckUnQualifiedBeanList ) { 
 | 
                if(Objects.equals(endCheckDetailBean.getAppliancesId(),endCheckUnQualifiedBean.getQualifiedAppliancesId())){ 
 | 
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), ResponseStatus.NOT_ALLOWED.getMessage()+"【扫描篮筐与不良品篮筐不可以使用相同篮筐】"); 
 | 
                } 
 | 
                Appliances appliances= appliancesExtMapper.selectById(endCheckUnQualifiedBean.getQualifiedAppliancesId()); 
 | 
                if(workorder.getType()==1||workorder.getType()==2){ 
 | 
                    SystemDictData systemDictData=systemDictDataServiceimpl.findById(appliances.getType()); 
 | 
                    if(endCheckDetailBean.getUnQualifiedNum().compareTo(BigDecimal.ZERO)==1&&!StringUtils.equals(Constants.APPLIANCES_TYPE_LABLE.scrap,systemDictData.getLabel()) ){ 
 | 
                        throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "当前工单为返工返修--只能选择报废工装"); 
 | 
                    } 
 | 
                } 
 | 
                //查询不良篮筐是否处于生产工单中 
 | 
                if(appliancesExtMapper.selectCount(new QueryWrapper<Appliances>() 
 | 
                        .eq("id",endCheckUnQualifiedBean.getQualifiedAppliancesId()) 
 | 
                        .apply("  id in ( select b.APPLIANCES_ID from workorder a inner join  workorder_record b on a.id = b.WORKORDER_ID and a.status in ( 0,1,2,3 ) and b.DELETED = 0 and a.id != '"+endCheckBean.getWorkOrderId()+"'  )  ") 
 | 
                )>Constants.ZERO){ 
 | 
                    throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "【" +appliances.getCode() + "】该工装处于生产中"); 
 | 
                }; 
 | 
            } 
 | 
  
 | 
            if(Objects.isNull(e)){ 
 | 
                e.add(endCheckDetailBean); 
 | 
            }else{ 
 | 
                if(e.indexOf(endCheckDetailBean) < Constants.ZERO){ 
 | 
                    e.add(endCheckDetailBean); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        //2022年8月17日14:44:05 处理 必须上传当前工单内所有报工篮筐数据 
 | 
//        List<Integer> iList = endCheckDetailBeanList.stream().map(EndCheckDetailBean::getAppliancesId).collect(Collectors.toList()); 
 | 
//        if(workorderRecordMapper.selectCount(new QueryWrapper<WorkorderRecord>() 
 | 
//                .eq("TYPE",1) 
 | 
//                .eq("WORKORDER_ID",workorder.getId()) 
 | 
//                .eq("DELETED",0) 
 | 
//                .notIn("APPLIANCES_ID",iList) 
 | 
//        )>0){ 
 | 
//            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), ResponseStatus.NOT_ALLOWED.getMessage()+"【请扫描此工单全部产出篮筐】"); 
 | 
//        }; 
 | 
  
 | 
        //整合获取所有扫描的工装数据验证 工装内数量是否超出 
 | 
        for (EndCheckDetailBean parent:e) { 
 | 
            BigDecimal childSumNum = new BigDecimal(0) ; 
 | 
            for (EndCheckDetailBean child : endCheckDetailBeanList) { 
 | 
                if(parent.getAppliancesId() == child.getAppliancesId()){ 
 | 
                    childSumNum  = childSumNum.add( child.getNum() ); 
 | 
                } 
 | 
            } 
 | 
            if(childSumNum.compareTo(parent.getNum())==1 ){ 
 | 
                throw new BusinessException(ResponseStatus.EXCEED_PLAN_NUM.getCode(), ResponseStatus.EXCEED_APPLIANCES_NUM.getMessage()); 
 | 
            } 
 | 
        } 
 | 
        //保存数据 
 | 
        Endcheck endcheck = endCheckBean.toEndCheck(workorder,userInfo); 
 | 
        endcheck.setCode(this.getNextCode(userInfo.getCompany().getId())); 
 | 
        endcheck.setRemark(endCheckBean.getRemark()); 
 | 
        endcheckExtMapper.insert(endcheck); 
 | 
        //保存明细数据 
 | 
        for (EndCheckDetailBean endCheckDetailBean:endCheckDetailBeanList) { 
 | 
  
 | 
            //更新产出记录数据 
 | 
            WorkorderRecord unWorkOrderRecord = workorderRecordMapper.selectOne(new QueryWrapper<WorkorderRecord>() 
 | 
                    .eq("WORKORDER_ID",endCheckBean.getWorkOrderId()) 
 | 
                    .eq("APPLIANCES_ID",endCheckDetailBean.getAppliancesId()).last(" limit 1")); 
 | 
            if(Objects.isNull(unWorkOrderRecord)){ 
 | 
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),  "对不起,对应工单产出记录不存在!"); 
 | 
            } 
 | 
            List<EndCheckUnQualifiedBean> endCheckUnQualifiedBeanList = endCheckDetailBean.getEndCheckUnQualifiedBeanList(); 
 | 
            EndcheckDetail endcheckDetail =  endCheckDetailBean.toEndCheckDetail(userInfo); 
 | 
            endcheckDetail.setRootDepartId(workorder.getRootDepartId()); 
 | 
            endcheckDetail.setDepartId(workorder.getDepartId()); 
 | 
            endcheckDetail.setEndcheckId(endcheck.getId()); 
 | 
            endcheckDetail.setMaterialId(workorder.getMaterialId()); 
 | 
            endcheckDetail.setUnitId(workorder.getUnitId()); 
 | 
            endcheckDetail.setMaterialBatch(workorder.getBatch()); 
 | 
            if(!Objects.isNull(endCheckUnQualifiedBeanList)&&endCheckUnQualifiedBeanList.size()>Constants.ZERO){ 
 | 
                //最大不合格数量 
 | 
                BigDecimal maxUnQualifiedNum = unWorkOrderRecord.getNum().subtract(endCheckDetailBean.getQualifiedNum()); 
 | 
                BigDecimal maxQNum = endCheckUnQualifiedBeanList.stream().map(s -> s.getUnQualifiedNum()).reduce(BigDecimal.ZERO, BigDecimal::add); 
 | 
                if(maxQNum.compareTo(maxUnQualifiedNum)>0){ 
 | 
                    Appliances appliances  = appliancesMapper.selectById(endCheckDetailBean.getAppliancesId()); 
 | 
                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),  "对不起,工装【"+appliances.getCode()+"】检验数量超出"); 
 | 
                } 
 | 
                for (EndCheckUnQualifiedBean endCheckUnQualifiedBean:endCheckUnQualifiedBeanList) { 
 | 
                    endcheckDetail.setUnqualifiedNum(endCheckUnQualifiedBean.getUnQualifiedNum()); 
 | 
                    endcheckDetail.setQualifiedApplianceId(endCheckUnQualifiedBean.getQualifiedAppliancesId()); 
 | 
                    endcheckDetail.setCheckInfo(endCheckUnQualifiedBean.getCheckInfo()); 
 | 
                    endcheckDetailExtMapper.insert(endcheckDetail); 
 | 
                } 
 | 
            }else{ 
 | 
                endcheckDetailExtMapper.insert(endcheckDetail); 
 | 
            } 
 | 
  
 | 
//            if(( endCheckBean.getCheckType()==Constants.ONE || endCheckBean.getDownType() ==  Constants.ONE )){ 
 | 
            WorkorderRecord workorderRecord = new WorkorderRecord(); 
 | 
            if(( endCheckBean.getCheckType()==Constants.ONE || endCheckBean.getDownType() ==  Constants.ONE )){ 
 | 
                workorderRecord.setDoneType(endCheckBean.getDownType()); 
 | 
            } 
 | 
            workorderRecord.setMaterialDonetype(endCheckBean.getDownType()); 
 | 
            workorderRecord.setNum(endCheckDetailBean.getQualifiedNum()); 
 | 
            if(!Objects.isNull(endCheckDetailBean.getQualifiedAppliancesId())){ 
 | 
                workorderRecord.setQualifiedApplianceId(endCheckDetailBean.getQualifiedAppliancesId().toString()); 
 | 
            } 
 | 
            workorderRecordMapper.update(workorderRecord,new QueryWrapper<WorkorderRecord>() 
 | 
                    .eq("WORKORDER_ID",endCheckBean.getWorkOrderId()) 
 | 
                    .eq("APPLIANCES_ID",endCheckDetailBean.getAppliancesId()) 
 | 
            ); 
 | 
//            } 
 | 
        } 
 | 
//        if(( endCheckBean.getCheckType()==Constants.ONE || endCheckBean.getDownType() ==  Constants.ONE )){ 
 | 
            this.dealUnEndCheckRecordNew(endCheckBean,userInfo); 
 | 
//        } 
 | 
        //添加工单操作记录 
 | 
        List<WorkorderHistory> whList = new ArrayList<>(); 
 | 
        workorder.setUpdateTime(DateUtil.getCurrentDate()); 
 | 
        workorder.setUpdateUser(userInfo.getId()); 
 | 
        //已完工 
 | 
        workorder.setStatus(Constants.WORKORDER_STATUS.done); 
 | 
        //工单历史数据 
 | 
        whList.add(WorkorderExtServiceImpl.initHistoryByModel(workorder,userInfo.getId(),Constants.WORKORDER_HISTORY_STATUS.done)); 
 | 
        workorderMapper.updateById(workorder); 
 | 
        if(whList.size()>0){ 
 | 
            workorderHistoryExtMapper.insertBatch(whList); 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    public void dealUnEndCheckRecordNew(EndCheckBean endCheckBean,LoginUserInfo userInfo){ 
 | 
        List<EndCheckDetailBean> endCheckDetailBeanList = endCheckBean.getEndCheckDetailBeanList(); 
 | 
        for (EndCheckDetailBean endCheckDetailBean:endCheckDetailBeanList) { 
 | 
            List<EndCheckUnQualifiedBean> endCheckUnQualifiedBeanList = endCheckDetailBean.getEndCheckUnQualifiedBeanList(); 
 | 
            Map<Integer, List<EndCheckUnQualifiedBean>> endCheckDetailBeanMap = endCheckUnQualifiedBeanList.stream().filter(x -> !Objects.isNull(x.getQualifiedAppliancesId())) 
 | 
                    .collect(Collectors.groupingBy(item -> item.getQualifiedAppliancesId())); 
 | 
            Iterator<Integer> iter = endCheckDetailBeanMap.keySet().iterator(); 
 | 
            while(iter.hasNext()) { 
 | 
                Integer key = iter.next(); 
 | 
                //判断当前不良篮筐是否存在于本工单产出记录中 
 | 
                if(workorderRecordMapper.selectCount(new QueryWrapper<WorkorderRecord>() 
 | 
                        .eq("WORKORDER_ID",endCheckBean.getWorkOrderId()) 
 | 
                        .eq("APPLIANCES_ID",key))>0){ 
 | 
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),  "对不起,不良篮筐数据已存在!"); 
 | 
                }; 
 | 
                List<EndCheckUnQualifiedBean> checkUnQualifiedBeans = endCheckDetailBeanMap.get(key); 
 | 
                EndCheckUnQualifiedBean p = checkUnQualifiedBeans.get(0); 
 | 
                WorkorderRecord unWorkOrderRecord = workorderRecordMapper.selectOne(new QueryWrapper<WorkorderRecord>() 
 | 
                        .eq("WORKORDER_ID",endCheckBean.getWorkOrderId()) 
 | 
                        .eq("APPLIANCES_ID",endCheckDetailBean.getAppliancesId()).last(" limit 1")); 
 | 
                p.setUnQualifiedNum(checkUnQualifiedBeans.stream().map(s -> s.getUnQualifiedNum()).reduce(BigDecimal.ZERO, BigDecimal::add)); 
 | 
                unWorkOrderRecord.setId(null); 
 | 
                unWorkOrderRecord.setCreateUser(userInfo.getId()); 
 | 
                unWorkOrderRecord.setCreateTime(new Date()); 
 | 
                unWorkOrderRecord.setDoneType(Constants.ONE); 
 | 
                unWorkOrderRecord.setMaterialDonetype(Constants.ONE); 
 | 
                unWorkOrderRecord.setAppliancesId(key); 
 | 
                unWorkOrderRecord.setNum(p.getUnQualifiedNum()); 
 | 
                workorderRecordMapper.insert(unWorkOrderRecord); 
 | 
            } 
 | 
  
 | 
  
 | 
//            if(!Objects.isNull(endCheckUnQualifiedBeanList)&&endCheckUnQualifiedBeanList.size()>Constants.ZERO){ 
 | 
//                for (EndCheckUnQualifiedBean endCheckUnQualifiedBean:endCheckUnQualifiedBeanList) { 
 | 
//                    WorkorderRecord unWorkOrderRecord = workorderRecordMapper.selectOne(new QueryWrapper<WorkorderRecord>() 
 | 
//                            .eq("WORKORDER_ID",endCheckBean.getWorkOrderId()) 
 | 
//                            .eq("APPLIANCES_ID",endCheckDetailBean.getAppliancesId()) 
 | 
//                            .last(" limit 1")); 
 | 
//                    unWorkOrderRecord.setId(null); 
 | 
//                    unWorkOrderRecord.setCreateUser(userInfo.getId()); 
 | 
//                    unWorkOrderRecord.setCreateTime(new Date()); 
 | 
//                    unWorkOrderRecord.setDoneType(Constants.ONE); 
 | 
//                    unWorkOrderRecord.setMaterialDonetype(Constants.ONE); 
 | 
//                    unWorkOrderRecord.setAppliancesId(endCheckUnQualifiedBean.getQualifiedAppliancesId()); 
 | 
////                    unWorkOrderRecord.setQualifiedApplianceId(endCheckUnQualifiedBean.getQualifiedAppliancesId().toString()); 
 | 
//                    unWorkOrderRecord.setNum(endCheckUnQualifiedBean.getUnQualifiedNum()); 
 | 
//                    workorderRecordMapper.insert(unWorkOrderRecord); 
 | 
//                } 
 | 
//            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
} 
 |