hfxc226 3 years ago
parent
commit
1f6eaeef3c

+ 29 - 10
platform-dao/src/main/java/com/platform/dao/enums/SbInfoStatusEnum.java

@@ -1,8 +1,13 @@
 package com.platform.dao.enums;
 
+import com.google.common.collect.Lists;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * @Description 设备状态
  * @Author liuyu
@@ -16,44 +21,58 @@ public enum SbInfoStatusEnum {
     /**
      * 在库
      */
-    IN_STORE(1),
+    IN_STORE(1, "在库"),
     /**
      * 使用中
      */
-    IN_USE(2),
+    IN_USE(2, "使用中"),
     /**
      * 报废中
      */
-    IN_SCRAP(3),
+    IN_SCRAP(3, "报废中"),
     /**
      * 已报废
      */
-    SCRAPED(4),
+    SCRAPED(4, "已报废"),
     /**
      * 报废拒绝
      */
-    REFUSE_SCRAPED(41),
+    REFUSE_SCRAPED(41, "报废拒绝"),
     /**
      * 置换中
      */
-    IN_REPLACEMENT(5),
+    IN_REPLACEMENT(5, "置换中"),
     /**
      * 已置换
      */
-    REPLACEMENTED(6),
+    REPLACEMENTED(6, "已置换"),
     /**
      * 停用中
      */
-    IN_STOP(7),
+    IN_STOP(7, "停用中"),
     /**
      * 维修中
      */
-    IN_MAINTAIN(8),
+    IN_MAINTAIN(8, "维修中"),
     /**
      * 调拨中
      */
-    IN_DIAOBO(9);
+    IN_DIAOBO(9, "调拨中");
 
     private final Integer value;
+    private final String name;
+
+    //讲枚举转换成list格式,这样前台遍历的时候比较容易,列如 下拉框 后台调用toList方法,你就可以得到code 和name了
+    public static List<Map<String, Object>> toList() {
+        List<Map<String, Object>> list = Lists.newArrayList();//Lists.newArrayList()其实和new ArrayList()几乎一模
+        //  一样, 唯一它帮你做的(其实是javac帮你做的), 就是自动推导(不是"倒")尖括号里的数据类型.
+
+        for (SbInfoStatusEnum obj : SbInfoStatusEnum.values()) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("value", obj.getValue());
+            map.put("name", obj.getName());
+        }
+        return list;
+    }
 
 }

+ 30 - 0
platform-dao/src/main/java/com/platform/dao/vo/sb/SbInfoWorkplaceLineVO.java

@@ -0,0 +1,30 @@
+package com.platform.dao.vo.sb;
+
+import com.platform.common.bean.BaseVO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * @Description
+ * @Author chenli
+ * @Date 2019/8/5
+ * @Version Copyright (c) 2019,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class SbInfoWorkplaceLineVO extends BaseVO implements Serializable {
+
+    /**
+     * 周几(从今天开始往前一周)
+     */
+
+    private String day;
+    /**
+     * 维修单数量
+     */
+    private Integer num;
+}

+ 36 - 0
platform-dao/src/main/java/com/platform/dao/vo/sb/SbInfoWorkplacePieVO.java

@@ -0,0 +1,36 @@
+package com.platform.dao.vo.sb;
+
+import com.platform.common.bean.BaseVO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * @Description
+ * @Author chenli
+ * @Date 2019/8/5
+ * @Version Copyright (c) 2019,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class SbInfoWorkplacePieVO extends BaseVO implements Serializable {
+    /**
+     * 状态
+     */
+    private Integer status;
+    /**
+     * 状态名称
+     */
+    private String statusNme;
+    /**
+     * 数量
+     */
+    private Integer count;
+    /**
+     * 占比
+     */
+    private Double percent;
+}

+ 45 - 0
platform-dao/src/main/java/com/platform/dao/vo/sb/SbInfoWorkplaceVO.java

