|
@@ -1,7 +1,6 @@
|
|
|
package com.rongwei.bscommon.sys.service.impl;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
-import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.date.StopWatch;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.rongwei.bscommon.sys.dao.ApsProcessOperationProcessEquDao;
|
|
@@ -9,18 +8,15 @@ import com.rongwei.bscommon.sys.dao.ApsReportRecordsDao;
|
|
|
import com.rongwei.bscommon.sys.service.ApsProcessOperationBackupService;
|
|
|
import com.rongwei.bscommon.sys.service.ApsProcessOperationService;
|
|
|
import com.rongwei.bscommon.sys.service.GanttService;
|
|
|
-import com.rongwei.bsentity.domain.ApsProcessOperationBackupDo;
|
|
|
import com.rongwei.bsentity.domain.ApsProcessOperationDo;
|
|
|
import com.rongwei.bsentity.vo.GanttVos;
|
|
|
import com.rongwei.bsentity.vo.ProcessOutputAndInputNumber;
|
|
|
import com.rongwei.bsentity.vo.ScheduleGanttVo;
|
|
|
import com.rongwei.commonservice.service.RedisService;
|
|
|
import com.rongwei.rwadmincommon.system.vo.SysUserVo;
|
|
|
-import com.rongwei.rwcommon.base.BaseDo;
|
|
|
import com.rongwei.rwcommon.base.R;
|
|
|
import com.rongwei.rwcommon.base.exception.CustomException;
|
|
|
import com.rongwei.safecommon.utils.CXCommonUtils;
|
|
|
-import com.rongwei.safecommon.utils.SaveConstans;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.redisson.api.RLock;
|
|
|
import org.redisson.api.RedissonClient;
|
|
@@ -65,14 +61,26 @@ public class GanttServiceImpl implements GanttService {
|
|
|
public static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
public static final String DEFAULT_TYPE = "project";
|
|
|
public static final String DEFAULT_RENDER = "split";
|
|
|
- public static final String SCHEDULING_STR = "%s-正在排程 %s";
|
|
|
- public static final String SCHEDULING_TO_BE_PUBLISHED_STR = "%s-排程结束待发布";
|
|
|
+ public static final String SCHEDULING_STR = "%s-%s %s";
|
|
|
public static final String DEFAULT_SPLIT = "-;-";
|
|
|
- public static final Map<String,String> GANTT_PROCESS_STATUS_MAP=new HashMap<String,String>(){{
|
|
|
- put(JOBSTATUS_TO_BE_START,TO_BE_STARTED );
|
|
|
- put(JOBSTATUS_TO_BE_STARTING,PROCESSING);
|
|
|
- put(JOBSTATUS_TO_BE_END,COMPLETED);
|
|
|
+ public static final Map<String, String> GANTT_PROCESS_STATUS_MAP = new HashMap<String, String>() {{
|
|
|
+ put(JOBSTATUS_TO_BE_START, TO_BE_STARTED);
|
|
|
+ put(JOBSTATUS_TO_BE_STARTING, PROCESSING);
|
|
|
+ put(JOBSTATUS_TO_BE_END, COMPLETED);
|
|
|
}};
|
|
|
+ public static final Map<String, Integer> NUM_MAP = new HashMap<String, Integer>() {{
|
|
|
+ put("一", 1);
|
|
|
+ put("二", 2);
|
|
|
+ put("三", 3);
|
|
|
+ put("四", 4);
|
|
|
+ put("五", 5);
|
|
|
+ put("六", 6);
|
|
|
+ put("七", 7);
|
|
|
+ put("八", 8);
|
|
|
+ put("九", 9);
|
|
|
+ put("十", 10);
|
|
|
+ }};
|
|
|
+
|
|
|
|
|
|
private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
|
|
|
@Autowired
|
|
@@ -102,7 +110,7 @@ public class GanttServiceImpl implements GanttService {
|
|
|
public R getListByCondition(Date startDate, Date endDate, String factoryId,
|
|
|
List<String> workShopIdList, List<String> orderNoList,
|
|
|
List<String> productionLineId, List<String> equId,
|
|
|
- String productionLineName, String equName,String blankNumber) {
|
|
|
+ String productionLineName, String equName, String blankNumber) {
|
|
|
if (endDate == null && startDate != null) {
|
|
|
List<Date> searchDateList = getSearchDate(startDate);
|
|
|
startDate = searchDateList.get(0);
|
|
@@ -112,7 +120,7 @@ public class GanttServiceImpl implements GanttService {
|
|
|
stopWatch.start();
|
|
|
List<GanttVos> apsProcessOperationProcessEquDos = apsProcessOperationProcessEquDao.getGanttDataList(
|
|
|
startDate, endDate, factoryId, workShopIdList, orderNoList,
|
|
|
- null, productionLineId, equId, null, productionLineName, equName,blankNumber);
|
|
|
+ null, productionLineId, equId, null, productionLineName, equName, blankNumber);
|
|
|
stopWatch.stop();
|
|
|
log.error("甘特图查询用时:{}", stopWatch.getTotalTimeSeconds());
|
|
|
StopWatch stopWatch1 = new StopWatch();
|
|
@@ -147,34 +155,29 @@ public class GanttServiceImpl implements GanttService {
|
|
|
log.debug("判断工厂:{}是否正在排程", factoryId);
|
|
|
RLock rLock = redissonClient.getLock(factoryId);
|
|
|
log.debug("是否正在排程:{}", rLock.isLocked());
|
|
|
+ SysUserVo sysUserVo;
|
|
|
+ try {
|
|
|
+ sysUserVo = (SysUserVo) redisService.getRedisCatchObj("apsUser-" + factoryId);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("获取当前排程用户失败,原因:{}", e.toString());
|
|
|
+ return R.error("获取排程用户失败,请联系管理员");
|
|
|
+ }
|
|
|
+ if (sysUserVo == null) {
|
|
|
+ log.error("无法获取当前排程用户信息");
|
|
|
+ return R.ok("");
|
|
|
+ }
|
|
|
+ String returnMsg="";
|
|
|
//正在排程直接返回
|
|
|
if (rLock.isLocked()) {
|
|
|
- try {
|
|
|
- SysUserVo sysUserVo = (SysUserVo) redisService.getRedisCatchObj("apsUser-" + factoryId);
|
|
|
- String returnMsg = String.format(SCHEDULING_STR, sysUserVo.getName(),"");
|
|
|
- if(StringUtils.isNotBlank(sysUserVo.getRoption())){
|
|
|
- returnMsg = String.format(SCHEDULING_STR, sysUserVo.getName(),"排程异常:"+sysUserVo.getRoption());
|
|
|
- }
|
|
|
- return R.ok(returnMsg);
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("获取当前排程用户失败,原因:{}", e.toString());
|
|
|
- return R.error("获取排程用户失败,请联系管理员");
|
|
|
+ returnMsg = String.format(SCHEDULING_STR, sysUserVo.getName(), "正在排程", "");
|
|
|
+ } else {
|
|
|
+ if (StringUtils.isNotBlank(sysUserVo.getRoption())) {
|
|
|
+ returnMsg = String.format(SCHEDULING_STR, sysUserVo.getName(), ":" + sysUserVo.getRoption());
|
|
|
+ } else {
|
|
|
+ returnMsg = String.format(SCHEDULING_STR, sysUserVo.getName(), "排程结束", "");
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
- // 判断是否存在备份信息
|
|
|
- List<ApsProcessOperationBackupDo> backUpInfo = apsProcessOperationBackupService.list(new LambdaQueryWrapper<ApsProcessOperationBackupDo>()
|
|
|
- .eq(BaseDo::getDeleted, 0).eq(ApsProcessOperationBackupDo::getTenantid, factoryId));
|
|
|
- if (backUpInfo.isEmpty()) {
|
|
|
- log.debug("不存在排程备份信息");
|
|
|
- // 不存在备份信息 直接返回
|
|
|
- return R.ok("");
|
|
|
- }
|
|
|
- ApsProcessOperationBackupDo backupDo = backUpInfo.stream()
|
|
|
- .filter(info -> StringUtils.isNotBlank(info.getBackupuser()))
|
|
|
- .findFirst()
|
|
|
- .orElse(null);
|
|
|
- return R.ok(String.format(SCHEDULING_TO_BE_PUBLISHED_STR, backupDo == null ? "" : backupDo.getBackupuser()));
|
|
|
+ return R.ok(returnMsg);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -195,27 +198,43 @@ public class GanttServiceImpl implements GanttService {
|
|
|
|
|
|
// 对数据按照加工车间分组
|
|
|
LinkedHashMap<String, List<GanttVos>> dataMap = workshopAndDeviceByFactoryId.stream()
|
|
|
- .collect(Collectors.groupingBy(GanttVos::getProcessworkshopid,
|
|
|
+ .collect(Collectors.groupingBy(GanttVos::getProcessworkshop,
|
|
|
LinkedHashMap::new, Collectors.toList()));
|
|
|
+ // 对于加工车间重新排序
|
|
|
+ List<String> linkedHashMapKey = dataMap.keySet().stream().sorted((o1, o2) -> {
|
|
|
+ try {
|
|
|
+ String d1 = NUM_MAP.entrySet().stream()
|
|
|
+ .reduce(o1, (s, entry) -> s.replaceAll(entry.getKey(), String.valueOf(entry.getValue())), String::concat);
|
|
|
+ String d2 = NUM_MAP.entrySet().stream()
|
|
|
+ .reduce(o2, (s, entry) -> s.replaceAll(entry.getKey(), String.valueOf(entry.getValue())), String::concat);
|
|
|
+ return d1.compareTo(d2);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
/**
|
|
|
* 工序的对象
|
|
|
*/
|
|
|
ScheduleGanttVo workShopVo;
|
|
|
// 设备的对象
|
|
|
ScheduleGanttVo deviceVo;
|
|
|
- for (Map.Entry<String, List<GanttVos>> workShopEntry : dataMap.entrySet()) {
|
|
|
+ List<GanttVos> ganttVoList;
|
|
|
+ for (String mapKey : linkedHashMapKey) {
|
|
|
+ ganttVoList = dataMap.get(mapKey);
|
|
|
workShopVo = new ScheduleGanttVo();
|
|
|
- workShopVo.setId(workShopEntry.getValue().get(0).getProcessworkshopid());
|
|
|
- workShopVo.setText(workShopEntry.getValue().get(0).getProcessworkshop());
|
|
|
+ workShopVo.setId(ganttVoList.get(0).getProcessworkshopid());
|
|
|
+ workShopVo.setText(ganttVoList.get(0).getProcessworkshop());
|
|
|
workShopVo.setOpen(true);
|
|
|
workShopVo.setType(DEFAULT_TYPE);
|
|
|
- workShopVo.setStart_date(workShopEntry.getValue().get(0).getPlanstartdate());
|
|
|
+ workShopVo.setStart_date(ganttVoList.get(0).getPlanstartdate());
|
|
|
resultVo.add(workShopVo);
|
|
|
// 对数据按照设备进行分组
|
|
|
- LinkedHashMap<String, List<GanttVos>> processMap = workShopEntry.getValue().stream().collect(Collectors.groupingBy(GanttVos::getProcessdeviceid,
|
|
|
+ LinkedHashMap<String, List<GanttVos>> processMap = ganttVoList.stream().collect(Collectors.groupingBy(GanttVos::getProcessdeviceid,
|
|
|
LinkedHashMap::new, Collectors.toList()));
|
|
|
// 循环设备数据
|
|
|
- for (GanttVos ganttVos : workShopEntry.getValue()) {
|
|
|
+ for (GanttVos ganttVos : ganttVoList) {
|
|
|
deviceVo = new ScheduleGanttVo();
|
|
|
deviceVo.setId(ganttVos.getProcessdeviceid());
|
|
|
deviceVo.setText(ganttVos.getProcessdevice());
|
|
@@ -228,6 +247,8 @@ public class GanttServiceImpl implements GanttService {
|
|
|
resultVo.add(deviceVo);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
return R.ok(resultVo);
|
|
|
}
|
|
|
|
|
@@ -293,8 +314,8 @@ public class GanttServiceImpl implements GanttService {
|
|
|
String joinids = "'" + CollUtil.join(queryProcessids, "','") + "'";
|
|
|
retGantvos = apsProcessOperationProcessEquDao.getGanttDataList(
|
|
|
null, null, null, null, null,
|
|
|
- joinids,null, null, null, null,
|
|
|
- null,null);
|
|
|
+ joinids, null, null, null, null,
|
|
|
+ null, null);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -316,15 +337,15 @@ public class GanttServiceImpl implements GanttService {
|
|
|
*/
|
|
|
public List<ScheduleGanttVo> assembleGanttData(List<GanttVos> apsProcessOperationProcessEquDos) {
|
|
|
// 修改工序作业的生产状态
|
|
|
- apsProcessOperationProcessEquDos.parallelStream().forEach(data->{
|
|
|
+ apsProcessOperationProcessEquDos.parallelStream().forEach(data -> {
|
|
|
/**
|
|
|
* 作业生产状态不是待发布 ——>作业明细的作业状态
|
|
|
* 作业生产状态是待发-> 待发布
|
|
|
*/
|
|
|
- if(TO_BE_PUBLISHED.equals(data.getProcessstatus())){
|
|
|
+ if (TO_BE_PUBLISHED.equals(data.getProcessstatus())) {
|
|
|
data.setGanttprocessstatus(TO_BE_PUBLISHED);
|
|
|
- } else{
|
|
|
- data.setGanttprocessstatus(GANTT_PROCESS_STATUS_MAP.getOrDefault(data.getWorkstatus(),""));
|
|
|
+ } else {
|
|
|
+ data.setGanttprocessstatus(GANTT_PROCESS_STATUS_MAP.getOrDefault(data.getWorkstatus(), ""));
|
|
|
}
|
|
|
});
|
|
|
// 需要返回给前端的数据
|
|
@@ -342,7 +363,7 @@ public class GanttServiceImpl implements GanttService {
|
|
|
int workShopIndex = 1;
|
|
|
// 对数据按照设备进行分组
|
|
|
LinkedHashMap<String, List<GanttVos>> processMap = apsProcessOperationProcessEquDos.stream().collect(Collectors.groupingBy(GanttVos::getProcessdeviceid,
|
|
|
- LinkedHashMap::new, Collectors.toList()));
|
|
|
+ LinkedHashMap::new, Collectors.toList()));
|
|
|
for (Map.Entry<String, List<GanttVos>> deviceEntry : processMap.entrySet()) {
|
|
|
// 对数据按照 计划开始时间 分组
|
|
|
LinkedHashMap<String, List<GanttVos>> planDataMap = deviceEntry.getValue().stream().collect(Collectors.groupingBy(info -> {
|