package com.dy.pmsOther.screen; 
 | 
  
 | 
  
 | 
import cn.hutool.json.JSONArray; 
 | 
import cn.hutool.json.JSONObject; 
 | 
import com.baomidou.mybatisplus.core.toolkit.StringUtils; 
 | 
import com.dy.common.springUtil.SpringContextUtil; 
 | 
import com.dy.pmsGlobal.daoOth.OthStatisticWorkloadMapper; 
 | 
import com.dy.pmsGlobal.daoPr.PrAssemblyPlanMapper; 
 | 
import com.dy.pmsGlobal.daoPr.PrOrderItemMapper; 
 | 
import com.dy.pmsGlobal.daoPr.PrOrderMapper; 
 | 
import com.dy.pmsGlobal.daoSta.*; 
 | 
import com.dy.pmsGlobal.pojoPr.PrOrder; 
 | 
import com.dy.pmsGlobal.pojoPr.PrOrderItem; 
 | 
import com.dy.pmsGlobal.pojoSta.*; 
 | 
import com.dy.pmsGlobal.util.UserUtil; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.dubbo.common.utils.PojoUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import java.math.BigDecimal; 
 | 
import java.math.RoundingMode; 
 | 
import java.time.LocalDate; 
 | 
import java.time.LocalDateTime; 
 | 
import java.time.LocalTime; 
 | 
import java.time.ZoneId; 
 | 
import java.time.format.DateTimeFormatter; 
 | 
import java.time.temporal.ChronoUnit; 
 | 
import java.time.temporal.TemporalAccessor; 
 | 
import java.util.Date; 
 | 
import java.util.HashMap; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
import java.util.concurrent.ConcurrentHashMap; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
@Slf4j 
 | 
@Service 
 | 
public class ScreenReportSv { 
 | 
    private StaDeviceLastMapper deviceLastDao; 
 | 
    private StaDeviceLifeMapper deviceLifeDao; 
 | 
    private StaWipSnExMapper wipSnExDao; 
 | 
    private StaDeviceProductionLogMapper deviceProductionLogDao; 
 | 
    private StaRepairInfoMapper repairInfoDao; 
 | 
    private PrAssemblyPlanMapper assemblyPlanDao; 
 | 
    private StaAssemblyWorkLastMapper assemblyWorkLastDao; 
 | 
  
 | 
    private OthStatisticWorkloadMapper workloadDao; 
 | 
    private PrOrderMapper orderDao; 
 | 
  
 | 
    @Autowired 
 | 
    public void setOrderDao(PrOrderMapper orderDao) { 
 | 
        this.orderDao = orderDao; 
 | 
    } 
 | 
  
 | 
    @Autowired 
 | 
    public void setDeviceLastDao(StaDeviceLastMapper deviceLastDao) { 
 | 
        this.deviceLastDao = deviceLastDao; 
 | 
    } 
 | 
  
 | 
    @Autowired 
 | 
    public void setDeviceLifeDao(StaDeviceLifeMapper deviceLifeDao) { 
 | 
        this.deviceLifeDao = deviceLifeDao; 
 | 
    } 
 | 
  
 | 
    @Autowired 
 | 
    public void setWipSnExDao(StaWipSnExMapper wipSnExDao) { 
 | 
        this.wipSnExDao = wipSnExDao; 
 | 
    } 
 | 
  
 | 
    @Autowired 
 | 
    public void setDeviceProductionLogDao(StaDeviceProductionLogMapper deviceProductionLogDao) { 
 | 
        this.deviceProductionLogDao = deviceProductionLogDao; 
 | 
    } 
 | 
  
 | 
    @Autowired 
 | 
    public void setAssemblyPlanDao(PrAssemblyPlanMapper assemblyPlanDao) { 
 | 
        this.assemblyPlanDao = assemblyPlanDao; 
 | 
    } 
 | 
  
 | 
    @Autowired 
 | 
    public void setAssemblyWorkLastDao(StaAssemblyWorkLastMapper assemblyWorkLastDao) { 
 | 
        this.assemblyWorkLastDao = assemblyWorkLastDao; 
 | 
    } 
 | 
  
 | 
    @Autowired 
 | 
    public void setRepairInfoDao(StaRepairInfoMapper repairInfoDao) { 
 | 
        this.repairInfoDao = repairInfoDao; 
 | 
    } 
 | 
  
 | 
    @Autowired 
 | 
    public void setWorkloadDao(OthStatisticWorkloadMapper workloadDao) { 
 | 
        this.workloadDao = workloadDao; 
 | 
    } 
 | 
  
 | 
    public Map<String, Object> getDeviceInfo(String deviceNo) { 
 | 
        if (StringUtils.isBlank(deviceNo)) { 
 | 
            return null; 
 | 
        } 
 | 
        // 查询设备信息 
 | 
        StaDeviceLast deviceLast = deviceLastDao.selectByDeviceNo(deviceNo); 
 | 
        if (deviceLast == null) { 
 | 
            return null; 
 | 
        } 
 | 
        Map<String, Object> deviceInfo = new HashMap<>(); 
 | 
        deviceInfo.put("deviceInfo", deviceLast); 
 | 
        //查询设备日志 
 | 
        List<StaDeviceProductionLog> log = deviceProductionLogDao.selectByDeviceNo(deviceNo); 
 | 
        deviceInfo.put("deviceLog", log); 
 | 
        // 查询设备生命周期 
 | 
        List<StaDeviceLife> deviceLife = deviceLifeDao.selectByDeviceNo(deviceNo); 
 | 
        deviceInfo.put("deviceLife", deviceLife); 
 | 
        // 查询设备维修信息 
 | 
        List<StaRepairInfo> repairInfo = repairInfoDao.selectByDeviceNo(deviceNo); 
 | 
        deviceInfo.put("deviceRepair", repairInfo); 
 | 
        // 查询设备附件信息 
 | 
        List<StaWipSnEx> wipSnEx = wipSnExDao.selectByDeviceNo(deviceNo); 
 | 
        deviceInfo.put("deviceAttach", wipSnEx); 
 | 
        return deviceInfo; 
 | 
    } 
 | 
  