@@ -0,0 +1,45 @@
+package com.platform.dao.vo.sb;
+
+import com.platform.common.bean.BaseVO;
+import com.platform.dao.entity.upms.SysFile;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import javax.persistence.Transient;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @Description
+ * @Author chenli
+ * @Date 2019/8/5
+ * @Version Copyright (c) 2019,北京乾元坤和科技有限公司 All rights reserved.
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class SbInfoWorkplaceVO extends BaseVO implements Serializable {
+
+    private Integer totalDNumber;
+    private Integer dbNumber; // 调拨单数量,(在用数量)
+    private Integer bfNumber; // 报废单数量,(已调拨数量)
+    private Integer stopNumber; // 停用单数量,(维修中数量)
+    private Integer pdNumber; // 盘点单数量,(已报废数量)
+
+    private Integer totalRepairNumber;
+    private Integer planNumber;
+    private Integer notPlanNumber;
+    private Integer otherNumber;
+    private Integer noIdeaNumber;// 未知类型
+
+    private Integer totalNumber;
+    private Integer useNumber;
+
+    private List<SbInfoWorkplacePieVO> pieDataList;
+
+    private List<SbInfoWorkplaceLineVO> lineDataList;
+}

+ 11 - 0
platform-rest/src/main/java/com/platform/rest/controller/sb/SbInfoController.java

@@ -14,6 +14,7 @@ import com.platform.dao.util.TreeUtil;
 import com.platform.dao.vo.export.sb.ExportSbInfoMeasureVO;
 import com.platform.dao.vo.export.sb.ExportSbInfoVO;
 import com.platform.dao.vo.sb.SbInfoVO;
+import com.platform.dao.vo.sb.SbInfoWorkplaceVO;
 import com.platform.office.poi.excel.ExcelImportUtil;
 import com.platform.office.poi.excel.entity.ImportParams;
 import com.platform.rest.log.annotation.SysLog;
