diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/feign/IWorkOrderClient.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/feign/IWorkOrderClient.java new file mode 100644 index 00000000..0f0af614 --- /dev/null +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/feign/IWorkOrderClient.java @@ -0,0 +1,31 @@ +package org.springblade.scheduling.feign; + +import org.springblade.core.tool.api.R; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * TODO:功能描述 + * + * @author sjx + * @version 1.0 + * @BelongsProject jonhon-mes-svr + * @BelongsPackage org.springblade.scheduling.feign + * @since 2026-01-16 10:06 + */ +@FeignClient( + value = "blade-scheduling" +) +public interface IWorkOrderClient { + String API_PREFIX = "/feign/client/workOrder"; + + String SCHEDULING = API_PREFIX + "/scheduling"; + + /** + * 排产 + * + */ + @GetMapping(SCHEDULING) + R scheduling(); +} diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/feign/IWorkOrderClientFallback.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/feign/IWorkOrderClientFallback.java new file mode 100644 index 00000000..076be6dc --- /dev/null +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/feign/IWorkOrderClientFallback.java @@ -0,0 +1,43 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is + * not liable for any claims arising from secondary or illegal development. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.scheduling.feign; + +import org.springblade.core.tool.api.R; +import org.springframework.stereotype.Component; + +/** + * Feign失败配置 + * + * @author Chill + */ +@Component +public class IWorkOrderClientFallback implements IWorkOrderClient { + + @Override + public R scheduling() { + return R.fail("获取数据失败"); + } +} diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/EquipAbilityEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/EquipAbilityEntity.java index a5cefaaf..a293b7d8 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/EquipAbilityEntity.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/EquipAbilityEntity.java @@ -120,7 +120,7 @@ public class EquipAbilityEntity extends BaseEntity { * 轮次间隔(分钟) */ @Schema(description = "轮次间隔(分钟)") - @JsonSerialize(using = ToStringSerializer.class) + @JsonSerialize(nullsUsing = NullSerializer.class) private BigDecimal interval; /** diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/PersonAbilityEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/PersonAbilityEntity.java index f04edcdb..c52daec6 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/PersonAbilityEntity.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/PersonAbilityEntity.java @@ -103,4 +103,19 @@ public class PersonAbilityEntity extends BaseEntity { @Schema(description = "0-按单个零件统计 1-按订单统计") private String type; + /** + * 证书ID + */ + private Long certificateId; + + /** + * 证书名称 + */ + private String certificateName; + + /** + * 生产标识 + */ + private String productIdent; + } diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkPlanEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkPlanEntity.java index b64b7447..fd403ece 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkPlanEntity.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkPlanEntity.java @@ -264,4 +264,9 @@ public class WorkPlanEntity extends BaseEntity { @Schema(description = "占用设备资源ID") private String personResourceIds; + /** + * 班组人员 + */ + private String teamMembers; + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/SchedulingApplication.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/SchedulingApplication.java index 78d87633..d2edaa32 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/SchedulingApplication.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/SchedulingApplication.java @@ -28,7 +28,6 @@ package org.springblade.scheduling; import org.springblade.common.constant.LauncherConstant; import org.springblade.core.cloud.client.BladeCloudApplication; import org.springblade.core.launch.BladeApplication; -import org.springblade.core.launch.constant.AppConstant; import org.springframework.scheduling.annotation.EnableScheduling; /** diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/EquipAbilityController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/EquipAbilityController.java index ef3ed22c..6257e3fa 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/EquipAbilityController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/EquipAbilityController.java @@ -117,7 +117,7 @@ public class EquipAbilityController extends BladeController { } equipAbilityService.save(entity); //初始化设备资源 - equipResourceService.initSingleEquipResource(entity.getWorkCenterId(),entity.getCraftId(),entity.getEquipCode()); + equipResourceService.initSingleEquipResource(entity); return R.status(true); } @@ -130,7 +130,7 @@ public class EquipAbilityController extends BladeController { public R update(@Valid @RequestBody EquipAbilityEntity entity) { equipAbilityService.updateById(entity); //初始化设备资源 - equipResourceService.initSingleEquipResource(entity.getWorkCenterId(),entity.getCraftId(),entity.getEquipCode()); + equipResourceService.initSingleEquipResource(entity); return R.status(true); } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/PersonAbilityController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/PersonAbilityController.java index d1e0edcc..3018502e 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/PersonAbilityController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/PersonAbilityController.java @@ -46,6 +46,7 @@ import org.springblade.core.secure.annotation.IsAdmin; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; +import org.springblade.desk.jobTransfer.pojo.entity.CertificateTypeEntity; import org.springblade.scheduling.pojo.entity.PersonAbilityEntity; import org.springblade.scheduling.scheduling.excel.PersonAbilityExcel; import org.springblade.scheduling.scheduling.service.IPersonAbilityService; @@ -160,4 +161,15 @@ public class PersonAbilityController extends BladeController { ExcelUtil.export(response, "人员能力表数据" + DateUtil.time(), "人员能力表数据表", list, PersonAbilityExcel.class); } + + /** + * 获取证书列表 + */ + @GetMapping("/selectCertificateList") + @ApiOperationSupport(order = 2) + public R> selectCertificateList() { + List list = personAbilityService.selectCertificateList(); + return R.data(list); + } + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/dto/WorkOrderDto.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/dto/WorkOrderDto.java index f965eb67..bcc6af54 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/dto/WorkOrderDto.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/dto/WorkOrderDto.java @@ -46,6 +46,8 @@ public class WorkOrderDto { private String productIdent; private String receiveTime; private String priorityAps; + private String teamMembers; + private String releaseDate; private List planStatusList; diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/feign/WorkOrderClient.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/feign/WorkOrderClient.java new file mode 100644 index 00000000..980e90be --- /dev/null +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/feign/WorkOrderClient.java @@ -0,0 +1,57 @@ +/** + * BladeX Commercial License Agreement + * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. + *

+ * Use of this software is governed by the Commercial License Agreement + * obtained after purchasing a license from BladeX. + *

+ * 1. This software is for development use only under a valid license + * from BladeX. + *

+ * 2. Redistribution of this software's source code to any third party + * without a commercial license is strictly prohibited. + *

+ * 3. Licensees may copyright their own code but cannot use segments + * from this software for such purposes. Copyright of this software + * remains with BladeX. + *

+ * Using this software signifies agreement to this License, and the software + * must not be used for illegal purposes. + *

+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is + * not liable for any claims arising from secondary or illegal development. + *

+ * Author: Chill Zhuang (bladejava@qq.com) + */ +package org.springblade.scheduling.scheduling.feign; + + +import io.swagger.v3.oas.annotations.Hidden; +import lombok.AllArgsConstructor; +import org.springblade.core.tenant.annotation.NonDS; +import org.springblade.core.tool.api.R; +import org.springblade.scheduling.feign.IWorkOrderClient; +import org.springblade.scheduling.scheduling.service.IWorkOrderService; +import org.springframework.web.bind.annotation.RestController; + + +/** + * 字典服务Feign实现类 + * + * @author Chill + */ +@NonDS +@Hidden +@RestController +@AllArgsConstructor +public class WorkOrderClient implements IWorkOrderClient { + + private final IWorkOrderService workOrderService; + + + @Override + public R scheduling() { + workOrderService.scheduling(); + return R.success(); + } +} diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PersonAbilityMapper.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PersonAbilityMapper.java index a6de70ad..c3ed1971 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PersonAbilityMapper.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PersonAbilityMapper.java @@ -29,6 +29,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; +import org.springblade.desk.jobTransfer.pojo.entity.CertificateTypeEntity; import org.springblade.scheduling.pojo.entity.PersonAbilityEntity; import org.springblade.scheduling.scheduling.excel.PersonAbilityExcel; import org.springblade.scheduling.scheduling.vo.PersonAbilityVO; @@ -60,5 +61,7 @@ public interface PersonAbilityMapper extends BaseMapper { */ List export(@Param("ew") Wrapper queryWrapper); + List selectCertificateList(); + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PersonAbilityMapper.xml b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PersonAbilityMapper.xml index 2b53e6fb..b187868e 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PersonAbilityMapper.xml +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/PersonAbilityMapper.xml @@ -42,4 +42,8 @@ + + diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java index 92969f78..82c67a93 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.java @@ -76,4 +76,6 @@ public interface WorkOrderMapper extends BaseMapper { List exportSchedulingBoard(WorkOrderDto workOrderDto); + List selectTeamMember(@Param("teamId") Long teamId,@Param("certificateId") Long certificateId); + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml index e4d518c7..b609b92e 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml @@ -94,6 +94,7 @@ a.card_no AS "cardNO", g.priority_aps AS "priorityAps", g.product_ident AS "productIdent", + to_char(g.release_date,'YYYY-MM-DD') AS "releaseDate", f.name AS "currentProcessName", d.name AS "processName", to_char(b.start_time,'YYYY-MM-DD HH24:MI') AS "startTime", @@ -106,7 +107,8 @@ b.equip_name AS "equipName", b.equip_code AS "equipCode", a.status AS "orderStatus", - b.status AS "planStatus" + b.status AS "planStatus", + b.team_members as "teamMembers" FROM MES_WORK_ORDER a LEFT JOIN MES_WORK_PLAN b ON a.ID = b.WO_ID @@ -149,7 +151,7 @@ - order by b.start_time,a.WO_CODE + order by g.release_date,b.start_time,a.WO_CODE + + diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IEquipResourceService.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IEquipResourceService.java index 5f2168ca..5a5da894 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IEquipResourceService.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IEquipResourceService.java @@ -28,6 +28,7 @@ package org.springblade.scheduling.scheduling.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; +import org.springblade.scheduling.pojo.entity.EquipAbilityEntity; import org.springblade.scheduling.pojo.entity.EquipResourceEntity; import org.springblade.scheduling.scheduling.excel.EquipResourceExcel; import org.springblade.scheduling.scheduling.vo.EquipResourceVO; @@ -59,7 +60,7 @@ public interface IEquipResourceService extends BaseService List export(Wrapper queryWrapper); public void initEquipResource(); - public void initSingleEquipResource(Long workCenterId,Long craftId,String equipCode); + public void initSingleEquipResource(EquipAbilityEntity entity); List selectCommonCraftList(); diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IPersonAbilityService.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IPersonAbilityService.java index bae7ae6a..d1b0d5a2 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IPersonAbilityService.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IPersonAbilityService.java @@ -28,6 +28,7 @@ package org.springblade.scheduling.scheduling.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; +import org.springblade.desk.jobTransfer.pojo.entity.CertificateTypeEntity; import org.springblade.scheduling.pojo.entity.PersonAbilityEntity; import org.springblade.scheduling.scheduling.excel.PersonAbilityExcel; import org.springblade.scheduling.scheduling.vo.PersonAbilityVO; @@ -58,4 +59,6 @@ public interface IPersonAbilityService extends BaseService */ List export(Wrapper queryWrapper); + List selectCertificateList(); + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/EquipResourceServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/EquipResourceServiceImpl.java index 6cd82d20..bf7323a2 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/EquipResourceServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/EquipResourceServiceImpl.java @@ -80,13 +80,19 @@ public class EquipResourceServiceImpl extends BaseServiceImpl equipAbilityList = equipAbilityService.list(Wrappers.lambdaQuery().isNotNull(EquipAbilityEntity::getWorkCenterId).isNotNull(EquipAbilityEntity::getCraftId).isNotNull(EquipAbilityEntity::getEquipCode)); for(int i=0;i<7;i++){ String today = DateFormatUtils.format(DateUtils.addDays(date,i),"yyyy-MM-dd"); - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(EquipResourceEntity::getDateTime,today); - List list = this.list(wrapper); - if(CollectionUtils.isEmpty(list)){ - generateData(today,null,null,null); + for(EquipAbilityEntity equipAbility : equipAbilityList){ + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(EquipResourceEntity::getDateTime,today); + wrapper.eq(EquipResourceEntity::getWorkCenterId,equipAbility.getWorkCenterId()); + wrapper.eq(EquipResourceEntity::getCraftId,equipAbility.getCraftId()); + wrapper.eq(EquipResourceEntity::getEquipCode,equipAbility.getEquipCode()); + List list = this.list(wrapper); + if(CollectionUtils.isEmpty(list)){ + generateData(today,equipAbility); + } } } //删除3天之前的数据 @@ -94,12 +100,12 @@ public class EquipResourceServiceImpl extends BaseServiceImpl baseMapper.deleteById(item.getId())); } - public void initSingleEquipResource(Long workCenterId,Long craftId,String equipCode){ + public void initSingleEquipResource(EquipAbilityEntity entity){ //获取包括今天在内未来7天 Date date = new Date(); for(int i=0;i<7;i++){ String today = DateFormatUtils.format(DateUtils.addDays(date,i),"yyyy-MM-dd"); - generateData(today,workCenterId,craftId,equipCode); + generateData(today,entity); } } @@ -108,27 +114,27 @@ public class EquipResourceServiceImpl extends BaseServiceImpl wrapper = new LambdaQueryWrapper<>(); wrapper.isNotNull(EquipAbilityEntity::getStandardTime); - if(workCenterId != null){ - wrapper.eq(EquipAbilityEntity::getWorkCenterId,workCenterId); + if(equipAbility.getWorkCenterId() != null){ + wrapper.eq(EquipAbilityEntity::getWorkCenterId,equipAbility.getWorkCenterId()); } - if(craftId != null){ - wrapper.eq(EquipAbilityEntity::getCraftId,craftId); + if(equipAbility.getCraftId() != null){ + wrapper.eq(EquipAbilityEntity::getCraftId,equipAbility.getCraftId()); } - if(StringUtils.isNotBlank(equipCode)){ - wrapper.eq(EquipAbilityEntity::getEquipCode,equipCode); + if(StringUtils.isNotBlank(equipAbility.getEquipCode())){ + wrapper.eq(EquipAbilityEntity::getEquipCode,equipAbility.getEquipCode()); } List equipAbilityList = equipAbilityService.list(wrapper); if(CollectionUtils.isNotEmpty(equipAbilityList)){ - if(workCenterId != null && craftId != null && StringUtils.isNotBlank(equipCode)){ + if(equipAbility.getWorkCenterId() != null && equipAbility.getCraftId() != null && StringUtils.isNotBlank(equipAbility.getEquipCode())){ List list = this.list(Wrappers.lambdaQuery() - .eq(EquipResourceEntity::getWorkCenterId,workCenterId) - .eq(EquipResourceEntity::getCraftId,craftId) - .eq(EquipResourceEntity::getEquipCode,equipCode) + .eq(EquipResourceEntity::getWorkCenterId,equipAbility.getWorkCenterId()) + .eq(EquipResourceEntity::getCraftId,equipAbility.getCraftId()) + .eq(EquipResourceEntity::getEquipCode,equipAbility.getEquipCode()) .eq(EquipResourceEntity::getDateTime,day)); if(CollectionUtils.isNotEmpty(list)){ list.forEach(item -> baseMapper.deleteById(item.getId())); @@ -139,98 +145,96 @@ public class EquipResourceServiceImpl extends BaseServiceImpl> teamIdList = baseMapper.selectTeamByWorkCenter(equipAbility.getWorkCenterId()); - //0-产线设备 1-普通设备 - if("0".equals(equipAbility.getEquipType())){ - //产线设备根据轮询间隔生成数据,根据轮询间隔判断一天要分成多少段 - int interval = equipAbility.getInterval() == null ? 60 : Integer.parseInt(equipAbility.getInterval().toString()); // 默认60分钟 - int totalMinutes = 24 * 60; // 一天总分钟数 - int totalCount = totalMinutes / interval; // 生成条数 - List resourceList = new ArrayList<>(); - for (int i = 0; i < totalCount; i++) { - LocalDateTime startTime = startOfDay.plusMinutes(i * interval); - LocalDateTime endTime = startTime.plusMinutes(interval); - EquipResourceEntity equipResource = new EquipResourceEntity(); - equipResource.setDateTime(day); - equipResource.setEquipCode(equipAbility.getEquipCode()); - equipResource.setEquipName(equipAbility.getEquipName()); - equipResource.setCraftId(equipAbility.getCraftId().toString()); - equipResource.setCraftName(equipAbility.getCraftName()); - equipResource.setPeriod(startTime.format(timeFormatter) + "-" + endTime.format(timeFormatter)); - equipResource.setTotalCapacity(equipAbility.getStandardProcessAbility()); - equipResource.setRestCapacity(equipAbility.getStandardProcessAbility()); - equipResource.setStartTime(startTime); - equipResource.setEndTime(endTime); - equipResource.setEquipOrder(equipAbility.getEquipOrder()); - equipResource.setStandardTime(equipAbility.getStandardTime()); - equipResource.setIsUsed("0"); - equipResource.setEquipType(equipAbility.getEquipType()); - equipResource.setWorkCenterId(equipAbility.getWorkCenterId()); - - Long teamId = null; - for(Map map : teamIdList){ - - - LocalDateTime teamStartTime = LocalDateTime.parse(day + ' '+ map.get("startTime").toString(), dateTimeFormatter); - LocalDateTime teamEndTime = LocalDateTime.parse(day + ' '+ map.get("endTime").toString(), dateTimeFormatter); - - if((startTime.compareTo(teamStartTime) >=0 && endTime.compareTo(teamEndTime) <= 0) || (startTime.compareTo(teamStartTime) >=0 && startTime.compareTo(teamEndTime) <0)){ - teamId = Long.parseLong(map.get("teamId").toString()); - } - + //获取 + List> teamIdList = baseMapper.selectTeamByWorkCenter(equipAbility.getWorkCenterId()); + //0-产线设备 1-普通设备 + if("0".equals(equipAbility.getEquipType())){ + //产线设备根据轮询间隔生成数据,根据轮询间隔判断一天要分成多少段 + int interval = equipAbility.getInterval() == null ? 60 : Integer.parseInt(equipAbility.getInterval().toString()); // 默认60分钟 + int totalMinutes = 24 * 60; // 一天总分钟数 + int totalCount = totalMinutes / interval; // 生成条数 + List resourceList = new ArrayList<>(); + for (int i = 0; i < totalCount; i++) { + LocalDateTime startTime = startOfDay.plusMinutes(i * interval); + LocalDateTime endTime = startTime.plusMinutes(interval); + EquipResourceEntity equipResource = new EquipResourceEntity(); + equipResource.setDateTime(day); + equipResource.setEquipCode(equipAbility.getEquipCode()); + equipResource.setEquipName(equipAbility.getEquipName()); + equipResource.setCraftId(equipAbility.getCraftId().toString()); + equipResource.setCraftName(equipAbility.getCraftName()); + equipResource.setPeriod(startTime.format(timeFormatter) + "-" + endTime.format(timeFormatter)); + equipResource.setTotalCapacity(equipAbility.getStandardProcessAbility()); + equipResource.setRestCapacity(equipAbility.getStandardProcessAbility()); + equipResource.setStartTime(startTime); + equipResource.setEndTime(endTime); + equipResource.setEquipOrder(equipAbility.getEquipOrder()); + equipResource.setStandardTime(equipAbility.getStandardTime()); + equipResource.setIsUsed("0"); + equipResource.setEquipType(equipAbility.getEquipType()); + equipResource.setWorkCenterId(equipAbility.getWorkCenterId()); + + Long teamId = null; + for(Map map : teamIdList){ + + + LocalDateTime teamStartTime = LocalDateTime.parse(day + ' '+ map.get("startTime").toString(), dateTimeFormatter); + LocalDateTime teamEndTime = LocalDateTime.parse(day + ' '+ map.get("endTime").toString(), dateTimeFormatter); + + if((startTime.compareTo(teamStartTime) >=0 && endTime.compareTo(teamEndTime) <= 0) || (startTime.compareTo(teamStartTime) >=0 && startTime.compareTo(teamEndTime) <0)){ + teamId = Long.parseLong(map.get("teamId").toString()); } - equipResource.setTeamId(teamId); - resourceList.add(equipResource); } - if(CollectionUtils.isNotEmpty(resourceList)){ - this.saveBatch(resourceList); - } - }else{ - //普通设备每30分钟间隔生成数据 - int interval = 30; - int totalMinutes = 24 * 60; // 一天总分钟数 - int totalCount = totalMinutes / interval; // 生成条数 - List resourceList = new ArrayList<>(); - for (int i = 0; i < totalCount; i++) { - LocalDateTime startTime = startOfDay.plusMinutes(i * interval); - LocalDateTime endTime = startTime.plusMinutes(equipAbility.getStandardTime().longValue()); - EquipResourceEntity equipResource = new EquipResourceEntity(); - equipResource.setDateTime(day); - equipResource.setEquipCode(equipAbility.getEquipCode()); - equipResource.setEquipName(equipAbility.getEquipName()); - equipResource.setCraftId(equipAbility.getCraftId().toString()); - equipResource.setCraftName(equipAbility.getCraftName()); - equipResource.setPeriod(startTime.format(timeFormatter) + "-" + endTime.format(timeFormatter)); - equipResource.setTotalCapacity(equipAbility.getStandardProcessAbility()); - equipResource.setRestCapacity(equipAbility.getStandardProcessAbility()); - equipResource.setStartTime(startTime); - equipResource.setEndTime(endTime); - equipResource.setEquipOrder(equipAbility.getEquipOrder()); - equipResource.setStandardTime(equipAbility.getStandardTime()); - equipResource.setIsUsed("0"); - equipResource.setEquipType(equipAbility.getEquipType()); - equipResource.setWorkCenterId(equipAbility.getWorkCenterId()); - Long teamId = null; - for(Map map : teamIdList){ - - - LocalDateTime teamStartTime = LocalDateTime.parse(day + ' '+ map.get("startTime").toString(), dateTimeFormatter); - LocalDateTime teamEndTime = LocalDateTime.parse(day + ' '+ map.get("endTime").toString(), dateTimeFormatter); - - if((startTime.compareTo(teamStartTime) >=0 && endTime.compareTo(teamEndTime) <= 0) || (startTime.compareTo(teamStartTime) >=0 && startTime.compareTo(teamEndTime) <0)){ - teamId = Long.parseLong(map.get("teamId").toString()); - } - } - equipResource.setTeamId(teamId); - resourceList.add(equipResource); + equipResource.setTeamId(teamId); + resourceList.add(equipResource); + } + if(CollectionUtils.isNotEmpty(resourceList)){ + this.saveBatch(resourceList); + } + }else{ + //普通设备每30分钟间隔生成数据 + int interval = equipAbility.getInterval() == null ? 60 : Integer.parseInt(equipAbility.getInterval().toString()); + int totalMinutes = 24 * 60; // 一天总分钟数 + int totalCount = totalMinutes / interval; // 生成条数 + List resourceList = new ArrayList<>(); + for (int i = 0; i < totalCount; i++) { + LocalDateTime startTime = startOfDay.plusMinutes(i * interval); + LocalDateTime endTime = startTime.plusMinutes(equipAbility.getStandardTime().longValue()); + EquipResourceEntity equipResource = new EquipResourceEntity(); + equipResource.setDateTime(day); + equipResource.setEquipCode(equipAbility.getEquipCode()); + equipResource.setEquipName(equipAbility.getEquipName()); + equipResource.setCraftId(equipAbility.getCraftId().toString()); + equipResource.setCraftName(equipAbility.getCraftName()); + equipResource.setPeriod(startTime.format(timeFormatter) + "-" + endTime.format(timeFormatter)); + equipResource.setTotalCapacity(equipAbility.getStandardProcessAbility()); + equipResource.setRestCapacity(equipAbility.getStandardProcessAbility()); + equipResource.setStartTime(startTime); + equipResource.setEndTime(endTime); + equipResource.setEquipOrder(equipAbility.getEquipOrder()); + equipResource.setStandardTime(equipAbility.getStandardTime()); + equipResource.setIsUsed("0"); + equipResource.setEquipType(equipAbility.getEquipType()); + equipResource.setWorkCenterId(equipAbility.getWorkCenterId()); + Long teamId = null; + for(Map map : teamIdList){ + + + LocalDateTime teamStartTime = LocalDateTime.parse(day + ' '+ map.get("startTime").toString(), dateTimeFormatter); + LocalDateTime teamEndTime = LocalDateTime.parse(day + ' '+ map.get("endTime").toString(), dateTimeFormatter); + + if((startTime.compareTo(teamStartTime) >=0 && endTime.compareTo(teamEndTime) <= 0) || (startTime.compareTo(teamStartTime) >=0 && startTime.compareTo(teamEndTime) <0)){ + teamId = Long.parseLong(map.get("teamId").toString()); + } } - if(CollectionUtils.isNotEmpty(resourceList)){ - this.saveBatch(resourceList); - } + equipResource.setTeamId(teamId); + resourceList.add(equipResource); + + } + if(CollectionUtils.isNotEmpty(resourceList)){ + this.saveBatch(resourceList); } } } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PersonAbilityServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PersonAbilityServiceImpl.java index 55bb319a..7dd9ac23 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PersonAbilityServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PersonAbilityServiceImpl.java @@ -28,6 +28,7 @@ package org.springblade.scheduling.scheduling.service.impl; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.desk.jobTransfer.pojo.entity.CertificateTypeEntity; import org.springblade.scheduling.pojo.entity.PersonAbilityEntity; import org.springblade.scheduling.scheduling.excel.PersonAbilityExcel; import org.springblade.scheduling.scheduling.mapper.PersonAbilityMapper; @@ -58,4 +59,9 @@ public class PersonAbilityServiceImpl extends BaseServiceImpl selectCertificateList() { + return baseMapper.selectCertificateList(); + } + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java index 810a477d..bea56e1c 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java @@ -122,14 +122,43 @@ public class WorkOrderServiceImpl extends BaseServiceImpl errorlist1 = yieldOrderService.list(Wrappers.lambdaQuery() + .in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCode()) + .isNull(YieldOrderEntity::getWorkCenterId)); + errorlist1.forEach(item -> { + item.setErrorInfo("作业中心为空"); + item.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); + yieldOrderService.updateById(item); + }); + List errorlist2 = yieldOrderService.list(Wrappers.lambdaQuery() + .in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCode()) + .isNull(YieldOrderEntity::getReleaseDate)); + errorlist2.forEach(item -> { + item.setErrorInfo("计划下达时间为空"); + item.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); + yieldOrderService.updateById(item); + }); + List errorlist3 = yieldOrderService.list(Wrappers.lambdaQuery() + .in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCode()) + .isNull(YieldOrderEntity::getDemandDate)); + errorlist3.forEach(item -> { + item.setErrorInfo("需求交期为空"); + item.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); + yieldOrderService.updateById(item); + }); //查询待排产订单,状态是3 List list = - yieldOrderService.list(Wrappers.lambdaQuery().in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCode(),YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate).isNotNull(YieldOrderEntity::getDemandDate)); + yieldOrderService.list(Wrappers.lambdaQuery() + .in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCode()) + .isNotNull(YieldOrderEntity::getWorkCenterId) + .isNotNull(YieldOrderEntity::getReleaseDate) + .isNotNull(YieldOrderEntity::getDemandDate)); log.info("待排产订单数量为:" + list.size()); if (CollectionUtils.isNotEmpty(list)) { //校验已排产订单 checkSchedulingOrder(list); - list = yieldOrderService.list(Wrappers.lambdaQuery().in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCode(),YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate).isNotNull(YieldOrderEntity::getDemandDate)); + list = yieldOrderService.list(Wrappers.lambdaQuery().in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCode()).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate).isNotNull(YieldOrderEntity::getDemandDate)); //初始化人员能力 List personAbilityEntityList = personAbilityService.list(Wrappers.lambdaQuery().isNotNull(PersonAbilityEntity::getWorkCenterId).isNotNull(PersonAbilityEntity::getProcessId).isNotNull(PersonAbilityEntity::getCraftId)); Map personAbilityMap = new HashMap<>(); @@ -331,7 +360,13 @@ public class WorkOrderServiceImpl extends BaseServiceImpl craftList1 = craftList.stream().filter(item -> item.getIsOutsource() == false).collect(Collectors.toList()); List workCenterList = craftList1.stream().filter(item -> item.getWorkCenterId() != null).map(YieldOrderCraftEntity::getWorkCenterId).collect(Collectors.toList()); if (workCenterList.size() != craftList1.size()) { - order.setErrorInfo("工序信息不完整,含有未匹配作业中心的工序"); + String errorInfo = craftList1.stream().filter(item -> item.getWorkCenterId() == null) + .map(YieldOrderCraftEntity::getPpsId) + .filter(ppsId -> ppsId != null) + .map(ppsId -> processMap.get(ppsId)) + .filter(chineseName -> chineseName != null && !chineseName.isEmpty()) + .collect(Collectors.joining(",")); + order.setErrorInfo("工序信息不完整,工序:"+errorInfo+"未匹配作业中心"); order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); yieldOrderService.updateById(order); continue; @@ -385,88 +420,19 @@ public class WorkOrderServiceImpl extends BaseServiceImpl sintList = sintMap.get(craft.getPpsId()); - List> sintMaterialList = new ArrayList<>(); - sintList.stream().map(SintTempCurveEntity::getGlassCode).collect(Collectors.toList()).forEach(item -> sintMaterialList.add(Arrays.asList(item.split(",")))); - - //根据零件号获取子件信息 - PartEntity part = new PartEntity(); - part.setPartCode(order.getPartCode()); - List childPartList = partService.selectChildPart(part); - if(CollectionUtils.isNotEmpty(childPartList)){ - //获取子件的所有玻璃粉牌号 - List materialList = childPartList.stream().filter(item -> StringUtils.isNotEmpty(item.getMaterial())).map(PartEntity::getMaterial).collect(Collectors.toList()); - List maxMatchList = null; - int maxCount = 0; - for(List glassCodeList : sintMaterialList){ - int currentCount = (int) glassCodeList.stream().filter(materialList::contains).count(); - if (currentCount > maxCount) { - maxCount = currentCount; - maxMatchList = glassCodeList; - } - } - if(maxMatchList != null){ - glassCodeStr = maxMatchList.stream().collect(Collectors.joining(",")); - log.info("订单:"+order.getYoCode()+",温度曲线是:"+glassCodeStr); - } - } - //包含说明之前有过这个温度曲线的订单 - //根据当前时间查询包含玻璃粉牌号的设备资源 - List equipResourceList = equipResourceService.list(Wrappers.lambdaQuery() - .eq(EquipResourceEntity::getWorkCenterId,craft.getWorkCenterId()) - .eq(EquipResourceEntity::getCraftId,craft.getCaId()) - .ge(EquipResourceEntity::getStartTime,prevProcessEnd) - .eq(EquipResourceEntity::getGlassCode,glassCodeStr)); - if(CollectionUtils.isNotEmpty(equipResourceList)){ - //计算生产所需产能,需将m2换算成dm2 - BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(order.getYpQty())); - Boolean isSameFurnace = false; - for(EquipResourceEntity equipResource : equipResourceList){ - if(equipResource.getRestCapacity().compareTo(sumCapacity) > 0){ - //生成车间订单 - WorkPlanEntity workPlan = new WorkPlanEntity(); - workPlan.setStartTime(equipResource.getStartTime()); - if ("0".equals(equipResource.getEquipType())) { - workPlan.setEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().longValue())); - } else { - workPlan.setEndTime(equipResource.getEndTime()); - } - workPlan.setWorkQty(order.getYpQty()); - workPlan.setCaId(craft.getCaId()); - workPlan.setPpsId(craft.getPpsId()); - workPlan.setMakeTeam(equipResource.getTeamId()); - workPlan.setWorkCenterId(craft.getWorkCenterId()); - workPlan.setOrders(craft.getProcessNo()); - workPlan.setWoId(order.getId()); - workPlan.setOem("0"); - workPlan.setTestQty(0); - workPlan.setQualifiedQty(0); - workPlan.setUnqualifiedQty(0); - workPlan.setScrapQty(0); - workPlan.setHourQuota(BigDecimal.valueOf(ChronoUnit.MINUTES.between(workPlan.getStartTime(), workPlan.getEndTime()))); - workPlan.setEquipCode(equipResource.getEquipCode()); - workPlan.setEquipName(equipResource.getEquipName()); - workPlan.setEquipResourceId(equipResource.getId()); - workPlanList.add(workPlan); - - equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(sumCapacity)); - equipResourceService.updateById(equipResource); - isSameFurnace = true; - } - break; - } - //同炉的话就不用走下面的匹配了,直接下一工序 - if(isSameFurnace){ - continue; - } - } - + Boolean isSameFurnace = sameFurnace(order,craft,workPlanList,prevProcessEnd,glassCodeStr,sintMap); + //同炉的话就不用走下面的匹配了,直接下一工序 + if(isSameFurnace){ + continue; } } @@ -493,7 +459,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl personResourceList = personResourceService.list(Wrappers.lambdaQuery() .eq(PersonResourceEntity::getWorkCenterId, craft.getWorkCenterId()) @@ -632,7 +599,16 @@ public class WorkOrderServiceImpl extends BaseServiceImpl memberList = baseMapper.selectTeamMember(workPlan.getMakeTeam(),ability.getCertificateId()); + if(CollectionUtils.isNotEmpty(memberList)){ + workPlan.setTeamMembers(memberList.stream().collect(Collectors.joining(","))); + } + } }else{ prevProcessEnd = prevProcessEnd.plusMinutes(30); totalTime = BigDecimal.valueOf(30); @@ -1176,17 +1152,224 @@ public class WorkOrderServiceImpl extends BaseServiceImpllambdaQuery().eq(SameTroughEntity::getWorkCenterId,yieldOrderCraft.getWorkCenterId()).eq(SameTroughEntity::getCraftId,yieldOrderCraft.getCaId()).eq(SameTroughEntity::getProcessId,yieldOrderCraft.getPpsId())); + public Boolean sameTrough(YieldOrderEntity order,YieldOrderCraftEntity craft,LocalDateTime dateTime,List workPlanList){ + Boolean isSameTrough = false; + SameTroughEntity sameTrough =sameTroughService.getOne(Wrappers.lambdaQuery() + .eq(SameTroughEntity::getWorkCenterId,craft.getWorkCenterId()) + .eq(SameTroughEntity::getCraftId,craft.getCaId()) + .eq(SameTroughEntity::getProcessId,craft.getPpsId())); if(sameTrough != null){ //查询是否有已经排产的计划 - List workPlanList = workPlanService.list(Wrappers.lambdaQuery().eq(WorkPlanEntity::getWorkCenterId,yieldOrderCraft.getWorkCenterId()).eq(WorkPlanEntity::getCaId,yieldOrderCraft.getCaId()).eq(WorkPlanEntity::getPpsId,yieldOrderCraft.getPpsId())); - if(CollectionUtils.isNotEmpty(workPlanList)){ - Map<> + List workPlanOldList = workPlanService.list(Wrappers.lambdaQuery() + .eq(WorkPlanEntity::getWorkCenterId,craft.getWorkCenterId()) + .eq(WorkPlanEntity::getCaId,craft.getCaId()) + .eq(WorkPlanEntity::getPpsId,craft.getPpsId()) + .ge(WorkPlanEntity::getStartTime,dateTime).orderByAsc(WorkPlanEntity::getStartTime)); + if(CollectionUtils.isNotEmpty(workPlanOldList)){ + //总生产量 + BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(order.getYpQty())); + //可能有多个订单符合要求,按照车间订单、时间分组排序 + Map> workPlanMap = workPlanOldList.stream().collect(Collectors.groupingBy(WorkPlanEntity::getWoId)); + for(Map.Entry> entry : workPlanMap.entrySet()){ + List planList = entry.getValue(); + Boolean isEnough = true; + List resourceList = new ArrayList<>(); + for(WorkPlanEntity workPlan : planList){ + if(workPlan.getEquipResourceId() != null){ + EquipResourceEntity equipResource = equipResourceService.getById(workPlan.getEquipResourceId()); + //判断剩余产能是否满足总产能 + if(sumCapacity.compareTo(equipResource.getRestCapacity()) > 0){ + isEnough = false; + resourceList.clear(); + break; + }else{ + resourceList.add(workPlan.getEquipResourceId()); + } + } + } + //如果产能满足,再判断是否满足同槽条件 + if(isEnough){ + WorkOrderEntity workOrder = this.getById(workPlanOldList.get(0).getWoId()); + YieldOrderEntity yieldOrderEntity = yieldOrderService.getById(workOrder.getYoId()); + List orderCraftList = yieldOrderCraftService.list(Wrappers.lambdaQuery() + .eq(YieldOrderCraftEntity::getYoId,yieldOrderEntity.getId()) + .eq(YieldOrderCraftEntity::getPpsId,craft.getPpsId()) + .eq(YieldOrderCraftEntity::getCaId,craft.getCaId()) + .eq(YieldOrderCraftEntity::getWorkCenterId,craft.getWorkCenterId())); + SameTroughVO voNew = sameTroughService.selectSameTroughInfo(craft.getId()); + SameTroughVO voOld = sameTroughService.selectSameTroughInfo(orderCraftList.get(0).getId()); + //根据同槽因素进行比对 + Boolean isSameTrough2 = true; + //键位 + if("1".equals(sameTrough.getKeyBinding()) && voNew.getPartCode().equals(voOld.getPartCode()) && StringUtils.isNotEmpty(voNew.getKeyBinding()) && StringUtils.isNotEmpty(voOld.getKeyBinding()) && !voNew.getKeyBinding().equals(voOld.getKeyBinding())){ + isSameTrough2 = false; + } + //生产厂家 + if("1".equals(sameTrough.getProducter()) && voNew.getPartCode().equals(voOld.getPartCode()) && StringUtils.isNotEmpty(voNew.getProducter()) && StringUtils.isNotEmpty(voOld.getProducter()) && !voNew.getProducter().equals(voOld.getProducter())){ + isSameTrough2 = false; + } + //检验编号 + if("1".equals(sameTrough.getInspectionCode()) && voNew.getPartCode().equals(voOld.getPartCode()) && StringUtils.isNotEmpty(voNew.getInspectionCode()) && StringUtils.isNotEmpty(voOld.getInspectionCode()) && !voNew.getInspectionCode().equals(voOld.getInspectionCode())){ + isSameTrough2 = false; + } + //材料 + if("1".equals(sameTrough.getMaterial()) && StringUtils.isNotEmpty(voNew.getMaterial()) && StringUtils.isNotEmpty(voOld.getMaterial()) && !voNew.getMaterial().equals(voOld.getMaterial())){ + isSameTrough2 = false; + } + //厚度 + if("1".equals(sameTrough.getThickness()) && StringUtils.isNotEmpty(voNew.getThickness()) && StringUtils.isNotEmpty(voOld.getThickness()) && !voNew.getThickness().equals(voOld.getThickness())){ + isSameTrough2 = false; + } + //钝化 + if("1".equals(sameTrough.getPassivation())){ + if(StringUtils.isNotEmpty(voNew.getPlate()) + && StringUtils.isNotEmpty(voOld.getPlate()) + && ((voNew.getPlate().contains("不钝化") + && !voOld.getPlate().contains("不钝化")) + || (voOld.getPlate().contains("不钝化") + && !voNew.getPlate().contains("不钝化")))){ + isSameTrough2 = false; + } + } + //硬度 + if("1".equals(sameTrough.getHardness()) && StringUtils.isNotEmpty(voNew.getHardness()) && StringUtils.isNotEmpty(voOld.getHardness()) && !voNew.getHardness().equals(voOld.getHardness())){ + isSameTrough2 = false; + } + //生产标识 + if("1".equals(sameTrough.getProductIdent())){ + List highIdentList = Arrays.asList(new String[]{"JHT","JI","JIX","YH","CC","SATA"}); + if(StringUtils.isNotEmpty(order.getProductIdent()) && highIdentList.contains(order.getProductIdent())){ + isSameTrough2 = false; + } + if(!(voNew.getPartCode().equals(voOld.getPartCode()) + && StringUtils.isNotEmpty(voNew.getProductIdent()) + && StringUtils.isNotEmpty(voOld.getProductIdent()) + && voNew.getProductIdent().equals(voOld.getProductIdent()))){ + isSameTrough2 = false; + } + + } + if(isSameTrough2){ + for(Long resourceId : resourceList){ + EquipResourceEntity equipResource = equipResourceService.getById(resourceId); + //生成车间订单 + WorkPlanEntity workPlan = new WorkPlanEntity(); + workPlan.setStartTime(equipResource.getStartTime()); + if ("0".equals(equipResource.getEquipType())) { + workPlan.setEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().longValue())); + } else { + workPlan.setEndTime(equipResource.getEndTime()); + } + workPlan.setWorkQty(order.getYpQty()); + workPlan.setCaId(craft.getCaId()); + workPlan.setPpsId(craft.getPpsId()); + workPlan.setMakeTeam(equipResource.getTeamId()); + workPlan.setWorkCenterId(craft.getWorkCenterId()); + workPlan.setOrders(craft.getProcessNo()); + workPlan.setWoId(order.getId()); + workPlan.setOem("0"); + workPlan.setTestQty(0); + workPlan.setQualifiedQty(0); + workPlan.setUnqualifiedQty(0); + workPlan.setScrapQty(0); + workPlan.setHourQuota(BigDecimal.valueOf(ChronoUnit.MINUTES.between(workPlan.getStartTime(), workPlan.getEndTime()))); + workPlan.setEquipCode(equipResource.getEquipCode()); + workPlan.setEquipName(equipResource.getEquipName()); + workPlan.setEquipResourceId(equipResource.getId()); + workPlanList.add(workPlan); + + equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(sumCapacity)); + equipResourceService.updateById(equipResource); + isSameTrough = true; + } + + } + + } + } + } + } + return isSameTrough; + } + public Boolean sameFurnace(YieldOrderEntity order,YieldOrderCraftEntity craft,List workPlanList,LocalDateTime prevProcessEnd,String glassCodeStr,Map> sintMap){ + Boolean isSameFurnace = false; + if(order.getYieldType() == 2 || order.getYieldType() == 3){//烧结订单 + //获取当前工序的所有温度曲线 + List sintList = sintMap.get(craft.getPpsId()); + List> sintMaterialList = new ArrayList<>(); + sintList.stream().map(SintTempCurveEntity::getGlassCode).collect(Collectors.toList()).forEach(item -> sintMaterialList.add(Arrays.asList(item.split(",")))); + + //根据零件号获取子件信息 + PartEntity part = new PartEntity(); + part.setPartCode(order.getPartCode()); + List childPartList = partService.selectChildPart(part); + if(CollectionUtils.isNotEmpty(childPartList)){ + //获取子件的所有玻璃粉牌号 + List materialList = childPartList.stream().filter(item -> StringUtils.isNotEmpty(item.getMaterial())).map(PartEntity::getMaterial).collect(Collectors.toList()); + List maxMatchList = null; + int maxCount = 0; + for(List glassCodeList : sintMaterialList){ + int currentCount = (int) glassCodeList.stream().filter(materialList::contains).count(); + if (currentCount > maxCount) { + maxCount = currentCount; + maxMatchList = glassCodeList; + } + } + if(maxMatchList != null){ + glassCodeStr = maxMatchList.stream().collect(Collectors.joining(",")); + log.info("订单:"+order.getYoCode()+",温度曲线是:"+glassCodeStr); + } + } + //包含说明之前有过这个温度曲线的订单 + //根据当前时间查询包含玻璃粉牌号的设备资源 + List equipResourceList = equipResourceService.list(Wrappers.lambdaQuery() + .eq(EquipResourceEntity::getWorkCenterId,craft.getWorkCenterId()) + .eq(EquipResourceEntity::getCraftId,craft.getCaId()) + .ge(EquipResourceEntity::getStartTime,prevProcessEnd) + .eq(EquipResourceEntity::getGlassCode,glassCodeStr)); + if(CollectionUtils.isNotEmpty(equipResourceList)){ + //计算生产所需产能,需将m2换算成dm2 + BigDecimal sumCapacity = order.getYpArea().multiply(BigDecimal.valueOf(order.getYpQty())); + + for(EquipResourceEntity equipResource : equipResourceList){ + if(equipResource.getRestCapacity().compareTo(sumCapacity) > 0){ + //生成车间订单 + WorkPlanEntity workPlan = new WorkPlanEntity(); + workPlan.setStartTime(equipResource.getStartTime()); + if ("0".equals(equipResource.getEquipType())) { + workPlan.setEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().longValue())); + } else { + workPlan.setEndTime(equipResource.getEndTime()); + } + workPlan.setWorkQty(order.getYpQty()); + workPlan.setCaId(craft.getCaId()); + workPlan.setPpsId(craft.getPpsId()); + workPlan.setMakeTeam(equipResource.getTeamId()); + workPlan.setWorkCenterId(craft.getWorkCenterId()); + workPlan.setOrders(craft.getProcessNo()); + workPlan.setWoId(order.getId()); + workPlan.setOem("0"); + workPlan.setTestQty(0); + workPlan.setQualifiedQty(0); + workPlan.setUnqualifiedQty(0); + workPlan.setScrapQty(0); + workPlan.setHourQuota(BigDecimal.valueOf(ChronoUnit.MINUTES.between(workPlan.getStartTime(), workPlan.getEndTime()))); + workPlan.setEquipCode(equipResource.getEquipCode()); + workPlan.setEquipName(equipResource.getEquipName()); + workPlan.setEquipResourceId(equipResource.getId()); + workPlanList.add(workPlan); + + equipResource.setRestCapacity(equipResource.getRestCapacity().subtract(sumCapacity)); + equipResourceService.updateById(equipResource); + isSameFurnace = true; + } + break; + } + } - SameTroughVO vo = sameTroughService.selectSameTroughInfo(yieldOrderCraft.getId()); } - }*/ + return isSameFurnace; + } }