|
@@ -2,7 +2,7 @@ package com.rongwei.bscommon.sys.service.impl;
|
|
|
|
|
|
import com.rongwei.bscommon.sys.dao.ApsProcessOperationProcessEquDao;
|
|
|
import com.rongwei.bscommon.sys.service.GanttService;
|
|
|
-import com.rongwei.bsentity.domain.ApsProcessOperationProcessEquDo;
|
|
|
+import com.rongwei.bsentity.vo.GanttVos;
|
|
|
import com.rongwei.bsentity.vo.ScheduleGanttProcessVo;
|
|
|
import com.rongwei.bsentity.vo.ScheduleGanttVo;
|
|
|
import com.rongwei.rwcommon.base.R;
|
|
@@ -12,6 +12,7 @@ import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -27,7 +28,19 @@ public class GanttServiceImpl implements GanttService {
|
|
|
|
|
|
@Autowired
|
|
|
private ApsProcessOperationProcessEquDao apsProcessOperationProcessEquDao;
|
|
|
+ public static final String GANTT_ITEM_NAME ="%s %d卷 %tF";
|
|
|
+ public static final String GANTT_ITEM_NAME_PREFIX ="%s %s";
|
|
|
+ public static final String GANTT_DESC_PREFIX=" 计划时间:%s-%s \n" +
|
|
|
+ "实际时间:%s-%s \n" +
|
|
|
+ "设备:%s/%s \n" ;
|
|
|
+ public static final String GANTT_DESC="订单产品:%s \n" +
|
|
|
+ "交货期:%tF\n" +
|
|
|
+ "工序:%s\n" +
|
|
|
+ "计划加工卷数:%d卷\n" +
|
|
|
+ "完成情况:已开工 %d/已报工 %d/已检验 %d/未完工 %d\n" +
|
|
|
+ "作业状态:%s" ;
|
|
|
|
|
|
+ public static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
/**
|
|
|
* 根据条件获取gantt
|
|
|
*
|
|
@@ -41,19 +54,21 @@ public class GanttServiceImpl implements GanttService {
|
|
|
public R getListByCondition(Date startTime, Date endTime, String factoryId, String workshopId) {
|
|
|
List<String> workShopIdList = StringUtils.isNotBlank(workshopId) ? Arrays.asList(workshopId.split(",")) : new ArrayList<>();
|
|
|
// 获取 工序作业信息
|
|
|
- List<ApsProcessOperationProcessEquDo> apsProcessOperationProcessEquDos = apsProcessOperationProcessEquDao.getGanttDataList(startTime, endTime, factoryId, workShopIdList);
|
|
|
+ List<GanttVos> apsProcessOperationProcessEquDos = apsProcessOperationProcessEquDao.getGanttDataList(startTime, endTime, factoryId, workShopIdList);
|
|
|
List<ScheduleGanttVo> resultVo = new ArrayList<>();
|
|
|
if (apsProcessOperationProcessEquDos.isEmpty()) {
|
|
|
return R.ok(resultVo);
|
|
|
}
|
|
|
// 对数据按照加工车间分组
|
|
|
- LinkedHashMap<String, List<ApsProcessOperationProcessEquDo>> dataMap = apsProcessOperationProcessEquDos.stream()
|
|
|
- .collect(Collectors.groupingBy(ApsProcessOperationProcessEquDo::getProcessworkshopid,
|
|
|
+ LinkedHashMap<String, List<GanttVos>> dataMap = apsProcessOperationProcessEquDos.stream()
|
|
|
+ .collect(Collectors.groupingBy(GanttVos::getProcessworkshopid,
|
|
|
LinkedHashMap::new, Collectors.toList()));
|
|
|
dataMap.forEach((k, v) -> {
|
|
|
ScheduleGanttVo vo = new ScheduleGanttVo();
|
|
|
+
|
|
|
List<ScheduleGanttProcessVo> processVos = new ArrayList<>();
|
|
|
- LinkedHashMap<String, List<ApsProcessOperationProcessEquDo>> processMap = v.stream().collect(Collectors.groupingBy(info ->
|
|
|
+ // 对数据按照时间进行+设备进行分组
|
|
|
+ LinkedHashMap<String, List<GanttVos>> processMap = v.stream().collect(Collectors.groupingBy(info ->
|
|
|
info.getPlanstartdate().toString() + info.getPlanenddate().toString() + info.getProcessdeviceid(),
|
|
|
LinkedHashMap::new, Collectors.toList()));
|
|
|
processMap.forEach((date, processs) -> {
|
|
@@ -62,15 +77,42 @@ public class GanttServiceImpl implements GanttService {
|
|
|
processVo.setProcessdeviceid(processs.get(0).getProcessdeviceid());
|
|
|
processVo.setPlanstartdate(processs.get(0).getPlanstartdate());
|
|
|
processVo.setPlanenddate(processs.get(0).getPlanenddate());
|
|
|
- processVo.setProcessids(processs.stream().map(ApsProcessOperationProcessEquDo::getProcessid).distinct().collect(Collectors.joining(",")));
|
|
|
- processVo.setProcessdetailids(processs.stream().map(ApsProcessOperationProcessEquDo::getId).collect(Collectors.joining(",")));
|
|
|
- processVo.setItemname("");
|
|
|
- processVo.setItemdesc("");
|
|
|
+ processVo.setProcessids(processs.stream().map(GanttVos::getProcessid).distinct().collect(Collectors.joining(",")));
|
|
|
+ processVo.setProcessdetailids(processs.stream().map(GanttVos::getId).collect(Collectors.joining(",")));
|
|
|
+ // 按照工序作业明细ID 进行分组
|
|
|
+ LinkedHashMap<String, List<GanttVos>> collect = processs.stream().collect(Collectors.groupingBy(GanttVos::getId, LinkedHashMap::new, Collectors.toList()));
|
|
|
+ String itemName = collect.values().stream().map(info -> {
|
|
|
+ String prefix = info.stream().map(data -> String.format(GANTT_ITEM_NAME_PREFIX, data.getCustomerabbreviation(), data.getProductname()))
|
|
|
+ .collect(Collectors.joining(","));
|
|
|
+ return String.format(GANTT_ITEM_NAME, prefix, info.get(0).getPlanprocessrall(), info.get(0).getDeliverydate());
|
|
|
+ }).collect(Collectors.joining("/n"));
|
|
|
+ String itemPrefix=String.format(GANTT_DESC_PREFIX,
|
|
|
+ dateFormat(processs.get(0).getPlanstartdate()),
|
|
|
+ dateFormat(processs.get(0).getPlanenddate()),
|
|
|
+ dateFormat(processs.get(0).getActualstartdate()),
|
|
|
+ dateFormat(processs.get(0).getActualfinishdate()),
|
|
|
+
|
|
|
+ processs.get(0).getProcessworkshop(),processs.get(0).getProcessdevice());
|
|
|
+ String itemDesc= processs.stream().map(info->{
|
|
|
+ return String.format(GANTT_DESC, info.getProductname(),info.getDeliverydate(),
|
|
|
+ info.getProcessname(),info.getPlanprocessrall(),info.getStartingroll(),info.getReportroll(),
|
|
|
+ info.getCheckoutroll(),info.getUnfinishroll(),info.getWorkstatus() );
|
|
|
+ }).collect(Collectors.joining("/n"));
|
|
|
+ processVo.setItemname(itemName);
|
|
|
+ processVo.setItemdesc(itemPrefix+itemDesc);
|
|
|
processVos.add(processVo);
|
|
|
});
|
|
|
vo.setProcessList(processVos);
|
|
|
vo.setProcessworkshop(v.get(0).getProcessworkshop());
|
|
|
+ resultVo.add(vo);
|
|
|
});
|
|
|
- return R.ok();
|
|
|
+ return R.ok(resultVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ public String dateFormat(Date date){
|
|
|
+ if(date==null){
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ return dateFormat.format(date);
|
|
|
}
|
|
|
}
|