| package doumeemes.service.ext.impl; | 
|   | 
| import com.github.pagehelper.PageHelper; | 
| import com.github.pagehelper.PageInfo; | 
| import doumeemes.biz.system.SystemDictDataBiz; | 
| import doumeemes.core.constants.ResponseStatus; | 
| import doumeemes.core.exception.BusinessException; | 
| import doumeemes.core.model.ApiResponse; | 
| import doumeemes.core.model.LoginUserInfo; | 
| import doumeemes.core.model.PageData; | 
| import doumeemes.core.model.PageWrap; | 
| import doumeemes.core.utils.Constants; | 
| import doumeemes.core.utils.excel.EasyExcelUtil; | 
| import doumeemes.dao.business.RouteCardMapper; | 
| import doumeemes.dao.business.model.Bom; | 
| import doumeemes.dao.business.model.RouteCard; | 
| import doumeemes.dao.business.model.RouteProcedure; | 
| import doumeemes.dao.business.model.Workorder; | 
| import doumeemes.dao.ext.BomExtMapper; | 
| import doumeemes.dao.ext.BomVersionExtMapper; | 
| import doumeemes.dao.ext.RouteCardExtMapper; | 
| import doumeemes.dao.ext.beanDto.QueryBomDTO; | 
| import doumeemes.dao.ext.dto.QueryBomVersionExtDTO; | 
| import doumeemes.dao.ext.dto.QueryDepartmentExtDTO; | 
| import doumeemes.dao.ext.dto.QueryRouteCardExtDTO; | 
| import doumeemes.dao.ext.vo.*; | 
| import doumeemes.service.business.impl.*; | 
| import doumeemes.service.ext.RouteCardExtService; | 
| import org.apache.commons.lang3.StringUtils; | 
| import org.apache.shiro.SecurityUtils; | 
| 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.Date; | 
| import java.util.List; | 
| import java.util.stream.Collectors; | 
|   | 
| /** | 
|  * 工艺卡管理Service实现 | 
|  * @author 江蹄蹄 | 
|  * @date 2022/06/27 13:58 | 
|  */ | 
| @Service | 
| public class RouteCardExtServiceImpl implements RouteCardExtService { | 
|   | 
|     @Autowired | 
|     private RouteCardExtMapper routeCardExtMapper; | 
|   | 
|     @Autowired | 
|     private RouteCardMapper routeCardMapper; | 
|     @Autowired | 
|     private DepartmentExtServiceImpl departmentExtServiceimpl; | 
|     @Autowired | 
|     private BomExtMapper bomExtMapper; | 
|     @Autowired | 
|     private RouteServiceImpl routeServiceimpl; | 
|   | 
|     @Autowired | 
|     private ProceduresExtServiceImpl proceduresExtService; | 
|   | 
|   | 
|     @Autowired | 
|     private BomVersionExtMapper bomVersionExtMapper; | 
|     @Autowired | 
|     private RouteCardServiceImpl routeCardServiceimpl; | 
|   | 
|     @Autowired | 
|     public SystemDictDataBiz systemDictDataBiz; | 
|   | 
|     @Autowired | 
|     private WorkorderServiceImpl workorderServiceimpl; | 
|   | 
|     @Autowired | 
|     private  BomServiceImpl bomServiceimpl; | 
|   | 
|   | 
|     @Autowired | 
|     private RouteProcedureServiceImpl routeProcedureServiceimpl; | 
|   | 
|     @Override | 
|     public PageData<RouteCardExtListVO> findPage(PageWrap<QueryRouteCardExtDTO> pageWrap) { | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         pageWrap.getModel().setDeleted(Constants.ZERO); | 
|         pageWrap.getModel().setRootDepartId(user.getRootDepartment().getId()); | 
|         pageWrap.getModel().setDepartId(user.getCurComDepartment().getId()); | 
|         //当前登录用户所在所有工厂型组织 | 
|         QueryDepartmentExtDTO querydepart=new QueryDepartmentExtDTO(); | 
|         querydepart.setType(Constants.ONE); | 
|         List<DepartmentExtListVO> departList= departmentExtServiceimpl.getDepartmentListByConditon(querydepart); | 
|         if(departList.size()>0){ | 
|             List<Integer> departIds =departList.stream().map(DepartmentExtListVO::getId).collect(Collectors.toList()); | 
|             pageWrap.getModel().setDepartIds(departIds); | 
|         } | 
|         PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); | 
|   | 
|         String resourcePath=  systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode(); | 
|   | 
|         List<RouteCardExtListVO> result = routeCardExtMapper.selectList(pageWrap.getModel()); | 
|         for(int i=0;i<result.size();i++){ | 
|             RouteCardExtListVO rev=result.get(i); | 
|             rev.setResourcePath(resourcePath); | 
|         } | 
|         return PageData.from(new PageInfo<>(result)); | 
|     } | 
|   | 
|     @Transactional(rollbackFor = {BusinessException.class,Exception.class}) | 
|     @Override | 
|     public void importExcel(MultipartFile file)  { | 
|   | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ | 
|             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); | 
|         } | 
|         //解析excel | 
|         List<RouteCardExtListVO> list = EasyExcelUtil.importExcel(file, 1, 1, RouteCardExtListVO.class); | 
|   | 
|         if(list == null || list.size()==0){ | 
|             throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "导入数据内容有误!"); | 
|         } | 
|         for(int i=0;i<list.size();i++){ | 
|             RouteCardExtListVO routeCardExtListVO=list.get(i); | 
|             routeCardExtListVO.setDepartId(user.getCurComDepartment().getId()); | 
|   | 
|   | 
|             /** | 
|              * 工厂 | 
|              */ | 
|           /*  if(StringUtils.isEmpty(routeCardExtListVO.getDepartName())){ | 
|                 throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "工厂不能为空!"); | 
|             }*/ | 
|          /*   QueryDepartmentExtDTO queryDepartmentExtDTOpagewrap=new QueryDepartmentExtDTO(); | 
|             queryDepartmentExtDTOpagewrap.setType(Constants.ONE); | 
|             queryDepartmentExtDTOpagewrap.setName(routeCardExtListVO.getDepartName()); | 
|             List<DepartmentExtListVO> departList=  departmentExtServiceimpl.getDepartmentListByConditon(queryDepartmentExtDTOpagewrap); | 
|             if(departList==null||departList.size()<=0){ | 
|                 throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"“"+routeCardExtListVO.getDepartName()+"“工厂不存在!"); | 
|             }else{ | 
|                 routeCardExtListVO.setDepartId(departList.get(0).getId()); | 
|             }*/ | 
|   | 
|             /** | 
|              * bom产品 | 
|              */ | 
|             if(StringUtils.isEmpty(routeCardExtListVO.getMarterialName())){ | 
|                 throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"产品名称不能为空"); | 
|   | 
|             } | 
|             QueryBomDTO queryboxextpageWrap=new QueryBomDTO(); | 
|              queryboxextpageWrap.setDeleted(Constants.ZERO); | 
|             queryboxextpageWrap.setDepartId(user.getCurComDepartment().getId()); | 
|             queryboxextpageWrap.setRootDepartId(user.getRootDepartment().getId()); | 
|             queryboxextpageWrap.setAbsolutionMaterialName(routeCardExtListVO.getMarterialName()); | 
|             List<BomExtListVO> bomlist = bomExtMapper.selectAdminList(queryboxextpageWrap); | 
|             if(bomlist==null&&bomlist.size()<=0){ | 
|                 throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"“"+routeCardExtListVO.getMarterialName()+"“产品名称不存在!"); | 
|   | 
|             }else{ | 
|                 routeCardExtListVO.setBomId(bomlist.get(0).getId()); | 
|             } | 
|   | 
|             QueryBomVersionExtDTO bb=new QueryBomVersionExtDTO(); | 
|             bb.setBomId(bomlist.get(0).getId()); | 
|             BomVersionExtListVO bve= bomVersionExtMapper.selectListByOne(bb); | 
|             if(bve==null){ | 
|                 throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"“"+routeCardExtListVO.getMarterialName()+"bom历史信息不存在"); | 
|   | 
|             } | 
|   | 
|             /** | 
|              * 工序 | 
|              */ | 
|             if(StringUtils.isEmpty(routeCardExtListVO.getProductName())){ | 
|                 throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"工序不能为空!"); | 
|   | 
|             } | 
|             List<ProceduresExtListVO> producelist= proceduresExtService.getGYListByCondition(bomlist.get(0).getRouteId()); | 
|             if(producelist.size()>0){ | 
|                 Boolean procutemark=true; | 
|                 for(int p=0;p<producelist.size();p++){ | 
|                     ProceduresExtListVO pv=producelist.get(p); | 
|                     if(StringUtils.equals(pv.getName(),routeCardExtListVO.getProductName().trim())){ | 
|                         routeCardExtListVO.setRouteProcedureId(pv.getDmodelRouteProductId()); | 
|                         procutemark=false; | 
|                     } | 
|                 } | 
|                 if(procutemark){ | 
|                     throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"工序不存在,请重新输入!"); | 
|   | 
|                 } | 
|   | 
|             }else{ | 
|                 throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"“"+routeCardExtListVO.getMarterialName()+"“产品工序不存在!"); | 
|   | 
|             } | 
|   | 
|             if(StringUtils.isNotEmpty(routeCardExtListVO.getTips())&&routeCardExtListVO.getTips().length()>200){ | 
|   | 
|                 throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"工艺卡事项最多输入200字"); | 
|   | 
|             } | 
|   | 
|   | 
|             RouteCard find=new RouteCard(); | 
|             find.setDeleted(Constants.ZERO); | 
|             find.setRootDepartId(user.getRootDepartment().getId()); | 
|             find.setDepartId(user.getCurComDepartment().getId()); | 
|             find.setBomId(bve.getId()); | 
|             find.setRouteProcedureId(routeCardExtListVO.getRouteProcedureId()); | 
|             RouteCard finddata= routeCardServiceimpl.findOne(find); | 
|             if(finddata!=null){ | 
|                 throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"工序已存在,不允许添加"); | 
|                 } | 
|   | 
|             RouteCard routeCard=new RouteCard(); | 
|             routeCard.setDeleted(Constants.ZERO); | 
|             routeCard.setRootDepartId(user.getRootDepartment().getId()); | 
|             routeCard.setDepartId(user.getCurComDepartment().getId()); | 
|             routeCard.setCreateTime(new Date()); | 
|             routeCard.setCreateUser(user.getId()); | 
|             routeCard.setRouteProcedureId(routeCardExtListVO.getRouteProcedureId()); | 
|             routeCard.setBomId(bve.getId()); | 
|             routeCard.setTips(routeCardExtListVO.getTips()); | 
|             routeCardMapper.insert(routeCard); | 
|         } | 
|     } | 
|   | 
|   | 
|     @Override | 
|     public List<RouteCardExtListVO> findlistBycondition(PageWrap<QueryRouteCardExtDTO> pageWrap) { | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         pageWrap.getModel().setDeleted(Constants.ZERO); | 
|         pageWrap.getModel().setRootDepartId(user.getRootDepartment().getId()); | 
|         PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); | 
|   | 
|         String resourcePath=  systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode(); | 
|   | 
|         List<RouteCardExtListVO> result = routeCardExtMapper.selectList(pageWrap.getModel()); | 
|         for(int i=0;i<result.size();i++){ | 
|             RouteCardExtListVO rev=result.get(i); | 
|             rev.setResourcePath(resourcePath); | 
|         } | 
|         return result; | 
|     } | 
|   | 
|   | 
|   | 
|     @Override | 
|     public ApiResponse<RouteCardExtListVO> getListByWorkOrderId(QueryRouteCardExtDTO pageWrap) { | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|   | 
|         Workorder workorder= workorderServiceimpl.findById(Integer.valueOf(pageWrap.getWorkOrderId())); | 
|   | 
|   | 
|         Bom bom=new Bom(); | 
|         bom.setRootDepartId(workorder.getRootDepartId()); | 
|         bom.setDepartId(workorder.getDepartId()); | 
|         bom.setMaterialId(workorder.getMaterialId()); | 
|         bom.setDeleted(Constants.ZERO); | 
|         bom.setProcedureId(workorder.getProcedureId()); | 
|         Bom bd=bomServiceimpl.findOne(bom); | 
|         Boolean  cardMark=false; | 
|         if(bd!=null){ | 
|   | 
|             //查询工艺关联工序的id | 
|             RouteProcedure routeProcedure=new RouteProcedure(); | 
|           //  routeProcedure.setDepartId(workorder.getDepartId()); | 
|             routeProcedure.setRouteId(bd.getRouteId()); | 
|             routeProcedure.setProcedureId(bd.getProcedureId()); | 
|             routeProcedure.setDeleted(Constants.ZERO); | 
|             RouteProcedure findroute=  routeProcedureServiceimpl.findOne(routeProcedure); | 
|             if(findroute==null){ | 
|                 return ApiResponse.failed("工艺卡关联的工序不存在!"); | 
|             } | 
|             String resourcePath=  systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode(); | 
|             //查询BOM version的id | 
|             QueryBomVersionExtDTO bb=new QueryBomVersionExtDTO(); | 
|             bb.setBomId(bd.getId()); | 
|             bb.setRootDepartId(workorder.getRootDepartId()); | 
|             bb.setDepartId(workorder.getDepartId()); | 
|             bb.setMaterialId(workorder.getMaterialId()); | 
|             bb.setProcedureId(workorder.getProcedureId()); | 
|             List<BomVersionExtListVO> bomversionlist= bomVersionExtMapper.selectList(bb); | 
|             if(bomversionlist.size()>0){ | 
|   | 
|                 for(int i=0;i<bomversionlist.size();i++){ | 
|                     BomVersionExtListVO belv=bomversionlist.get(i); | 
|                     pageWrap.setRouteProcedureId(findroute.getId()); | 
|                     pageWrap.setBomId(belv.getId()); | 
|                     pageWrap.setRootDepartId(workorder.getRootDepartId()); | 
|                     pageWrap.setDepartId(workorder.getDepartId()); | 
|                     pageWrap.setDeleted(Constants.ZERO); | 
|                     List<RouteCardExtListVO> result = routeCardExtMapper.selectList(pageWrap); | 
|                     if(result.size()>0){ | 
|                         cardMark=true; | 
|   | 
|                         result.get(0).setResourcePath(resourcePath); | 
|                         return ApiResponse.success(result.get(0)); | 
|                     } | 
|                 } | 
|                 if(!cardMark){ | 
|                     return ApiResponse.failed("工艺卡信息为空!"); | 
|                 } | 
|             }else{ | 
|                 return ApiResponse.failed("BOM历史信息不存在!"); | 
|             } | 
|   | 
|         }else{ | 
|             return ApiResponse.failed("BOM不存在!"); | 
|         } | 
|   | 
|         return ApiResponse.success(null); | 
|     } | 
|   | 
| } |