|  |  |  | 
|---|
|  |  |  | import doumeemes.dao.business.BackOrderDetailMapper; | 
|---|
|  |  |  | import doumeemes.dao.business.BackorderMapper; | 
|---|
|  |  |  | import doumeemes.dao.business.SalaryParamMapper; | 
|---|
|  |  |  | import doumeemes.dao.business.dto.CreateMaterialDTO; | 
|---|
|  |  |  | import doumeemes.dao.business.dto.CreateWorkorderRecordDTO; | 
|---|
|  |  |  | import doumeemes.dao.business.dto.DealWorkorderRecordDTO; | 
|---|
|  |  |  | import doumeemes.dao.business.dto.MaterialListDTO; | 
|---|
|  |  |  | import doumeemes.dao.business.UnqualifiedRecordMapper; | 
|---|
|  |  |  | import doumeemes.dao.business.dto.*; | 
|---|
|  |  |  | import doumeemes.dao.business.model.*; | 
|---|
|  |  |  | import doumeemes.dao.ext.*; | 
|---|
|  |  |  | import doumeemes.dao.ext.bean.EndCheckApBean; | 
|---|
|  |  |  | 
|---|
|  |  |  | private MaterialExtMapper materialExtMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SalaryParamMapper salaryParamMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private PlansExtMapper plansExtMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private DeviceExtMapper deviceExtMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private UnqualifiedRecordMapper unqualifiedRecordMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private CompanyUserExtMapper companyUserExtMapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional(rollbackFor = {BusinessException.class,Exception.class}) | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(!Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.create) | 
|---|
|  |  |  | && !Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.material) | 
|---|
|  |  |  | && !Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.producing) | 
|---|
|  |  |  | && !Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.check) | 
|---|
|  |  |  | && !Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.done)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,该工单状态已流转,不能进行该操作!"); | 
|---|
|  |  |  | 
|---|
|  |  |  | return mp; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void getPlansAndValid(LoginUserInfo user, Plans mp)  throws  BusinessException{ | 
|---|
|  |  |  | if(mp== null){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "对不起,该记录不存在!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(Constants.equalsInteger(mp.getPaused(),Constants.ONE)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,工单已暂停!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private QueryBomDetailExtDTO initBomParam(LoginUserInfo user, Workorder mp)  throws BusinessException{ | 
|---|
|  |  |  | QueryBomExtDTO bb = new QueryBomExtDTO(); | 
|---|
|  |  |  | 
|---|
|  |  |  | bom.setBomId(versionBom.getBomVersionId()); | 
|---|
|  |  |  | //        bom.setProcedureId(mp.getProcedureId()); | 
|---|
|  |  |  | bom.setWorkorderId(mp.getId()); | 
|---|
|  |  |  | return bom; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private QueryBomDetailExtDTO initBomParamForPlans(LoginUserInfo user, Plans plans)  throws BusinessException{ | 
|---|
|  |  |  | QueryBomExtDTO bb = new QueryBomExtDTO(); | 
|---|
|  |  |  | bb.setDepartId(plans.getDepartId()); | 
|---|
|  |  |  | bb.setDeleted(Constants.ZERO); | 
|---|
|  |  |  | bb.setRootDepartId(user.getRootDepartment().getId()); | 
|---|
|  |  |  | bb.setMaterialId(plans.getMaterialId()); | 
|---|
|  |  |  | bb.setProcedureId(plans.getProcedureId()); | 
|---|
|  |  |  | BomExtListVO versionBom = bomExtMapper.selectByModel( bb); | 
|---|
|  |  |  | if(versionBom == null || StringUtils.isBlank(versionBom.getVersion()) || versionBom.getBomVersionId() == null){ | 
|---|
|  |  |  | return  null; | 
|---|
|  |  |  | // throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "对不起,该工单物料BOM信息配置有误,请联系管理员!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | plans.setBomModel(versionBom); | 
|---|
|  |  |  | QueryBomDetailExtDTO  bom = new QueryBomDetailExtDTO(); | 
|---|
|  |  |  | bom.setDeleted(Constants.ZERO); | 
|---|
|  |  |  | bom.setBomId(versionBom.getBomVersionId()); | 
|---|
|  |  |  | //        bom.setProcedureId(mp.getProcedureId()); | 
|---|
|  |  |  | bom.setPlansId(plans.getId()); | 
|---|
|  |  |  | return bom; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | wrModel.setMaterialId(wStock.getMaterialId()); | 
|---|
|  |  |  | wrModel.setDepartId(mp.getDepartId()); | 
|---|
|  |  |  | wrModel.setCreateTime(DateUtil.getCurrentDate()); | 
|---|
|  |  |  | wrModel.setCreateUser(user.getId()); | 
|---|
|  |  |  | wrModel.setCreateUser(mp.getCreateUser()); | 
|---|
|  |  |  | wrModel.setMaterialBatch(mp.getBatch()); | 
|---|
|  |  |  | wrModel.setType(Constants.WORKORDER_RECORD_TYPE.materail); | 
|---|
|  |  |  | wrModel.setFactoryId(mp.getFactoryId()); | 
|---|
|  |  |  | wrModel.setProcedureId(mp.getProcedureId()); | 
|---|
|  |  |  | wrModel.setBatch(mp.getBatch()); | 
|---|
|  |  |  | wrModel.setUnitId(mp.getUnitId()); | 
|---|
|  |  |  | wrModel.setProcedureId(wStock.getProcedureId()); | 
|---|
|  |  |  | wrModel.setBatch(wStock.getBatch()); | 
|---|
|  |  |  | wrModel.setUnitId(wStock.getUnitId()); | 
|---|
|  |  |  | wrModel.setPlanId(mp.getPlanId()); | 
|---|
|  |  |  | //TODO 目前使用工装主键存储货位主键 | 
|---|
|  |  |  | //目前使用工装主键存储货位主键 | 
|---|
|  |  |  | wrModel.setAppliancesId(wStock.getId()); | 
|---|
|  |  |  | wrModel.setMaterialDonetype(wStock.getQualityType()); | 
|---|
|  |  |  | wrModel.setMaterialProcedureId(wStock.getProcedureId()); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void updateOrderInfo(LoginUserInfo user, Workorder mp,int status) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<WorkorderHistory> whList = new ArrayList<>(); | 
|---|
|  |  |  | //工单历史数据 | 
|---|
|  |  |  | Workorder order = new Workorder(); | 
|---|
|  |  |  | 
|---|
|  |  |  | order.setStatus(Constants.WORKORDER_STATUS.material); | 
|---|
|  |  |  | }else if(status ==Constants.WORKORDER_HISTORY_STATUS.done){ | 
|---|
|  |  |  | order.setStatus(Constants.WORKORDER_STATUS.done); | 
|---|
|  |  |  | }else if(status ==Constants.WORKORDER_HISTORY_STATUS.material){ | 
|---|
|  |  |  | }else if(status ==Constants.WORKORDER_HISTORY_STATUS.material ||status ==Constants.WORKORDER_HISTORY_STATUS.produce){ | 
|---|
|  |  |  | //投料操作 | 
|---|
|  |  |  | if(Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.create) | 
|---|
|  |  |  | ||Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.material)){ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional(rollbackFor = {BusinessException.class,Exception.class}) | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public  Integer comfirmDone(Workorder param){ | 
|---|
|  |  |  | public  Integer comfirmDone(Workorder param,Boolean needCheck){ | 
|---|
|  |  |  | LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|---|
|  |  |  | if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,工单已暂停!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //如果需要完工检才能检验 | 
|---|
|  |  |  | if(Constants.equalsInteger(mp.getNeedcheck(),Constants.ZERO)){ | 
|---|
|  |  |  | if(Constants.equalsInteger(mp.getNeedcheck(),Constants.ZERO)&&needCheck){ | 
|---|
|  |  |  | //只有已完工状态才能确认报工 | 
|---|
|  |  |  | if(!Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.done)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,该工单状态已流转,不能进行该操作!"); | 
|---|
|  |  |  | 
|---|
|  |  |  | return param.getId(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional(rollbackFor = {BusinessException.class,Exception.class}) | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public  Workorder comfirmDoneNew(AutoWorkReportDTO autoWorkReportDTO, Boolean needCheck){ | 
|---|
|  |  |  | LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); | 
|---|
|  |  |  | if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(Objects.isNull(autoWorkReportDTO) | 
|---|
|  |  |  | || Objects.isNull(autoWorkReportDTO.getCreateWorkorderRecordDTO()) | 
|---|
|  |  |  | || Objects.isNull(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum())|| autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum().compareTo(BigDecimal.ZERO) < Constants.ZERO | 
|---|
|  |  |  | || Objects.isNull(autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum())|| autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum().compareTo(BigDecimal.ZERO) < Constants.ZERO){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(autoWorkReportDTO.getCreateWorkorderRecordDTO().getWorkorderId()== null ){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,请按要求填写和选择提交数据!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Workorder mp = new Workorder(); | 
|---|
|  |  |  | mp.setDeleted(Constants.ZERO); | 
|---|
|  |  |  | mp.setId(autoWorkReportDTO.getCreateWorkorderRecordDTO().getWorkorderId()); | 
|---|
|  |  |  | mp.setRootDepartId(user.getRootDepartment().getId()); | 
|---|
|  |  |  | mp = workorderExtMapper.selectOne(mp); | 
|---|
|  |  |  | if(mp== null){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "对不起,该记录不存在!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Plans plans = plansExtMapper.selectById(mp.getPlanId()); | 
|---|
|  |  |  | if(Objects.isNull(plans)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "对不起,工序计划记录不存在!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //查询工序计划下 所有工单已报工数量 | 
|---|
|  |  |  | QueryWorkorderExtDTO dto = new QueryWorkorderExtDTO(); | 
|---|
|  |  |  | dto.setPlanId(mp.getPlanId()); | 
|---|
|  |  |  | dto.setDeleted(Constants.ZERO); | 
|---|
|  |  |  | dto.setStatus(Constants.WORKORDER_STATUS.baogong); | 
|---|
|  |  |  | List<WorkorderExtListVO> workorderList = workorderExtMapper.selectList(dto); | 
|---|
|  |  |  | Integer plansQualifiedNum = 0 , plansUnQualifiedNum = 0; | 
|---|
|  |  |  | plansQualifiedNum = workorderList.stream().map( workorderExtListVO -> workorderExtListVO.getQualifiedNum()).reduce(Constants.ZERO, Integer::sum); | 
|---|
|  |  |  | plansUnQualifiedNum = workorderList.stream().map( workorderExtListVO -> workorderExtListVO.getUnqualifiedNum()).reduce(Constants.ZERO, Integer::sum); | 
|---|
|  |  |  | if((BigDecimal.valueOf(plansQualifiedNum).add(BigDecimal.valueOf(plansUnQualifiedNum).add(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum()) | 
|---|
|  |  |  | .add(autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum()))).compareTo(BigDecimal.valueOf(plans.getNum()))>Constants.ZERO){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,报工数量超出工序计划总数!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Workorder param = new Workorder(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | param.setPlanId(mp.getPlanId()); | 
|---|
|  |  |  | param.setId(autoWorkReportDTO.getCreateWorkorderRecordDTO().getWorkorderId()); | 
|---|
|  |  |  | if(Constants.equalsInteger(mp.getPaused(),Constants.ONE)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,工单已暂停!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //如果需要完工检才能检验 | 
|---|
|  |  |  | if(Constants.equalsInteger(mp.getNeedcheck(),Constants.ZERO)&&needCheck){ | 
|---|
|  |  |  | //只有已完工状态才能确认报工 | 
|---|
|  |  |  | if(!Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.done)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,该工单状态已流转,不能进行该操作!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //出入库明细记录集合 | 
|---|
|  |  |  | List<WOutboundDetail> outboundDetailList = new ArrayList<>(); | 
|---|
|  |  |  | //待更新工装集合投料 | 
|---|
|  |  |  | List<Appliances> updateApplianceList = new ArrayList<>(); | 
|---|
|  |  |  | //待更新工装集合产出 | 
|---|
|  |  |  | List<Appliances> updateApplianceProList = new ArrayList<>(); | 
|---|
|  |  |  | //待更新库存集合 | 
|---|
|  |  |  | List<WStock> stockList = new ArrayList<>(); | 
|---|
|  |  |  | //处理产出数据 | 
|---|
|  |  |  | WorkorderRecord workorderRecord = this.createWorkorderRecord(autoWorkReportDTO.getCreateWorkorderRecordDTO(),user,null); | 
|---|
|  |  |  | //查询投料和报工记录列表 | 
|---|
|  |  |  | List<WorkorderRecordExtListVO>  allRecordList = workorderRecordExtMapper.selectAllList(getQueryRecordParam(param)); | 
|---|
|  |  |  | if(Objects.isNull(allRecordList)||allRecordList.size()==Constants.ZERO){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询投料和报工记录!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //检查数据信息 | 
|---|
|  |  |  | //        caculateCheckRecord(user, mp,allRecordList); | 
|---|
|  |  |  | QueryBomDetailExtDTO bdparam = initBomParam(user,mp); | 
|---|
|  |  |  | if(mp.getBomModel()!=null&&Constants.equalsInteger(mp.getBomModel().getType(),Constants.BOM_TYPE.pull)){ | 
|---|
|  |  |  | //如果是拉式投料,系统根据BOM自动扣减库存 | 
|---|
|  |  |  | dealApplianceMateialPull(mp,user,bdparam,updateApplianceList, stockList); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(allRecordList!=null && allRecordList.size()>0){ | 
|---|
|  |  |  | if(mp.getBomModel()==null||Constants.equalsInteger(mp.getBomModel().getType(),Constants.BOM_TYPE.push)){ | 
|---|
|  |  |  | //如果是推式投料,走正常生产手动投料 | 
|---|
|  |  |  | dealApplianceMateial(mp,user,bdparam,allRecordList,updateApplianceList, outboundDetailList,stockList); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //处理产出数据 | 
|---|
|  |  |  | dealAppliancePro(mp,user,allRecordList,updateApplianceList,updateApplianceProList, outboundDetailList,stockList); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //如果有没bom配置,检查产出(包含检验的不良和报废品)和投料数量是否相等匹配,不一致提示错误 | 
|---|
|  |  |  | if(bdparam==null){ | 
|---|
|  |  |  | //投料数量 和 产出数量不相等 | 
|---|
|  |  |  | if(Constants.formatBigdecimal(mp.getHasMaterialNum()).intValue() != Constants.formatIntegerNum(mp.getHasProduceNum())){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,该工单投料和产出数量不一致,请确认后重试!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //更新工单状态为已报工 | 
|---|
|  |  |  | mp.setUnqualifiedNum(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum().intValue()); | 
|---|
|  |  |  | mp.setQualifiedNum(autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum().intValue()); | 
|---|
|  |  |  | updateOrderInfo(user,mp,Constants.WORKORDER_HISTORY_STATUS.baogong); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //批量插入出入库明细记录 | 
|---|
|  |  |  | if(outboundDetailList!=null && outboundDetailList.size()>0){ | 
|---|
|  |  |  | wOutboundDetailExtMapper.insertBatch(outboundDetailList); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(stockList != null && stockList.size()>0){ | 
|---|
|  |  |  | for(WStock s : stockList){ | 
|---|
|  |  |  | WStock s1 = new WStock(); | 
|---|
|  |  |  | s1.setLocationId(s.getLocationId()); | 
|---|
|  |  |  | s1.setWarehouseId(s.getWarehouseId()); | 
|---|
|  |  |  | s1.setDeleted(Constants.ZERO); | 
|---|
|  |  |  | s1.setMaterialId(s.getMaterialId()); | 
|---|
|  |  |  | s1.setQualityType(s.getQualityType()); | 
|---|
|  |  |  | s1.setProcedureId(s.getProcedureId()); | 
|---|
|  |  |  | if(StringUtils.isBlank(s.getBatch() )){ | 
|---|
|  |  |  | s1 = wStockExtMapper.selectOne(new QueryWrapper<>(s1).isNull("batch").last(" limit 1")); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | s1.setBatch(s.getBatch()); | 
|---|
|  |  |  | s1 = wStockExtMapper.selectOne(new QueryWrapper<>(s1).last(" limit 1")); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(s1 ==null){ | 
|---|
|  |  |  | //如果库存记录不存在,插入数据 | 
|---|
|  |  |  | s.setDeleted(Constants.ZERO); | 
|---|
|  |  |  | s.setCreateTime(DateUtil.getCurrentDate()); | 
|---|
|  |  |  | s.setCreateUser(user.getId()); | 
|---|
|  |  |  | s.setRootDepartId(mp.getRootDepartId()); | 
|---|
|  |  |  | if(Constants.formatBigdecimal(s.getNum()).compareTo(new BigDecimal(0)) == -1){ | 
|---|
|  |  |  | //如果库存不足 | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,仓库余料不足,请联系仓库管理员!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | wStockExtMapper.insert(s); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | //如果库存记录存在,则更新库存量 | 
|---|
|  |  |  | s.setId(s1.getId()); | 
|---|
|  |  |  | s.setUpdateTime(DateUtil.getCurrentDate()); | 
|---|
|  |  |  | s.setUpdateUser(user.getId()); | 
|---|
|  |  |  | s.setNum(Constants.formatBigdecimal(s1.getNum()).add(Constants.formatBigdecimal(s.getNum()))); | 
|---|
|  |  |  | if(Constants.formatBigdecimal(s.getNum()).compareTo(new BigDecimal(0)) == -1){ | 
|---|
|  |  |  | //如果库存不足 | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,仓库余料不足,请联系仓库管理员!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | wStockExtMapper.updateById(s); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //存储报工不良项数据 | 
|---|
|  |  |  | if(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum().compareTo(BigDecimal.ZERO)<=Constants.ZERO){ | 
|---|
|  |  |  | if(!Objects.isNull(autoWorkReportDTO.getCreateUnqualifiedDTOList())&&autoWorkReportDTO.getCreateUnqualifiedDTOList().size()>Constants.ZERO){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"不良项错误:请检查不良项数据"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | List<CreateUnqualifiedDTO> createUnqualifiedDTOList = autoWorkReportDTO.getCreateUnqualifiedDTOList(); | 
|---|
|  |  |  | BigDecimal unqualified = createUnqualifiedDTOList.stream().map(s -> s.getUnQualifiedNum()).reduce(BigDecimal.ZERO, BigDecimal::add); | 
|---|
|  |  |  | if(unqualified.compareTo(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum())!=Constants.ZERO){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"不良项错误:请检查不良项数据"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for (CreateUnqualifiedDTO createUnqualifiedDTO:createUnqualifiedDTOList) { | 
|---|
|  |  |  | if(createUnqualifiedDTO.getUnQualifiedNum().compareTo(BigDecimal.ZERO)==Constants.ZERO | 
|---|
|  |  |  | ||Objects.isNull(createUnqualifiedDTO.getCategoryId())){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"不良项错误:请检查不良项数据"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | UnqualifiedRecord unqualifiedRecord = new UnqualifiedRecord(); | 
|---|
|  |  |  | unqualifiedRecord.setDeleted(Constants.ZERO); | 
|---|
|  |  |  | unqualifiedRecord.setCreateUser(user.getId()); | 
|---|
|  |  |  | unqualifiedRecord.setCreateTime(new Date()); | 
|---|
|  |  |  | unqualifiedRecord.setRootDepartId(mp.getRootDepartId()); | 
|---|
|  |  |  | unqualifiedRecord.setDepartId(mp.getDepartId()); | 
|---|
|  |  |  | unqualifiedRecord.setWorkorderId(mp.getId()); | 
|---|
|  |  |  | unqualifiedRecord.setRecordId(workorderRecord.getId()); | 
|---|
|  |  |  | unqualifiedRecord.setCategoryId(createUnqualifiedDTO.getCategoryId()); | 
|---|
|  |  |  | unqualifiedRecord.setUnqualifiedNum(createUnqualifiedDTO.getUnQualifiedNum()); | 
|---|
|  |  |  | unqualifiedRecordMapper.insert(unqualifiedRecord); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return param; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private QueryWorkorderRecordExtDTO getQueryRecordParam(Workorder param) { | 
|---|
|  |  |  | QueryWorkorderRecordExtDTO mParam = new QueryWorkorderRecordExtDTO(); | 
|---|
|  |  |  | mParam.setWorkorderId(param.getId()); | 
|---|
|  |  |  | 
|---|
|  |  |  | List<WOutbound> outboundList = new ArrayList<>(); | 
|---|
|  |  |  | //如果需要投料的物料集合,在库存中寻找投料来源 | 
|---|
|  |  |  | for(WStock model : materialList){ | 
|---|
|  |  |  | List<WStock> useList = allList.stream().filter(wStock -> Constants.equalsInteger(model.getMaterialId(),wStock.getMaterialId())).collect(Collectors.toList()); | 
|---|
|  |  |  | BigDecimal wStockNum = useList.stream().map(s -> s.getNum()).reduce(BigDecimal.ZERO, BigDecimal::add); | 
|---|
|  |  |  | if(wStockNum.compareTo(Constants.formatBigdecimal(model.getNum()))<Constants.ZERO){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,生产物料不足,无法进行该操作!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for(WStock ts : allList){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(Constants.equalsInteger(model.getMaterialId(),ts.getMaterialId())){ | 
|---|
|  |  |  | //还需要投料数量 | 
|---|
|  |  |  | BigDecimal actNum = Constants.formatBigdecimal(model.getNum()).subtract(Constants.formatBigdecimal(model.getTNum())); | 
|---|
|  |  |  | 
|---|
|  |  |  | for (BomDetailExtListVO i :bomDetailList) { | 
|---|
|  |  |  | //查询是否投料 | 
|---|
|  |  |  | if(workorderRecordExtMapper.selectCount(new QueryWrapper<WorkorderRecord>() | 
|---|
|  |  |  | .eq("WORKORDER_ID",mp.getId()) | 
|---|
|  |  |  | .eq("DELETED",Constants.ZERO).eq("MATERIAL_ID",i.getMaterialId()).eq("TYPE",Constants.ZERO))<=0){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"存在未投料BOM物料,无法进行报工"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    private void dealAppliancePro(Workorder mp | 
|---|
|  |  |  | //            , LoginUserInfo user | 
|---|
|  |  |  | //            , List<WorkorderRecordExtListVO> allRecordList | 
|---|
|  |  |  | //            , List<Appliances> updateApplianceList | 
|---|
|  |  |  | //            , List<Appliances> updateApplianceProList | 
|---|
|  |  |  | //            ,   List<WOutboundDetail> outboundDetailList | 
|---|
|  |  |  | //            ,   List<WStock> stockList) { | 
|---|
|  |  |  | //        WOutbound outbound = new WOutbound(); | 
|---|
|  |  |  | //        outbound.setDeleted(Constants.ZERO); | 
|---|
|  |  |  | //        outbound.setCreateTime(DateUtil.getCurrentDate()); | 
|---|
|  |  |  | //        outbound.setDealDate(outbound.getCreateTime()); | 
|---|
|  |  |  | //        outbound.setValidDate(outbound.getCreateTime()); | 
|---|
|  |  |  | //        outbound.setCreateUser(user.getId()); | 
|---|
|  |  |  | //        outbound.setRootDepartId(mp.getRootDepartId()); | 
|---|
|  |  |  | //        outbound.setDepartId(mp.getDepartId()); | 
|---|
|  |  |  | //        outbound.setStatus(Constants.WOUTBOUND_STATUS.dealed); | 
|---|
|  |  |  | //        outbound.setType(Constants.WOUTBOUND_TYPE.in); | 
|---|
|  |  |  | //        //2022年7月1日14:42:41 加入单据类别 | 
|---|
|  |  |  | //        outbound.setBillType(Constants.WOUTBOUND_BILLTYPE.workerOrderIn); | 
|---|
|  |  |  | //        outbound.setCode(wOutboundService.getNextInCode(user.getCompany().getId())); | 
|---|
|  |  |  | //        outbound.setOrigin(Constants.ONE); | 
|---|
|  |  |  | //        outbound.setOriginType(Constants.WOUTBOUND_ORIGIN_TYPE.produce); | 
|---|
|  |  |  | //        outbound.setOriginCode(mp.getCode()); | 
|---|
|  |  |  | //        outbound.setOriginId(mp.getId()); | 
|---|
|  |  |  | //        outbound.setPlanDate(DateUtil.getCurrentDate()); | 
|---|
|  |  |  | //        outbound.setProcedureId(mp.getProcedureId()); | 
|---|
|  |  |  | //        outbound.setUserId(user.getId()); | 
|---|
|  |  |  | //        outbound.setWarehouseId(mp.getFinishWarehouseId()); | 
|---|
|  |  |  | //        wOutboundService.create(outbound); | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //        List<WOutboundDetail> detailList = new ArrayList<>(); | 
|---|
|  |  |  | //        List<WOutboundRecord> recordList = new ArrayList<>(); | 
|---|
|  |  |  | //        for(WorkorderRecordExtListVO tModel :allRecordList){ | 
|---|
|  |  |  | //            if(Constants.equalsInteger(tModel.getType(),Constants.WORKORDER_RECORD_TYPE.produce)){ | 
|---|
|  |  |  | //                if(tModel.getNum().compareTo(BigDecimal.ZERO)<=Constants.ZERO){ | 
|---|
|  |  |  | //                    continue; | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //                //如果是产出 | 
|---|
|  |  |  | //                mp.setHasProduceNum(Constants.formatBigdecimal(tModel.getNum()).intValue()+Constants.formatIntegerNum(mp.getHasProduceNum())); | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                //物料+批次+工序+质量属性去重 | 
|---|
|  |  |  | //                WOutboundDetail detail =getWoutbondDetailByList(tModel,detailList); | 
|---|
|  |  |  | //                if(detail!=null){ | 
|---|
|  |  |  | //                    detail.setNum(Constants.formatBigdecimal(detail.getNum()).add(tModel.getNum())); | 
|---|
|  |  |  | //                }else{ | 
|---|
|  |  |  | //                    detail = new WOutboundDetail(); | 
|---|
|  |  |  | //                    detail.setDeleted(Constants.ZERO); | 
|---|
|  |  |  | //                    detail.setCreateTime(DateUtil.getCurrentDate()); | 
|---|
|  |  |  | //                    detail.setCreateUser(user.getId()); | 
|---|
|  |  |  | //                    detail.setOutboundId(outbound.getId()); | 
|---|
|  |  |  | //                    detail.setRootDepartId(outbound.getRootDepartId()); | 
|---|
|  |  |  | //                    detail.setWarehouseId(outbound.getWarehouseId()); | 
|---|
|  |  |  | //                    detail.setLocationId(mp.getFinishWarehouseLocationId()); | 
|---|
|  |  |  | //                    detail.setNum(tModel.getNum()); | 
|---|
|  |  |  | //                    detail.setStatus(Constants.ONE); | 
|---|
|  |  |  | //                    detail.setDoneNum(tModel.getNum()); | 
|---|
|  |  |  | //                    detail.setDoneDate(new Date()); | 
|---|
|  |  |  | //                    detail.setUnitId(tModel.getUnitId()); | 
|---|
|  |  |  | //                    detail.setBatch(tModel.getMaterialBatch()); | 
|---|
|  |  |  | //                    detail.setProcedureId(tModel.getProcedureId()); | 
|---|
|  |  |  | //                    detail.setMaterialId(tModel.getMaterialId()); | 
|---|
|  |  |  | //                    detail.setQualityType(tModel.getDoneType()); | 
|---|
|  |  |  | //                    detail.setWOutboundRecordInList(new ArrayList<>()); | 
|---|
|  |  |  | //                    detailList.add(detail); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                WOutboundRecord record = new WOutboundRecord(); | 
|---|
|  |  |  | //                record.setDeleted(Constants.ZERO); | 
|---|
|  |  |  | //                record.setCreateTime(DateUtil.getCurrentDate()); | 
|---|
|  |  |  | //                record.setCreateUser(user.getId()); | 
|---|
|  |  |  | //                record.setAppliancesId(tModel.getAppliancesId()); | 
|---|
|  |  |  | //                record.setBatch(detail.getBatch()); | 
|---|
|  |  |  | //                record.setRootDepartId(mp.getRootDepartId()); | 
|---|
|  |  |  | //                record.setNum(tModel.getNum()); | 
|---|
|  |  |  | //                record.setOutboundId(detail.getOutboundId()); | 
|---|
|  |  |  | //                record.setUnitId(detail.getUnitId()); | 
|---|
|  |  |  | //                record.setWarehouseId(detail.getWarehouseId()); | 
|---|
|  |  |  | //                record.setMaterialId(detail.getMaterialId()); | 
|---|
|  |  |  | //                record.setProcedureId(detail.getProcedureId()); | 
|---|
|  |  |  | //                record.setLocationId(detail.getLocationId()); | 
|---|
|  |  |  | //                record.setQualityType(detail.getQualityType()); | 
|---|
|  |  |  | //                detail.getWOutboundRecordInList().add(record); | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //                WStock stock = getFromStockList(mp.getFinishWarehouseLocationId(),detail.getWarehouseId(),detail.getMaterialId(),detail.getBatch(), | 
|---|
|  |  |  | //                        tModel.getProcedureId(),tModel.getDoneType(),stockList); | 
|---|
|  |  |  | //                if(stock!=null){ | 
|---|
|  |  |  | //                    //如果库存对象已存在,直接增加对应的库存量 | 
|---|
|  |  |  | //                    stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(tModel.getNum()))); | 
|---|
|  |  |  | //                }else{ | 
|---|
|  |  |  | //                    stock = new WStock(); | 
|---|
|  |  |  | //                    stock.setMaterialId(detail.getMaterialId()); | 
|---|
|  |  |  | //                    stock.setBatch(detail.getBatch()); | 
|---|
|  |  |  | //                    stock.setWarehouseId(outbound.getWarehouseId()); | 
|---|
|  |  |  | //                    stock.setLocationId(mp.getFinishWarehouseLocationId()); | 
|---|
|  |  |  | //                    stock.setUnitId(detail.getUnitId()); | 
|---|
|  |  |  | //                    stock.setNum(Constants.formatBigdecimal(tModel.getNum())); | 
|---|
|  |  |  | //                    stock.setProcedureId(tModel.getProcedureId()); | 
|---|
|  |  |  | //                    stock.setQualityType(tModel.getDoneType()); | 
|---|
|  |  |  | //                    //待更新库存信息 | 
|---|
|  |  |  | //                    stockList.add(stock); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //        for(WOutboundDetail detail : detailList){ | 
|---|
|  |  |  | //            wOutboundDetailExtMapper.insert(detail); | 
|---|
|  |  |  | //            //记录库存变动记录 | 
|---|
|  |  |  | //            wStockRecordExtService.saveRecord(Constants.ONE,detail.getId(),user); | 
|---|
|  |  |  | //            if(detail.getWOutboundRecordInList()!=null){ | 
|---|
|  |  |  | //                for(WOutboundRecord r : detail.getWOutboundRecordInList()){ | 
|---|
|  |  |  | //                    r.setDetailId(detail.getId()); | 
|---|
|  |  |  | //                    wOutboundRecordExtMapper.insert(r); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //        if(Constants.formatIntegerNum(mp.getHasProduceNum()) >Constants.formatIntegerNum(mp.getPlanNum())){ | 
|---|
|  |  |  | //            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,该工单的产出数量不能大于工单计划数量!"); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private void dealAppliancePro(Workorder mp | 
|---|
|  |  |  | , LoginUserInfo user | 
|---|
|  |  |  | , List<WorkorderRecordExtListVO> allRecordList | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //如果是产出 | 
|---|
|  |  |  | mp.setHasProduceNum(Constants.formatBigdecimal(tModel.getNum()).intValue()+Constants.formatIntegerNum(mp.getHasProduceNum())); | 
|---|
|  |  |  | if(tModel.getDoneType() == null){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,工装器具【"+tModel.getAmodel().getCode()+"】产出质量属性为空,无法报工!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(!Constants.equalsInteger(tModel.getDoneType(),Constants.ZERO)){ | 
|---|
|  |  |  | //如果不良,累计工单的不良产出 | 
|---|
|  |  |  | mp.setUnqualifiedNum(Constants.formatIntegerNum(mp.getUnqualifiedNum())+(Constants.formatBigdecimal(tModel.getNum()).intValue())); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | //如果是合格,累计工单的合格数量 | 
|---|
|  |  |  | mp.setQualifiedNum(Constants.formatIntegerNum(mp.getQualifiedNum())+(Constants.formatBigdecimal(tModel.getNum()).intValue())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //物料+批次+工序+质量属性去重 | 
|---|
|  |  |  | WOutboundDetail detail =getWoutbondDetailByList(tModel,detailList); | 
|---|
|  |  |  | if(detail!=null){ | 
|---|
|  |  |  | detail.setNum(Constants.formatBigdecimal(detail.getNum()).add(tModel.getNum())); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | detail = new WOutboundDetail(); | 
|---|
|  |  |  | detail.setDeleted(Constants.ZERO); | 
|---|
|  |  |  | detail.setCreateTime(DateUtil.getCurrentDate()); | 
|---|
|  |  |  | detail.setCreateUser(user.getId()); | 
|---|
|  |  |  | detail.setOutboundId(outbound.getId()); | 
|---|
|  |  |  | detail.setRootDepartId(outbound.getRootDepartId()); | 
|---|
|  |  |  | detail.setWarehouseId(outbound.getWarehouseId()); | 
|---|
|  |  |  | detail.setLocationId(mp.getFinishWarehouseLocationId()); | 
|---|
|  |  |  | detail.setNum(tModel.getNum()); | 
|---|
|  |  |  | detail.setStatus(Constants.ONE); | 
|---|
|  |  |  | detail.setDoneNum(tModel.getNum()); | 
|---|
|  |  |  | detail.setDoneDate(new Date()); | 
|---|
|  |  |  | detail.setUnitId(tModel.getUnitId()); | 
|---|
|  |  |  | detail.setBatch(tModel.getMaterialBatch()); | 
|---|
|  |  |  | detail.setProcedureId(tModel.getProcedureId()); | 
|---|
|  |  |  | detail.setMaterialId(tModel.getMaterialId()); | 
|---|
|  |  |  | detail.setQualityType(tModel.getDoneType()); | 
|---|
|  |  |  | detail.setWOutboundRecordInList(new ArrayList<>()); | 
|---|
|  |  |  | detailList.add(detail); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | WOutboundRecord record = new WOutboundRecord(); | 
|---|
|  |  |  | record.setDeleted(Constants.ZERO); | 
|---|
|  |  |  | record.setCreateTime(DateUtil.getCurrentDate()); | 
|---|
|  |  |  | record.setCreateUser(user.getId()); | 
|---|
|  |  |  | record.setAppliancesId(tModel.getAppliancesId()); | 
|---|
|  |  |  | record.setBatch(detail.getBatch()); | 
|---|
|  |  |  | record.setRootDepartId(mp.getRootDepartId()); | 
|---|
|  |  |  | record.setNum(tModel.getNum()); | 
|---|
|  |  |  | record.setOutboundId(detail.getOutboundId()); | 
|---|
|  |  |  | record.setUnitId(detail.getUnitId()); | 
|---|
|  |  |  | record.setWarehouseId(detail.getWarehouseId()); | 
|---|
|  |  |  | record.setMaterialId(detail.getMaterialId()); | 
|---|
|  |  |  | record.setProcedureId(detail.getProcedureId()); | 
|---|
|  |  |  | record.setLocationId(detail.getLocationId()); | 
|---|
|  |  |  | record.setQualityType(detail.getQualityType()); | 
|---|
|  |  |  | detail.getWOutboundRecordInList().add(record); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | WStock stock = getFromStockList(mp.getFinishWarehouseLocationId(),detail.getWarehouseId(),detail.getMaterialId(),detail.getBatch(), | 
|---|
|  |  |  | tModel.getProcedureId(),tModel.getDoneType(),stockList); | 
|---|
|  |  |  | if(stock!=null){ | 
|---|
|  |  |  | //如果库存对象已存在,直接增加对应的库存量 | 
|---|
|  |  |  | stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(tModel.getNum()))); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | stock = new WStock(); | 
|---|
|  |  |  | stock.setMaterialId(detail.getMaterialId()); | 
|---|
|  |  |  | stock.setBatch(detail.getBatch()); | 
|---|
|  |  |  | stock.setWarehouseId(outbound.getWarehouseId()); | 
|---|
|  |  |  | stock.setLocationId(mp.getFinishWarehouseLocationId()); | 
|---|
|  |  |  | stock.setUnitId(detail.getUnitId()); | 
|---|
|  |  |  | stock.setNum(Constants.formatBigdecimal(tModel.getNum())); | 
|---|
|  |  |  | stock.setProcedureId(tModel.getProcedureId()); | 
|---|
|  |  |  | stock.setQualityType(tModel.getDoneType()); | 
|---|
|  |  |  | //待更新库存信息 | 
|---|
|  |  |  | stockList.add(stock); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //产出合格 | 
|---|
|  |  |  | this.createOutDetail(user,outbound,mp,tModel,Constants.ZERO,detailList,stockList); | 
|---|
|  |  |  | //产出不良 | 
|---|
|  |  |  | this.createOutDetail(user,outbound,mp,tModel,Constants.ONE,detailList,stockList); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for(WOutboundDetail detail : detailList){ | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,该工单的产出数量不能大于工单计划数量!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void createOutDetail(LoginUserInfo user,WOutbound outbound,Workorder mp,WorkorderRecordExtListVO tModel,Integer doneType | 
|---|
|  |  |  | ,List<WOutboundDetail> detailList,List<WStock> stockList ){ | 
|---|
|  |  |  | //物料+批次+工序+质量属性去重 | 
|---|
|  |  |  | WOutboundDetail detail =  new WOutboundDetail(); | 
|---|
|  |  |  | detail.setDeleted(Constants.ZERO); | 
|---|
|  |  |  | detail.setCreateTime(DateUtil.getCurrentDate()); | 
|---|
|  |  |  | detail.setCreateUser(user.getId()); | 
|---|
|  |  |  | detail.setOutboundId(outbound.getId()); | 
|---|
|  |  |  | detail.setRootDepartId(outbound.getRootDepartId()); | 
|---|
|  |  |  | detail.setWarehouseId(outbound.getWarehouseId()); | 
|---|
|  |  |  | detail.setLocationId(mp.getFinishWarehouseLocationId()); | 
|---|
|  |  |  | detail.setNum(BigDecimal.valueOf(doneType.equals(Constants.ZERO)?tModel.getQualifiedNum():tModel.getUnqualifiedNum())); | 
|---|
|  |  |  | if(detail.getNum().compareTo(BigDecimal.ZERO)==Constants.ZERO){ | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | detail.setStatus(Constants.ONE); | 
|---|
|  |  |  | detail.setDoneNum(detail.getNum()); | 
|---|
|  |  |  | detail.setDoneDate(new Date()); | 
|---|
|  |  |  | detail.setUnitId(tModel.getUnitId()); | 
|---|
|  |  |  | detail.setBatch(tModel.getMaterialBatch()); | 
|---|
|  |  |  | detail.setProcedureId(tModel.getProcedureId()); | 
|---|
|  |  |  | detail.setMaterialId(tModel.getMaterialId()); | 
|---|
|  |  |  | detail.setQualityType(doneType); | 
|---|
|  |  |  | detail.setWOutboundRecordInList(new ArrayList<>()); | 
|---|
|  |  |  | detailList.add(detail); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | WOutboundRecord record = new WOutboundRecord(); | 
|---|
|  |  |  | record.setDeleted(Constants.ZERO); | 
|---|
|  |  |  | record.setCreateTime(DateUtil.getCurrentDate()); | 
|---|
|  |  |  | record.setCreateUser(user.getId()); | 
|---|
|  |  |  | record.setAppliancesId(tModel.getAppliancesId()); | 
|---|
|  |  |  | record.setBatch(detail.getBatch()); | 
|---|
|  |  |  | record.setRootDepartId(mp.getRootDepartId()); | 
|---|
|  |  |  | record.setNum(detail.getNum()); | 
|---|
|  |  |  | record.setOutboundId(detail.getOutboundId()); | 
|---|
|  |  |  | record.setUnitId(detail.getUnitId()); | 
|---|
|  |  |  | record.setWarehouseId(detail.getWarehouseId()); | 
|---|
|  |  |  | record.setMaterialId(detail.getMaterialId()); | 
|---|
|  |  |  | record.setProcedureId(detail.getProcedureId()); | 
|---|
|  |  |  | record.setLocationId(detail.getLocationId()); | 
|---|
|  |  |  | record.setQualityType(detail.getQualityType()); | 
|---|
|  |  |  | detail.getWOutboundRecordInList().add(record); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | WStock stock = getFromStockList(mp.getFinishWarehouseLocationId(),detail.getWarehouseId(),detail.getMaterialId(),detail.getBatch(), | 
|---|
|  |  |  | tModel.getProcedureId(),doneType,stockList); | 
|---|
|  |  |  | if(stock!=null){ | 
|---|
|  |  |  | //如果库存对象已存在,直接增加对应的库存量 | 
|---|
|  |  |  | stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(detail.getNum()))); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | stock = new WStock(); | 
|---|
|  |  |  | stock.setMaterialId(detail.getMaterialId()); | 
|---|
|  |  |  | stock.setBatch(detail.getBatch()); | 
|---|
|  |  |  | stock.setWarehouseId(outbound.getWarehouseId()); | 
|---|
|  |  |  | stock.setLocationId(mp.getFinishWarehouseLocationId()); | 
|---|
|  |  |  | stock.setUnitId(detail.getUnitId()); | 
|---|
|  |  |  | stock.setNum(Constants.formatBigdecimal(detail.getNum())); | 
|---|
|  |  |  | stock.setProcedureId(tModel.getProcedureId()); | 
|---|
|  |  |  | stock.setQualityType(doneType); | 
|---|
|  |  |  | //待更新库存信息 | 
|---|
|  |  |  | stockList.add(stock); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private WStock initMaterialNum(Integer materialId, BigDecimal num) { | 
|---|
|  |  |  | WStock s = new WStock(); | 
|---|
|  |  |  | 
|---|
|  |  |  | return PageData.from(new PageInfo<>(result)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public PageData<WStockExtListVO> choiceStockPageForPlans(PageWrap<QueryWStockDto> pageWrap,LoginUserInfo userInfo) { | 
|---|
|  |  |  | Plans plans =plansExtMapper.selectById(pageWrap.getModel().getPlansId()); | 
|---|
|  |  |  | if(Objects.isNull(plans)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,未查询到工序计划信息!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Device device = deviceExtMapper.selectById(pageWrap.getModel().getDeviceId()); | 
|---|
|  |  |  | if(Objects.isNull(plans)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,未查询到设备信息!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //查询并验证工单信息 | 
|---|
|  |  |  | this.getPlansAndValid(userInfo,plans); | 
|---|
|  |  |  | //查询全部bom组成数据,如果有BOM配置,按照BOM组成进行投料,如果没有BOM配置,则投料物料为待生产库位的物料本身 | 
|---|
|  |  |  | QueryBomDetailExtDTO bdparam = initBomParamForPlans(userInfo,plans); | 
|---|
|  |  |  | List<BomDetailExtListVO> bomDetailList = null; | 
|---|
|  |  |  | if(bdparam!=null){ | 
|---|
|  |  |  | bomDetailList = bomDetailExtMapper.selectList(bdparam); | 
|---|
|  |  |  | List<Integer> materialDistributeId = bomDetailList.stream().map(BomDetailExtListVO::getMaterialId).collect(Collectors.toList()); | 
|---|
|  |  |  | pageWrap.getModel().setMaterialDistributeId(materialDistributeId); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | //查询物料BOM信息 | 
|---|
|  |  |  | Bom bom = bomExtMapper.selectOne(new QueryWrapper<Bom>().eq("MATERIAL_ID",plans.getMaterialId()).eq("DELETED",Constants.ZERO).last(" limit 1 ")); | 
|---|
|  |  |  | if(Objects.isNull(bom)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,未查询到BOM信息!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | RouteProcedure currentRouteProcedure   = routeProcedureExtMapper.selectOne(new QueryWrapper<RouteProcedure>() | 
|---|
|  |  |  | .eq("ROUTE_ID",bom.getRouteId()) | 
|---|
|  |  |  | .eq("PROCEDURE_ID",plans.getProcedureId()) | 
|---|
|  |  |  | .last(" limit 1 ") | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | if(currentRouteProcedure!=null){ | 
|---|
|  |  |  | RouteProcedure routeProcedure   = routeProcedureExtMapper.selectOne(new QueryWrapper<RouteProcedure>() | 
|---|
|  |  |  | .eq("ROUTE_ID",currentRouteProcedure.getRouteId()).apply(" SORTNUM <  " + currentRouteProcedure.getSortnum() ).eq("STATUS",Constants.ONE).orderByDesc(" SORTNUM ").last(" limit 1  ") | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | if(Objects.isNull(routeProcedure)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,未查询到生产物料上一步工序信息!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | pageWrap.getModel().setProcedureId(routeProcedure.getProcedureId()); | 
|---|
|  |  |  | pageWrap.getModel().setMaterialId(plans.getMaterialId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | pageWrap.getModel().setLocationId(device.getProduceWarehouseLocationId()); | 
|---|
|  |  |  | PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); | 
|---|
|  |  |  | List<WStockExtListVO> result = wStockExtMapper.choiceStockList(pageWrap.getModel()); | 
|---|
|  |  |  | return PageData.from(new PageInfo<>(result)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional(rollbackFor = {BusinessException.class,Exception.class}) | 
|---|
|  |  |  | public WorkorderRecord createWorkorderRecord(CreateWorkorderRecordDTO createWorkorderRecordDTO, LoginUserInfo loginUserInfo){ | 
|---|
|  |  |  | public WorkorderRecord createWorkorderRecord(CreateWorkorderRecordDTO createWorkorderRecordDTO, LoginUserInfo loginUserInfo ,Integer userId){ | 
|---|
|  |  |  | Workorder workorder  = workorderExtMapper.selectById(createWorkorderRecordDTO.getWorkorderId()); | 
|---|
|  |  |  | if(Objects.isNull(workorder)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,未查询到该工单信息!"); | 
|---|
|  |  |  | 
|---|
|  |  |  | //数据存储 | 
|---|
|  |  |  | workorderRecord = new WorkorderRecord(); | 
|---|
|  |  |  | workorderRecord.setDeleted(Constants.ZERO); | 
|---|
|  |  |  | workorderRecord.setCreateUser(loginUserInfo.getId()); | 
|---|
|  |  |  | if(!Objects.isNull(userId)){ | 
|---|
|  |  |  | CompanyUser companyUser = new CompanyUser(); | 
|---|
|  |  |  | companyUser.setUserId(userId); | 
|---|
|  |  |  | companyUser.setRootDepartId(loginUserInfo.getRootDepartment().getId()); | 
|---|
|  |  |  | companyUser =     companyUserExtMapper.selectOne(new QueryWrapper<>(companyUser).last("limit 1")); | 
|---|
|  |  |  | if(Objects.isNull(companyUser)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,未查询到生产人员对应企业用户信息!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | workorderRecord.setCreateUser(userId); | 
|---|
|  |  |  | workorderRecord.setRootDepartId(loginUserInfo.getRootDepartment().getId()); | 
|---|
|  |  |  | workorderRecord.setDepartId(loginUserInfo.getCurComDepartment().getId()); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | workorderRecord.setCreateUser(loginUserInfo.getId()); | 
|---|
|  |  |  | workorderRecord.setRootDepartId(loginUserInfo.getRootDepartment().getId()); | 
|---|
|  |  |  | workorderRecord.setDepartId(loginUserInfo.getCurComDepartment().getId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | workorderRecord.setCreateTime(new Date()); | 
|---|
|  |  |  | workorderRecord.setNum(num); | 
|---|
|  |  |  | workorderRecord.setRootDepartId(loginUserInfo.getRootDepartment().getId()); | 
|---|
|  |  |  | workorderRecord.setDepartId(loginUserInfo.getCurComDepartment().getId()); | 
|---|
|  |  |  | workorderRecord.setPlanId(workorder.getPlanId()); | 
|---|
|  |  |  | workorderRecord.setWorkorderId(createWorkorderRecordDTO.getWorkorderId()); | 
|---|
|  |  |  | workorderRecord.setBatch(workorder.getBatch()); | 
|---|
|  |  |  | 
|---|
|  |  |  | workorderRecord.setQualifiedNum(createWorkorderRecordDTO.getQualifiedNum()); | 
|---|
|  |  |  | //计算工资信息 | 
|---|
|  |  |  | SalaryParam salaryParam = salaryParamMapper.selectOne(new QueryWrapper<SalaryParam>().eq("DELETED",Constants.ZERO).eq("MATERIAL_ID",workorderRecord.getMaterialId()) | 
|---|
|  |  |  | .eq("DEPART_ID",workorderRecord.getFactoryId()).eq("PROCEDURE_ID",workorderRecord.getProcedureId()).last(" limit 1  ")); | 
|---|
|  |  |  | if(Objects.isNull(salaryParam)){ | 
|---|
|  |  |  | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未配置工资绩效配置!"); | 
|---|
|  |  |  | .eq("DEPART_ID",workorderRecord.getFactoryId()).eq("PROCEDURE_ID",workorderRecord.getProcedureId()).eq("TYPE",createWorkorderRecordDTO.getType()).last(" limit 1  ")); | 
|---|
|  |  |  | if(!Objects.isNull(salaryParam)){ | 
|---|
|  |  |  | workorderRecord.setSalaryPrice(salaryParam.getSalary()); | 
|---|
|  |  |  | workorderRecord.setSalaryType(salaryParam.getType()); | 
|---|
|  |  |  | workorderRecord.setSalaryUnqualified(salaryParam.getUnqualified()); | 
|---|
|  |  |  | //计件工资 | 
|---|
|  |  |  | if(salaryParam.getType().equals(Constants.ZERO)){ | 
|---|
|  |  |  | workorderRecord.setSalaryNum(salaryParam.getNum()); | 
|---|
|  |  |  | workorderRecord.setSalary(salaryParam.getSalary().multiply(salaryParam.getUnqualified()==Constants.ONE?num:createWorkorderRecordDTO.getQualifiedNum())); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | if(!Objects.isNull(createWorkorderRecordDTO.getDuration())&&Constants.formatIntegerNum(createWorkorderRecordDTO.getDuration())>Constants.ZERO){ | 
|---|
|  |  |  | workorderRecord.setDuration(createWorkorderRecordDTO.getDuration()); | 
|---|
|  |  |  | workorderRecord.setSalary(BigDecimal.valueOf(createWorkorderRecordDTO.getDuration()).multiply(salaryParam.getSalary()).divide(new BigDecimal(3600),BigDecimal.ROUND_HALF_UP)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | workorderRecord.setSalaryPrice(salaryParam.getSalary()); | 
|---|
|  |  |  | workorderRecord.setSalaryType(salaryParam.getType()); | 
|---|
|  |  |  | workorderRecord.setSalaryUnqualified(salaryParam.getUnqualified()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //计件工资 | 
|---|
|  |  |  | if(salaryParam.getType().equals(Constants.ZERO)){ | 
|---|
|  |  |  | workorderRecord.setSalaryNum(salaryParam.getNum()); | 
|---|
|  |  |  | workorderRecord.setSalary(salaryParam.getSalary().multiply(salaryParam.getUnqualified()==Constants.ZERO?num:createWorkorderRecordDTO.getUnQualifiedNum())); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | workorderRecord.setDuration(createWorkorderRecordDTO.getDuration()); | 
|---|
|  |  |  | workorderRecord.setSalary(BigDecimal.valueOf(createWorkorderRecordDTO.getDuration()).multiply(salaryParam.getSalary()).divide(new BigDecimal(3600))); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //插入工单操作记录,并且判断是否更改为工单的状态【生产中】 | 
|---|
|  |  |  | updateOrderInfo(loginUserInfo,workorder,Constants.WORKORDER_HISTORY_STATUS.produce); | 
|---|
|  |  |  | workorderRecordExtMapper.insert(workorderRecord); | 
|---|
|  |  |  | return workorderRecord; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|