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 getRollPackWorkOrder(int type) throws Exception { // List 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 query = schWorkorderDao.query(hql); // if(query==null||query.size()<1) return list; // for (int i = 0 ;i 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> 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 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 getYearMonthQty() throws Exception { Map root = new HashMap<>(); List> 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 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 getSevenDayQty() throws Exception { //所有数据 Map root = new HashMap<>(); //组装后四种设备七天数据 List> data = new ArrayList<>(); //四种设备七天原始数据 List> res = new ArrayList<>(); List dimensions = new ArrayList<>(); //获取四个类型设备近七天数据 for (int i = 1; i <= 4; i++) { Map equData = getEquData(i); res.add(equData); } //echart的dimensions dimensions.add("product"); dimensions.add("卷接机"); dimensions.add("包装机"); dimensions.add("封箱机"); dimensions.add("成型机"); // List week = Arrays.asList("周一", "周二", "周三", "周四", "周五", "周六", "周日"); List week = getDay(); //将四个设备七天数据组合为 echart需要格式 product:日期 卷接机:'value' 包装机:'value' 封箱机:'value' 成型机:'value' for (int i = 0; i < 7; i++) { //一天的数据容器 Map item = new HashMap<>(); item.put("product", "" + (week.get(i))); for (int j = 0; j < res.size(); j++) { Map 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 getEquEffe() throws Exception { Map root = new HashMap<>(); for (int i = 1; i <= 4; i++) { List effe = getEffe(i); root.put("data" + i, effe); } List 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) *

* sql解释 * 由于统计出'工单时间' 可能为 0,会导致除数不能为 '0' 的错误,所有使用decode函数 * decode(工单时间,0,0,(产量/工单时间)) TODO 优化sql过长 * 含义解释: * decode(条件,值1,返回值1,缺省值) tip:当工单时间为0,直接返回0,不去计算 *

* 数据日期(SYSDATE- 6)与 getDay()方法关联 TODO * * @param type 设备类型 * @return */ public List 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 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 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 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 getDay() { List 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() { @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 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 root = new HashMap<>(); List> resitem = new ArrayList<>(); //1.数据分类 List list = schWorkorderDao.queryBySql(sql); //卷接机 List> list1 = new ArrayList<>(); //包装机 List> list2 = new ArrayList<>(); //封箱机 List> list3 = new ArrayList<>(); //成型机 List> list4 = new ArrayList<>(); if (list != null && list.size() > 0) { for (Object o : list) { Map 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 res1 = listMax(list1); Map res2 = listMax(list2); Map res3 = listMax(list3); Map res4 = listMax(list4); root.put("data1",res1); root.put("data2",res2); root.put("data3",res3); root.put("data4",res4); return root; } /** * 获取效率最高机台 * */ private Map listMax( List> list){ //没有数据返回空数据 if(list.size()<1) return new HashMap<>(); return Collections.max(list, new Comparator>() { @Override public int compare(Map o1, Map o2) { return o1.get("runeffe").compareTo(o2.get("runeffe")); } }); } /** * 根据班次何设备code 获取redis 数据 */ public Map getRedisRunTime(Map 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 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 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> 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> beans=new ArrayList<>(); Object[] obj=null; Map 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; } }