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;
|
private OthStatisticWorkloadMapper statisticWorkDao;
|
|
@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;
|
}
|
|
@Autowired
|
public void setStatisticWorkDao(OthStatisticWorkloadMapper statisticWorkDao) {
|
this.statisticWorkDao = statisticWorkDao;
|
}
|
|
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;
|
}
|
}
|
}
|
}
|
}
|
|
public List<JSONObject> 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<JSONObject> list = deviceProductionLogDao.queryTopError(startDt, endDt);
|
return list;
|
}
|
public JSONObject queryAttendUser() {
|
Date startDt = Date.from(LocalDateTime.of(LocalDate.now().minusDays(2000), LocalTime.of(0, 0, 0)).atZone(ZoneId.systemDefault()).toInstant());
|
Date endDt = new Date();
|
Date todayDt = Date.from(LocalDateTime.of(LocalDate.now(), LocalTime.of(0, 0, 0)).atZone(ZoneId.systemDefault()).toInstant());
|
List<JSONObject> list = assemblyWorkLastDao.queryAttendUser(startDt, endDt,todayDt);
|
if(list.size() == 0){
|
JSONObject obj = new JSONObject();
|
obj.set("require_attend", "0");
|
obj.set("actual_attend", "0");
|
return obj;
|
}
|
return list.get(0);
|
}
|
|
public List<JSONObject> queryStatisticWork() {
|
Date startDt = Date.from(LocalDateTime.of(LocalDate.now(), LocalTime.of(0, 0, 0)).atZone(ZoneId.systemDefault()).toInstant());
|
Date endDt = new Date();
|
List<JSONObject> list = statisticWorkDao.queryStatisticWork(startDt, endDt);
|
return list;
|
}
|
public JSONObject queryStatisticOrder() {
|
List<JSONObject> list = orderDao.queryStatisticOrder();
|
if(list.size() == 0){
|
JSONObject obj = new JSONObject();
|
obj.set("total", "0");
|
obj.set("year_total", "0");
|
obj.set("complete", "0");
|
obj.set("uncomplete", "0");
|
return obj;
|
}
|
return list.get(0);
|
}
|
}
|