@@ -43,6 +44,16 @@ public class SbInfoController {
 
     private final SbInfoService sbInfoService;
 
+    /**
+     * 设备工作台数据
+     *
+     * @return R
+     */
+    @GetMapping("/workplace")
+    public R<SbInfoWorkplaceVO> getWorkplaceData() {
+        return new R<>(sbInfoService.getWorkplaceData());
+    }
+
     /**
      * 通过id查询单条记录
      *

+ 3 - 0
platform-service/src/main/java/com/platform/service/sb/SbInfoService.java

@@ -7,6 +7,7 @@ import com.platform.dao.entity.sb.SbInfo;
 import com.platform.dao.vo.sb.SbInfoScreenDetailVO;
 import com.platform.dao.vo.sb.SbInfoScreenVO;
 import com.platform.dao.vo.sb.SbInfoVO;
+import com.platform.dao.vo.sb.SbInfoWorkplaceVO;
 import com.platform.service.base.IBaseService;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -273,4 +274,6 @@ public interface SbInfoService extends IBaseService<SbInfo, SbInfoDTO> {
     void generateSbCodeAll();
 
     void modImagesByDTO(SbInfoDTO sbInfoDTO);
+
+    SbInfoWorkplaceVO getWorkplaceData();
 }

+ 160 - 4
platform-service/src/main/java/com/platform/service/sb/impl/SbInfoServiceImpl.java

@@ -53,10 +53,7 @@ import com.platform.dao.vo.SysUserVO;
 import com.platform.dao.vo.export.sb.ExportSbInfoVO;
 import com.platform.dao.vo.export.store.ExportInStoreFormVO;
 import com.platform.dao.vo.query.upms.SysDeptVO;
-import com.platform.dao.vo.sb.SbInfoScreenDetailVO;
-import com.platform.dao.vo.sb.SbInfoScreenVO;
-import com.platform.dao.vo.sb.SbInfoVO;
-import com.platform.dao.vo.sb.SbModelVO;
+import com.platform.dao.vo.sb.*;
 import com.platform.office.poi.excel.ExcelImportUtil;
 import com.platform.office.poi.excel.entity.ImportParams;
 import com.platform.service.base.impl.BaseServiceImpl;
@@ -88,6 +85,7 @@ import tk.mybatis.mapper.weekend.WeekendCriteria;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -539,6 +537,164 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
         this.saveImageFile(model);
     }
 
+    /**
+     * 设备工作台数据
+     *
+     * @return
+     */
+    @Override
+    public SbInfoWorkplaceVO getWorkplaceData() {
+        SbInfoWorkplaceVO vo = new SbInfoWorkplaceVO();
+        LocalDateTime now = LocalDateTime.now();
+
+        // 设备相关数据
+        setSbNum(now, vo);
+
+        // 维修汇总数据:还没处理完毕的维修单数据
+        setRepairNum(now, vo);
+
+        // 设备一周故障数据
+        setRepairNumWeek( now, vo);
+        return vo;
+    }
+
+    private void setSbNum(LocalDateTime now, SbInfoWorkplaceVO vo) {
+
+        List<SbInfo> sbInfoList = mapper.selectAll();
+        // 设置使用中数据,维修,调拨中,报废数据
+
+
+        // 设备状态数据统计
+        Double totalNumber = 0.0;
+        int useNumber = 0;
+        if(CollectionUtil.isNotEmpty(sbInfoList)){
+            totalNumber = new Double(sbInfoList.size());
+            List< SbInfoWorkplacePieVO> sbInfoWorkplacePieVOList = new ArrayList<>();
+            for(Map<String, Object> statusMap: SbInfoStatusEnum.toList()){
+                SbInfoWorkplacePieVO sbInfoWorkplacePieVO = new SbInfoWorkplacePieVO();
+                sbInfoWorkplacePieVO.setStatusNme((String) statusMap.get("name"));
+                int num = 0;
+                for(SbInfo sbInfo: sbInfoList){
+                    if(sbInfo.getStatus().equals(statusMap.get("value"))){
+                        num++;
+                    }
+                }
+                sbInfoWorkplacePieVO.setCount(num);
+                sbInfoWorkplacePieVO.setStatus((Integer) statusMap.get("value"));
+                if(totalNumber == 0){
+                    sbInfoWorkplacePieVO.setPercent(0.0);
+                }else{
+                    sbInfoWorkplacePieVO.setPercent(num/totalNumber);
+                }
+                sbInfoWorkplacePieVOList.add(sbInfoWorkplacePieVO);
+                if(statusMap.get("value").equals(SbInfoStatusEnum.IN_USE.getValue())){
+                    vo.setUseNumber(num);
+                    vo.setDbNumber(num);
+                }else if(statusMap.get("value").equals(SbInfoStatusEnum.IN_DIAOBO.getValue())){
+                    vo.setBfNumber(num);
+                }else if(statusMap.get("value").equals(SbInfoStatusEnum.IN_STOP.getValue())){
+                    vo.setStopNumber(num);
+                }else if(statusMap.get("value").equals(SbInfoStatusEnum.SCRAPED.getValue())){
+                    vo.setPdNumber(num);
+                }
+            }
+            vo.setPieDataList(sbInfoWorkplacePieVOList);
+        }
+        if(vo.getUseNumber() == null){
+            vo.setUseNumber(0);
+        }
+        if(vo.getDbNumber() == null){
+            vo.setDbNumber(0);
+        }
+        if(vo.getBfNumber() == null){
+            vo.setBfNumber(0);
+        }
+        if(vo.getStopNumber() == null){
+            vo.setStopNumber(0);
+        }
+        if(vo.getPdNumber() == null){
+            vo.setPdNumber(0);
+        }
+        vo.setTotalDNumber(vo.getDbNumber() + vo.getBfNumber() + vo.getStopNumber() + vo.getPdNumber());
+        vo.setTotalNumber(sbInfoList.size());
+    }
+
+    private void setRepairNum(LocalDateTime now, SbInfoWorkplaceVO vo) {
+        Weekend<RepairApplicationForm> weekendRepair = new Weekend<>(RepairApplicationForm.class);
+        WeekendCriteria<RepairApplicationForm, Object> weekendCriteria = weekendRepair.weekendCriteria();
+        List<Integer> statusList = new ArrayList<Integer>();
+        statusList.add(RepairApplicationFormStatusEnum.NOT_ALLOCATED.getValue());
+        statusList.add(RepairApplicationFormStatusEnum.PROCESSING.getValue());
+        weekendCriteria.andIn(RepairApplicationForm::getStatus, statusList);
+        List<RepairApplicationForm> repairList = repairApplicationFormMapper.selectByExample(weekendRepair);
+        int totalRepairNumber = 0;
+        int planNumber = 0;
+        int notPlanNumber = 0;
+        int otherNumber = 0;
+        int noIdeaNumber = 0;
+        if(CollectionUtil.isNotEmpty(repairList)){
+            totalRepairNumber = repairList.size();
+            for(RepairApplicationForm repairApplicationForm: repairList){
+                if(repairApplicationForm.getCategory().equals(RepairApplicationFormCategoryEnum.PLAN.getValue())){
+                    planNumber++;
+                }if(repairApplicationForm.getCategory().equals(RepairApplicationFormCategoryEnum.PLAN_NOT.getValue())){
+                    notPlanNumber++;
+                }if(repairApplicationForm.getCategory().equals(RepairApplicationFormCategoryEnum.OTHER.getValue())){
+                    otherNumber++;
+                }else{
+                    noIdeaNumber++;
+                }
+            }
+        }
+
+        vo.setTotalRepairNumber(totalRepairNumber);
+        vo.setNotPlanNumber(planNumber);
+        vo.setPlanNumber(notPlanNumber);
+        vo.setOtherNumber(otherNumber);
+        vo.setNoIdeaNumber(noIdeaNumber);
+    }
+
+    /**
+     * 近一周的每天维修单数量
+     *
+     * @param now
+     * @param vo
+     */
+    private void setRepairNumWeek(LocalDateTime now, SbInfoWorkplaceVO vo) {
+
+        Weekend<RepairApplicationForm> weekendRepair = new Weekend<>(RepairApplicationForm.class);
+        WeekendCriteria<RepairApplicationForm, Object> weekendCriteria = weekendRepair.weekendCriteria();
+        weekendCriteria.andBetween(RepairApplicationForm::getApplyTime, DateUtils.getSixDayAgoOfDay(now), DateUtils.getLastDayOfDay(now));
+        List<Integer> statusList = new ArrayList<Integer>();
+        statusList.add(RepairApplicationFormStatusEnum.NOT_ALLOCATED.getValue());
+        statusList.add(RepairApplicationFormStatusEnum.PROCESSING.getValue());
+        weekendCriteria.andIn(RepairApplicationForm::getStatus, statusList);
+        List<RepairApplicationForm> repairList = repairApplicationFormMapper.selectByExample(weekendRepair);
+        List<LocalDate> timeList = DateUtils.currentWeekDate();
+        List<SbInfoWorkplaceLineVO> voList = new ArrayList<>();
+        String[][] strArray = {{"MONDAY", "一"}, {"TUESDAY", "二"}, {"WEDNESDAY", "三"}, {"THURSDAY", "四"}, {"FRIDAY", "五"}, {"SATURDAY", "六"}, {"SUNDAY", "日"}};
+        for(LocalDate time: timeList){
+            String k = String.valueOf(time.getDayOfWeek());
+            for (int i = 0; i < strArray.length; i++) {
+                if (k.equals(strArray[i][0])) {
+                    k = strArray[i][1];
+                    break;
+                }
+            }
+            SbInfoWorkplaceLineVO lineVO = new SbInfoWorkplaceLineVO();
+            int num = 0;
+            for(RepairApplicationForm form: repairList){
+                if(time.isEqual(form.getApplyTime().toLocalDate())){
+                    num++;
+                }
+            }
+            lineVO.setNum(num);
+            lineVO.setDay(k);
+            voList.add(lineVO);
+        }
+        vo.setLineDataList(voList);
+    }
+
     /**
      * 如果是变更了状态,需要记录状态变更表,
      * 如果是启用,则要更新停机记录表数据