package com.dy.pmsOther.screen; import cn.hutool.core.date.DateTime; 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 getDeviceInfo(String deviceNo) { if (StringUtils.isBlank(deviceNo)) { return null; } // 查询设备信息 StaDeviceLast deviceLast = deviceLastDao.selectByDeviceNo(deviceNo); if (deviceLast == null) { return null; } Map deviceInfo = new HashMap<>(); deviceInfo.put("deviceInfo", deviceLast); //查询设备日志 List log = deviceProductionLogDao.selectByDeviceNo(deviceNo); deviceInfo.put("deviceLog", log); // 查询设备生命周期 List deviceLife = deviceLifeDao.selectByDeviceNo(deviceNo); deviceInfo.put("deviceLife", deviceLife); // 查询设备维修信息 List repairInfo = repairInfoDao.selectByDeviceNo(deviceNo); deviceInfo.put("deviceRepair", repairInfo); // 查询设备附件信息 List wipSnEx = wipSnExDao.selectByDeviceNo(deviceNo); deviceInfo.put("deviceAttach", wipSnEx); return deviceInfo; } public List queryDeviceLog(String startTime, String endTime) { Date startDt = parseToDate(startTime, 0); Date endDt = parseToDate(endTime, 1); //查询设备日志 List 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 queryPlanList() { List list = assemblyPlanDao.queryPlanList(); /*Map 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 queryWorkList() { List list = assemblyWorkLastDao.queryWorkList(); return list; } public List queryOrderList() { List list = assemblyPlanDao.queryPlanList(); /* Map params = (Map) PojoUtils.generalize(); List orderList = orderDao.selectAll(params); for (PrOrder prOrder : orderList) { changeRate(prOrder); }*/ return null; } private void changeRate(PrOrder prOrder) { if (prOrder != null && prOrder.items != null) { List 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; } } } } } public List queryTopError() { Date startDt = Date.from(LocalDateTime.of(LocalDate.now().minusDays(2000), LocalTime.of(0, 0, 0)).atZone(ZoneId.systemDefault()).toInstant()); Date endDt = new Date(); List list = deviceProductionLogDao.queryTopError(startDt, endDt); return list; } }