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<Object> params = new ArrayList<Object>();
|
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<Object> params = new ArrayList<Object>();
|
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<WorkOrderBean> convertWorkOrderBean(List<SchWorkorder> rows) throws Exception {
|
List<WorkOrderBean> 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,下发 <br>
|
* 2,运行 -->运行时在生产实绩中保存val=0的数据,即采集程序只做update操作<br>
|
* 3,暂停 -->MES取消撤销工单时<br>
|
* 4,完成 -->工单完成,更新工单结束时间<br>
|
* 5,终止 -->错误的工单运行时,执行本操作删除生产实绩相关数据<br>
|
* 6,结束 -->工单已经反馈<br>
|
* 7,锁定 -->MES发起撤销时<br>
|
* 8,撤销 -->MES确定撤销时<br>
|
*/
|
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<String, Object> 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<Object> 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<String, String> 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<Object[]> 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<SchWorkorder> 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<Combobox> 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<SchWorkorder> 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<Object> params = new ArrayList<Object>();
|
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<SchCalendar> 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<SchWorkorder> 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<Object> params = new ArrayList<Object>();
|
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<Combobox> 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<Object> 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<Integer, List<ChangeShiftDatas>> 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<ChangeShiftDatas> listShiftDatas = new ArrayList<ChangeShiftDatas>();
|
Map<Integer, List<ChangeShiftDatas>> map = new HashMap<Integer, List<ChangeShiftDatas>>();
|
//将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<SchCalendar> 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<SchWorkorder> orders) throws Exception {
|
schWorkorderDao.batchInsert(orders, SchWorkorder.class);
|
}
|
|
/**
|
* 接口批量插入工单bom
|
*/
|
@Override
|
public void batchAddSchWorkOrderBom(List<SchWorkorderBom> 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<Object> params = new ArrayList<Object>();
|
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<TransmitterWorkOrderBean> 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<TransmitterOutput> 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<Combobox> queryBomVersionByProd(String matid) {
|
List<Combobox> 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<Combobox> getParamVersionByProd(String matid) {
|
List<Combobox> 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<SchWorkorderBom> boms = schWorkorderBomDao.query(hql, bomVersion);
|
List<BomBean> 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;
|
}
|
}
|