| package doumeemes.service.ext.impl; | 
|   | 
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
| import com.baomidou.mybatisplus.core.metadata.IPage; | 
| 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.excel.EasyExcelUtil; | 
| import doumeemes.core.utils.redis.RedisUtil; | 
| import doumeemes.dao.business.model.*; | 
| import doumeemes.dao.business.vo.WorkPlansVO; | 
| import doumeemes.dao.ext.*; | 
| import doumeemes.dao.ext.dto.*; | 
| import doumeemes.dao.ext.vo.*; | 
| import doumeemes.service.ext.DepartmentExtService; | 
| import doumeemes.service.ext.PlansExtService; | 
| import doumeemes.service.ext.ProceduresExtService; | 
| import doumeemes.service.ext.WorkPlansExtService; | 
| import com.github.pagehelper.PageHelper; | 
| import com.github.pagehelper.PageInfo; | 
| import org.apache.commons.lang3.StringUtils; | 
| import org.apache.shiro.SecurityUtils; | 
| import org.springframework.beans.BeanUtils; | 
| 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 org.springframework.web.multipart.MultipartFile; | 
|   | 
| import java.math.BigDecimal; | 
| import java.time.LocalDate; | 
| import java.util.ArrayList; | 
| import java.util.Date; | 
| import java.util.List; | 
| import java.util.Objects; | 
|   | 
| /** | 
|  * Service实现 | 
|  * @author 江蹄蹄 | 
|  * @since 2023/07/27 13:53 | 
|  */ | 
| @Service | 
| public class WorkPlansExtServiceImpl implements WorkPlansExtService { | 
|   | 
|     @Autowired | 
|     private RedisTemplate<String, Object> redisTemplate; | 
|     @Autowired | 
|     private WorkPlansExtMapper workPlansExtMapper; | 
|   | 
|     @Autowired | 
|     private PlansExtService plansExtService; | 
|   | 
|     @Autowired | 
|     private PlanImportExtMapper planImportExtMapper; | 
|   | 
|     @Autowired | 
|     private PlanHistoryExtMapper planHistoryExtMapper; | 
|   | 
|     @Autowired | 
|     private MaterialDistributeExtMapper materialDistributeExtMapper; | 
|   | 
|     @Autowired | 
|     private BomExtMapper bomExtMapper; | 
|   | 
|     @Autowired | 
|     private RouteExtMapper routeExtMapper; | 
|   | 
|     @Autowired | 
|     private ProceduresExtService proceduresExtService; | 
|   | 
|     @Autowired | 
|     private DepartmentExtService departmentExtService; | 
|   | 
|     @Override | 
|     public PageData<WorkPlansExtListVO> findPage(PageWrap<QueryWorkPlansExtDTO> pageWrap) { | 
|         PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); | 
|         List<WorkPlansExtListVO> result = workPlansExtMapper.selectList(pageWrap.getModel()); | 
|         return PageData.from(new PageInfo<>(result)); | 
|     } | 
|   | 
|   | 
|     /****************************************************************************************************************************************************************************/ | 
|   | 
|     @Override | 
|     public Integer saveOrUpdate(WorkPlansSaveDTO workPlansSaveDTO) { | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ | 
|             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); | 
|         } | 
|         if(Objects.isNull(workPlansSaveDTO) | 
|                 || StringUtils.isBlank(workPlansSaveDTO.getBatch()) | 
|                 || Objects.isNull(workPlansSaveDTO.getPlanDate()) | 
|                 || Objects.isNull(workPlansSaveDTO.getNum()) | 
|                 || Objects.isNull(workPlansSaveDTO.getFactoryId()) | 
|                 || Objects.isNull(workPlansSaveDTO.getUnitId()) | 
|                 || Objects.isNull(workPlansSaveDTO.getMaterialId()) | 
|                 || Objects.isNull(workPlansSaveDTO.getStartDate()) | 
|                 || workPlansSaveDTO.getStartDate().getTime() > workPlansSaveDTO.getPlanDate().getTime()){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
|         } | 
|         WorkPlans workPlans = new WorkPlans(); | 
|         if(!Objects.isNull(workPlansSaveDTO.getWorkPlansId())){ | 
|             workPlans = workPlansExtMapper.selectById(workPlansSaveDTO.getWorkPlansId()); | 
|             if(Objects.isNull(workPlans)){ | 
|                 throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
|             } | 
|             if (!workPlans.getStatus().equals(Constants.WORKORDER_HISTORY_STATUS.create)){ | 
|                 throw new BusinessException(ResponseStatus.ERR_STATUS); | 
|             } | 
|             BeanUtils.copyProperties(workPlansSaveDTO,workPlans); | 
|             workPlans.setUpdateTime(DateUtil.getCurrentDate()); | 
|             workPlans.setUpdateUser(user.getId()); | 
|             workPlansExtMapper.updateById(workPlans); | 
|         }else{ | 
|             BeanUtils.copyProperties(workPlansSaveDTO,workPlans); | 
|             workPlans.setCreateTime(DateUtil.getCurrentDate()); | 
|             workPlans.setCreateUser(user.getId()); | 
|             workPlans.setDeleted(Constants.ZERO); | 
|             workPlans.setDepartId(user.getCurComDepartment().getId()); | 
|             workPlans.setRootDepartId(user.getRootDepartment().getId()); | 
|             workPlans.setUserId(user.getId()); | 
|             workPlans.setOrigin(Constants.PLAS_ORIGIN.user); | 
|             workPlans.setStatus(Constants.PLAN_STATUS.create); | 
|             workPlans.setPlanCode(this.getNextCode(user.getCompany().getId())); | 
|             workPlansExtMapper.insert(workPlans); | 
|         } | 
|   | 
|         return workPlans.getId(); | 
|     } | 
|   | 
|     @Override | 
|     public PageData<WorkPlansVO> findWorkPlansVOPage(PageWrap<QueryWorkPlansDTO> 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()); | 
| //        if(!Constants.equalsInteger(user.getCurComDepartment().getId(),user.getRootDepartment().getId())){ | 
|         //如果当前选择的公司级组织非根组织信息,只能查看当前选择公司级组织数据 | 
|         pageWrap.getModel().setDepartId(user.getCurComDepartment().getId()); | 
| //        } | 
|         //数据权限 | 
|         List<Integer> dataPermission = user.getDepartPermissionList(); | 
|         if(dataPermission!=null){ | 
|             //只能看自己的 | 
| //            pageWrap.getModel().setCreateUser(user.getId()); | 
| //            //否则走数据权限 | 
| //            pageWrap.getModel().setDepartIds(dataPermission); | 
|          /*   if(dataPermission.size() == 0){ | 
|                 //只能看自己的 | 
|                 pageWrap.getModel().setCreateUser(user.getId()); | 
|             }else{ | 
|   | 
|             }*/ | 
|         } | 
| //        if(user.getProcedureIds()!=null){ | 
| //            pageWrap.getModel().setProcedureIds(user.getProcedureIds()); | 
| //        }else{ | 
| //            // pageWrap.getModel().setUserId(user.getId()); | 
| //            pageWrap.getModel().setCreateUser(user.getId()); | 
| //        } | 
|         PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); | 
|         List<WorkPlansVO> result = workPlansExtMapper.getWorkPlansVOPage(pageWrap.getModel()); | 
|         if(!Objects.isNull(result)&&result.size()>Constants.ZERO){ | 
|             result.forEach(i->{ | 
|                 List<PlansExtListVO> plansExtListVOList = plansExtService.getListByWorkPlan(i.getId()); | 
|                 if(!Objects.isNull(plansExtListVOList)&&plansExtListVOList.size()>Constants.ZERO){ | 
|                     PlansExtListVO plansExtListVO = plansExtListVOList.get(plansExtListVOList.size()-Constants.ONE); | 
|                     i.setFinishQualifiedNum(Objects.isNull(plansExtListVO.getQulifiedNum())?Constants.ZERO:plansExtListVO.getQulifiedNum()); | 
|                     i.setFinishUnQualifiedNum(Objects.isNull(plansExtListVO.getUnqulifiedNum())?Constants.ZERO:plansExtListVO.getUnqulifiedNum()); | 
|                     i.setFinishNum(Objects.isNull(plansExtListVO.getDoneNum())?Constants.ZERO:plansExtListVO.getDoneNum()); | 
|                 } | 
|                 i.setHasExpire(false); | 
|                 i.setStatus(Constants.formatIntegerNum(i.getStatus())); | 
|                 if ( !i.getStatus().equals(Constants.WORKPLANHISTORY_TYPE.done) && | 
|                         !i.getStatus().equals(Constants.WORKPLANHISTORY_TYPE.close)){ | 
|                     if (Objects.nonNull(i.getPlanDate())){ | 
|                         i.setHasExpire(DateUtil.toDateLocalDateTime(i.getPlanDate()).toLocalDate().isBefore(LocalDate.now())); | 
|                     } | 
|                 } | 
|   | 
|   | 
|             }); | 
|         } | 
|         return PageData.from(new PageInfo<>(result)); | 
|     } | 
|   | 
|     @Transactional(rollbackFor = {BusinessException.class,Exception.class}) | 
|     @Override | 
|     public Integer deleteById(Integer id) { | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         WorkPlans workPlans = workPlansExtMapper.selectById(id); | 
|         if(Objects.isNull(workPlans)){ | 
|             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
|         } | 
|         if(!workPlans.getStatus().equals(Constants.WORKPLANHISTORY_TYPE.create)){ | 
|             throw new BusinessException(ResponseStatus.ERR_STATUS); | 
|         } | 
|         workPlans.setDeleted(Constants.ONE); | 
|         workPlans.setUpdateUser(user.getId()); | 
|         workPlans.setUpdateTime(new Date()); | 
|         return workPlansExtMapper.updateById(workPlans); | 
|     } | 
|   | 
|   | 
|     @Transactional(rollbackFor = {BusinessException.class,Exception.class}) | 
|     @Override | 
|     public void paused(Integer id){ | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ | 
|             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); | 
|         } | 
|         WorkPlans workPlans = workPlansExtMapper.selectById(id); | 
|         if(Objects.isNull(workPlans)){ | 
|             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
|         } | 
|         //已暂停的计划不需重复操作 | 
|         if(Constants.equalsInteger(workPlans.getPaused(),Constants.ONE) ){ | 
|             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,该计划已暂停,无需重复操作!"); | 
|         } | 
|         workPlans.setUpdateTime(DateUtil.getCurrentDate()); | 
|         workPlans.setUpdateUser(user.getId()); | 
|         workPlans.setPaused(Constants.ONE); | 
|         workPlansExtMapper.updateById(workPlans); | 
|         //历史数据,关闭 | 
|         planHistoryExtMapper.insert(initHistoryByModel(workPlans,user.getId(),Constants.PLANHISTORY_TYPE.pause)); | 
|         List<Plans> plansList = plansExtService.getPlansList(new QueryWrapper<Plans>() | 
|                 .in("STATUS",0,1,4) | 
|                 .eq("PAUSED",Constants.ZERO) | 
|                 .eq("DELETED",Constants.ZERO) | 
|                 .eq("WORK_PLANS_ID",workPlans.getId())); | 
|   | 
|         plansList.forEach(i->{ | 
|             plansExtService.pauseByIdForStandard(i,user); | 
|         }); | 
|     } | 
|   | 
|     @Transactional(rollbackFor = {BusinessException.class,Exception.class}) | 
|     @Override | 
|     public void regain(Integer id){ | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ | 
|             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); | 
|         } | 
|         WorkPlans workPlans = workPlansExtMapper.selectById(id); | 
|         if(Objects.isNull(workPlans)){ | 
|             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
|         } | 
|         //已暂停的计划不需重复操作 | 
|         if(Constants.equalsInteger(workPlans.getPaused(),Constants.ZERO) ){ | 
|             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,该计划已恢复,无需重复操作!"); | 
|         } | 
|         workPlans.setUpdateTime(DateUtil.getCurrentDate()); | 
|         workPlans.setUpdateUser(user.getId()); | 
|         workPlans.setPaused(Constants.ZERO); | 
|         workPlansExtMapper.updateById(workPlans); | 
|         //历史数据,关闭 | 
|         planHistoryExtMapper.insert(initHistoryByModel(workPlans,user.getId(),Constants.PLANHISTORY_TYPE.pause)); | 
|         List<Plans> plansList = plansExtService.getPlansList(new QueryWrapper<Plans>() | 
|                 .in("STATUS",0,1,4) | 
|                 .eq("PAUSED",Constants.ONE) | 
|                 .eq("DELETED",Constants.ZERO) | 
|                 .eq("WORK_PLANS_ID",workPlans.getId())); | 
|         plansList.forEach(i->{ | 
|             plansExtService.regainByIdForStandard(i,user); | 
|         }); | 
|     } | 
|   | 
|     @Transactional(rollbackFor = {BusinessException.class,Exception.class}) | 
|     @Override | 
|     public void close(Integer id){ | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ | 
|             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); | 
|         } | 
|         WorkPlans workPlans = workPlansExtMapper.selectById(id); | 
|         if(Objects.isNull(workPlans)){ | 
|             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
|         } | 
|         if(Constants.equalsInteger(workPlans.getStatus(),Constants.PLAN_STATUS.close) ){ | 
|             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,该计划已关闭,无需重复操作!"); | 
|         } | 
|         workPlans.setUpdateTime(DateUtil.getCurrentDate()); | 
|         workPlans.setUpdateUser(user.getId()); | 
|         workPlans.setStatus(Constants.PLAN_STATUS.close); | 
|         workPlansExtMapper.updateById(workPlans); | 
|         List<Plans> plansList = plansExtService.getPlansList(new QueryWrapper<Plans>() | 
|                 .in("STATUS",0,1,4) | 
|                 .eq("DELETED",Constants.ZERO) | 
|                 .eq("WORK_PLANS_ID",workPlans.getId())); | 
|         plansList.forEach(i->{ | 
|             i.setUpdateTime(DateUtil.getCurrentDate()); | 
|             i.setUpdateUser(user.getId()); | 
|             i.setStatus(Constants.PLAN_STATUS.close); | 
|             plansExtService.updateForPlan(i); | 
|         }); | 
|     } | 
|   | 
|   | 
|     public static PlanHistory initHistoryByModel(WorkPlans p, Integer userId, int status ) { | 
|         PlanHistory h = new PlanHistory(); | 
|         h.setDeleted(Constants.ZERO); | 
|         h.setCreateTime(DateUtil.getCurrentDate()); | 
|         h.setCreateUser(userId); | 
|         h.setDepartId(p.getDepartId()); | 
|         h.setRootDepartId(p.getRootDepartId()); | 
|         h.setPlanId(p.getId()); | 
|         h.setRootDepartId(p.getRootDepartId()); | 
|         h.setDepartId(p.getDepartId()); | 
|         h.setTitle(Constants.WORKPLANHISTORY_TYPE.getTitleByStatus(p,status)); | 
|         h.setType(status); | 
|         h.setInfo(Constants.WORKPLANHISTORY_TYPE.getInfoByStatus(p,status)); | 
|         h.setType(status); | 
|   | 
|         return h; | 
|     } | 
|   | 
|   | 
|     @Transactional(rollbackFor = {BusinessException.class,Exception.class}) | 
|     @Override | 
|     public void importPlans(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<WorkPlans> plansList = EasyExcelUtil.importExcel(file, 1, 1, WorkPlans.class); | 
|         if(plansList == null || plansList.size()==0){ | 
|             throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "导入数据内容有误!"); | 
|         } | 
|         PlanImport ip = new PlanImport(); | 
|         ip.setDeleted(Constants.ZERO); | 
|         ip.setCreateTime(DateUtil.getCurrentDate()); | 
|         ip.setCreateUser(user.getId()); | 
|         ip.setFileName(file.getOriginalFilename()); | 
|         ip.setRootDepartId(user.getRootDepartment().getId()); | 
|         ip.setDepartId(user.getComDepartment().getId()); | 
|         //计划文件上传记录 | 
|         planImportExtMapper.insert(ip); | 
|         int index = 1; | 
|         List<PlanHistory> historyList = new ArrayList<>(); | 
|         for(WorkPlans p : plansList){ | 
|             p.setCreateTime(DateUtil.getCurrentDate()); | 
|             p.setCreateUser(user.getId()); | 
|             p.setDeleted(Constants.ZERO); | 
|             p.setDepartId(user.getCurComDepartment().getId()); | 
|             p.setRootDepartId(ip.getRootDepartId()); | 
|             p.setImportId(ip.getId()); | 
|             p.setStatus(Constants.PLAN_STATUS.create); | 
|             p.setOrigin(Constants.PLAS_ORIGIN.imports); | 
|             p.setUserId(user.getId()); | 
|             p.setPlanCode(this.getNextCode(user.getCompany().getId())); | 
| //            p.setFactoryId(user.getDepartment().getId()); | 
|             //检查数据有效性 | 
|             checkData(p,index,user); | 
|             workPlansExtMapper.insert(p); | 
|             historyList.add(initHistoryByModel(p,user.getId(),Constants.WORKPLANHISTORY_TYPE.create)); | 
|             index++; | 
|         } | 
|         //批量导入计划数据 | 
|         planHistoryExtMapper.insertBatch(historyList); | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 数据有效性检查 | 
|      * @param p | 
|      * @param index | 
|      * @param user | 
|      * @throws BusinessException | 
|      */ | 
|     private void checkData(WorkPlans p, int index,LoginUserInfo user) throws BusinessException{ | 
|         if(Constants.formatIntegerNum(p.getNum())<=0){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(index+2)+"】行【计划生产数量】数据错误!"); | 
|         } | 
|         if(p.getStartDate() == null){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(index+2)+"】行【计划开始日期】数据错误,正确格式为:yyyy-MM-dd(如2022-06-07)!"); | 
|         } | 
|         if(p.getPlanDate() == null){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(index+2)+"】行【计划结束日期】数据错误,正确格式为:yyyy-MM-dd(如2022-06-07)!"); | 
|         } | 
|         if(p.getPlanDate().getTime() <= p.getStartDate().getTime()){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(index+2)+"】行【计划开始日期】要早于【计划结束日期】!"); | 
|         } | 
|         if(StringUtils.isBlank(p.getMaterialCode())){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(index+2)+"】行【产品编码】数据错误!"); | 
|         } | 
|         if(p.getFactoryName() == null){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(index+2)+"】行【生产工厂】数据错误!"); | 
|         } | 
|         if(p.getBatch() == null){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(index+2)+"】行【生产批次】数据错误!"); | 
|         } | 
|   | 
|         Date pDate = DateUtil.getDateFromString(DateUtil.getShortTime(p.getPlanDate()) +" 00:00:00"); | 
|         Date nDate =  DateUtil.getDateFromString(DateUtil.getShortTime(DateUtil.getCurrentDate()) +" 00:00:00"); | 
|         if( nDate.getTime() > pDate.getTime()){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,计划生产日期必须为今天以后的日期!"); | 
|         } | 
|         p.setMaterialCode(p.getMaterialCode().trim()); | 
|         p.setFactoryName(p.getFactoryName().trim()); | 
|         p.setBatch(p.getBatch().trim()); | 
|         QueryMaterialDistributeExtDTO d = new QueryMaterialDistributeExtDTO(); | 
|         d.setDeleted(Constants.ZERO); | 
|         d.setMmodelCode(p.getMaterialCode()); | 
|         d.setRootDepartId(p.getRootDepartId()); | 
|         d.setDepartId(p.getDepartId()); | 
|         //查询产品信息 | 
|         MaterialDistributeExtListVO mm = materialDistributeExtMapper.selectByModel(d); | 
|         if(mm == null){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(index+2)+"】行【产品编码】数据不存在!"); | 
|         } | 
|         if(Constants.equalsInteger(mm.getStatus(),Constants.ZERO)){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(index+2)+"】行【产品】已失效,无法进行生产!"); | 
|         } | 
|         //存储物料分配表主键 | 
|         p.setMaterialId(mm.getId()); | 
|         //单位编码 | 
|         p.setUnitId(mm.getUnitId()); | 
|         if(Constants.equalsInteger(mm.getStatus(),Constants.ZERO)){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(index+2)+"】行【产品编码】不能安排生产计划!"); | 
|         } | 
|         Bom bom = new Bom(); | 
|         bom.setDeleted(Constants.ZERO); | 
|         bom.setMaterialId(mm.getId()); | 
|         bom.setRootDepartId(mm.getRootDepartId()); | 
|         bom = bomExtMapper.selectOne(new QueryWrapper<>(bom).last(" limit 1")); | 
|         if(bom == null){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(index+2)+"】行【产品】BOM未配置数据!"); | 
|         } | 
|         if(!Constants.equalsInteger(bom.getStatus(),Constants.ONE)){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(index+2)+"】行【产品】BOM已失效,无法进行生产!"); | 
|         } | 
|         DepartmentExtListVO f = departmentExtService.getModelByName(user.getCompany().getId(),p.getFactoryName()); | 
|         if(f==null || !Constants.equalsInteger(f.getType(),Constants.DEPART_TYPE.factory) ){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(index+2)+"】行【生产工厂】数据非工厂组织,请检查!"); | 
|         } | 
|         if(Constants.equalsInteger(f.getStatus(),Constants.ONE) ){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(index+2)+"】行【生产工厂】当前状态不正确!"); | 
|         } | 
|         if(!Constants.equalsInteger(p.getDepartId(),departmentExtService.getComDepartId(f))){ | 
|             //如果工厂与公司级组织不对应 | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第【"+(index+2)+"】行【生产工厂】数据非当前公司组织,请检查!"); | 
|         } | 
|         p.setFactoryId(f.getId()); | 
|     } | 
|   | 
|   | 
|     @Override | 
|     public WorkPlansVO getWorkPlansDetail(Integer id){ | 
|         if(Objects.isNull(id)){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
|         } | 
|         QueryWorkPlansDTO dto = new QueryWorkPlansDTO(); | 
|         dto.setWorkPlanId(id); | 
|         WorkPlansVO workPlansVO = workPlansExtMapper.getWorkPlansVODetail(dto); | 
|         if(Objects.isNull(workPlansVO)){ | 
|             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
|         } | 
|         List<PlansExtListVO> plansExtListVOList = plansExtService.getListByWorkPlan(id); | 
|         if(!Objects.isNull(plansExtListVOList)&&plansExtListVOList.size()>Constants.ZERO){ | 
|             workPlansVO.setPlansExtListVOList(plansExtListVOList); | 
|             PlansExtListVO plansExtListVO = plansExtListVOList.get(plansExtListVOList.size()-Constants.ONE); | 
|             workPlansVO.setFinishQualifiedNum(Objects.isNull(plansExtListVO.getQulifiedNum())?Constants.ZERO:plansExtListVO.getQulifiedNum()); | 
|             workPlansVO.setFinishUnQualifiedNum(Objects.isNull(plansExtListVO.getUnqulifiedNum())?Constants.ZERO:plansExtListVO.getUnqulifiedNum()); | 
|             workPlansVO.setFinishNum(Objects.isNull(plansExtListVO.getDoneNum())?Constants.ZERO:plansExtListVO.getDoneNum()); | 
|         } | 
|         return workPlansVO; | 
|     } | 
|   | 
|   | 
|     public synchronized  String  getNextCode(Integer comId ){ | 
|         String prefix =  "WP-" + DateUtil.getDate(new Date(),"yyyyMMdd") +"-"; | 
|         Integer countNum  = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.COM_WORK_PLAN_KEY+comId,Integer.class); | 
|         countNum = Constants.formatIntegerNum(countNum)+1; | 
|         //更新缓存 | 
|         RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_WORK_PLAN_KEY+comId,countNum); | 
|         String nextIndex =Integer.toString( countNum); | 
|         return prefix + StringUtils.leftPad(nextIndex,4,"0"); | 
|     } | 
|   | 
|   | 
|     @Transactional(rollbackFor = {BusinessException.class,Exception.class}) | 
|     @Override | 
|     public void release(Integer id){ | 
|         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|         if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ | 
|             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); | 
|         } | 
|         WorkPlans workPlans = workPlansExtMapper.selectById(id); | 
|         if(Objects.isNull(workPlans)){ | 
|             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
|         } | 
|         if(!Constants.equalsInteger(workPlans.getStatus(),Constants.ZERO) ){ | 
|             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,计划状态已流转,无法进行发布!"); | 
|         } | 
|         workPlans.setUpdateTime(DateUtil.getCurrentDate()); | 
|         workPlans.setUpdateUser(user.getId()); | 
|         workPlans.setPublishDate(new Date()); | 
|         workPlans.setStatus(Constants.ONE); | 
|         workPlansExtMapper.updateById(workPlans); | 
|         planHistoryExtMapper.insert(initHistoryByModel(workPlans,user.getId(),Constants.WORKPLANHISTORY_TYPE.publish)); | 
|         //查询物料BOM工序信息 | 
|         Bom bom = bomExtMapper.selectOne(new QueryWrapper<Bom>().eq("MATERIAL_ID",workPlans.getMaterialId()).eq("DELETED",Constants.ZERO).last(" limit 1 ")); | 
|         if(Objects.isNull(bom)){ | 
|             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,未查询到BOM信息,无法进行发布!"); | 
|         } | 
|         List<ProceduresExtListVO> list= proceduresExtService.getGYListByCondition(bom.getRouteId()); | 
|         if(Objects.isNull(list)||list.size()==Constants.ZERO){ | 
|             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,未查询到BOM工序数据信息!"); | 
|         } | 
|         list.forEach(i->{ | 
|             Plans plans = new Plans(); | 
|             BeanUtils.copyProperties(workPlans,plans); | 
|             plans.setId(null); | 
|             plans.setCreateTime(new Date()); | 
|             plans.setCreateUser(user.getId()); | 
|             plans.setOrigin(Constants.TWO); | 
|             plans.setProcedureId(i.getId()); | 
|             plans.setUnitId(workPlans.getUnitId()); | 
|             plans.setStatus(Constants.PLAN_STATUS.publish); | 
|             plans.setPublishDate(new Date()); | 
|             plans.setWorkPlansId(workPlans.getId()); | 
|             plansExtService.insertForWorkPlan(plans); | 
|         }); | 
|     } | 
|   | 
| } |