package com.shlanbao.tzsc.pms.board.board.service.impl;
|
|
import com.shlanbao.tzsc.base.dao.QmOutwardDaoI;
|
import com.shlanbao.tzsc.base.dao.SchStatFaultDaoI;
|
import com.shlanbao.tzsc.base.dao.SchWorkorderDaoI;
|
import com.shlanbao.tzsc.base.service.BaseService;
|
import com.shlanbao.tzsc.pms.board.board.service.BoardServiceI;
|
import com.shlanbao.tzsc.pms.qm.self.beans.QmOutWandBean;
|
import com.shlanbao.tzsc.utils.tools.MathUtil;
|
import com.shlanbao.tzsc.utils.tools.RedisUtil;
|
import com.shlanbao.tzsc.utils.tools.StringUtil;
|
import org.apache.commons.lang.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.text.DecimalFormat;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
@Service
|
public class BoardServiceImpl extends BaseService implements BoardServiceI {
|
@Autowired
|
private SchWorkorderDaoI schWorkorderDao;
|
|
@Autowired
|
private QmOutwardDaoI qmOutwardDao;
|
|
@Autowired
|
private SchStatFaultDaoI schStatFaultDao;
|
|
/**
|
* @param type 1-卷接机 2-包装机
|
* {planQtyCount=50.0, data=[{realQty=0, code=R0219123111#010, sts=4, qty=50, id=8aa737836f597cc3016f59831b3b0251}], orderCount=1, openOrder=0, qtyCount=0.0}
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public Map<String, Object> getRollPackWorkOrder(int type) throws Exception {
|
// List<WorkOrderBean> list = new ArrayList<>();
|
// String hql = "from SchWorkorder o where o.del=0 and o.isCheck=1 and (o.type = 1 or o.type =2) ";
|
// List<SchWorkorder> query = schWorkorderDao.query(hql);
|
// if(query==null||query.size()<1) return list;
|
// for (int i = 0 ;i<query.size();i++){
|
// SchWorkorder order = query.get(i);
|
// WorkOrderBean bean = new WorkOrderBean();
|
// bean.setId(order.getId());
|
// bean.setSts(order.getSts()); //状态
|
// bean.setQty(order.getQty()); //计划产量
|
// bean.setCode(order.getCode()); //工单号
|
// if(order.getMdMat()!=null&&order.getMdMat().getName()!=null) bean.setMat(order.getMdMat().getName());
|
// else bean.setMat("");
|
// list.add(bean);
|
// }
|
Map<String, Object> root = new HashMap<>();
|
String sql = "SELECT DISTINCT a.id,a.code,a.QTY,a.STS,b.qty as realQty FROM SCH_WORKORDER a LEFT JOIN SCH_STAT_OUTPUT b on a.id = b.OID WHERE a.IS_CHECK = 1 AND a.DEL = 0 AND TO_CHAR(a.DATE_,'SYYYY-MM-DD') = TO_CHAR(SYSDATE, 'SYYYY-MM-DD') AND SYSDATE BETWEEN a.STIM AND a.ETIM and a.type = " + type;
|
List<?> list = schWorkorderDao.queryBySql(sql);
|
List<Map<String, String>> listMe = new ArrayList<>();
|
int orderCount = 0;
|
int openOrder = 0;
|
double planQtyCount = 0;
|
double qtyCount = 0;
|
if (list != null && list.size() > 0) {
|
for (Object o : list) {
|
Map<String, String> map = new HashMap<>();
|
Object[] temp = (Object[]) o;
|
map.put("id", StringUtil.convertObjToString(temp[0]));
|
map.put("code", StringUtil.convertObjToString(temp[1]));
|
map.put("qty", StringUtil.convertObjToString(temp[2]));
|
map.put("sts", StringUtil.convertObjToString(temp[3]));
|
map.put("realQty", StringUtil.convertObjToString(temp[4]));
|
listMe.add(map);
|
orderCount = listMe.size();
|
//统计数据
|
if (StringUtil.notEmpty(map.get("sts"))) {
|
if (Integer.parseInt(map.get("sts")) == 2) {
|
openOrder += 1;
|
}
|
}
|
if (StringUtil.notEmpty(map.get("qty"))) {
|
planQtyCount += Double.parseDouble(map.get("qty"));
|
}
|
if (StringUtil.notEmpty(map.get("realQty"))) {
|
qtyCount += Double.parseDouble(map.get("realQty"));
|
}
|
|
}
|
}
|
root.put("data", listMe);
|
root.put("orderCount", orderCount);
|
root.put("openOrder", openOrder);
|
root.put("planQtyCount", planQtyCount);
|
root.put("qtyCount", qtyCount);
|
return root;
|
}
|
|
/**
|
* @return {data=[{name=1月, value=0.0}, {name=2月, value=0.0}, {name=3月, value=0.0}, {name=4月, value=0.0}, {name=5月, value=0.0}, {name=6月, value=7.0}, {name=7月, value=944.8}, {name=8月, value=0.0}, {name=9月, value=0.0}, {name=10月, value=0.0}, {name=11月, value=0.0}, {name=12月, value=0.0}]}
|
* @throws Exception
|
*/
|
@Override
|
public Map<String, Object> getYearMonthQty() throws Exception {
|
Map<String, Object> root = new HashMap<>();
|
List<Map<String, Object>> data = new ArrayList<>();
|
String sql = "select DISTINCT" +
|
" sum(decode(to_char(a.DATE_,'MM'),'01',b.QTY,0)) month1,sum(decode(to_char(a.DATE_,'MM'),'02',b.QTY,0)) month2," +
|
" sum(decode(to_char(a.DATE_,'MM'),'03',b.QTY,0)) month3,sum(decode(to_char(a.DATE_,'MM'),'04',b.QTY,0)) month4," +
|
" sum(decode(to_char(a.DATE_,'MM'),'05',b.QTY,0)) month5,sum(decode(to_char(a.DATE_,'MM'),'06',b.QTY,0)) month6," +
|
" sum(decode(to_char(a.DATE_,'MM'),'07',b.QTY,0)) month7,sum(decode(to_char(a.DATE_,'MM'),'08',b.QTY,0)) month8," +
|
" sum(decode(to_char(a.DATE_,'MM'),'09',b.QTY,0)) month9,sum(decode(to_char(a.DATE_,'MM'),'10',b.QTY,0)) month10," +
|
" sum(decode(to_char(a.DATE_,'MM'),'11',b.QTY,0)) month11,sum(decode(to_char(a.DATE_,'MM'),'12',b.QTY,0)) month12" +
|
" FROM SCH_WORKORDER a LEFT JOIN SCH_STAT_OUTPUT b on a.id = b.oid WHERE a.IS_CHECK = 1 AND a.DEL = 0 AND a.TYPE = 3 AND STS = 4 AND TO_CHAR(a.DATE_,'SYYYY') = TO_CHAR(SYSDATE, 'SYYYY')";
|
List<?> list = schWorkorderDao.queryBySql(sql);
|
Object[] temp = (Object[]) list.get(0);
|
for (int i = 0; i < temp.length; i++) {
|
Map<String, Object> map = new HashMap<>();
|
map.put("value", StringUtil.convertObjToDouble(temp[i]));
|
map.put("name", i + 1 + "月");
|
data.add(map);
|
}
|
root.put("data", data);
|
|
return root;
|
}
|
|
/**
|
* @return {xaxis=[07-27, 07-28, 07-29, 07-30, 07-31, 08-01, 08-02], dime=[product, 卷接机, 包装机, 封箱机, 成型机], data=[{product=07-27, 包装机=0.0, 封箱机=0.0, 成型机=0.0, 卷接机=0.0}, {product=07-28, 包装机=0.0, 封箱机=0.0, 成型机=0.0, 卷接机=0.0}, {product=07-29, 包装机=0.0, 封箱机=0.0, 成型机=0.0, 卷接机=0.0}, {product=07-30, 包装机=3.2, 封箱机=0.0, 成型机=0.0, 卷接机=0.0}, {product=07-31, 包装机=0.0, 封箱机=0.0, 成型机=0.0, 卷接机=0.0}, {product=08-01, 包装机=0.0, 封箱机=0.0, 成型机=0.0, 卷接机=0.0}, {product=08-02, 包装机=0.0, 封箱机=0.0, 成型机=0.0, 卷接机=71.72}]}
|
* @throws Exception
|
*/
|
@Override
|
public Map<String, Object> getSevenDayQty() throws Exception {
|
//所有数据
|
Map<String, Object> root = new HashMap<>();
|
//组装后四种设备七天数据
|
List<Map<String, Object>> data = new ArrayList<>();
|
//四种设备七天原始数据
|
List<Map<String, Object>> res = new ArrayList<>();
|
List<String> dimensions = new ArrayList<>();
|
//获取四个类型设备近七天数据
|
for (int i = 1; i <= 4; i++) {
|
Map<String, Object> equData = getEquData(i);
|
res.add(equData);
|
}
|
//echart的dimensions
|
dimensions.add("product");
|
dimensions.add("卷接机");
|
dimensions.add("包装机");
|
dimensions.add("封箱机");
|
dimensions.add("成型机");
|
|
|
// List<String> week = Arrays.asList("周一", "周二", "周三", "周四", "周五", "周六", "周日");
|
List<String> week = getDay();
|
//将四个设备七天数据组合为 echart需要格式 product:日期 卷接机:'value' 包装机:'value' 封箱机:'value' 成型机:'value'
|
for (int i = 0; i < 7; i++) {
|
//一天的数据容器
|
Map<String, Object> item = new HashMap<>();
|
|
item.put("product", "" + (week.get(i)));
|
for (int j = 0; j < res.size(); j++) {
|
Map<String, Object> map = res.get(j);
|
item.put(dimensions.get(j + 1), map.get("day" + i));
|
}
|
data.add(item);
|
}
|
|
root.put("data", data);
|
root.put("dime", dimensions);
|
root.put("xaxis", week);
|
|
return root;
|
}
|
|
|
/**
|
* @return {xaxis=[07-27, 07-28, 07-29, 07-30, 07-31, 08-01, 08-02], data4=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], data3=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], data2=[0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0], data1=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 39.0]}
|
* @throws Exception
|
*/
|
@Override
|
public Map<String, Object> getEquEffe() throws Exception {
|
Map<String, Object> root = new HashMap<>();
|
for (int i = 1; i <= 4; i++) {
|
List<Double> effe = getEffe(i);
|
root.put("data" + i, effe);
|
}
|
List<String> week = getDay();
|
root.put("xaxis", week);
|
return root;
|
}
|
|
|
/**
|
* 获取一个设备类型近七天有效作用率
|
* sql说明:
|
* 有效作业率的公式=产量/(生产时间*8.4)*100%
|
* 生产时间=工单时间-a-b-c-d
|
* 变量a=吃饭时间(可设置,默认0.5)
|
* 变量b=保养时间(可设置,默认0.5)
|
* 变量c=换牌时间(如果有换牌, 默认0.7)
|
* 变量d=非正常停机时间(可设置,默认0)
|
* <p>
|
* sql解释
|
* 由于统计出'工单时间' 可能为 0,会导致除数不能为 '0' 的错误,所有使用decode函数
|
* decode(工单时间,0,0,(产量/工单时间)) TODO 优化sql过长
|
* 含义解释:
|
* decode(条件,值1,返回值1,缺省值) tip:当工单时间为0,直接返回0,不去计算
|
* <p>
|
* 数据日期(SYSDATE- 6)与 getDay()方法关联 TODO
|
*
|
* @param type 设备类型
|
* @return
|
*/
|
public List<Double> getEffe(int type) {
|
String sql = "select DISTINCT" +
|
" DECODE( (sum(decode(FLOOR(SYSDATE-a.DATE_),7,TO_NUMBER((a.ETIM- a.STIM)*24)-0.7*(SELECT COUNT(*) FROM SCH_SHIFT_EXCHG WHERE HO_ORDER = a.id AND ROWNUM = 1) - 0.5 - 0.5 - 0,0)) * 8.4), 0,0 , ( sum(decode(FLOOR(SYSDATE-a.DATE_),7,b.QTY,0)) / (sum(decode(FLOOR(SYSDATE-a.DATE_),7,TO_NUMBER((a.ETIM- a.STIM)*24)-0.7*(SELECT COUNT(*) FROM SCH_SHIFT_EXCHG WHERE HO_ORDER = a.id AND ROWNUM = 1) - 0.5 - 0.5 - 0,0)) * 8.4))) day1," +
|
" DECODE( (sum(decode(FLOOR(SYSDATE-a.DATE_),6,TO_NUMBER((a.ETIM- a.STIM)*24)-0.7*(SELECT COUNT(*) FROM SCH_SHIFT_EXCHG WHERE HO_ORDER = a.id AND ROWNUM = 1) - 0.5 - 0.5 - 0,0)) * 8.4), 0,0 , ( sum(decode(FLOOR(SYSDATE-a.DATE_),6,b.QTY,0)) / (sum(decode(FLOOR(SYSDATE-a.DATE_),6,TO_NUMBER((a.ETIM- a.STIM)*24)-0.7*(SELECT COUNT(*) FROM SCH_SHIFT_EXCHG WHERE HO_ORDER = a.id AND ROWNUM = 1) - 0.5 - 0.5 - 0,0)) * 8.4))) day2," +
|
" DECODE( (sum(decode(FLOOR(SYSDATE-a.DATE_),5,TO_NUMBER((a.ETIM- a.STIM)*24)-0.7*(SELECT COUNT(*) FROM SCH_SHIFT_EXCHG WHERE HO_ORDER = a.id AND ROWNUM = 1) - 0.5 - 0.5 - 0,0)) * 8.4), 0,0 , ( sum(decode(FLOOR(SYSDATE-a.DATE_),5,b.QTY,0)) / (sum(decode(FLOOR(SYSDATE-a.DATE_),5,TO_NUMBER((a.ETIM- a.STIM)*24)-0.7*(SELECT COUNT(*) FROM SCH_SHIFT_EXCHG WHERE HO_ORDER = a.id AND ROWNUM = 1) - 0.5 - 0.5 - 0,0)) * 8.4))) day3," +
|
" DECODE( (sum(decode(FLOOR(SYSDATE-a.DATE_),4,TO_NUMBER((a.ETIM- a.STIM)*24)-0.7*(SELECT COUNT(*) FROM SCH_SHIFT_EXCHG WHERE HO_ORDER = a.id AND ROWNUM = 1) - 0.5 - 0.5 - 0,0)) * 8.4), 0,0 , ( sum(decode(FLOOR(SYSDATE-a.DATE_),4,b.QTY,0)) / (sum(decode(FLOOR(SYSDATE-a.DATE_),4,TO_NUMBER((a.ETIM- a.STIM)*24)-0.7*(SELECT COUNT(*) FROM SCH_SHIFT_EXCHG WHERE HO_ORDER = a.id AND ROWNUM = 1) - 0.5 - 0.5 - 0,0)) * 8.4))) day4," +
|
" DECODE( (sum(decode(FLOOR(SYSDATE-a.DATE_),3,TO_NUMBER((a.ETIM- a.STIM)*24)-0.7*(SELECT COUNT(*) FROM SCH_SHIFT_EXCHG WHERE HO_ORDER = a.id AND ROWNUM = 1) - 0.5 - 0.5 - 0,0)) * 8.4), 0,0 , ( sum(decode(FLOOR(SYSDATE-a.DATE_),3,b.QTY,0)) / (sum(decode(FLOOR(SYSDATE-a.DATE_),3,TO_NUMBER((a.ETIM- a.STIM)*24)-0.7*(SELECT COUNT(*) FROM SCH_SHIFT_EXCHG WHERE HO_ORDER = a.id AND ROWNUM = 1) - 0.5 - 0.5 - 0,0)) * 8.4))) day5," +
|
" DECODE( (sum(decode(FLOOR(SYSDATE-a.DATE_),2,TO_NUMBER((a.ETIM- a.STIM)*24)-0.7*(SELECT COUNT(*) FROM SCH_SHIFT_EXCHG WHERE HO_ORDER = a.id AND ROWNUM = 1) - 0.5 - 0.5 - 0,0)) * 8.4), 0,0 , ( sum(decode(FLOOR(SYSDATE-a.DATE_),2,b.QTY,0)) / (sum(decode(FLOOR(SYSDATE-a.DATE_),2,TO_NUMBER((a.ETIM- a.STIM)*24)-0.7*(SELECT COUNT(*) FROM SCH_SHIFT_EXCHG WHERE HO_ORDER = a.id AND ROWNUM = 1) - 0.5 - 0.5 - 0,0)) * 8.4))) day6," +
|
" DECODE( (sum(decode(FLOOR(SYSDATE-a.DATE_),1,TO_NUMBER((a.ETIM- a.STIM)*24)-0.7*(SELECT COUNT(*) FROM SCH_SHIFT_EXCHG WHERE HO_ORDER = a.id AND ROWNUM = 1) - 0.5 - 0.5 - 0,0)) * 8.4), 0,0 , ( sum(decode(FLOOR(SYSDATE-a.DATE_),1,b.QTY,0)) / (sum(decode(FLOOR(SYSDATE-a.DATE_),1,TO_NUMBER((a.ETIM- a.STIM)*24)-0.7*(SELECT COUNT(*) FROM SCH_SHIFT_EXCHG WHERE HO_ORDER = a.id AND ROWNUM = 1) - 0.5 - 0.5 - 0,0)) * 8.4))) day7" +
|
" FROM SCH_WORKORDER a LEFT JOIN SCH_STAT_OUTPUT b on a.id = b.oid WHERE a.IS_CHECK = 1 AND a.DEL = 0 AND STS = 4 AND a.TYPE = " + type +
|
" AND a.DATE_ > (SYSDATE- 7)";
|
List<?> list = schWorkorderDao.queryBySql(sql);
|
Object[] temp = (Object[]) list.get(0);
|
List<Double> data = new ArrayList<>();
|
for (int i = 0; i < temp.length; i++) {
|
data.add(StringUtil.convertObjTox100Double(temp[i])>90?90:StringUtil.convertObjTox100Double(temp[i]));
|
}
|
return data;
|
}
|
|
|
/**
|
* 获取设备一周数据
|
* 数据日期(SYSDATE- 6)与 getDay()方法关联 TODO
|
*
|
* @param type
|
* @return
|
*/
|
public Map<String, Object> getEquData(int type) {
|
String sql = "select DISTINCT" +
|
" sum(decode(FLOOR (SYSDATE-a.DATE_),7,b.QTY,0)) day1, " +
|
" sum(decode(FLOOR (SYSDATE-a.DATE_),6,b.QTY,0)) day2, " +
|
" sum(decode(FLOOR (SYSDATE-a.DATE_),5,b.QTY,0)) day3, " +
|
" sum(decode(FLOOR (SYSDATE-a.DATE_),4,b.QTY,0)) day4, " +
|
" sum(decode(FLOOR (SYSDATE-a.DATE_),3,b.QTY,0)) day5, " +
|
" sum(decode(FLOOR (SYSDATE-a.DATE_),2,b.QTY,0)) day6, " +
|
" sum(decode(FLOOR (SYSDATE-a.DATE_),1,b.QTY,0)) day7 " +
|
" FROM SCH_WORKORDER a LEFT JOIN SCH_STAT_OUTPUT b on a.id = b.oid WHERE a.IS_CHECK = 1 AND a.DEL = 0 AND a.TYPE = " + type +
|
" AND STS = 4 AND a.DATE_ > (SYSDATE- 7) ";
|
Map<String, Object> map = new HashMap<>();
|
List<?> list = schWorkorderDao.queryBySql(sql);
|
Object[] temp = (Object[]) list.get(0);
|
for (int i = 0; i < temp.length; i++) {
|
map.put("day" + i, StringUtil.convertObjToDouble(temp[i]));
|
}
|
return map;
|
}
|
|
/**
|
* 根据当前获取前六天日期
|
* 重要:方法为图表x轴取日期,需要和数据库限制日期一致
|
*
|
* @return
|
*/
|
|
private List<String> getDay() {
|
List<String> list = new ArrayList<>();
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
Calendar c = Calendar.getInstance();
|
for (int i = 7; i > 0; i--) {
|
c.add(Calendar.DATE, -1);
|
String temp = format.format(c.getTime());
|
list.add(temp);
|
}
|
Collections.sort(list, new Comparator<String>() {
|
@Override
|
public int compare(String o1, String o2) {
|
return o1.compareTo(o2);
|
}
|
});
|
for (int i = 0; i < list.size(); i++) {
|
list.set(i, list.get(i).substring(5));
|
}
|
|
return list;
|
}
|
|
/**
|
* 获取设备最高运行效率
|
* ID TYPE STIM ETIM EQUIPMENT_CODE MINUTE
|
* 4028ab09740e83c401740eb97d1a0007 2 2020-08-21 07:30:00 2020-08-21 17:30:00 201 153.36
|
* 运行效率=运行时间/(当前服务器时间-计划班次开始时间)×100%
|
*/
|
@Override
|
public Map<String, Object> getEquMax() throws Exception {
|
String sql = "SELECT a.id,a.type,a.STIM,a.ETIM,b.EQUIPMENT_CODE,(SYSDATE - a.STIM)*60*24 as minute,a.shift FROM SCH_WORKORDER a " +
|
" LEFT JOIN MD_EQUIPMENT b on a.EQP = b.id" +
|
" WHERE TO_CHAR(a.DATE_,'SYYYY-MM-DD') = TO_CHAR(SYSDATE, 'SYYYY-MM-DD') " +
|
" AND SYSDATE BETWEEN a.STIM AND a.ETIM ";
|
Map<String, Object> root = new HashMap<>();
|
List<Map<String, String>> resitem = new ArrayList<>();
|
//1.数据分类
|
List<?> list = schWorkorderDao.queryBySql(sql);
|
//卷接机
|
List<Map<String, String>> list1 = new ArrayList<>();
|
//包装机
|
List<Map<String, String>> list2 = new ArrayList<>();
|
//封箱机
|
List<Map<String, String>> list3 = new ArrayList<>();
|
//成型机
|
List<Map<String, String>> list4 = new ArrayList<>();
|
if (list != null && list.size() > 0) {
|
for (Object o : list) {
|
Map<String, String> map = new HashMap<>();
|
Object[] temp = (Object[]) o;
|
String id = StringUtil.convertObjToString(temp[0]);
|
String type = StringUtil.convertObjToString(temp[1]);
|
String stim = StringUtil.convertObjToString(temp[2]);
|
String etim = StringUtil.convertObjToString(temp[3]);
|
String equCode = StringUtil.convertObjToString(temp[4]);
|
String minute = StringUtil.convertObjToString(temp[5]);
|
String shift = StringUtil.convertObjToString(temp[6]);
|
map.put("id", id);
|
map.put("type", type);
|
map.put("stim", stim);
|
map.put("etim", etim);
|
map.put("equCode", equCode);
|
map.put("minute", minute);
|
map.put("shift", shift);
|
getRedisRunTime(map);
|
if (StringUtil.notEmpty(type)) {
|
switch (type) {
|
case "1":
|
list1.add(map);
|
break;
|
case "2":
|
list2.add(map);
|
break;
|
case "3":
|
list3.add(map);
|
break;
|
case "4":
|
list4.add(map);
|
break;
|
}
|
}
|
}
|
}
|
|
//2.每种设备到redis获取数据并比较大小
|
Map<String, String> res1 = listMax(list1);
|
Map<String, String> res2 = listMax(list2);
|
Map<String, String> res3 = listMax(list3);
|
Map<String, String> res4 = listMax(list4);
|
root.put("data1",res1);
|
root.put("data2",res2);
|
root.put("data3",res3);
|
root.put("data4",res4);
|
return root;
|
}
|
/**
|
* 获取效率最高机台
|
* */
|
private Map<String, String> listMax( List<Map<String, String>> list){
|
//没有数据返回空数据
|
if(list.size()<1) return new HashMap<>();
|
return Collections.max(list, new Comparator<Map<String, String>>() {
|
@Override
|
public int compare(Map<String, String> o1, Map<String, String> o2) {
|
return o1.get("runeffe").compareTo(o2.get("runeffe"));
|
}
|
});
|
}
|
|
/**
|
* 根据班次何设备code 获取redis 数据
|
*/
|
public Map<String, String> getRedisRunTime(Map<String, String> map) {
|
if (map.get("shift").isEmpty() || map.get("equCode").isEmpty()) {
|
map.put("runtime", "0"); //运行时间
|
map.put("runeffe", "0"); //运行效率
|
map.put("stopTime", "0"); //停机时间
|
map.put("stopTimes", "0");//停机次数
|
} else {
|
String runkey = "runTime";
|
String stopkey = "stopTime";
|
String timesKey = "stopTimes";
|
int xs = 1;
|
if("2".equals(map.get("type"))){
|
runkey = "chcRunTime";
|
stopkey = "chcStopTime";
|
timesKey = "chcStopTimes";
|
xs = 60;
|
} else if("4".equals(map.get("type"))){
|
xs = 60;
|
}
|
Map redis = RedisUtil.getMap(map.get("shift") + map.get("equCode"));
|
|
double runTime = 0;
|
if (!redis.isEmpty() && redis.get(runkey) != null && !"".equals(redis.get(runkey).toString().trim())) {
|
try {
|
runTime = StringUtil.converObj2Double(redis.get(runkey).toString())/xs;
|
} catch (Exception e) {
|
System.out.println(map.get("equCode"));
|
e.printStackTrace();
|
}
|
}
|
double minute = 0;
|
if (map.get("minute") != null) {
|
try {
|
minute = Double.parseDouble(map.get("minute"));
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
double stopTime = 0;
|
if (redis.get(stopkey) != null) {
|
stopTime = MathUtil.roundHalfUp(StringUtil.converObj2Double(redis.get(stopkey).toString())/xs,2);
|
|
}
|
|
String stopTimes = "0";
|
if (redis.get(timesKey) != null) {
|
stopTimes = redis.get(timesKey).toString();
|
}
|
map.put("runtime", runTime + "");
|
map.put("runeffe", "0");
|
map.put("stopTime",stopTime + "");
|
map.put("stopTimes", stopTimes);
|
if (runTime > 0 && minute > 0) {
|
double time = runTime / minute * 100;
|
//TODO 避免redis
|
if(time>100) time = 100;
|
DecimalFormat df = new DecimalFormat("#.00");
|
String format = df.format(time);
|
map.put("runeffe", format);
|
}
|
}
|
|
return map;
|
}
|
|
|
@Override
|
public List<QmOutWandBean> queryLastMonthWgqx() {
|
String sql = "SELECT c.code,c.name,c.type,c.pos,c.des,c.lvl,c.minusscore,b.val FROM QM_OUTWARD a JOIN QM_OUTWARD_DET b on a.id = b.QO_ID " +
|
"JOIN QM_OUTWARD_DEFECT_ITEM c on b.item=c.id " +
|
"WHERE time >= SYSDATE - 30 " ;
|
|
List<?> datas = qmOutwardDao.queryBySql(sql);
|
List<QmOutWandBean> beans=new ArrayList<>();
|
Object[] obj=null;
|
QmOutWandBean bean=null;
|
for (Object object : datas) {
|
obj=(Object[]) object;
|
bean=new QmOutWandBean();
|
bean.setCode(StringUtil.convertObjToString(obj[0]));
|
bean.setName(StringUtil.convertObjToString(obj[1]));
|
bean.setType(StringUtil.convertObjToString(obj[2]));
|
bean.setPos(StringUtil.convertObjToString(obj[3]));
|
bean.setDes(StringUtil.convertObjToString(obj[4]));
|
bean.setLvl(StringUtil.convertObjToString(obj[5]));
|
bean.setMinusScore(StringUtil.convertObjToString(obj[6]));
|
String val = StringUtil.convertObjToString(obj[7]);
|
if(!StringUtils.isEmpty(val)){
|
bean.setValue(Integer.parseInt(val));
|
beans.add(bean);
|
}
|
|
|
}
|
return beans;
|
}
|
|
@Override
|
public List<Map<String, Object>> queryLastMonthTc() {
|
String sql = "SELECT a.TYPE tctype, a.id tcid, to_char( b.date_, 'yyyy-MM-dd' ) AS date_, a.name AS faultName, a.time AS faultTime, a.times AS faultTimes, nvl( c.MAIN_BAD_QTY, 0 ) AS badQty " +
|
"FROM SCH_STAT_FAULT a, SCH_WORKORDER b, SCH_STAT_OUTPUT c " +
|
"WHERE a.status = 1 AND a.TYPE = '卷接剔除' AND b.del = 0 AND b.sts IN ( 2, 4 ) AND a.oid = c.id AND c.oid = b.id AND b.date_ >= SYSDATE - 30 " ;
|
List<?> datas = schWorkorderDao.queryBySql(sql);
|
List<Map<String,Object>> beans=new ArrayList<>();
|
Object[] obj=null;
|
Map<String,Object> bean=null;
|
for (Object object : datas) {
|
obj=(Object[]) object;
|
bean=new HashMap<>();
|
bean.put("name",StringUtil.convertObjToString(obj[3]));
|
bean.put("value",StringUtil.convertObjToString(obj[4]));
|
beans.add(bean);
|
}
|
return beans;
|
}
|
|
}
|