package com.shlanbao.tzsc.pms.sch.workorder.service.impl; import java.net.InetAddress; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import com.shlanbao.tzsc.base.dao.*; import com.shlanbao.tzsc.base.model.*; import com.shlanbao.tzsc.pms.sch.workorder.beans.BomBean; import com.shlanbao.tzsc.utils.tools.*; import org.apache.commons.lang.ObjectUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.shlanbao.tzsc.base.interceptor.WorkOrderStatChangeInterceptor; import com.shlanbao.tzsc.base.mapping.ChangeShiftDatas; import com.shlanbao.tzsc.base.mapping.MdEquipment; import com.shlanbao.tzsc.base.mapping.MdMat; import com.shlanbao.tzsc.base.mapping.MdMatType; import com.shlanbao.tzsc.base.mapping.MdShift; import com.shlanbao.tzsc.base.mapping.MdTeam; import com.shlanbao.tzsc.base.mapping.MdUnit; import com.shlanbao.tzsc.base.mapping.MdWorkshop; import com.shlanbao.tzsc.base.mapping.QualityCheckInfo; import com.shlanbao.tzsc.base.mapping.QualityCheckInfoParams; import com.shlanbao.tzsc.base.mapping.SchCalendar; import com.shlanbao.tzsc.base.mapping.SchWorkorder; import com.shlanbao.tzsc.base.mapping.SchWorkorderBom; import com.shlanbao.tzsc.base.mapping.SysLog; import com.shlanbao.tzsc.base.mapping.SysMessageQueue; import com.shlanbao.tzsc.base.service.BaseService; import com.shlanbao.tzsc.data.runtime.handler.DbOutputOrInputInfos; import com.shlanbao.tzsc.init.BaseParams; import com.shlanbao.tzsc.pms.md.fixCode.beans.FixCodeBean; import com.shlanbao.tzsc.pms.sch.stat.beans.OutputBean; import com.shlanbao.tzsc.pms.sch.stat.service.StatServiceI; import com.shlanbao.tzsc.pms.sch.workorder.beans.TransmitterOutput; import com.shlanbao.tzsc.pms.sch.workorder.beans.TransmitterWorkOrderBean; import com.shlanbao.tzsc.pms.sch.workorder.beans.WorkOrderBean; import com.shlanbao.tzsc.pms.sch.workorder.service.WorkOrderServiceI; import com.shlanbao.tzsc.utils.params.SysEqpTypeBase; import javax.servlet.http.HttpServletRequest; @Service public class WorkOrderServiceImpl extends BaseService implements WorkOrderServiceI { @Autowired private SchWorkorderDaoI schWorkorderDao; @Autowired private MdShiftDaoI shiftDao; @Autowired private SchWorkorderBomDaoI schWorkorderBomDao; @Autowired private StatServiceI statService; @Autowired private SchCalendarDaoI schCalendarDao; @Autowired private SysLogDaoI logdao; @Autowired private SysMessageQueueDaoI SysMessageQueueDao; @Autowired private StatServiceI statServiceImpl; @Autowired private SysLogDaoI sysLogDaoImpl; @Autowired private MdMatTypeDaoI mdMatTypeDao; @Autowired private MdMatDaoI mdMatDao; @Autowired private EqmipmentsDaoI equipmentDao; @Autowired private QualityCheckMesDataParamsDaoI InfoParamsDao; @Autowired private QualityCheckMesDataDaoI infoDao; @Autowired private TransmitterWorkOrderDaoI transmitterWorkOrderDaoI; @Autowired private TransmitterOutputDaoI transmitterOutputDaoI; @Autowired HttpServletRequest request; public SchWorkorder getRunSchWorkorder(String code) { String hql = "from SchWorkorder o where o.del=0 and o.isCheck=1 and o.sts=2 and o.mdEquipment.equipmentCode=? "; List params = new ArrayList(); params.add(code); SchWorkorder schWorkorder = null; try { schWorkorder = schWorkorderDao.unique(SchWorkorder.class, hql, params); } catch (Exception e) { log.debug("error :" + e.getMessage()); } return schWorkorder; } /** * 根据设备CODE 获取正在运行的工单 并填充辅料 * * @throws Exception */ public void queryRunWorkFl(SchWorkorder schWorkorder) { //向DataHandler中calcValues保存辅料计数参数和烟机滚轴系数 try { if (null != schWorkorder) { this.setCalcValue(schWorkorder); } } catch (Exception e) { log.debug("error :" + e.getMessage()); } } public SchWorkorder getWork(String code) { String hql = "from SchWorkorder o where o.del=0 and o.isCheck=1 and o.sts=2 and o.mdEquipment.equipmentCode=? "; List params = new ArrayList(); params.add(code); SchWorkorder schWorkorder = null; //有运行的工单 //向DataHandler中calcValues保存辅料计数参数和烟机滚轴系数 try { schWorkorder = schWorkorderDao.unique(SchWorkorder.class, hql, params); if (null != schWorkorder) { this.setCalcValue(schWorkorder); } } catch (Exception e) { log.debug("error :" + e.getMessage()); } return schWorkorder; } @Override public DataGrid getAllWorkOrders(WorkOrderBean workOrderBean, PageParams pageParams) { try { return new DataGrid(convertWorkOrderBean(schWorkorderDao.queryByPage(getQuerySql(workOrderBean), pageParams)), schWorkorderDao.queryTotal("select count(o) ".concat(getQuerySql(workOrderBean).replace("fetch", "")))); } catch (Exception e) { log.error("查询工单异常", e); } return null; } private List convertWorkOrderBean(List rows) throws Exception { List orderBeans = new ArrayList<>(); WorkOrderBean bean = null; for (SchWorkorder schWorkorder : rows) { bean = BeanConvertor.copyProperties(schWorkorder, WorkOrderBean.class); bean.setTeam(schWorkorder.getMdTeam() == null ? null : schWorkorder.getMdTeam().getName()); bean.setShift(schWorkorder.getMdShift() == null ? null : schWorkorder.getMdShift().getName()); bean.setTeamId(schWorkorder.getMdTeam() == null ? null : schWorkorder.getMdTeam().getId()); bean.setShiftId(schWorkorder.getMdShift() == null ? null : schWorkorder.getMdShift().getId()); bean.setEquipment(schWorkorder.getMdEquipment() == null ? null : schWorkorder.getMdEquipment().getEquipmentName()); bean.setEquipmentId(schWorkorder.getMdEquipment() == null ? null : schWorkorder.getMdEquipment().getId()); bean.setUnit(schWorkorder.getMdUnit() == null ? null : schWorkorder.getMdUnit().getName()); bean.setUnitId(schWorkorder.getMdUnit() == null ? null : schWorkorder.getMdUnit().getId());//(新增生产实绩产量时需要同步工单计量单位) bean.setMat(schWorkorder.getMdMat() == null ? null : schWorkorder.getMdMat().getName()); bean.setMatId(schWorkorder.getMdMat() == null ? null : schWorkorder.getMdMat().getId()); bean.setType(schWorkorder.getType()); FillUserInfoUtil.fillCreateAndUpdateUserInfo(schWorkorder, bean); orderBeans.add(bean); bean = null; } return orderBeans; } private String getQuerySql(WorkOrderBean workOrderBean) { String hql = "from SchWorkorder o left join fetch o.mdTeam t left join fetch o.mdShift s left join fetch " + "o.mdEquipment e left join fetch e.mdEqpType et left join fetch e.mdWorkshop w left join fetch " + "o.mdUnit u left join fetch o.mdMat m where o.del=0 and o.type in (" + workOrderBean.getParam() + ") "; String params = ""; if (StringUtil.notNull(workOrderBean.getTeam())) { params = params.concat(" and t.code = '" + workOrderBean.getTeam() + "'"); } if (StringUtil.notNull(workOrderBean.getShift())) { params = params.concat(" and s.code = '" + workOrderBean.getShift() + "'"); } if (StringUtil.notNull(workOrderBean.getDate())) { params = params.concat(" and to_char(o.date,'yyyy-MM-dd') >= '" + workOrderBean.getDate() + "'"); } if (StringUtil.notNull(workOrderBean.getDate2())) { params = params.concat(" and to_char(o.date,'yyyy-MM-dd') <= '" + workOrderBean.getDate2() + "'"); } if (workOrderBean.getSts() != null) { params = params.concat(" and o.sts = " + workOrderBean.getSts() + ""); } if (workOrderBean.getType() != null) { params = params.concat(" and o.type = " + workOrderBean.getType() + ""); } if (workOrderBean.getIsCheck() != null) { params = params.concat(" and o.isCheck = " + workOrderBean.getIsCheck() + ""); } if (StringUtil.notNull(workOrderBean.getCode())) { params = params.concat(" and (o.code like '%" + workOrderBean.getCode() + "%' or m.name like '%" + workOrderBean.getCode() + "%')"); } params = params.concat(" order by o.date desc,s.code,e.equipmentCode asc"); return hql.concat(params); } @LogAnno(operateType = "单个审核工单") @Override public String checkWorkOrder(String id) throws Exception { SchWorkorder schWorkorder = schWorkorderDao.findById(SchWorkorder.class, id); if (schWorkorder != null) { if (DateUtil.datetoStr(schWorkorder.getDate(), "yyyy-MM-dd").equals(DateUtil.datetoStr(new Date(), "yyyy-MM-dd"))) { schWorkorder.setIsCheck(1L); schWorkorder.setSts(Long.parseLong("1"));//状态 schWorkorder.setIsAuto("Y"); schWorkorder.setCheckTime(new Date()); FillUserInfoUtil.fillUpdateUserInfo(schWorkorder, request); } else { return schWorkorder.getCode(); } } else { log.error("id:" + id + "的工单不存在"); throw new Exception(); } return null; } @LogAnno(operateType = "批量审核工单") @Override public String checkWorkOrders(String ids) throws Exception { String msg = ""; for (String id : StringUtil.splitToStringList(ids, ",")) { String s = this.checkWorkOrder(id); if (s != null) { msg += "[" + s + "] "; } } if (msg != "") { return "部分工单未审核!->非当日工单!"; } else { return null; } } @LogAnno(operateType = "编辑工单状态") @Override public void editWorkOrderStatus(String id, Long sts) throws Exception { SchWorkorder schWorkorder = schWorkorderDao.findById(SchWorkorder.class, id);//锁定状态(1-允许,0-不允许)。当为7时表示已经允许 if (schWorkorder != null) { /* 1,下发
* 2,运行 -->运行时在生产实绩中保存val=0的数据,即采集程序只做update操作
* 3,暂停 -->MES取消撤销工单时
* 4,完成 -->工单完成,更新工单结束时间
* 5,终止 -->错误的工单运行时,执行本操作删除生产实绩相关数据
* 6,结束 -->工单已经反馈
* 7,锁定 -->MES发起撤销时
* 8,撤销 -->MES确定撤销时
*/ if (sts == 1) { schWorkorder.setIsAuto("Y");//下发工单 默认自动运行 } if (sts == 2) { //只让没有运行过的工单改变运行状态,防止出现多个产出数据 long status = schWorkorder.getSts(); if (status != 2 && status != 4 && schWorkorder.getRealStim() == null) { List list = schWorkorderDao.queryBySql("select * from SCH_WORKORDER where eqp = ? and sts = 2 and del = 0",schWorkorder.getMdEquipment().getId()); if (list!=null && list.size() > 0){ throw new RuntimeException("此工单所属机台有未结束的工单!!"); } Date date = new Date(); schWorkorder.setRealStim(date);//实绩开始时间 //保存生产实绩空数据 OutputBean outputBean = new OutputBean(); outputBean.setWorkorder(id); outputBean.setStim(DateUtil.formatDateToString(date, "yyyy-MM-dd HH:mm:ss"));//保证工单与生产实绩开始时间同步。 statService.addOutput(outputBean, 0); //向 redis 中保存辅料计数参数 this.setCalcValue(schWorkorder); //2运行-4完成-5终止 信号反馈MES -将数采编号转换成MES编号 FixCodeBean fcb = SysEqpTypeBase.getFixCodeByMesCode(sts.toString(), "WK001", false); DASSendOrderChange(fcb.getMesCode(), schWorkorder); }/*else{ throw new RuntimeException(status==2?"该工单已经在运行!!":status==4?"完成状态的工单不可运行!!":"该工单不可运行,请联系管理员!"); }*/ } else if (sts == 0) {//表示 手动托班,需要手动结束工单 schWorkorder.setIsAuto("N");//表示 手动结束工单 } if (sts == 4) { // 工单结束 String ecode = schWorkorder.getMdEquipment().getEquipmentCode(); // 设备code RedisUtil.del(ecode + "CC"); RedisUtil.del(ecode + "WK"); Map dbOutputOrInputInfos = RedisUtil.getMap("outputInput"); DbOutputOrInputInfos info = (DbOutputOrInputInfos) JSONUtil.JSONString2Bean(dbOutputOrInputInfos.get(ecode).toString(), DbOutputOrInputInfos.class); OutputBean outputBean = new OutputBean(); if (info.getStatOutputId() != null) { outputBean.setId(info.getStatOutputId()); //实绩完成时间 outputBean.setEtim(DateUtil.getNowDateTime("yyyy-MM-dd HH:mm:ss")); statServiceImpl.editOutput(outputBean); } schWorkorder.setRealEtim(new Date());//实绩结束时间 outputBean.setEqpCode(ecode); outputBean.setWorkorder(schWorkorder.getId()); outputBean.setWorkorderCode(schWorkorder.getCode()); statService.saveEquipmentData(outputBean); String sql = "select * from (select * from SCH_WORKORDER where type = ? and eqp = ? and stim < ? and del=0 and enable = 1 and sts = 4 order by stim desc ) where rownum <= 1"; List lastOrder = schWorkorderDao.queryBySql(sql, schWorkorder.getType(), schWorkorder.getMdEquipment().getId(), schWorkorder.getStim()); if (lastOrder != null && lastOrder.size() > 0) { Object[] oldOrder = (Object[]) lastOrder.get(0); if (!schWorkorder.getMdMat().getId().equals(oldOrder[9].toString())) { List params = new ArrayList<>(); params.add(schWorkorder.getMdTeam().getId()); params.add(oldOrder[7].toString()); params.add(schWorkorder.getMdShift().getId()); params.add(schWorkorder.getMdMat().getId()); params.add(oldOrder[6].toString()); params.add(oldOrder[9].toString()); params.add(schWorkorder.getDate()); params.add(DateUtil.strToDate(oldOrder[20].toString(), "yyyy-MM-dd HH:mm:ss")); params.add(schWorkorder.getRealStim()); params.add(oldOrder[0].toString()); params.add(schWorkorder.getId()); schCalendarDao.updateBySql("INSERT INTO SCH_SHIFT_EXCHG(ID, TO_TEAM, HO_TEAM, TO_SHIFT, TO_MAT, HO_SHIFT, HO_MAT, " + "DATE_, HO_TIME, TO_TIME, HO_ORDER, TO_ORDER, DEL,TYPE) VALUES (sys_guid(), ?,?,?,?,?,?,?,?,?,?,?,0,2)", params); } } //2运行-4完成-5终止 信号反馈MES -将数采编号转换成MES编号 FixCodeBean fcb = SysEqpTypeBase.getFixCodeByMesCode(sts.toString(), "WK001", false); DASSendOrderChange(fcb.getMesCode(), schWorkorder); } if (sts == 5) { //删除生产实绩数据 statService.deleteOutputByWorkOrder(id); } schWorkorder.setSts(sts); FillUserInfoUtil.fillUpdateUserInfo(schWorkorder, request); /* 只有运行和完成状态才反馈mes * FixCodeBean * fcb=SysEqpTypeBase.getFixCodeByMesCode(sts.toString(),"WK001",false); * DASSendOrderChange(fcb.getMesCode(), schWorkorder); */ } else { log.error("id:" + id + "的工单不存在"); throw new Exception("id:" + id + "的工单不存在"); } } /** * [功能说明]:向MES发送工单状态 */ public void DASSendOrderChange(String sts, SchWorkorder schWorkorder) { //将数据封装成XML WorkOrderStatChangeInterceptor.getInstance().dasSendOrderChange(sts, schWorkorder); } /** * @return void * @title setCalcValue * @description 运行工单时,向Redis保存辅料计数参数 * @author bsw * @params [schWorkorder] * @updateTime 16:37 2019/8/5 0005 **/ private void setCalcValue(SchWorkorder schWorkorder) throws Exception { // 获得工单类型 /** 1: "卷烟机工单"; 2: "包装机工单"; 3: "封箱机工单"; 4: "成型机工单"; */ Long workorderType = schWorkorder.getType(); String equipmentCode = schWorkorder.getMdEquipment().getEquipmentCode(); String workOrderCode = schWorkorder.getCode(); RedisUtil.del(equipmentCode + "CC"); RedisUtil.del(equipmentCode + "WK"); Map map = new HashMap<>(); String hql = "select mp.val,mp.mdMat.mdMatType.code from SchWorkorderBom bom,MdMatParam mp where bom.bom_lot_id=? and bom.mdMat.id=mp.mdMat.id"; List vals = schWorkorderDao.queryObjectArray(hql, schWorkorder.getBomVersion()); if (vals == null) { throw new Exception("工单号:" + workOrderCode + " 物料信息未在辅料计数参数中配置,请联系管理员配置"); } if (workorderType == 1) { Double shuisongzhiValue = null; //水松纸系数 for (Object[] o : vals) { if (o[1].toString().equals("3")) {//水松纸系数 shuisongzhiValue = Double.valueOf(o[0].toString()); } } //判断是否配置完整 if (shuisongzhiValue == null) { throw new Exception("工单号:" + workOrderCode + " 水松纸辅料计数参数未配置"); } map.put("ssz", shuisongzhiValue + ""); } else if (workorderType == 2) { Double xiaohemoValue = null, //小盒膜系数 tiaohemoValue = null, //条盒膜系数 neichenzhiValue = null;//内衬纸系数 for (Object[] o : vals) { if (o[1].toString().equals("5")) {//小盒膜系数 xiaohemoValue = Double.valueOf(o[0].toString()); } if (o[1].toString().equals("6")) {//条盒膜系数 tiaohemoValue = Double.valueOf(o[0].toString()); } if (o[1].toString().equals("9")) {//内衬纸系数 neichenzhiValue = Double.valueOf(o[0].toString()); } } //判断是否配置完整 if (xiaohemoValue == null) { throw new Exception("工单号:" + workOrderCode + " 小盒膜辅料计数参数未配置"); } if (tiaohemoValue == null) { throw new Exception("工单号:" + workOrderCode + " 条盒膜辅料计数参数未配置"); } if (neichenzhiValue == null) { throw new Exception("工单号:" + workOrderCode + " 内衬纸辅料计数参数未配置"); } map.put("xhm", xiaohemoValue + ""); map.put("thm", tiaohemoValue.toString()); map.put("ncz", neichenzhiValue.toString()); } RedisUtil.setMap(equipmentCode + "CC", map); } @Override public WorkOrderBean getWorkOrderById(String id) throws Exception { SchWorkorder schWorkorder = schWorkorderDao.findById(SchWorkorder.class, id); WorkOrderBean bean = BeanConvertor.copyProperties(schWorkorder, WorkOrderBean.class); bean.setTeam(schWorkorder.getMdTeam().getName()); bean.setShift(schWorkorder.getMdShift().getName()); bean.setEquipment(schWorkorder.getMdEquipment().getEquipmentName()); bean.setMat(schWorkorder.getMdMat().getSimpleName()); bean.setId(schWorkorder.getId()); bean.setEqpcode(schWorkorder.getMdEquipment().getEquipmentCode()); bean.setEquipmentId(schWorkorder.getMdEquipment().getId()); return bean; } @LogAnno(operateType = "新增工单") @Override public void addOrder(WorkOrderBean workOrderBean) throws Exception { SchWorkorder schWorkorder = BeanConvertor.copyProperties(workOrderBean, SchWorkorder.class); List workorders = schWorkorderDao.query("from SchWorkorder where ((? between stim and etim) or (? between stim and etim)) and mdEquipment.id = ? and del = 0 and enable = 1", schWorkorder.getStim(), schWorkorder.getEtim(), workOrderBean.getEquipmentId()); if (workorders != null && workorders.size() > 0) { throw new RuntimeException("工单时间与另一个工单时间重叠!"); } schWorkorder.setMdUnit(new MdUnit(workOrderBean.getUnitId())); schWorkorder.setMdEquipment(new MdEquipment(workOrderBean.getEquipmentId())); schWorkorder.setMdTeam(new MdTeam(workOrderBean.getTeamId())); schWorkorder.setMdMat(new MdMat(workOrderBean.getMatId())); schWorkorder.setMdShift(new MdShift(workOrderBean.getShiftId())); schWorkorder.setRunSeq(1L); schWorkorder.setEnable(1L); schWorkorder.setDel(0L); schWorkorder.setIsCheck(0L); schWorkorder.setIsAuto("Y"); List param = getParamVersionByProd(workOrderBean.getMatId()); if (param != null && param.size() == 1) { schWorkorder.setParameterSetRevision(param.get(0).getId()); } else { throw new RuntimeException("未找到工艺参数或工艺参数不唯一!"); } FillUserInfoUtil.fillCreateUserInfo(schWorkorder, request); schWorkorderDao.save(schWorkorder); } @Override public void initAllRunnedWorkOrderCalcValues() throws Exception { List schWorkorders = schWorkorderDao.query("from SchWorkorder o where o.sts=2"); for (SchWorkorder schWorkorder : schWorkorders) { this.setCalcValue(schWorkorder); } } @LogAnno(operateType = "新增排班") @Override public boolean addPbWork(WorkOrderBean workOrderBean) throws Exception { if (null != workOrderBean) { String start = workOrderBean.getStim();//开始日期 String end = workOrderBean.getEtim();//结束日期 //一共多少天 int days = DateUtil.computerDiffDate(start.replaceAll("-", ""), end.replaceAll("-", "")); if (days >= 0) {//表示 包含当前 //删除当前时间段的记录 StringBuffer hql = new StringBuffer(); hql.append("delete from SchCalendar s "); List params = new ArrayList(); hql.append("where s.date>=? and s.date<=? and s.mdWorkshop.id=? "); Date startDay = DateUtil.strToDate(start + " 00:00:00", "yyyy-MM-dd HH:mm:ss"); Date endDay = DateUtil.strToDate(end + " 23:59:59", "yyyy-MM-dd HH:mm:ss"); params.add(startDay); params.add(endDay); params.add(String.valueOf(workOrderBean.getType())); schWorkorderDao.deleteByParams(hql.toString(), params); this.addCurMonth((days + 1), workOrderBean); } } return true; } /** * 排班,现在具体的班次开始和结束时间还没有最后确定,最终结果等生产之后确认。现在使用的是MES系统的排班时间。成型车间和卷包车间是不同的排班 */ public void addCurMonth(int days, WorkOrderBean workOrderBean) { for (int j = 0; j < days; j++) {//2天 String stim = workOrderBean.getStim(); Date beginDay = DateUtil.strToDate(stim, "yyyy-MM-dd"); Date lastTime = null; for (int i = 0; i < workOrderBean.getShiftnum(); i++) { SchCalendar sch = new SchCalendar(); MdWorkshop mdWorkshop = new MdWorkshop(); String workShop = String.valueOf(workOrderBean.getType()); mdWorkshop.setId(workShop);//1.卷包车间 2.成型车间 sch.setId(UUID.randomUUID().toString()); sch.setMdWorkshop(mdWorkshop); String begin = DateUtil.dateAdd("d", j, beginDay, "yyyy-MM-dd"); sch.setDate(DateUtil.strToDate(begin + " 00:00:00", "yyyy-MM-dd HH:mm:ss")); MdShift mdShift = null; MdTeam team = new MdTeam(); if (i == 0) {//早班 mdShift = shiftDao.findById(MdShift.class,workOrderBean.getShiftId()); lastTime = StimAndEtim(lastTime, sch, begin, mdShift); team.setId(workOrderBean.getTeamId()); team.setName(workOrderBean.getTeamName()); } else if (i == 1) {//中班 mdShift = shiftDao.findById(MdShift.class,workOrderBean.getShiftTwoId()); if (HbUtils.isProxy(mdShift)){ mdShift = HbUtils.deproxy(mdShift); } lastTime = StimAndEtim(lastTime, sch, begin, mdShift); team.setId(workOrderBean.getTeamTwoId()); team.setName(workOrderBean.getTeamTwoName()); } else if (i == 2) {//晚班 mdShift = shiftDao.findById(MdShift.class,workOrderBean.getShiftThreeId()); if (HbUtils.isProxy(mdShift)){ mdShift = HbUtils.deproxy(mdShift); } lastTime = StimAndEtim(lastTime, sch, begin, mdShift); team.setId(workOrderBean.getTeamThreeId()); team.setName(workOrderBean.getTeamThreeName()); } sch.setMdTeam(team); sch.setMdShift(mdShift); FillUserInfoUtil.fillCreateUserInfo(sch, request); sch.setDel(0L); schCalendarDao.save(sch); } } } public Date StimAndEtim(Date lastTime, SchCalendar sch, String begin, MdShift mdShift) { Date newTime; if(mdShift.getStim()==null || "".equals(mdShift.getStim())){ throw new RuntimeException("班次开始时间未设置,请在班次管理中维护"); } if(mdShift.getEtim()==null || "".equals(mdShift.getEtim())){ throw new RuntimeException("班次结束时间未设置,请在班次管理中维护"); } newTime = DateUtil.strToDate(begin + " " + mdShift.getStim(), "yyyy-MM-dd HH:mm"); sch.setStim(getRightDate(newTime, lastTime)); lastTime = sch.getStim(); newTime = DateUtil.strToDate(begin + " " + mdShift.getEtim(), "yyyy-MM-dd HH:mm"); sch.setEtim(getRightDate(newTime, lastTime)); return sch.getEtim(); } public Date getRightDate(Date newTime,Date lastTime){ return lastTime!=null?newTime.getTime()>=lastTime.getTime()?newTime:DateUtil.dateAdd("d",1,newTime):newTime; } /** * 批量新增指定机台数据 * * @author luther.zhang * @create 2015-04-29 */ @LogAnno(operateType = "批量新增工单") @Override public boolean saveBatckWork(WorkOrderBean workBean) throws Exception{ // 设备信息 MdEquipment eqp = equipmentDao.findById(MdEquipment.class, workBean.getEquipmentId()); // 排班信息 List calendars = schCalendarDao.query("from SchCalendar where date >= ? and mdWorkshop.id = ? and date <= ?" , DateUtil.strToDate(workBean.getStim(), "yyyy-MM-dd HH:mm:ss") , workBean.getType() <= 3 ? "1" : "2" // 车间:1卷包;2成型 工单类型:1.卷烟机工单 2.包装机工单 3.封箱机工单 4.成型机工单 , DateUtil.strToDate(workBean.getEtim(), "yyyy-MM-dd HH:mm:ss")); if (null != calendars && calendars.size() > 0) { // 查询新增工单时间段内是否有正在运行或已经完成的工单 List runOrders = schWorkorderDao.query("from SchWorkorder where date >= ? and date <= ? and type = ? and mdEquipment.id = ? and (sts = 2 or sts = 4) and enable = 1 and del = 0" ,DateUtil.strToDate(workBean.getStim(), "yyyy-MM-dd HH:mm:ss") ,DateUtil.strToDate(workBean.getEtim(), "yyyy-MM-dd HH:mm:ss") ,workBean.getType() ,workBean.getEquipmentId()); if (runOrders!=null && runOrders.size()>0){ throw new RuntimeException("不可覆盖!此时间段内有正在运行或已经完成的工单!"); } //删除投料表 schWorkorderDao.updateInfo("delete SCH_STAT_INPUT where out_id in(" + "SELECT b.id from SCH_WORKORDER a LEFT JOIN SCH_STAT_OUTPUT b ON a.id=b.oid " + "WHERE a.DATE_>=to_date('" + workBean.getStim() + "','yyyy-MM-dd hh24:mi:ss') and a.DATE_<= to_date('" + workBean.getEtim() + "','yyyy-mm-dd hh24:mi:ss') " + "and a.type='" + workBean.getType() + "' and a.EQP='" + workBean.getEquipmentId() + "')", null); //删除产量数据表 schWorkorderDao.updateInfo("DELETE SCH_STAT_OUTPUT where oid in(" + "select id from SCH_WORKORDER where DATE_>=to_date('" + workBean.getStim() + "','yyyy-MM-dd hh24:mi:ss') " + "and DATE_<= to_date('" + workBean.getEtim() + "','yyyy-mm-dd hh24:mi:ss') and type='" + workBean.getType() + "' and EQP='" + workBean.getEquipmentId() + "')", null); //删除工单表 schWorkorderDao.updateInfo("DELETE SCH_WORKORDER where id in(" + "select id from SCH_WORKORDER where DATE_>=to_date('" + workBean.getStim() + "','yyyy-MM-dd hh24:mi:ss') " + "and DATE_<= to_date('" + workBean.getEtim() + "','yyyy-mm-dd hh24:mi:ss') and type='" + workBean.getType() + "' and EQP='" + workBean.getEquipmentId() + "')", null); for (SchCalendar calendar : calendars) { // 工单号生成规则 设备代码+六位当前日期+班次+班组+#010/#020 // 发射机暂时没有代码 故用“T“ + 机台号 String code = (eqp.getWorkCenter() == null ? "T" + (eqp.getEquipmentCode().substring(1)) : eqp.getWorkCenter()) + DateUtil.datetoStr(calendar.getStim(), "yyMMdd") + calendar.getMdShift().getId() + calendar.getMdTeam().getId() + ((workBean.getType() == 2) ? "#020" : "#010"); //增加创建人与创建时间信息 SessionInfo sessionInfo = (SessionInfo) request.getSession().getAttribute("sessionInfo"); //新增工单 try { SchWorkorder workorder = new SchWorkorder(); workorder.setId(UUID.randomUUID().toString().replace("-", "")); workorder.setCode(code); workorder.setBth(code.replaceAll("#", "")); workorder.setIsNew(1L); workorder.setType(workBean.getType()); workorder.setProdType(1L); workorder.setMdShift(calendar.getMdShift()); workorder.setMdTeam(calendar.getMdTeam()); workorder.setMdEquipment(new MdEquipment(workBean.getEquipmentId())); workorder.setMdMat(new MdMat(workBean.getMatId())); workorder.setQty(workBean.getQty()); workorder.setMdUnit(new MdUnit(workBean.getUnitId())); workorder.setDate(calendar.getDate()); workorder.setStim(calendar.getStim()); workorder.setEtim(calendar.getEtim()); workorder.setBomVersion(workBean.getBomVersion()); workorder.setSts(1L); workorder.setIsCheck(0L); workorder.setRunSeq(1L); workorder.setEnable(1L); workorder.setDel(0L); workorder.setIsAuto("Y"); workorder.setParameterSetRevision(workBean.getParameterSetRevision()); workorder.setCreateUserName(sessionInfo.getUser().getName()); workorder.setCreateUserTime(new Date()); workorder.setUpdateUserName(sessionInfo.getUser().getName()); workorder.setUpdateUserTime(new Date()); schWorkorderDao.save(workorder); } catch (Exception e) { log.error("新增工单 报错:" + e.getMessage()); throw e; } } return true; } else { return false; } } /** * 批量新增指定机台数据 * * @author luther.zhang * @create 2015-04-29 */ @LogAnno(operateType = "新增发射机工单") @Override public boolean saveBatckWorkFSJ(TransmitterWorkOrderBean workBean, String date1, String date2) throws Exception{ //查询该设备在该事件段内是否有工单 String queryOrder = "SELECT * FROM SCH_TRANSMITTER_WKORDER WHERE DATE_ >= TO_DATE('"+date1+"', 'SYYYY-MM-DD HH24:MI:SS') AND DATE_ <= TO_DATE('"+date2+"', 'SYYYY-MM-DD HH24:MI:SS')" + " AND EQP_ID = '"+workBean.getEqpId()+"' AND (sts = 2 or sts = 4) AND DEL = 0" ; List objects = schWorkorderDao.queryBySql(queryOrder); if (objects!=null && objects.size()>0){ throw new RuntimeException("不可覆盖!此时间段内有正在运行或已经完成的工单!"); } //1.查询换班时间 SHIFT是班次(早中晚) //2.假删除大于今天的所有工单 以及 辅料 //for循环begin //新增工单,新增工单对应的辅料数据 //end String workshop = "2"; StringBuffer sql = new StringBuffer(); sql.append("select ID,SHIFT,TEAM,to_char(STIM,'yyyy-mm-dd hh24:mi:ss'),to_char(ETIM,'yyyy-mm-dd hh24:mi:ss'),WORKSHOP,to_char(date_,'yyyy-MM-dd') as pDate from SCH_CALENDAR "); sql.append("where date_>=to_date(?,'yyyy-mm-dd hh24:mi:ss') and DEL=0 and WORKSHOP=? and date_<=to_date(?,'yyyy-mm-dd hh24:mi:ss') "); date1 = date1.trim() + " 00:00:00";//如果是 5.10 date2 = date2.trim() + " 23:59:59";//如果是 5.10 // 设备信息 MdEquipment eqp = equipmentDao.findById(MdEquipment.class, workBean.getEqpId()); List params = new ArrayList(); params.add(date1); params.add(workshop); params.add(date2); List list = schWorkorderDao.queryBySql(sql.toString(), params); if (null != list && list.size() > 0) { //假删除所有工单 (修改成删除时间段内的工单) StringBuffer temp = new StringBuffer(); ////////////////////////真删除式覆盖工单///////////////////////////// //覆盖删除该时间段内的工单相关数据 //删除产量数据表 temp = new StringBuffer(); temp.append("DELETE SCH_TRANSMITTER_OUTPUT where Tw_ID in(select id from SCH_TRANSMITTER_WKORDER where DATE_>=to_date('" + date1 + "','yyyy-MM-dd hh24:mi:ss') and DATE_<= to_date('" + date2 + "','yyyy-mm-dd hh24:mi:ss') and order_type='" + workBean.getOrderType() + "' and EQP_ID='" + workBean.getEqpId() + "')"); schWorkorderDao.updateInfo(temp.toString(), null); //删除工单表 temp = new StringBuffer(); temp.append("DELETE SCH_TRANSMITTER_WKORDER where id in(select id from SCH_TRANSMITTER_WKORDER where DATE_>=to_date('" + date1 + "','yyyy-MM-dd hh24:mi:ss') and DATE_<= to_date('" + date2 + "','yyyy-mm-dd hh24:mi:ss') and order_type='" + workBean.getOrderType() + "' and EQP_ID='" + workBean.getEqpId() + "')"); schWorkorderDao.updateInfo(temp.toString(), null); /////////////////////////////////end////////////////////////////// List comboxList = BaseParams.getAllEqpsCombobox(false); for (int i = 0; i < list.size(); i++) { Object[] arr = (Object[]) list.get(i); //String key = ObjectUtils.toString(arr[0]);//主键 String shift = ObjectUtils.toString(arr[1]);//SHIFT是班次(早中晚) String team = ObjectUtils.toString(arr[2]);//班组 甲乙丙 String stim = ObjectUtils.toString(arr[3]);//开始时间 yyyy-MM-dd HH:mm:ss String etim = ObjectUtils.toString(arr[4]);//结束时间 yyyy-MM-dd HH:mm:ss String pDate = ObjectUtils.toString(arr[6]);//工单日期 Date startTime = DateUtil.strToDate(stim, "yyyy-MM-dd HH:mm:ss"); String startStr = DateUtil.datetoStr(startTime, "yyMMdd"); Date pDateTime = DateUtil.strToDate(pDate, "yyyy-MM-dd"); // 工单号生成规则 设备代码+六位当前日期+班次+班组+#010/#020 // 发射机暂时没有代码 故用“T“ + 机台号 String code = (eqp.getWorkCenter() == null ? "T" + (eqp.getEquipmentCode().substring(1)) : eqp.getWorkCenter()) + startStr + shift + team + "#010"; String workId = UUID.randomUUID().toString().replace("-", ""); //增加创建人与创建时间信息 SessionInfo sessionInfo = (SessionInfo) request.getSession().getAttribute("sessionInfo"); String createUserName = sessionInfo.getUser().getName(); String createUserTime = DateUtil.datetoStr(new Date(), "yyyy-MM-dd HH:mm:ss"); String updateUserName = createUserName; String updateUserTime = createUserTime; //新增工单 temp = new StringBuffer(); temp.append("insert into SCH_TRANSMITTER_WKORDER(") .append("ID,WORK_ORDER_CODE,BATCH_CODE,ORDER_TYPE,PRODUCT_TYPE,SHIFT,TEAM,EQP_ID,MATERIAL_CODE,") .append("PLAN_QUANTITY,UNIT,DATE_,STIM,ETIM,STS,IS_CHECK,DEL,IS_FEEDBACK,CREATE_USER_NAME,CREATE_USER_TIME,UPDATE_USER_NAME,UPDATE_USER_TIME ) values(") .append(" '" + workId + "','" + code + "','" + code.replaceAll("#", "") + "','" + workBean.getOrderType() //ID,CODE,BTH,IS_NEW,TYPE + "','1','" + shift + "','" + team + "','" + workBean.getEqpId() + "','" + workBean.getMaterialCode() + "' ") .append(",'" + workBean.getQty() + "','" + workBean.getUnit() + "',to_date('" + DateUtil.datetoStr(pDateTime, "yyyy-MM-dd") + "','yyyy-mm-dd'),to_date('" + stim + "','yyyy-mm-dd hh24:mi:ss'),to_date('" + etim + "','yyyy-mm-dd hh24:mi:ss'),'1','0','0','0','" + createUserName + "',to_date('" + createUserTime + "','yyyy-mm-dd hh24:mi:ss'),'" + updateUserName + "',to_date('" + updateUserTime + "','yyyy-mm-dd hh24:mi:ss')) "); try { schWorkorderDao.updateInfo(temp.toString(), null); } catch (Exception e) { log.error("新增工单 报错:" + e.getMessage()); } } return true; } else { return false; } } @Override public long queryTransmitterOrderByCode(String workOrderCode) { try { String hql = "select count(1) from TransmitterWorkOrderBean o where o.del=0 and o.workOrderCode=? "; long num = mdMatDao.queryTotal(hql, workOrderCode); return num; } catch (Exception e) { e.printStackTrace(); } return 0; } /** * 根据条件查询 工单 * * @param sts 工单状态:2运行工单,1.下发工单 * @param isAuto 是否 自动模式 (Y or null);N 表示 拖班 手动模式 * @param isCheck 1:审核通过 0 审核未通过 * @param mdShiftCode 班次 * @param mdTeamCode 班组 * @param workshopCode 工作车间 * @param workType 开启 or 关闭 工单 * @param date1 前后结束时间 * @param date2 结束时间 * @param params 条件集合 * @param qcEqp 去除不开启工单的机台 * @return */ public List getSchWorkorderList(String sts, String isCheck, String isAuto, String mdShiftCode, String mdTeamCode, String workshopCode, String workType, String date1, String date2, List params, String qcEqp) { StringBuffer sql = new StringBuffer(); sql.append("select m.EQUIPMENT_NAME, m.EQUIPMENT_CODE ,s.id,s.TYPE,s.EQP,s.mat,");//5个 sql.append("s.date,s.STIM,s.ETIM,s.sts,s.IS_CHECK,s.RUN_SEQ,s.IS_AUTO,s.SHIFT,s.TEAM ");//5+9=14 sql.append(" from SCH_WORKORDER s WITH (NOLOCK) left join MD_EQUIPMENT m WITH (NOLOCK) on s.EQP=m.id "); sql.append(" where s.DEL=0 "); sql.append(" and s.STS=? and s.IS_CHECK=? "); params.add(sts);//运行工单 params.add(isCheck);//审核通过 if ("START".equals(workType)) { sql.append(" and (s.IS_AUTO=? or s.IS_AUTO is null) "); sql.append(" and s.SHIFT=? and s.TEAM=? "); params.add(isAuto);//是否托班 标识 params.add(mdShiftCode);//班次 params.add(mdTeamCode);//班组 sql.append(" and s.STIM>=? and s.STIM<=? "); params.add(date1);//开始时间 //2015-04-18 15:00:00.0 params.add(date2);//结束时间 //2015-04-18 15:10:00 if ("Y".equals(qcEqp)) {//有拖班的工单,不开启该机台的下一个工单 sql.append(" and s.EQP not in (select distinct s.EQP from SCH_WORKORDER s WITH (NOLOCK) ") .append(" where s.DEL=0 and IS_CHECK=1 and STS=1 and IS_AUTO='N' ) ");//审核通过,运行的+ 手动模式工单 } } else if ("END1".equals(workType)) { sql.append(" and (s.IS_AUTO=? or s.IS_AUTO is null) "); sql.append(" and s.SHIFT=? and s.TEAM=? "); params.add(isAuto);//是否托班 标识 params.add(mdShiftCode);//班次 params.add(mdTeamCode);//班组 sql.append(" and s.ETIM>=? and s.ETIM<=? "); params.add(date1);//开始时间2015-04-18 22:50:00 params.add(date2);//结束时间2015-04-18 23:00:00.0 } else if ("END2".equals(workType)) { sql.append(" and s.REAL_STIM<=? "); params.add(date1);//开始时间 2015-04-18 06:00:00 } List list = schWorkorderDao.queryBySql(sql.toString(), params); return list; } /** * 查询上一班次采集数据详细 * * @createTime 2015年10月26日08:35:09 * @author wanchanghuang */ @Override public Map> getMapChangeShiftDates(ChangeShiftDatas csd) { StringBuffer sbf = new StringBuffer(); sbf.append(" select c.equipment_code,sum(b.qty)from SCH_WORKORDER a,SCH_STAT_OUTPUT b,MD_EQUIPMENT c where a.id=b.oid and a.eqp=c.id and a.sts='4' "); //获得班次 Integer shift = csd.getShift(); //dac采集 0=早班 1=中班 2=晚班 -> 数据库 1=早班 2=中班 3=晚班 if (shift == 2) { //=1,查询早班 sbf.append(" and a.shift in ('" + (shift - 1) + "')"); } else if (shift == 3) { //=2 ,查询早班+中班 sbf.append(" and a.shift in ('" + (shift - 2) + "','" + (shift - 1) + "')"); } //时间 sbf.append(" and convert(varchar(24),a.date,23)='" + csd.getDate() + "'"); //设备表code sbf.append(" group by c.equipment_code "); List list = schWorkorderDao.queryBySql(sbf.toString()); ChangeShiftDatas shiftDataf = null; List listShiftDatas = new ArrayList(); Map> map = new HashMap>(); //将object转换成bean if (list.size() > 0) { for (Object o : list) { shiftDataf = new ChangeShiftDatas(); Object[] temp = (Object[]) o; shiftDataf.setEquipment_code(temp[0].toString()); shiftDataf.setQty(Double.parseDouble(temp[1].toString())); listShiftDatas.add(shiftDataf); } } map.put(shift, listShiftDatas); return map; } /** * 删除工单 * shisihai */ @LogAnno(operateType = "删除工单") @Override public void deleteWorkOrders(String ids, String eqpName, String team, String date, String mat, SessionInfo info) { this.deleteWorkOrderData(ids, eqpName, team, date, mat, info); } /** * 删除工单和辅料数据 * * @param id */ private void deleteWorkOrderData(String id, String eqpName, String team, String date, String mat, SessionInfo info) { try { //删除投料表 String sql = "delete SCH_STAT_INPUT where out_id=(SELECT b.id from SCH_WORKORDER a LEFT JOIN SCH_STAT_OUTPUT b ON a.id=b.oid WHERE oid='" + id + "')"; schWorkorderDao.updateBySql(sql, null); //删除产量数据表 sql = "DELETE from SCH_STAT_OUTPUT where oid='" + id + "'"; schWorkorderDao.updateBySql(sql, null); //删除工单表 sql = "DELETE from SCH_WORKORDER where id='" + id + "'"; schWorkorderDao.updateBySql(sql, null); SysLog log = new SysLog(); log.setSys("PMS"); if (info != null) { log.setName(info.getUser().getName());//操作人 log.setIp(info.getIp()); } log.setOptname("删除工单以及与此工单相关的产量/辅料数据操作");//操作名或路径 log.setParams("删除的工单id:" + id + " 机台:" + eqpName + " 班组:" + team + " 牌号:" + mat + " 工单时间:" + date);//参数 log.setSuccess("操作成功"); log.setDate(new Date()); log.setDel(0L); logdao.save(log); } catch (Exception e) { e.printStackTrace(); } } /** * 批量删除工单 * * @param ids * @param eqpName * @param team * @param date * @param mat * @param info */ @LogAnno(operateType = "批量删除工单") @Override public void deleteBeatchWorkOrders(String ids, String eqpName, String team, String date, String mat, SessionInfo info) { try { String[] id = ids.split(","); String[] ens = eqpName.split(","); String[] ts = team.split(","); String[] ds = date.split(","); String[] ms = mat.split(","); for (int i = 0; i < id.length; i++) { this.deleteWorkOrderData(id[i], ens[i], ts[i], ds[i], ms[i], info); } } catch (Exception e) { e.printStackTrace(); } } /** * 【功能说明】:MES工单撤销 * * @author wanchanghuang * @createTime 2016年1月13日10:36:22 * @state 1-审核完成状态 */ @Override public boolean updateTntryCancel(SchWorkorder pxd) { StringBuffer sbf = new StringBuffer(); sbf.append("update SCH_WORKORDER set sts='" + pxd.getSts() + "' ,del='1',enable='0' where erp_code='" + pxd.getCode() + "' "); schWorkorderDao.updateInfo(sbf.toString(), null); return true; } /** * 【功能说明】:工单信号 * * @return * @author wch * @createTime 2015年12月18日09:07:30 * 步骤:1)通过工单号查询,是否存在,存在再继续修改开始时间,结束时间, * 工单状态为运行状态 */ @Override public boolean deleteAndCancelWS(ParsingXmlDataBean pxd) { StringBuffer sbf = new StringBuffer(); SysLog slog = new SysLog(); slog.setName("MES接口"); try { slog.setIp(InetAddress.getLocalHost().getHostAddress()); } catch (Exception e) { // TODO: handle exception } slog.setSys("MES"); sbf.append(" select id from SCH_WORKORDER where code='" + pxd.getWo_id() + "' and sts<>2 and del=0 and eqp='" + pxd.getEqu_id() + "' and erp_code='" + pxd.getLot_id() + "' "); List lt = schWorkorderDao.queryBySql(sbf.toString()); if (lt.size() > 0 && lt != null) { sbf.setLength(0); //清空 sbf.append(" update SCH_WORKORDER set stim='" + pxd.getStartTime() + "' ,etim='" + pxd.getEndTime() + "' and sts=2 where eqp='" + pxd.getEqu_id() + "' and code='" + pxd.getWo_id() + "' and bth='" + pxd.getMod_id() + "' and erp_code='" + pxd.getLot_id() + "' "); } slog.setSuccess("操作成功"); slog.setDate(new Date()); slog.setDel(0l); sysLogDaoImpl.saveBackKey(slog); return true; } /** * [功能说明]:质量接口-基础表QUALITY_INSPECTION * * @author wanchanghuang * @crateTime 2016年1月12日16:40:37 */ @Override public QualityCheckInfo saveQualityInfo(QualityCheckInfo qci) { try { qci = infoDao.saveAndReturn(qci); } catch (Exception e) { // TODO: handle exception } return qci; } /** * [功能说明]:质量接口-基础详细QUALITY_INSPECTION_PARAM * * @author wanchanghuang * @crateTime 2016年1月12日16:40:37 */ @Override public void saveQualityParamInfo(QualityCheckInfoParams qcip) { InfoParamsDao.save(qcip); } /** * [功能描述]:接口解析完成,调用日志 * * @author wanchanghuang * @createTime 2016年1月12日17:36:35 */ @Override public void saveAndReturn(SysMessageQueue log) { try { SysMessageQueueDao.saveAndReturn(log); } catch (Exception e) { e.printStackTrace(); } } /** * [功能描述]:接口解析,保存工厂日历 * * @author wanchanghuang * @createTime 2016年1月13日09:37:12 */ @Override public void saveSchCalendar(SchCalendar scr1) { schCalendarDao.save(scr1); } @Override public boolean batchInsertAndReturn(List schCalendars) { return schCalendarDao.batchInsertAndReturn(schCalendars, SchCalendar.class); } /** * [功能描述]:接口解析,保存工单下发主数据 * * @author wanchanghuang * @createTime 2016年1月13日09:37:12 */ @Override public SchWorkorder addSchWorkOrder(SchWorkorder swd) { try { swd = schWorkorderDao.saveAndReturn(swd); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return swd; } /** * [功能描述]:接口解析,保存工单下发辅料数据 * * @author wanchanghuang * @createTime 2016年1月13日09:37:12 */ @Override public void saveSchWorkOrderBom(SchWorkorderBom swb) { schWorkorderBomDao.save(swb); } /** * [功能描述]:查询md_mat_type表数据,存在返回ID,不存在插入返回主键ID * * @param mmt:mes传过来的物料组ID */ @Override public String queryRetByCode(MdMatType mmt) { StringBuffer sbf = new StringBuffer(); sbf.append("select id from MD_MAT_TYPE where mes_code='" + mmt.getMesCode() + "'"); List list = schWorkorderBomDao.queryBySql(sbf.toString()); if (list.size() > 0) { Object temp = list.get(0); return StringUtil.convertObjToString(temp); } else { return mdMatTypeDao.saveBackKey(mmt); } } /** * [功能说明]:插入md_mat表数据,且验证是否重复插入 * * @author wanchanghuang * @createTime 2016年2月25日13:14:45 */ @Override public void saveMdMatByCode(MdMat mm) { StringBuffer sbf = new StringBuffer(); sbf.append("select id from MD_MAT where code='" + mm.getCode() + "' and tid='" + mm.getMdMatType().getId() + "'"); List list = schWorkorderBomDao.queryBySql(sbf.toString()); if (list != null && list.size() <= 0) { mdMatDao.save(mm); } else { String id = StringUtil.convertObjToString(list.get(0)); mm.setId(id); mdMatDao.saveOrUpdate(mm); } } @Override public void deleteCalendar(SchCalendar sCalendars, SchCalendar eCalendars) { schCalendarDao.deleteByParams("delete SchCalendar o where o.date >=? and o.date <=? and mdWorkshop=? ", sCalendars.getDate(), eCalendars.getDate(), sCalendars.getMdWorkshop()); } @Override public String CancelRequestWorkOrderByCode(String workCode, boolean CancelRequest) throws Exception { StringBuffer sql = new StringBuffer("SELECT id FROM SCH_WORKORDER o WHERE o.CODE='" + workCode + "'"); if (CancelRequest) { sql.append(" and o.STS <> '2' AND o.STS<> '4' ");//工单非运行、非完成状态 } else { sql.append(" and o.STS='7' ");//工单锁定状态 } List ls = schCalendarDao.queryBySql(sql.toString()); if (ls == null || ls.size() != 1) { return null; } return ls.get(0).toString(); } /** * MES请求撤销工单,修改工单状态 */ @Override public void MESRequestCancelWorkOrder(String workOrderId, Long sts) throws Exception { SchWorkorder schWorkorder = schWorkorderDao.findById(SchWorkorder.class, workOrderId); //锁定状态(1-允许,0-不允许)。当为7时表示已经允许 schWorkorder.setSts(sts); } /** * 接口批量插入工单 */ @Override public void batchAddSchWorkOrder(List orders) throws Exception { schWorkorderDao.batchInsert(orders, SchWorkorder.class); } /** * 接口批量插入工单bom */ @Override public void batchAddSchWorkOrderBom(List ordersBoms) throws Exception { schWorkorderBomDao.batchInsert(ordersBoms, SchWorkorderBom.class); } @Override public boolean isExistByWorkOrderCode(String orderCode) throws Exception { String sql = "SELECT id from SCH_WORKORDER where code='" + orderCode + "'"; List ls = schWorkorderDao.queryBySql(sql); if (ls != null && ls.size() > 0) { return true; } return false; } @Override public void deleteOrderByCode(String orderId) throws Exception { try { //删除辅料表数据 String sql = "DELETE from SCH_WORKORDER_BOM where OID='" + orderId + "'"; schWorkorderDao.updateBySql(sql, null); //删除工单表 sql = "DELETE from SCH_WORKORDER where id='" + orderId + "'"; schWorkorderDao.updateBySql(sql, null); SysLog log = new SysLog(); log.setSys("PMS"); log.setName("MES确认撤销工单");//操作人 log.setOptname("删除工单以及与此工单相关Bom");//操作名或路径 log.setParams("删除的工单id:" + orderId);//参数 log.setSuccess("操作成功"); log.setDate(new Date()); log.setDel(0L); logdao.save(log); } catch (Exception e) { e.printStackTrace(); throw new Exception("查询并删除处于MES确认撤销状态的工单失败!该工单id:" + orderId); } } @Override public SchWorkorder getSchWorkorderById(String id) { return schWorkorderDao.findById(SchWorkorder.class, id); } @Override public void updateOrder(String ids) { // TODO Auto-generated method stub SessionInfo sessionInfo = (SessionInfo) request.getSession().getAttribute("sessionInfo"); String updateUserName = sessionInfo.getUser().getName(); String updateUserTime = DateUtil.datetoStr(new Date(), "yyyy-MM-dd HH:mm:ss"); String sql = "UPDATE SCH_STAT_OUTPUT_FB set IS_FEEDBACK='1',UPDATE_USER_NAME = '" + updateUserName + "' ,FEEDBACK_TIME=to_date('"+updateUserTime+"','yyyy-mm-dd hh24:mi:ss'),UPDATE_USER_TIME = to_date('" + updateUserTime + "','yyyy-mm-dd hh24:mi:ss') where id='" + ids + "'"; schWorkorderDao.updateBySql(sql, null); } @Override public void updateFSJOrder(String ids) { try { String updateUserTime = DateUtil.datetoStr(new Date(), "yyyy-MM-dd HH:mm:ss"); String sql = "UPDATE SCH_TRANSMITTER_WKORDER set IS_FEEDBACK='1',FEEDBACK_TIME=to_date('"+updateUserTime+"','yyyy-mm-dd hh24:mi:ss') where id='" + ids + "'"; schWorkorderDao.updateBySql(sql, null); } catch (Exception e) { e.printStackTrace(); } } /** * Rengj * 运行时间修改 */ @LogAnno(operateType = "编辑运行时间") @Override public String editRuntime(String stim, String etim, String ids) { String result = ""; try { //增加创建人与创建时间信息 SessionInfo sessionInfo = (SessionInfo) request.getSession().getAttribute("sessionInfo"); String createUserName = sessionInfo.getUser().getName(); String createUserTime = DateUtil.datetoStr(new Date(), "yyyy-MM-dd HH:mm:ss"); String sql = "update SCH_WORKORDER set stim = to_date('" + stim + "','yyyy-MM-dd hh24:mi:ss'),etim = to_date('" + etim + "','yyyy-MM-dd hh24:mi:ss'),UPDATE_USER_NAME = '" + createUserName + "',UPDATE_USER_TIME = to_date('" + createUserTime + "','yyyy-MM-dd hh24:mi:ss') where id= '" + ids + "'"; schWorkorderDao.updateBySql(sql, null); String sql2 = "update SCH_TRANSMITTER_WKORDER set stim = to_date('" + stim + "','yyyy-MM-dd hh24:mi:ss'),etim = to_date('" + etim + "','yyyy-MM-dd hh24:mi:ss'),UPDATE_USER_NAME = '" + createUserName + "',UPDATE_USER_TIME = to_date('" + createUserTime + "','yyyy-MM-dd hh24:mi:ss') where id= '" + ids + "'"; schWorkorderDao.updateBySql(sql2, null); result = "保存成功!"; } catch (Exception e) { result = "保存失败!"; } return result; } /** * Rengj * 运行时间查询 */ @Override public WorkOrderBean getRuntime(String ids) { WorkOrderBean workOrder = new WorkOrderBean(); String sql = "select to_char(stim,'yyyy-MM-dd hh24:mi:ss'),to_char(etim,'yyyy-MM-dd hh24:mi:ss') from SCH_WORKORDER where id='" + ids + "'"; String sq2 = "select to_char(stim,'yyyy-MM-dd hh24:mi:ss'),to_char(etim,'yyyy-MM-dd hh24:mi:ss') from SCH_TRANSMITTER_WKORDER where id='" + ids + "'"; List workList = schWorkorderDao.queryBySql(sql); List list2 = schWorkorderDao.queryBySql(sq2); workList.addAll(list2); if (workList.size() > 0) { Object[] obj = (Object[]) workList.get(0); workOrder.setStim(String.valueOf(obj[0])); workOrder.setEtim(String.valueOf(obj[1])); } return workOrder; } /** * [功能说明]:验证发射机工单code是否重复 * * @author wanchanghuanbg * @date 2017年10月18日15:12:45 */ @Override public boolean isExistByWorkOrderCodeFSJ(String workOrderCode) { String sql = "SELECT id from SCH_TRANSMITTER_WKORDER where del=0 and WORK_ORDER_CODE='" + workOrderCode + "'"; List ls = schWorkorderDao.queryBySql(sql); if (ls != null && ls.size() > 0) { return true; } return false; } /** * [功能说明]:保存发射机工单 * * @author wanchanghuanbg * @date 2017年10月18日15:12:45 */ @Override public void saveTransmitterWorkOrder(TransmitterWorkOrderBean tbean) { transmitterWorkOrderDaoI.save(tbean); } @Override public TransmitterWorkOrderBean getRunOrders(String eqp) throws Exception { String hql = "from TransmitterWorkOrderBean o where o.del=0 and o.sts=2 and o.eqpId=? "; List params = new ArrayList(); params.add(eqp); TransmitterWorkOrderBean schWorkorder = null; try { schWorkorder = transmitterWorkOrderDaoI.unique(TransmitterWorkOrderBean.class, hql, params); } catch (Exception e) { log.debug("error :" + e.getMessage()); } return schWorkorder; } @Override public DataGrid getAllFSJOrders(TransmitterWorkOrderBean workOrderBean, PageParams pageParams) throws Exception { String hql = "from TransmitterWorkOrderBean o where o.del=0 "; String params = ""; if (StringUtil.notNull(workOrderBean.getTeam())) { params = params.concat(" and o.team = '" + workOrderBean.getTeam() + "'"); } if (StringUtil.notNull(workOrderBean.getShift())) { params = params.concat(" and o.shift = '" + workOrderBean.getShift() + "'"); } if (StringUtil.notNull(workOrderBean.getQstim())) { params = params.concat(" and to_char(o.date_,'yyyy-MM-dd') >= '" + workOrderBean.getQstim() + "'"); } if (StringUtil.notNull(workOrderBean.getQetim())) { params = params.concat(" and to_char(o.date_,'yyyy-MM-dd') <= '" + workOrderBean.getQetim() + "'"); } if (workOrderBean.getSts() != null) { params = params.concat(" and o.sts = " + workOrderBean.getSts()); } if (StringUtil.notNull(workOrderBean.getIsCheck())) { params = params.concat(" and o.isCheck = '" + workOrderBean.getIsCheck() + "'"); } if (StringUtil.notNull(workOrderBean.getWorkOrderCode())) { params = params.concat(" and (o.workOrderCode like '%" + workOrderBean.getWorkOrderCode() + "%' )"); } if (StringUtil.notNull(workOrderBean.getEqpId())) { params = params.concat(" and o.eqpId = " + workOrderBean.getEqpId()); } params = params.concat(" order by o.date_ desc"); try { List rows = transmitterWorkOrderDaoI.queryByPage(hql.concat(params), pageParams); for (TransmitterWorkOrderBean bean : rows) { bean.setOutputs(null); List mat = transmitterWorkOrderDaoI.queryBySql("select name from MD_MAT where id = ?", bean.getMaterialCode()); if (mat != null && mat.size() > 0) { bean.setMatName(mat.get(0).toString()); } List eqp = transmitterWorkOrderDaoI.queryBySql("select equipment_name from MD_EQUIPMENT where id = ?", bean.getEqpId()); if (eqp != null && eqp.size() > 0) { bean.setEqpName(eqp.get(0).toString()); } List team = transmitterWorkOrderDaoI.queryBySql("select name from MD_TEAM where id = ?", bean.getTeam()); if (team != null && team.size() > 0) { bean.setTeamName(team.get(0).toString()); } List shift = transmitterWorkOrderDaoI.queryBySql("select name from MD_SHIFT where id = ?", bean.getShift()); if (shift != null && shift.size() > 0) { bean.setShiftName(shift.get(0).toString()); } List unit = transmitterWorkOrderDaoI.queryBySql("select name from MD_UNIT where id=?", bean.getUnit()); if (unit != null && unit.size() > 0) { bean.setUnitName(unit.get(0).toString()); } } hql = "select count(o) ".concat(hql.replace("fetch", "")); long total = schWorkorderDao.queryTotal(hql.concat(params)); return new DataGrid(rows, total); } catch (Exception e) { log.error("查询发射机工单异常", e); } return null; } @LogAnno(operateType = "审核发射机工单") @Override public void checkFSJOrder(String id) throws Exception { TransmitterWorkOrderBean schWorkorder = transmitterWorkOrderDaoI.findById(TransmitterWorkOrderBean.class, id); if (schWorkorder != null) { schWorkorder.setSts(1);//状态 schWorkorder.setIsCheck("1"); schWorkorder.setCheckTime(new Date()); FillUserInfoUtil.fillUpdateUserInfo(schWorkorder, request); } else { log.error("id:" + id + "的工单不存在"); throw new Exception(); } } @LogAnno(operateType = "批量审核发射机工单") @Override public void checkFSJOrders(String ids) throws Exception { for (String id : StringUtil.splitToStringList(ids, ",")) { this.checkFSJOrder(id); } } @LogAnno(operateType = "更改发射机工单状态") @Override public void editFSJOrderStatus(String id, Long sts) throws Exception { TransmitterWorkOrderBean schWorkorder = transmitterWorkOrderDaoI.findById(TransmitterWorkOrderBean.class, id);//锁定状态(1-允许,0-不允许)。当为7时表示已经允许 if (schWorkorder != null) { //修改状态 String sql = "update SCH_TRANSMITTER_WKORDER set sts=" + sts; if (sts == 2) { //只让没有运行过的工单改变运行状态,防止出现多个产出数据 long status = schWorkorder.getSts(); if (status != 2) { List list = schWorkorderDao.queryBySql("select * from SCH_TRANSMITTER_WKORDER where EQP_ID = ? and sts = 2 and del = 0",schWorkorder.getEqpId()); if (list!=null && list.size() > 0){ throw new RuntimeException("此工单所属机台有未结束的工单!!"); } }else { sql += ",real_stim=to_date('" + DateUtil.getNowDateTime("yyyy-MM-dd HH:mm:ss") + "','yyyy-MM-dd hh24:mi:ss')"; } } else if (sts == 4) { sql += ",real_etim=to_date('" + DateUtil.getNowDateTime("yyyy-MM-dd HH:mm:ss") + "','yyyy-MM-dd hh24:mi:ss')"; } //增加创建人与创建时间信息 SessionInfo sessionInfo = (SessionInfo) request.getSession().getAttribute("sessionInfo"); String updateUserName = sessionInfo.getUser().getName(); String updateUserTime = DateUtil.datetoStr(new Date(), "yyyy-MM-dd HH:mm:ss"); sql += ",UPDATE_USER_NAME='" + updateUserName + "'"; sql += ",UPDATE_USER_TIME=to_date('" + updateUserTime + "','yyyy-mm-dd hh24:mi:ss')"; sql += " where id='" + id + "'"; log.error("[修改发射机工单状态成功]:" + sts); schWorkorderDao.updateBySql(sql, null); } else { log.error("id:" + id + "的工单不存在"); throw new Exception("id:" + id + "的工单不存在"); } } @Override public TransmitterWorkOrderBean getFSJOrderById(String id) throws Exception { TransmitterWorkOrderBean schWorkorder = transmitterWorkOrderDaoI.findById(TransmitterWorkOrderBean.class, id); MdEquipment equipment = equipmentDao.findById(MdEquipment.class, schWorkorder.getEqpId()); schWorkorder.setEquCode(equipment.getEquipmentCode()); schWorkorder.setEqpName(equipment.getEquipmentName()); return schWorkorder; } @Override public void addFSJOrder(TransmitterWorkOrderBean workOrderBean) throws Exception { workOrderBean.setQty(0D); workOrderBean.setDel(0); transmitterWorkOrderDaoI.save(workOrderBean); } @LogAnno(operateType = "删除发射机工单") @Override public void deleteFSJOrders(String id, String eqpName, String team, String date, String mat, SessionInfo info) { try { transmitterWorkOrderDaoI.deleteById(id, TransmitterWorkOrderBean.class); //删除辅料表数据 String sql = "DELETE from SCH_TRANSMITTER_OUTPUT where TW_ID='" + id + "'"; schWorkorderDao.updateBySql(sql, null); SysLog log = new SysLog(); log.setSys("PMS"); if (info != null) { log.setName(info.getUser().getName());//操作人 log.setIp(info.getIp()); } log.setOptname("删除工单以及与此工单相关的产量/辅料数据操作");//操作名或路径 log.setParams("删除的工单id:" + id + "机台:" + eqpName + "班组:" + team + "牌号:" + mat + "工单时间:" + date);//参数 log.setSuccess("操作成功"); log.setDate(new Date()); log.setDel(0L); logdao.save(log); } catch (Exception e) { e.printStackTrace(); } } @Override public void deleteBeatchFSJOrders(String ids, String eqpName, String team, String date, String mat, SessionInfo info) { try { String[] id = ids.split(","); String[] ens = eqpName.split(","); String[] ts = team.split(","); String[] ds = date.split(","); String[] ms = mat.split(","); for (int i = 0; i < id.length; i++) { this.deleteFSJOrders(id[i], ens[i], ts[i], ds[i], ms[i], info); } } catch (Exception e) { e.printStackTrace(); } } @Override public String editFSJRuntime(String stim, String etim, String ids) { String result = ""; try { String sql = "update SCH_TRANSMITTER_WKORDER set stim = to_date('" + stim + "','yyyy-MM-dd hh24:mi:ss'),etim = to_date('" + etim + "','yyyy-MM-dd hh24:mi:ss') where id= '" + ids + "'"; schWorkorderDao.updateBySql(sql, null); result = "保存成功!"; } catch (Exception e) { result = "保存失败!"; } return result; } /** * Rengj * 运行时间查询 */ @Override public TransmitterWorkOrderBean getFSJRuntime(String ids) { TransmitterWorkOrderBean workOrder = transmitterWorkOrderDaoI.findById(TransmitterWorkOrderBean.class, ids); if (workOrder != null) { workOrder.setQstim(DateUtil.formatDateToString(workOrder.getStim(), "yyyy-MM-dd HH:mm:ss")); workOrder.setQetim(DateUtil.formatDateToString(workOrder.getEtim(), "yyyy-MM-dd HH:mm:ss")); } return workOrder; } @Override public DataGrid getAllFSJOrderDetails(TransmitterWorkOrderBean workOrderBean, PageParams pageParams) { try { List outputs = new ArrayList<>(); List outList = transmitterOutputDaoI.queryBySql(" select a.id,a.tw_id,a.piping_no+1,d.name,a.shut_no,a.receive_no,c.equipment_name " + " from SCH_TRANSMITTER_OUTPUT a " + " left join SCH_WORKORDER b on a.work_code = b.id " + " left join MD_EQUIPMENT c on a.EQP_ID = c.id " + " left join md_mat d on b.mat = d.id" + " where a.TW_ID=? order by PIPING_NO", workOrderBean.getWorkOrderCode()); TransmitterOutput output = null; Object[] obj = null; if (outList != null && outList.size() > 0) { for (Object object : outList) { obj = (Object[]) object; output = new TransmitterOutput(); output.setId(StringUtil.convertObjToString(obj[0])); output.setTwId(StringUtil.convertObjToString(obj[1])); output.setPipingNo(StringUtil.convertObjToString(obj[2])); output.setWorkCode(StringUtil.convertObjToString(obj[3])); output.setShutNo(StringUtil.converObj2Double(obj[4])); output.setReceiveNo(StringUtil.converObj2Double(obj[5])); output.setEqpId(StringUtil.convertObjToString(obj[6])); outputs.add(output); } } return new DataGrid(outputs, (long) outputs.size()); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 查询发射机消耗详细 */ @Override public TransmitterOutput querytransmitterOutPut( String id) { try { StringBuffer sb = new StringBuffer(); sb.append("select id,tw_id,PIPING_NO,work_code,SHUT_NO,EQP_ID from SCH_TRANSMITTER_OUTPUT where id='" + id + "'"); List list = transmitterOutputDaoI.queryBySql(sb.toString()); if (list.size() > 0 && list != null) { TransmitterOutput toutput = new TransmitterOutput(); Object[] temp = (Object[]) list.get(0); toutput.setId(StringUtil.convertObjToString(temp[0])); toutput.setTwId(StringUtil.convertObjToString(temp[1])); toutput.setPipingNo(StringUtil.convertObjToString(temp[2])); toutput.setWorkCode(StringUtil.convertObjToString(temp[3])); toutput.setShutNo(StringUtil.converObj2Double(temp[4])); toutput.setEqpId(StringUtil.convertObjToString(temp[5])); return toutput; } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 修改数据 * * @auther wanchanghuang * @createTime 2017年12月19日10:35:00 */ @Override public void saveFSJDatas(TransmitterOutput tobean) { if (tobean.getShutNo() >= 0) { StringBuffer sb = new StringBuffer(); sb.append("update SCH_TRANSMITTER_OUTPUT set shut_no='" + tobean.getReceiveNo() + "' where id='" + tobean.getId() + "' "); transmitterOutputDaoI.updateBySql(sb.toString(), null); sb.setLength(0); Double val = tobean.getReceiveNo() - tobean.getShutNo(); sb.append(" update SCH_TRANSMITTER_WKORDER set qty=qty+'" + val + "' where work_order_code='" + tobean.getTwId() + "' "); transmitterOutputDaoI.updateBySql(sb.toString(), null); } } /** * [说明]: 查询 * * @author wanchanghuang * @date 2019年5月8日09:42:23 */ @Override public long querySchWorkOrderByCode(SchWorkorder schWk) { try { String hql = "select count(1) from SchWorkorder o where o.del=0 and o.code=? "; long num = mdMatDao.queryTotal(hql, schWk.getCode()); return num; } catch (Exception e) { e.printStackTrace(); } return 0; } /** * [说明]: 保存 * * @author wanchanghuang * @date 2019年5月8日09:42:23 */ @Override public void addSchWorkOrderObj(SchWorkorder schWk) { schWorkorderDao.save(schWk); } /** * [说明]:工单撤销-查询 * * @author wanchanghuang * @date 2019年5月8日09:42:29 */ @Override public long querySchworkOrderByCodes(SchWorkorder wkorder) { try { String hql = "select count(1) from SchWorkorder o where o.del=0 and o.sts>=2 and o.isCheck=1 and o.code=? "; long l1 = mdMatDao.queryTotal(hql, wkorder.getCode()); String hql2 = "select count(1) from TransmitterWorkOrderBean o where o.del=0 and o.sts>=2 and o.isCheck=1 and o.workOrderCode=? "; long l2 = mdMatDao.queryTotal(hql2, wkorder.getCode()); return l1+l2; } catch (Exception e) { e.printStackTrace(); } return 0; } /** * [说明]:工单撤销-修改工单状态 * * @author wanchanghuang * @date 2019年5月8日09:42:29 */ @Override public void updateSchWorkOrderStatus(SchWorkorder wkorder) { String sql = "update SCH_WORKORDER set sts=5,del=1 where code='" + wkorder.getCode() + "' and del=0 and sts not in (2,4) "; String sql2 = "update SCH_TRANSMITTER_WKORDER set sts=5,del=1 where WORK_ORDER_CODE='" + wkorder.getCode() + "' and del=0 and sts not in (2,4) "; schWorkorderDao.updateBySql(sql, null); schWorkorderDao.updateBySql(sql2,null); } /** * 根据生产牌号获取对应所有bom版本 * * @param matid * @return */ @Override public List queryBomVersionByProd(String matid) { List list = new ArrayList<>(); Combobox combobox = null; String sql = "select bom_lot_id id,bom_lot_id name " + "from SCH_WORKORDER_BOM " + "where (prod = ? ) and del = 0 " + "and bom_lot_id is not null and effect_time is not null " + "group by bom_lot_id,effect_time " + "order by effect_time desc"; List result = schWorkorderDao.queryBySql(sql, matid); if (result != null && result.size() > 0) { Object[] objs = (Object[]) result.get(0); combobox = new Combobox(); combobox.setId(StringUtil.convertObjToString(objs[0])); combobox.setName(StringUtil.convertObjToString(objs[1])); list.add(combobox); } return list; } /** * 根据生产牌号获取对应所有工艺参数版本 * * @param matid * @return */ @Override public List getParamVersionByProd(String matid) { List list = new ArrayList<>(); Combobox combobox = null; String sql = "select PARAMETER_SETREVISION id,PARAMETER_SETREVISION name " + "from SCH_WORKORDER_CRAFT " + "where MATERIAL_CODE = ? and del = 0 " + "and parameter_setrevision is not null and effect_time is not null " + "group by PARAMETER_SETREVISION,EFFECT_TIME " + "order by EFFECT_TIME desc"; List result = schWorkorderDao.queryBySql(sql, matid); if (result != null && result.size() > 0) { Object[] objs = (Object[]) result.get(0); combobox = new Combobox(); combobox.setId(StringUtil.convertObjToString(objs[0])); combobox.setName(StringUtil.convertObjToString(objs[1])); list.add(combobox); } return list; } @Override public DataGrid getBomDetail(String bomVersion) { String hql = "from SchWorkorderBom where bom_lot_id=?"; List boms = schWorkorderBomDao.query(hql, bomVersion); List beans = new ArrayList<>(); BomBean bean = null; if (boms != null && boms.size() > 0) { for (SchWorkorderBom bom : boms) { bean = new BomBean(); bean.setMat(bom.getMdMat().getName()); bean.setMatId(bom.getMdMat().getId()); bean.setQty(bom.getQty()); bean.setUnit(bom.getMdUnit().getName()); bean.setUnitId(bom.getMdUnit().getId()); bean.setId(bom.getId()); beans.add(bean); } } return new DataGrid(beans, 0L); } @Override public SchWorkorder findWorkOrderByDateShiftEqp(String date, String shift, String eqp) { String hql = "from SchWorkorder where to_char(date,'yyyy-MM-dd') = ? and mdShift.id = ? and mdEquipment.id = ? and del=0"; return schWorkorderDao.unique(SchWorkorder.class,hql,date,shift,eqp); } @Override public String sendOrderChange(String ids) { String msg = ""; for (String id : StringUtil.splitToStringList(ids, ",")) { SchWorkorder schWorkorder = schWorkorderDao.findById(SchWorkorder.class, id); schWorkorder.setSts(9L); WorkOrderStatChangeInterceptor.getInstance().sendOrderStatus("5",schWorkorder); } return null; } @Override public SchCalendar queryTeamByDateShift(String actualDate, String shift) { try { String hql = "from SchCalendar where to_char(date,'yyyy-MM-dd') = ? and mdShift.id = ? and mdWorkshop.id = 1"; return schCalendarDao.unique(SchCalendar.class, hql, actualDate, shift); }catch (Exception e) { e.printStackTrace(); } return null; } }