Merge branch 'master' into develop-QA

develop-QA
Tom Li 12 hours ago
commit 1c79212708
  1. 2
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/WorkOrderController.java
  2. 2
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/dto/WorkOrderDto.java
  3. 22
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/entity/PersonResourceEntity.java
  4. 1
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml
  5. 2
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/IWorkOrderService.java
  6. 48
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/PersonResourceServiceImpl.java
  7. 88
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java

@ -181,7 +181,7 @@ public class WorkOrderController extends BladeController {
@PostMapping("/schedulingBoard")
@ApiOperationSupport(order = 6)
@Operation(summary = "排产看板", description = "传入WorkOrderDto")
public R<Map<String,List<WorkOrderDto>>> schedulingBoard(@RequestBody WorkOrderDto workOrderDto) {
public R<List<WorkOrderDto>> schedulingBoard(@RequestBody WorkOrderDto workOrderDto) {
return R.data(workOrderService.schedulingBoard(workOrderDto));
}

@ -46,4 +46,6 @@ public class WorkOrderDto {
private List<String> planStatusList;
private List<WorkOrderDto> workOrderList;
}

@ -104,7 +104,29 @@ public class PersonResourceEntity extends BaseEntity {
private String dateTime;
/**
* 工序id
*/
@Schema(description = "工序id")
private Long processId;
/**
* 工序名称
*/
@Schema(description = "工序名称")
private String processName;
/**
* 作业中心Id
*/
@Schema(description = "作业中心Id")
private Long workCenterId;
/**
* 作业中心名称
*/
@Schema(description = "作业中心名称")
private String workCenterName;

@ -117,6 +117,7 @@
LEFT JOIN MES_YIELD_ORDER g on g.id = a.yo_id
<where>
a.is_deleted = 0 and b.is_deleted = 0 and a.status in (1,2,3,5)
and b.start_time is not null and b.end_time is not null
<if test="startTime !=null and startTime != ''">
and to_char(b.start_time,'YYYY-MM-DD') <![CDATA[ >= ]]> #{startTime}
</if>

@ -71,7 +71,7 @@ public interface IWorkOrderService extends BaseService<WorkOrderEntity> {
**/
void scheduling();
Map<String, List<WorkOrderDto>> schedulingBoard(WorkOrderDto workOrder);
List<WorkOrderDto> schedulingBoard(WorkOrderDto workOrder);
/**
* 向旧mes发送排产结果数据

@ -33,6 +33,7 @@ import lombok.AllArgsConstructor;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.scheduling.scheduling.entity.EquipResourceEntity;
import org.springblade.scheduling.scheduling.entity.PersonAbilityEntity;
import org.springblade.scheduling.scheduling.entity.PersonResourceEntity;
import org.springblade.scheduling.scheduling.excel.PersonResourceExcel;
@ -74,28 +75,20 @@ public class PersonResourceServiceImpl extends BaseServiceImpl<PersonResourceMap
public void initPersonResource(){
//获取包括今天在内未来3天
Date date = new Date();
String today = DateFormatUtils.format(date,"yyyy-MM-dd");
String tomorrow = DateFormatUtils.format(DateUtils.addDays(date,1),"yyyy-MM-dd");
String dayAfterTomorrow = DateFormatUtils.format(DateUtils.addDays(date,2),"yyyy-MM-dd");
List<PersonResourceEntity> list1 = this.list(Wrappers.<PersonResourceEntity>lambdaQuery().eq(PersonResourceEntity::getDateTime,today));
List<PersonResourceEntity> list2 = this.list(Wrappers.<PersonResourceEntity>lambdaQuery().eq(PersonResourceEntity::getDateTime,tomorrow));
List<PersonResourceEntity> list3 = this.list(Wrappers.<PersonResourceEntity>lambdaQuery().eq(PersonResourceEntity::getDateTime,dayAfterTomorrow));
if(CollectionUtils.isEmpty(list1)){
generateData(today);
}
if(CollectionUtils.isEmpty(list2)){
generateData(tomorrow);
}
if(CollectionUtils.isEmpty(list3)){
generateData(dayAfterTomorrow);
for(int i=0;i<7;i++){
String today = DateFormatUtils.format(DateUtils.addDays(date,i),"yyyy-MM-dd");
List<PersonResourceEntity> list = this.list(Wrappers.<PersonResourceEntity>lambdaQuery().eq(PersonResourceEntity::getDateTime,today));
if(CollectionUtils.isEmpty(list)){
generateData(today);
}
}
}
public void generateData(String day){
//获取设备能力列表
List<String> workCenterList = Arrays.asList("86","85");
List<PersonAbilityEntity> personAbilityList = personAbilityService.list(Wrappers.<PersonAbilityEntity>lambdaQuery().in(PersonAbilityEntity::getWorkCenterId,workCenterList));
// List<String> workCenterList = Arrays.asList("86","85");
List<PersonAbilityEntity> personAbilityList = personAbilityService.list();
if(CollectionUtils.isNotEmpty(personAbilityList)){
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");
@ -105,11 +98,12 @@ public class PersonResourceServiceImpl extends BaseServiceImpl<PersonResourceMap
for(PersonAbilityEntity personAbility : personAbilityList){
//获取
List<Map<String,Object>> teamIdList = baseMapper.selectTeamByWorkCenter(personAbility.getWorkCenterId());
List<PersonResourceEntity> resourceList = new ArrayList<>();
//普通设备每30分钟间隔生成数据
int interval = 30;
/*int interval = 30;
int totalMinutes = 24 * 60; // 一天总分钟数
int totalCount = totalMinutes / interval; // 生成条数
List<PersonResourceEntity> resourceList = new ArrayList<>();
for (int i = 0; i < totalCount; i++) {
LocalDateTime startTime = startOfDay.plusMinutes(i * interval);
LocalDateTime endTime = startTime.plusMinutes(30);
@ -136,6 +130,24 @@ public class PersonResourceServiceImpl extends BaseServiceImpl<PersonResourceMap
personResource.setTeamId(teamId);
resourceList.add(personResource);
}*/
for(Map<String,Object> map : teamIdList){
LocalDateTime teamStartTime = LocalDateTime.parse(day + ' '+ map.get("startTime").toString(), dateTimeFormatter);
LocalDateTime teamEndTime = LocalDateTime.parse(day + ' '+ map.get("endTime").toString(), dateTimeFormatter);
PersonResourceEntity personResource = new PersonResourceEntity();
personResource.setDateTime(day);
personResource.setCraftId(personAbility.getCraftId());
personResource.setCraftName(personAbility.getCraftName());
personResource.setPeriod(map.get("startTime").toString() + "-" + map.get("endTime").toString());
personResource.setStartTime(teamStartTime);
personResource.setEndTime(teamEndTime);
personResource.setIsUsed("0");
personResource.setProcessId(personAbility.getProcessId());
personResource.setProcessName(personAbility.getProcessName());
personResource.setTeamId(Long.parseLong(map.get("teamId").toString()));
personResource.setWorkCenterId(personAbility.getWorkCenterId());
personResource.setWorkCenterName(personAbility.getWorkCenterName());
resourceList.add(personResource);
}
if(CollectionUtils.isNotEmpty(resourceList)){
this.saveBatch(resourceList);

@ -119,12 +119,12 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
public void scheduling() {
//查询待排产订单,状态是3
List<YieldOrderEntity> list =
yieldOrderService.list(Wrappers.<YieldOrderEntity>lambdaQuery().in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCategory(),YieldOrderEnum.STATUS_PROCESS_ERROR.getCategory()).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate));
yieldOrderService.list(Wrappers.<YieldOrderEntity>lambdaQuery().in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCategory(),YieldOrderEnum.STATUS_PROCESS_ERROR.getCategory()).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate).isNotNull(YieldOrderEntity::getDemandDate));
log.info("待排产订单数量为:" + list.size());
if (CollectionUtils.isNotEmpty(list)) {
//校验已排产订单
checkSchedulingOrder(list);
list = yieldOrderService.list(Wrappers.<YieldOrderEntity>lambdaQuery().eq(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCategory()).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate));
list = yieldOrderService.list(Wrappers.<YieldOrderEntity>lambdaQuery().in(BaseEntity::getStatus, YieldOrderEnum.STATUS_APS.getCategory(),YieldOrderEnum.STATUS_PROCESS_ERROR.getCategory()).isNotNull(YieldOrderEntity::getWorkCenterId).isNotNull(YieldOrderEntity::getReleaseDate).isNotNull(YieldOrderEntity::getDemandDate));
//初始化人员能力
List<PersonAbilityEntity> personAbilityEntityList = personAbilityService.list(Wrappers.<PersonAbilityEntity>lambdaQuery().isNotNull(PersonAbilityEntity::getWorkCenterId).isNotNull(PersonAbilityEntity::getProcessId).isNotNull(PersonAbilityEntity::getCraftId));
Map<String, PersonAbilityEntity> personAbilityMap = new HashMap<>();
@ -182,12 +182,13 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
@Override
public Map<String, List<WorkOrderDto>> schedulingBoard(WorkOrderDto workOrder) {
public List<WorkOrderDto> schedulingBoard(WorkOrderDto workOrder) {
List<WorkOrderDto> list = baseMapper.selectWorkOrderList(workOrder);
Map<String, List<WorkOrderDto>> resultList = new HashMap<>();
//Map<String, List<WorkOrderDto>> resultList = new HashMap<>();
Map<String, List<WorkOrderDto>> woCodeGroup = list.stream().collect(Collectors.groupingBy(WorkOrderDto::getWoCode));
List<WorkOrderDto> resultList = new ArrayList<>();
for (Map.Entry<String, List<WorkOrderDto>> entry : woCodeGroup.entrySet()) {
WorkOrderDto workOrderDto = new WorkOrderDto();
String woCode = entry.getKey();
List<WorkOrderDto> woList = entry.getValue();
@ -232,12 +233,13 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
mergedDto.setPlanStartTime(minStartTime);
mergedDto.setPlanEndTime(maxEndTime);
mergedProcessList.add(mergedDto);
}
resultList.put(woCode, mergedProcessList);
mergedProcessList.sort(Comparator.comparing(WorkOrderDto::getPlanStartTime));
workOrderDto.setWoCode(woCode);
workOrderDto.setWorkOrderList(mergedProcessList);
resultList.add(workOrderDto);
//resultList.put(woCode, mergedProcessList);
}
return resultList;
@ -400,8 +402,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
String glassCodeStr = null;
//烧结
if(sintMap.containsKey(craft.getPpsId())){
if("2".equals(order.getYieldType())){//烧结订单
if(order.getYieldType() == 2 || order.getYieldType() == 3){//烧结订单
//获取当前工序的所有温度曲线
List<SintTempCurveEntity> sintList = sintMap.get(craft.getPpsId());
List<List<String>> sintMaterialList = new ArrayList<>();
@ -430,12 +431,43 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
}
//包含说明之前有过这个温度曲线的订单
if(sameFurnaceMap.containsKey(glassCodeStr)){
List<EquipResourceEntity> equipResourceList = sameFurnaceMap.get(glassCodeStr);
//计算生产所需产能,需将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);
}
}
}
}else if("3".equals(order.getYieldType())){//玻璃饼
}
}
@ -498,7 +530,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
//生成车间订单
WorkPlanEntity workPlan = new WorkPlanEntity();
workPlan.setStartTime(equipResource.getStartTime());
if (entry.getKey() == 1) {
if ("0".equals(equipResource.getEquipType())) {
workPlan.setEndTime(equipResource.getStartTime().plusMinutes(equipResource.getStandardTime().longValue()));
} else {
workPlan.setEndTime(equipResource.getEndTime());
@ -581,6 +613,21 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
PersonAbilityEntity ability = personAbilityMap.get(craft.getWorkCenterId() + "-" + craft.getPpsId() + "-" + craft.getCaId());
//镀后检验和镀后接收先按半小时计算
if (ability != null) {
/* if(ability.getWorkCenterId() != order.getWorkCenterId()){
prevProcessEnd = prevProcessEnd.plusMinutes(30);
if ("0".equals(ability.getType())) {
totalTime = totalTime.add(BigDecimal.valueOf(order.getYpQty()).multiply(ability.getStandardTime()).add(ability.getPrepareTime()));
} else {
totalTime = totalTime.add(ability.getStandardTime()).add(ability.getPrepareTime());
}
}else{
if ("0".equals(ability.getType())) {
totalTime = totalTime.add(BigDecimal.valueOf(order.getYpQty()).multiply(ability.getStandardTime()).add(ability.getPrepareTime()));
} else {
totalTime = totalTime.add(ability.getStandardTime()).add(ability.getPrepareTime());
}
}*/
if ("镀后检验".equals(ability.getProcessName()) || "镀后接收".equals(ability.getProcessName())) {
totalTime = BigDecimal.valueOf(30);
workPlan.setStartTime(prevProcessEnd.plusMinutes(30));
@ -599,8 +646,15 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
totalTime = totalTime.add(ability.getStandardTime()).add(ability.getPrepareTime());
}
}
List<PersonResourceEntity> personResourceList = personResourceService.list(Wrappers.<PersonResourceEntity>lambdaQuery()
.eq(PersonResourceEntity::getWorkCenterId, craft.getWorkCenterId())
.eq(PersonResourceEntity::getProcessId, craft.getPpsId())
.eq(PersonResourceEntity::getCraftId, craft.getCaId())
.le(PersonResourceEntity::getStartTime, prevProcessEnd)
.ge(PersonResourceEntity::getEndTime, prevProcessEnd));
if(CollectionUtils.isNotEmpty(personResourceList)){
workPlan.setMakeTeam(personResourceList.get(0).getTeamId());
}
//通过加锁的方式保证每次查询到的人力资源都是最新的
/*Long craftId = craft.getCaId();
Lock craftLock = getCraftLock(craftId);

Loading…
Cancel
Save