 | 
    public List<StaDeviceProductionLog> queryDeviceLog(String startTime, String endTime) { 
 | 
        Date startDt = parseToDate(startTime, 0); 
 | 
        Date endDt = parseToDate(endTime, 1); 
 | 
        //查询设备日志 
 | 
        List<StaDeviceProductionLog> log = deviceProductionLogDao.selectProductLog("", startDt, endDt); 
 | 
        return log; 
 | 
    } 
 | 
  
 | 
    private Date parseToDate(String strDt, long offDays) { 
 | 
        LocalDateTime dt = LocalDateTime.of(LocalDate.now().plusDays(offDays), LocalTime.of(0, 0, 0)); // 今天24点 
 | 
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 
 | 
        DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 
 | 
        if (strDt.matches("\\d{4}(-\\d{2}){2} \\d{2}(:\\d{2}){2}")) {//2024-08-15 00:00:00 
 | 
            dt = LocalDateTime.parse(strDt, dtf); 
 | 
        } else if (strDt.matches("\\d{4}(-\\d{2}){2}")) { 
 | 
            dt = LocalDateTime.of(LocalDate.parse(strDt, dtf1), LocalTime.of(0, 0, 0)); 
 | 
        } 
 | 
        Date date = Date.from(dt.atZone(ZoneId.systemDefault()).toInstant()); 
 | 
        return date; 
 | 
    } 
 | 
  
 | 
    public List<JSONObject> queryPlanList() { 
 | 
        List<JSONObject> list = assemblyPlanDao.queryPlanList(); 
 | 
        /*Map<String, JSONObject> map = new ConcurrentHashMap<>(); // 使用并发安全的Map 
 | 
        for (JSONObject item : list) { 
 | 
            String planId = String.valueOf(item.getObj("planId")); 
 | 
            JSONObject innerObject = new JSONObject() 
 | 
                    .set("nodeId", String.valueOf(item.getObj("nodeId"))) 
 | 
                    .set("content", item.getObj("content")); 
 | 
            if (map.containsKey(planId)) { 
 | 
                JSONArray array = (JSONArray) map.get(planId).get("nodes"); 
 | 
                array.add(innerObject); 
 | 
            } else { 
 | 
                JSONArray array = new JSONArray(); 
 | 
                array.add(innerObject); 
 | 
                JSONObject outObject = new JSONObject() 
 | 
                        .set("planId", planId) 
 | 
                        .set("planName", item.getObj("planName")) 
 | 
                        .set("nodes", array); 
 | 
                map.put(planId, outObject); 
 | 
            } 
 | 
        } 
 | 
        return map.values().stream().collect(Collectors.toList());*/ 
 | 
        return list; 
 | 
    } 
 | 
    public List<JSONObject> queryWorkList() { 
 | 
        List<JSONObject> list = assemblyWorkLastDao.queryWorkList(); 
 | 
        return list; 
 | 
    } 
 | 
  
 | 
    public List<JSONObject> queryOrderList() { 
 | 
        List<JSONObject> list = assemblyPlanDao.queryPlanList(); 
 | 
       /* Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(); 
 | 
        List<PrOrder> orderList = orderDao.selectAll(params); 
 | 
        for (PrOrder prOrder : orderList) { 
 | 
            changeRate(prOrder); 
 | 
        }*/ 
 | 
        return null; 
 | 
    } 
 | 
    private void changeRate(PrOrder prOrder) { 
 | 
        if (prOrder != null && prOrder.items != null) { 
 | 
            List<PrOrderItem> items = prOrder.items; 
 | 
            for (int i = 1; i < items.size(); i++) { 
 | 
                for (int j = i - 1; j >= 0; j--) { 
 | 
                    //拿着i依次跟上一个比较,如果产品相同,则上一个记录complete_number - number 如果 > 0 分给i ,如果 < 0 则将 complete_number 置为0 
 | 
                    if (items.get(j).getProId().intValue() == items.get(i).getProId().intValue()) { 
 | 
                        int remainNumber = items.get(j).getCompleteNumber() - items.get(j).getNumber(); 
 | 
                        if (remainNumber > 0) { 
 | 
                            items.get(j).setCompleteNumber(items.get(j).getNumber()); 
 | 
                            items.get(j).setCompleteRate("100.00%"); 
 | 
                            items.get(i).setCompleteNumber(remainNumber); 
 | 
                            BigDecimal remainBig = new BigDecimal(remainNumber * 100); 
 | 
                            BigDecimal iNumberBig = new BigDecimal(items.get(i).getNumber()); 
 | 
                            BigDecimal result = remainBig.divide(iNumberBig, 2, RoundingMode.HALF_UP); 
 | 
                            items.get(i).setCompleteRate(result.toString() + "%"); 
 | 
                        } else { 
 | 
                            items.get(i).setCompleteNumber(0); 
 | 
                            items.get(i).setCompleteRate("0.00%"); 
 | 
                        } 
 | 
                        break; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
} 
 |