瀏覽代碼

feature 解决甘特图设备顺序不对的问题

xiahan 11 月之前
父節點
當前提交
822aef3999

+ 54 - 25
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/GanttServiceImpl.java

@@ -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;
@@ -20,7 +19,6 @@ 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;
@@ -68,11 +66,24 @@ public class GanttServiceImpl implements GanttService {
     public static final String SCHEDULING_STR = "%s-正在排程 %s";
     public static final String SCHEDULING_TO_BE_PUBLISHED_STR = "%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 +113,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 +123,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();
@@ -151,9 +162,9 @@ public class GanttServiceImpl implements GanttService {
         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());
+                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) {
@@ -195,27 +206,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 +255,8 @@ public class GanttServiceImpl implements GanttService {
                 resultVo.add(deviceVo);
             }
         }
+
+
         return R.ok(resultVo);
     }
 
@@ -293,8 +322,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 +345,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 +371,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 -> {

+ 1 - 1
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationProcessEquDao.xml

@@ -452,7 +452,7 @@
           and (a1.PROCESSDEVICE is not null and a1.PROCESSDEVICE !='' )
           and (a1.PROCESSWORKSHOP is not null and a1.PROCESSWORKSHOP !='' )
         ORDER BY
-            CONVERT( a1.PROCESSWORKSHOP USING gbk) desc,
+            a1.PROCESSWORKSHOP,
             b.CHECKITEMTYPE,
             a1.PROCESSDEVICE
     </select>