|
|
|
@ -2,20 +2,22 @@ package com.op.quality.service.impl;
|
|
|
|
|
|
|
|
|
|
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
|
|
|
|
|
import com.op.common.core.utils.DateUtils;
|
|
|
|
|
import com.op.quality.domain.QcCheckType;
|
|
|
|
|
import com.op.quality.domain.QcInterface;
|
|
|
|
|
import com.op.quality.domain.QcProCheck;
|
|
|
|
|
import com.op.quality.mapper.QcInterfaceMapper;
|
|
|
|
|
import com.op.quality.service.IQcInterfaceService;
|
|
|
|
|
import com.op.system.api.domain.SysDictData;
|
|
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.math.RoundingMode;
|
|
|
|
|
import java.text.DateFormat;
|
|
|
|
|
import java.text.ParseException;
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
import java.time.LocalDate;
|
|
|
|
|
import java.util.Calendar;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 检验项目维护Service业务层处理
|
|
|
|
@ -114,14 +116,223 @@ public class QcInterfaceServiceImpl implements IQcInterfaceService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<QcInterface> getProduceStaticInfo(QcInterface qcInterface) {
|
|
|
|
|
public Map<String,String> getProduceStaticInfo(QcInterface qcInterface) {
|
|
|
|
|
DynamicDataSourceContextHolder.push(qcInterface.getFactoryCode());
|
|
|
|
|
String nowYMD = DateUtils.getDate();
|
|
|
|
|
qcInterface.setYmd(nowYMD);
|
|
|
|
|
List<QcInterface> dtos = qcInterfaceMapper.getSupplierNoOkList(qcInterface);
|
|
|
|
|
|
|
|
|
|
Map<String,String> dtoMap = new HashMap<>();
|
|
|
|
|
qcInterface.setYmdType("dd");
|
|
|
|
|
QcInterface hz = qcInterfaceMapper.getProduceHz(qcInterface);
|
|
|
|
|
if(hz != null){
|
|
|
|
|
dtoMap.put("todayPro",hz.getQuality());
|
|
|
|
|
dtoMap.put("todaySample",hz.getSampleQuality());
|
|
|
|
|
dtoMap.put("todayNoOk",hz.getNoOkQuality());
|
|
|
|
|
BigDecimal tOkRate = (new BigDecimal(hz.getSampleQuality())
|
|
|
|
|
.subtract(new BigDecimal(hz.getNoOkQuality()))
|
|
|
|
|
)
|
|
|
|
|
.multiply(new BigDecimal(100))
|
|
|
|
|
.divide(new BigDecimal(hz.getQuality()),2, RoundingMode.HALF_UP);
|
|
|
|
|
dtoMap.put("todayOkRate",tOkRate+"%");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
qcInterface.setYmdType("mm");
|
|
|
|
|
QcInterface hz2 = qcInterfaceMapper.getProduceHz(qcInterface);
|
|
|
|
|
if(hz2 != null){
|
|
|
|
|
dtoMap.put("monthPro",hz2.getQuality());
|
|
|
|
|
dtoMap.put("monthNoOk",hz2.getNoOkQuality());
|
|
|
|
|
BigDecimal tOkRate2 = (new BigDecimal(hz2.getSampleQuality())
|
|
|
|
|
.subtract(new BigDecimal(hz2.getNoOkQuality()))
|
|
|
|
|
)
|
|
|
|
|
.multiply(new BigDecimal(100))
|
|
|
|
|
.divide(new BigDecimal(hz2.getQuality()),2, RoundingMode.HALF_UP);
|
|
|
|
|
dtoMap.put("monthOkRate",tOkRate2+"%");
|
|
|
|
|
}
|
|
|
|
|
return dtoMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<QcInterface> getProduceNoOkList(QcInterface qcInterface) {
|
|
|
|
|
DynamicDataSourceContextHolder.push(qcInterface.getFactoryCode());
|
|
|
|
|
String nowYMD = DateUtils.getDate();
|
|
|
|
|
qcInterface.setYmd(nowYMD);
|
|
|
|
|
List<QcInterface> dtos = qcInterfaceMapper.getProduceNoOkList(qcInterface);
|
|
|
|
|
return dtos;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, List<String>> getProMonthNoOk(QcInterface qcInterface) {
|
|
|
|
|
DynamicDataSourceContextHolder.push(qcInterface.getFactoryCode());
|
|
|
|
|
Map<String, List<String>> dtoMap = new HashMap<>();
|
|
|
|
|
|
|
|
|
|
String nowYMD = DateUtils.getDate();
|
|
|
|
|
String[] nowYMDs = nowYMD.split("-");
|
|
|
|
|
int nowMonth = Integer.parseInt(nowYMDs[1]);
|
|
|
|
|
List<String> monthNames = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
qcInterface.setYmd(nowYMD);
|
|
|
|
|
qcInterface.setYmdType("yyyy");
|
|
|
|
|
Map<String,QcInterface> noOkHzs = qcInterfaceMapper.getYearNoOkHz(qcInterface);
|
|
|
|
|
List<String> monthData = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
for(int mh = 1;mh<=nowMonth;mh++){
|
|
|
|
|
String yyyymm = nowYMDs[1]+"-"+String.format("%02d",mh);
|
|
|
|
|
monthNames.add(yyyymm);
|
|
|
|
|
if(noOkHzs != null) {
|
|
|
|
|
monthData.add(noOkHzs.get(yyyymm).getNoOkQuality());
|
|
|
|
|
}else{
|
|
|
|
|
monthData.add("0");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dtoMap.put("month",monthNames);
|
|
|
|
|
dtoMap.put("monthData",monthData);
|
|
|
|
|
|
|
|
|
|
return dtoMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public QcInterface getLineDayNoOk(QcInterface qcInterface) {
|
|
|
|
|
DynamicDataSourceContextHolder.push(qcInterface.getFactoryCode());
|
|
|
|
|
QcInterface dto = new QcInterface();
|
|
|
|
|
|
|
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
|
|
Date now = calendar.getTime();
|
|
|
|
|
calendar.set(Calendar.DAY_OF_MONTH, 1);
|
|
|
|
|
Date firstDayOfMonth = calendar.getTime();
|
|
|
|
|
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
String startTime = dateFormat.format(firstDayOfMonth);
|
|
|
|
|
String endTime = dateFormat.format(now);
|
|
|
|
|
|
|
|
|
|
//日期名称数组
|
|
|
|
|
List<String> xAxisDatas = getDays(startTime,endTime);
|
|
|
|
|
dto.setDayStr(xAxisDatas);//
|
|
|
|
|
//通过报工获取到真实参与生产的线体
|
|
|
|
|
List<QcProCheck> lines = qcInterfaceMapper.getLineNames();
|
|
|
|
|
if(CollectionUtils.isEmpty(lines)){
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
String nowYMD = DateUtils.getDate();
|
|
|
|
|
qcInterface.setYmd(nowYMD);
|
|
|
|
|
qcInterface.setYmdType("yyyy");
|
|
|
|
|
Map<String,QcInterface> noOkHzs = qcInterfaceMapper.getDayNoOkHz(qcInterface);
|
|
|
|
|
if(noOkHzs==null){
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
List<QcInterface> series = new ArrayList<>();
|
|
|
|
|
QcInterface serie = null;
|
|
|
|
|
for(QcProCheck line:lines){
|
|
|
|
|
serie = new QcInterface();
|
|
|
|
|
List<String> data = new ArrayList<>();
|
|
|
|
|
serie.setMachineName(line.getMachineName());
|
|
|
|
|
for(String dayStr:xAxisDatas){
|
|
|
|
|
QcInterface dayInfo = noOkHzs.get(line.getMachineCode()+dayStr);
|
|
|
|
|
if(dayInfo!=null){
|
|
|
|
|
data.add(dayInfo.getNoOkQuality());
|
|
|
|
|
}else{
|
|
|
|
|
data.add("0");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
serie.setData(data);
|
|
|
|
|
series.add(serie);
|
|
|
|
|
}
|
|
|
|
|
dto.setSeries(series);//
|
|
|
|
|
return dto;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<QcInterface> getMonthOfYearContrast(QcInterface qcInterface) {
|
|
|
|
|
DynamicDataSourceContextHolder.push(qcInterface.getFactoryCode());
|
|
|
|
|
List<QcInterface> dtos = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
QcInterface nowYM = new QcInterface();
|
|
|
|
|
QcInterface lastYM = new QcInterface();
|
|
|
|
|
String nowYMD = DateUtils.getDate();
|
|
|
|
|
String[] nowYMDs = nowYMD.split("-");
|
|
|
|
|
int nowYear = Integer.parseInt(nowYMDs[0]);
|
|
|
|
|
int lastYear = nowYear-1;
|
|
|
|
|
List<String> daystr1 = new ArrayList<>();
|
|
|
|
|
List<String> daystr0 = new ArrayList<>();
|
|
|
|
|
for(int m=1;m<=12;m++){
|
|
|
|
|
daystr0.add(lastYear+"-"+String.format("%02d",m));
|
|
|
|
|
daystr1.add(nowYear+"-"+String.format("%02d",m));
|
|
|
|
|
}
|
|
|
|
|
lastYM.setDayStr(daystr0);
|
|
|
|
|
nowYM.setDayStr(daystr1);
|
|
|
|
|
|
|
|
|
|
qcInterface.setYmd("'"+nowYear+"','"+lastYear+"'");
|
|
|
|
|
|
|
|
|
|
Map<String,QcInterface> noOkNum = qcInterfaceMapper.getMothNoOkNum(qcInterface);
|
|
|
|
|
if(noOkNum==null){
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<String> data0 = new ArrayList<>();//不合规数量
|
|
|
|
|
List<String> dataStr0 = new ArrayList<>();//不合格率
|
|
|
|
|
for(String day0:daystr0){
|
|
|
|
|
QcInterface last = noOkNum.get(day0);
|
|
|
|
|
if(last != null){
|
|
|
|
|
data0.add(last.getNoOkQuality());
|
|
|
|
|
BigDecimal norate0 = new BigDecimal(last.getNoOkQuality()).multiply(new BigDecimal(100))
|
|
|
|
|
.divide(new BigDecimal(last.getQuality()),2,RoundingMode.HALF_UP);
|
|
|
|
|
dataStr0.add(norate0.toString());
|
|
|
|
|
}else{
|
|
|
|
|
data0.add("0");
|
|
|
|
|
dataStr0.add("0.00");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<String> data1 = new ArrayList<>();//不合规数量
|
|
|
|
|
List<String> dataStr1 = new ArrayList<>();//不合格率
|
|
|
|
|
for(String day1:daystr1){
|
|
|
|
|
QcInterface now = noOkNum.get(day1);
|
|
|
|
|
if(now != null){
|
|
|
|
|
data1.add(now.getNoOkQuality());
|
|
|
|
|
BigDecimal norate0 = new BigDecimal(now.getNoOkQuality()).multiply(new BigDecimal(100))
|
|
|
|
|
.divide(new BigDecimal(now.getQuality()),2,RoundingMode.HALF_UP);
|
|
|
|
|
dataStr1.add(norate0.toString());
|
|
|
|
|
}else{
|
|
|
|
|
data1.add("0");
|
|
|
|
|
dataStr1.add("0.00");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lastYM.setData(data0);
|
|
|
|
|
lastYM.setDayStr(dataStr0);
|
|
|
|
|
|
|
|
|
|
nowYM.setData(data1);
|
|
|
|
|
nowYM.setDayStr(dataStr1);
|
|
|
|
|
|
|
|
|
|
dtos.add(lastYM);
|
|
|
|
|
dtos.add(nowYM);
|
|
|
|
|
return dtos;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**两个日期之间的所有日期**/
|
|
|
|
|
public static List<String> getDays(String startTime,String endTime) {
|
|
|
|
|
|
|
|
|
|
// 返回的日期集合
|
|
|
|
|
List<String> days = new ArrayList<String>();
|
|
|
|
|
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
try {
|
|
|
|
|
Date start = dateFormat.parse(startTime);
|
|
|
|
|
Date end = dateFormat.parse(endTime);
|
|
|
|
|
|
|
|
|
|
Calendar tempStart = Calendar.getInstance();
|
|
|
|
|
tempStart.setTime(start);
|
|
|
|
|
|
|
|
|
|
Calendar tempEnd = Calendar.getInstance();
|
|
|
|
|
tempEnd.setTime(end);
|
|
|
|
|
tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)
|
|
|
|
|
while (tempStart.before(tempEnd)) {
|
|
|
|
|
days.add(dateFormat.format(tempStart.getTime()));
|
|
|
|
|
tempStart.add(Calendar.DAY_OF_YEAR, 1);
|
|
|
|
|
}
|
|
|
|
|
} catch (ParseException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
return days;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|