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