server/src/main/java/doumeemes/api/ext/PlansExtController.java
@@ -188,6 +188,7 @@ plansExtService.backByIdInBatch(idList); return ApiResponse.success(null); } @ApiOperation("分页查询") @PostMapping("/page") @RequiresPermissions("ext:plansext:query") server/src/main/java/doumeemes/api/ext/SalaryParamExtController.java
@@ -76,6 +76,14 @@ return ApiResponse.success(null); } @ApiOperation("根据对象信息查询") @PostMapping("/queryOne") @RequiresPermissions("business:salaryparam:query") public ApiResponse queryOne(@RequestBody SalaryParam salaryParam) { SalaryParam data = salaryParamService.findOne(salaryParam); return ApiResponse.success(data); } @ApiOperation("分页查询") @PostMapping("/page") @RequiresPermissions("business:salaryparam:query") server/src/main/java/doumeemes/api/ext/WorkorderRecordExtController.java
@@ -224,6 +224,10 @@ return ApiResponse.success(workorderRecordStandardService.choiceStockPageForWorkorder(pageWrap,getLoginUser())); } @ApiOperation("根据供需计划查询可用库存") @PostMapping("/getStockByPlansForStandard") public ApiResponse<PageData<WStockExtListVO>> getStockByPlansForStandard (@RequestBody PageWrap<QueryWStockDto> pageWrap) { return ApiResponse.success(workorderRecordStandardService.choiceStockPageForPlans(pageWrap,getLoginUser())); } } server/src/main/java/doumeemes/dao/business/model/Plans.java
@@ -3,6 +3,7 @@ import cn.afterturn.easypoi.excel.annotation.Excel; import com.baomidou.mybatisplus.annotation.TableField; import doumeemes.core.annotation.excel.ExcelColumn; import doumeemes.dao.ext.vo.BomExtListVO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import com.baomidou.mybatisplus.annotation.IdType; @@ -160,4 +161,7 @@ @ApiModelProperty(value = "成品计划主键(关联work_plans表)", example = "1") private Integer workPlansId; @ApiModelProperty(value = "关联BOM对象",hidden = true) @TableField(exist = false) private BomExtListVO bomModel; } server/src/main/java/doumeemes/dao/ext/beanDto/QueryWStockDto.java
@@ -80,5 +80,7 @@ @ApiModelProperty(value = "工单主键") private Integer workorderId; @ApiModelProperty(value = "工序计划主键") private Integer plansId; } server/src/main/java/doumeemes/dao/ext/dto/QueryBomDetailExtDTO.java
@@ -256,6 +256,8 @@ @ApiModelProperty(value = "工单编码", example = "1",hidden = true) private Integer workorderId; @ApiModelProperty(value = "工序计划主键", example = "1",hidden = true) private Integer plansId; @ApiModelProperty(value = "物料清单信息表最后启用时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date bmodelValidTime; server/src/main/java/doumeemes/dao/ext/dto/QueryBomExtDTO.java
@@ -1,5 +1,7 @@ package doumeemes.dao.ext.dto; import com.baomidou.mybatisplus.annotation.TableField; import doumeemes.dao.ext.vo.BomExtListVO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -286,4 +288,5 @@ @ApiModelProperty(value = "物料清单信息表主键", example = "1") private Integer bmodelId; } server/src/main/java/doumeemes/dao/ext/vo/PlansExtListVO.java
@@ -170,4 +170,17 @@ @ExcelColumn(name="成品计划编码") private String workPlanCode; @ExcelColumn(name="销售订单") private String salesOrder; @ApiModelProperty(value = "成品计划开始时间") @JsonFormat(pattern = "yyyy-MM-dd") private Date workPlanStartDate; @ApiModelProperty(value = "成品计划结束时间") @JsonFormat(pattern = "yyyy-MM-dd") private Date workPlanEndDate; @ApiModelProperty(value = "已生产数量") private Integer produceNum; } server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java
@@ -36,4 +36,6 @@ List<WorkorderRecord> getWorkorderRecordList(Integer workorderId); PageData<WStockExtListVO> choiceStockPageForWorkorder(PageWrap<QueryWStockDto> pageWrap, LoginUserInfo userInfo); PageData<WStockExtListVO> choiceStockPageForPlans(PageWrap<QueryWStockDto> pageWrap,LoginUserInfo userInfo); } server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java
@@ -1563,14 +1563,17 @@ if(Objects.isNull(plans)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到工序计划数据"); } if(plans.getStatus().equals(Constants.PLAN_STATUS.create)){ if(!(plans.getStatus().equals(Constants.PLAN_STATUS.create)||plans.getStatus().equals(Constants.PLAN_STATUS.distribute))){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"工序计划已流转,无法操作"); } if(plans.getPaused().equals(Constants.ONE)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"工序计划已暂停,无法操作"); } if(Objects.isNull(autoWorkReportDTO.getCreateWorkorderRecordDTO())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"参数错误:产出数据"); } //查询工序计划已分配数量 List<Workorder> workorderList = workorderExtMapper.selectList(new QueryWrapper<Workorder>().eq("PLAN_ID",plans.getId())); List<Workorder> workorderList = workorderExtMapper.selectList(new QueryWrapper<Workorder>().eq("PLAN_ID",plans.getId()).notIn("STATUS",7,8)); //本次产出数量 BigDecimal num = autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum().add(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum()); if(num.compareTo(BigDecimal.ZERO)<=Constants.ZERO){ @@ -1601,6 +1604,15 @@ workorderRecordStandardService.createWorkorderRecord(autoWorkReportDTO.getCreateWorkorderRecordDTO(),user); //工单报工 workorderRecordStandardService.comfirmDone(workorder); //更新工单状态 if(num.compareTo(BigDecimal.valueOf(surplusNum))==Constants.ZERO){ plans.setStatus(Constants.PLAN_STATUS.done); }else{ if(plans.getStatus().equals(Constants.PLAN_STATUS.create)){ plans.setStatus(Constants.PLAN_STATUS.distribute); } } plansExtMapper.updateById(plans); } server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
@@ -83,6 +83,10 @@ private MaterialExtMapper materialExtMapper; @Autowired private SalaryParamMapper salaryParamMapper; @Autowired private PlansExtMapper plansExtMapper; @Autowired private DeviceExtMapper deviceExtMapper; @Transactional(rollbackFor = {BusinessException.class,Exception.class}) @Override @@ -188,6 +192,14 @@ 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(); @@ -207,6 +219,27 @@ 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; } @@ -1110,7 +1143,52 @@ 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}) @@ -1185,4 +1263,7 @@ return workorderRecord; } } server/src/main/resources/mappers/PlansExtMapper.xml
@@ -366,7 +366,9 @@ ,( SELECT sum( b.PLAN_NUM ) FROM workorder b WHERE b.deleted = 0 AND b.PLAN_ID = a.id and b.status !=6) AS workorderDistributNum , `mmodel`.name as materialName , `mmodel`.code as materialCode ,`fmodel`.name as factoryName , `pmodel`.name as produceName , concat(`usermodel`.realname,' ',`usermodel`.mobile) as planUserName , `umodel`.name as unitName , w.PLAN_CODE as workPlanCode w.PLAN_CODE as workPlanCode , w.SALESORDER as salesOrder , w.START_DATE as workPlanStartDate , w.PLAN_DATE as workPlanEndDate, ifnull((select sum(worder.PLAN_NUM) from workorder worder where worder.PLAN_ID = a.id and worder.STATUS not in (7,8) ),0) as produceNum FROM `plans` `a` LEFT JOIN `department` `dmodel` ON a.DEPART_ID=dmodel.ID