package com.shlanbao.tzsc.pms.sch.stat.service.impl;
|
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.Hashtable;
|
import java.util.List;
|
import java.util.Map;
|
|
import com.shlanbao.tzsc.base.dao.*;
|
import com.shlanbao.tzsc.base.mapping.*;
|
import com.shlanbao.tzsc.data.runtime.bean.BoxerData;
|
import com.shlanbao.tzsc.data.runtime.bean.FilterData;
|
import com.shlanbao.tzsc.data.runtime.bean.PackerData;
|
import com.shlanbao.tzsc.data.runtime.bean.RollerData;
|
import com.shlanbao.tzsc.pms.sch.workorder.beans.WorkOrderBean;
|
import com.shlanbao.tzsc.utils.tools.*;
|
import net.sf.json.JSONObject;
|
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import com.shlanbao.tzsc.base.interceptor.WorkOrderFeedbackInterceptor;
|
import com.shlanbao.tzsc.base.model.Combobox;
|
import com.shlanbao.tzsc.base.model.DataGrid;
|
import com.shlanbao.tzsc.base.model.PageParams;
|
import com.shlanbao.tzsc.base.service.BaseService;
|
import com.shlanbao.tzsc.data.runtime.handler.DbOutputOrInputInfos;
|
import com.shlanbao.tzsc.data.runtime.handler.FaultDataCalc;
|
import com.shlanbao.tzsc.pms.md.unit.beans.UnitBean;
|
import com.shlanbao.tzsc.pms.sch.manualshift.beans.SchCalendarBean;
|
import com.shlanbao.tzsc.pms.sch.stat.beans.InputBean;
|
import com.shlanbao.tzsc.pms.sch.stat.beans.OutputBean;
|
import com.shlanbao.tzsc.pms.sch.stat.beans.RoutputBean;
|
import com.shlanbao.tzsc.pms.sch.stat.service.StatServiceI;
|
import com.shlanbao.tzsc.utils.excel.ExportExcel;
|
import com.shlanbao.tzsc.utils.params.SysEqpTypeBase;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
@Service
|
public class StatServiceImpl extends BaseService implements StatServiceI {
|
@Autowired
|
private SchStatInputDaoI schStatInputDao;
|
@Autowired
|
private SchStatOutputDaoI schStatOutputDao;
|
@Autowired
|
private SchStatInputFbDaoI schStatInputFbDao;
|
@Autowired
|
private SchStatOutputFbDaoI schStatOutputFbDao;
|
@Autowired
|
private SchWorkorderBomDaoI schWorkorderBomDao;
|
@Autowired
|
private SchWorkorderDaoI schWorkorderDao;
|
@Autowired
|
private MdUnitDaoI mdUnitDao;
|
|
@Autowired
|
private SchStatFaultDaoI SchStatFaultDao;
|
|
@Autowired
|
private EqmQtyRecordsDaoI eqmQtyRecordsDao;//手动追加封箱机数据
|
@Autowired
|
private HttpServletRequest request;
|
private StringBuffer sqlbf = new StringBuffer(1000);
|
|
@Override
|
public DataGrid getAllOutputs(OutputBean outputBean, PageParams pageParams) {
|
return this.queryOutInfo(outputBean, pageParams, 1,"SCH_STAT_OUTPUT");
|
}
|
|
@Override
|
public DataGrid getAllOutputsFb(OutputBean outputBean, PageParams pageParams) {
|
return this.queryOutInfo(outputBean, pageParams, 1,"SCH_STAT_OUTPUT_FB");
|
}
|
|
private DataGrid queryOutInfo(OutputBean outputBean, PageParams pageParams, int type,String table) {
|
StringBuffer sb = new StringBuffer();
|
sb.append("select * from( select ROWNUM as rownums,t.* from (");
|
sb.append("SELECT ");
|
StringBuffer col = new StringBuffer();
|
col.append(" SSO.id as outId,SSO.UNIT as ssoUnit,SSO.oid as orderId,SSO.qty as ssoQty,SSO.BAD_QTY as ssoBadQty,");
|
col.append(" SSO.STIM as ssoStim,SSO.ETIM as ssoEtim,SSO.RUN_TIME as ssoRunTime,SSO.STOP_TIME as ssoStopTime,");
|
col.append(" SSO.STOP_TIMES as ssoStopTimes,SSO.TIME_UNIT as ssoTimeUnit,SSO.LAST_RECV_TIME ,SSO.LAST_UPDATE_TIME,");
|
col.append(" SSO.IS_FEEDBACK,SSO.FEEDBACK_TIME,SSO.FEEDBACK_USER,SSO.DEL,SSO.DACQTY,");
|
col.append("to_char(SWO.DATE_,'yyyy-mm-dd'), ");
|
col.append("shift.name as shift, ");
|
col.append("team.name as team, ");
|
col.append("eqp.equipment_name, ");
|
col.append("swo.CODE, ");
|
col.append("MAT.name as mat, ");
|
col.append("unit1.name as unit1,");
|
col.append("unit2.name as unit2 ,sso.rec_qty1,sso.rec_qty2, ");
|
col.append("sso.CREATE_USER_NAME as createUserName,sso.CREATE_USER_TIME as createUserTime,sso.UPDATE_USER_NAME as updateUserName,sso.UPDATE_USER_TIME as updateUserTime ");
|
sb.append(col);
|
StringBuffer param = new StringBuffer();
|
param.append("FROM "+table+" sso ");
|
param.append("LEFT JOIN SCH_WORKORDER swo ON SSO.OID=SWO.ID ");
|
param.append("LEFT JOIN MD_EQUIPMENT eqp ON swo.EQP=eqp.id ");
|
param.append("LEFT JOIN MD_EQP_TYPE met ON met.id=eqp.EQP_TYPE_ID ");
|
param.append("LEFT JOIN MD_MAT mat ON mat.id=swo.mat ");
|
param.append("left join MD_TEAM team on swo.team=team.id ");
|
param.append("left join MD_SHIFT shift on shift.id=swo.shift ");
|
param.append("left join MD_UNIT unit1 on sso.UNIT=unit1.id ");
|
param.append("LEFT JOIN MD_UNIT unit2 on sso.TIME_UNIT=unit2.id ");
|
param.append("LEFT JOIN MD_WORKSHOP workshop on eqp.WORK_SHOP=workshop.id ");
|
param.append("where SSO.DEL='0' AND swo.sts=4 ");
|
if (type == 1) {
|
param.append(" and swo.type<4 ");
|
} else if (type == 2) {
|
param.append(" and swo.type=4 ");
|
}
|
if (StringUtil.notNull(outputBean.getWorkShop())) {
|
param.append(" and workshop.code='" + outputBean.getWorkShop() + "'");
|
}
|
|
if (StringUtil.notNull(outputBean.getShift())) {
|
param.append(" and shift.id='" + outputBean.getShift() + "'");
|
}
|
if (StringUtil.notNull(outputBean.getTeam())) {
|
param.append(" and team.id='" + outputBean.getTeam() + "'");
|
}
|
if (outputBean.getIsFeedback() != null) {
|
param.append(" and sso.is_Feedback=" + outputBean.getIsFeedback());
|
}
|
if (StringUtil.notNull(outputBean.getDate())) {
|
param.append(" and swo.date_ >= to_date('" + outputBean.getDate() + "','yyyy-mm-dd')");
|
}
|
if (StringUtil.notNull(outputBean.getDate2())) {
|
param.append(" and swo.date_ <= to_date('" + outputBean.getDate2() + "','yyyy-mm-dd')");
|
}
|
if (StringUtil.notNull(outputBean.getEquipment())) {
|
param.append(" and eqp.id='" + outputBean.getEquipment() + "'");
|
}
|
if (StringUtil.notNull(outputBean.getEqpType())) {
|
param.append(" and swo.type=" + outputBean.getEqpType());
|
}
|
sb.append(param);
|
sb.append(" order by swo.date_ desc,swo.shift asc,eqp.EQUIPMENT_CODE asc ) t )where rownums >" + pageParams.getRows() * (pageParams.getPage() - 1) + " and rownums <=" + pageParams.getRows() * (pageParams.getPage()));
|
List<?> rows = schStatOutputDao.queryBySql(sb.toString());
|
List<OutputBean> outputBeans = new ArrayList<>();
|
OutputBean bean = null;
|
Object str[] = null;
|
try {
|
|
for (Object obj : rows) {
|
str = (Object[]) obj;
|
bean = new OutputBean();
|
bean.setId(StringUtil.convertObjToString(str[1]));
|
if (str[6] != null) {
|
bean.setStim(DateUtil.formatDateToString((Date) str[6], "yyyy-MM-dd HH:mm:ss"));
|
}
|
if (str[7] != null) {
|
bean.setEtim(DateUtil.formatDateToString((Date) str[7], "yyyy-MM-dd HH:mm:ss"));
|
}
|
bean.setRunTime(StringUtil.converObj2Double(str[8]));
|
bean.setStopTime(StringUtil.converObj2Double(str[9]));
|
bean.setStopTimes(StringUtil.converObj2Long(str[10]));
|
if (str[12] != null) {
|
bean.setLastRecvTime(DateUtil.formatDateToString((Date) str[12], "yyyy-MM-dd HH:mm:ss"));
|
}
|
if (str[13] != null) {
|
bean.setLastUpdateTime(DateUtil.formatDateToString((Date) str[13], "yyyy-MM-dd HH:mm:ss"));
|
}
|
bean.setIsFeedback(StringUtil.converObj2Long(str[14]));
|
if (str[15] != null) {
|
bean.setFeedbackTime(DateUtil.formatDateToString((Date) str[15], "yyyy-MM-dd HH:mm:ss"));
|
}
|
bean.setFeedbackUser(StringUtil.convertObjToString(str[16]));
|
bean.setDel(StringUtil.converObj2Long(str[17]));
|
bean.setDacQty(StringUtil.converObj2Double(str[18]));
|
bean.setDate(StringUtil.convertObjToString(str[19]));
|
bean.setShift(StringUtil.convertObjToString(str[20]));
|
bean.setTeam(StringUtil.convertObjToString(str[21]));
|
bean.setEquipment(StringUtil.convertObjToString(str[22]));
|
bean.setQty(StringUtil.converObj2Double(str[4]));
|
bean.setBadQty(MathUtil.roundHalfUp(StringUtil.converObj2Double(str[5]), 4));
|
bean.setWorkorder(StringUtil.convertObjToString(str[3]));
|
bean.setWorkorderCode(StringUtil.convertObjToString(str[23]));
|
bean.setMatProd(StringUtil.convertObjToString(str[24]));
|
bean.setUnit(StringUtil.convertObjToString(str[25]));
|
bean.setTimeunit(StringUtil.convertObjToString(str[26]));
|
bean.setRecQty1(StringUtil.converObj2Double(str[26]));
|
bean.setRecQty2(StringUtil.converObj2Double(str[26]));
|
bean.setCreateUserName(StringUtil.convertObjToString(str[29]));
|
bean.setCreateUserTime((Date) str[30]);
|
bean.setUpdateUserName(StringUtil.convertObjToString(str[31]));
|
bean.setUpdateUserTime((Date) str[32]);
|
outputBeans.add(bean);
|
bean = null;
|
}
|
|
String countSql = "select * from(SELECT count(0) ".concat(param.toString()).concat(" )");
|
|
BigDecimal total = new BigDecimal(schStatOutputDao.queryBySql(countSql).get(0).toString());
|
return new DataGrid(outputBeans, total.longValue());
|
} catch (Exception e) {
|
log.error("POVO转换异常", e);
|
}
|
return null;
|
}
|
|
|
/**
|
* 查询成型生产实绩
|
*
|
* @author 张璐
|
* @create 2015年10月12日
|
*/
|
@Override
|
public DataGrid getAllForming(OutputBean outputBean, PageParams pageParams) {
|
return queryOutInfo(outputBean, pageParams, 2,"SCH_STAT_OUTPUT");
|
}
|
|
@Override
|
public DataGrid getAllFormingFb(OutputBean outputBean, PageParams pageParams) {
|
return queryOutInfo(outputBean, pageParams, 2,"SCH_STAT_OUTPUT_FB");
|
}
|
|
@Override
|
public DataGrid getAllInputsByOutput(String id) throws Exception {
|
// 根据产出表id查询辅料消耗明细
|
List<SchStatInput> list = schStatInputDao.query("from SchStatInput o left join fetch o.mdMat mm left join fetch o.mdUnit mu where o.schStatOutput.id=?", id);
|
|
List<InputBean> rows = new ArrayList<InputBean>();
|
|
StringBuilder dacSql = new StringBuilder("SELECT nvl(o.dacqty, 0) FROM sch_stat_output o WHERE o.id='");
|
|
dacSql.append(id).append("'");
|
|
//当前选中行的DAC产量查询出来,传递到消耗表格中
|
List<?> dacList = schStatInputDao.queryBySql(dacSql.toString());
|
|
Double dacQty = Double.parseDouble(StringUtil.convertObjToString(dacList.get(0)));
|
|
InputBean bean = null;
|
|
for (SchStatInput schStatInput : list) {
|
|
bean = BeanConvertor.copyProperties(schStatInput, InputBean.class);
|
|
bean.setMat(schStatInput.getMdMat().getName());
|
bean.setUnit(schStatInput.getMdUnit().getName());
|
|
String order = schStatInput.getSchStatOutput().getSchWorkorder().getCode();
|
order = order.substring(0,order.indexOf('#'));
|
String matCode = schStatInput.getMdMat().getCode();
|
bean.setMatCode(matCode);
|
|
List<?> inputs = schStatInputDao.queryBySql("select t1.num-t2.num num, t1.uom from (select nvl(sum(quantity),0) num,uom from SCH_WORKORDER_IO a " +
|
" where a.replace_material like ? and a.MATERIAL_CODE = ? and a.inout_type in ('1','4') group by uom) t1,("+
|
"SELECT nvl(sum(quantity),0) num FROM SCH_WORKORDER_IO swi WHERE REPLACE_MATERIAL LIKE " +
|
"'%'||(SELECT SUBSTR(code,0,instr(code,'#')-1) FROM (" +
|
"SELECT sw2.* FROM SCH_WORKORDER sw JOIN SCH_WORKORDER sw2 ON sw.EQP = sw2.EQP AND sw.TYPE = sw2.TYPE AND sw2.STIM > sw.STIM " +
|
"WHERE sw.code = ? ORDER BY sw2.stim ASC) WHERE rownum = 1) ||'%' AND INOUT_TYPE IN ('4') and MATERIAL_CODE = ?) t2"
|
|
,"%"+order+"%", matCode, schStatInput.getSchStatOutput().getSchWorkorder().getCode(), matCode);
|
|
// List<?> nextXuLing = schStatInputDao.queryBySql("SELECT sum(quantity) FROM SCH_WORKORDER_IO swi WHERE REPLACE_MATERIAL LIKE " +
|
// "'%'||(SELECT SUBSTR(code,0,instr(code,'#')-1) FROM (" +
|
// "SELECT sw2.* FROM SCH_WORKORDER sw JOIN SCH_WORKORDER sw2 ON sw.EQP = sw2.EQP AND sw.TYPE = sw2.TYPE AND sw2.STIM > sw.STIM " +
|
// "WHERE sw.code = ? ORDER BY sw2.stim ASC) WHERE rownum = 1) ||'%' AND INOUT_TYPE IN ('4') AND and MATERIAL_CODE = ?"
|
// ,schStatInput.getSchStatOutput().getSchWorkorder().getCode(), matCode);
|
|
if (inputs!=null && inputs.size() >0) {
|
Object[] obj = (Object[]) inputs.get(0);
|
|
bean.setInputQty(StringUtil.convertObjToString(obj[0])+StringUtil.convertObjToString(obj[1]));
|
}
|
//查询每个物料消耗对应标准单耗表的上限值,下限值。
|
StringBuilder sql = new StringBuilder("SELECT DISTINCT s.uval, s.lval FROM SCH_CON_STD s WHERE s.mat='");
|
sql.append(schStatInput.getMdMat().getId()).append("'");
|
List<?> data = schStatInputDao.queryBySql(sql.toString());
|
|
Object str[] = null;
|
for (Object obj : data) {
|
str = (Object[]) obj;
|
//单耗的上限值,封装到消耗数据对象
|
bean.setUval(Double.parseDouble(StringUtil.convertObjToString(str[0])));
|
|
//单耗的下限值,封装到消耗数据对象
|
bean.setLval(Double.parseDouble(StringUtil.convertObjToString(str[1])));
|
}
|
FillUserInfoUtil.fillCreateAndUpdateUserInfo(schStatInput,bean);
|
//当前选中行的DAC产量,封装到消耗数据对象
|
bean.setDacQty(dacQty);
|
|
rows.add(bean);
|
|
bean = null;
|
}
|
|
return new DataGrid(rows, 0L);
|
}
|
|
@Override
|
public DataGrid getAllInputsFbByOutput(String id) throws Exception {
|
List<SchStatInputFb> list = schStatInputFbDao.query("from SchStatInputFb o left join fetch o.mdMat mm left join fetch o.mdUnit mu where o.schStatOutputFb.id=?", id);
|
|
List<InputBean> rows = new ArrayList<InputBean>();
|
|
StringBuilder dacSql = new StringBuilder("SELECT nvl(o.dacqty, 0) FROM sch_stat_output_fb o WHERE o.id='");
|
|
dacSql.append(id).append("'");
|
|
//当前选中行的DAC产量查询出来,传递到消耗表格中
|
List<?> dacList = schStatInputDao.queryBySql(dacSql.toString());
|
|
Double dacQty = Double.parseDouble(StringUtil.convertObjToString(dacList.get(0)));
|
|
InputBean bean = null;
|
|
for (SchStatInputFb schStatInput : list) {
|
|
bean = BeanConvertor.copyProperties(schStatInput, InputBean.class);
|
|
bean.setMat(schStatInput.getMdMat().getName());
|
bean.setMatCode(schStatInput.getMdMat().getCode());
|
bean.setUnit(schStatInput.getMdUnit().getName());
|
|
//查询每个物料消耗对应标准单耗表的上限值,下限值。
|
StringBuilder sql = new StringBuilder("SELECT DISTINCT s.uval, s.lval FROM SCH_CON_STD s WHERE s.mat='");
|
sql.append(schStatInput.getMdMat().getId()).append("'");
|
List<?> data = schStatInputDao.queryBySql(sql.toString());
|
|
Object str[] = null;
|
for (Object obj : data) {
|
str = (Object[]) obj;
|
//单耗的上限值,封装到消耗数据对象
|
bean.setUval(Double.parseDouble(StringUtil.convertObjToString(str[0])));
|
|
//单耗的下限值,封装到消耗数据对象
|
bean.setLval(Double.parseDouble(StringUtil.convertObjToString(str[1])));
|
}
|
FillUserInfoUtil.fillCreateAndUpdateUserInfo(schStatInput,bean);
|
//当前选中行的DAC产量,封装到消耗数据对象
|
bean.setDacQty(dacQty);
|
|
rows.add(bean);
|
|
bean = null;
|
}
|
|
return new DataGrid(rows, 0L);
|
}
|
|
|
@LogAnno(operateType = "新增产出数据")
|
@Override
|
public int addOutput(OutputBean outputBean, int flag) throws Exception {
|
SchStatOutput o = new SchStatOutput();
|
|
String workorder = outputBean.getWorkorder();
|
SchWorkorder schWorkorder = schWorkorderDao.findById(SchWorkorder.class, workorder);
|
List<SchStatOutput> outlist = schStatOutputDao.query("from SchStatOutput o where o.del='0' and o.schWorkorder.id=?", outputBean.getWorkorder());
|
if (flag == 1) {//人为新增
|
if (schWorkorder.getSts() == 1||schWorkorder.getSts()==0){
|
return 3;
|
}
|
//判断当前新增工单是否已经在生产实绩中有记录
|
if (outlist != null && outlist.size() > 0) {
|
return 0;
|
}
|
o = BeanConvertor.copyProperties(outputBean, SchStatOutput.class);
|
|
o.setMdUnit(new MdUnit(outputBean.getUnit()));//来源于工单计划产量单位
|
//时间单位统一用分钟
|
o.setLastUpdateTime(new Date());
|
|
} else if (flag == 0) {
|
if (outlist != null && outlist.size() > 0) {
|
o = outlist.get(0);
|
} else {
|
o.setStim(DateUtil.formatStringToDate(outputBean.getStim(), "yyyy-MM-dd HH:mm:ss"));
|
//初始值未空
|
o.setQty(0D);
|
o.setBadQty(0D);
|
o.setRunTime(0D);
|
o.setStopTime(0D);
|
o.setStopTimes(0L);
|
//给产量单位赋值
|
o.setMdUnit(mdUnitDao.unique(MdUnit.class, "select o.mdUnit from SchWorkorder o where o.id=?", workorder));
|
o.setSchWorkorder(new SchWorkorder(workorder));//工单
|
o.setTimeUnit(mdUnitDao.unique(MdUnit.class, "from MdUnit o where o.name=?", "分钟"));
|
o.setIsFeedback(0L);//是否反馈
|
o.setDel(0L);//是否删除
|
|
}
|
|
|
}
|
FillUserInfoUtil.fillCreateUserInfo(o, request);
|
schStatOutputDao.save(o);
|
|
if (flag == 0) {//运行工单时,新增的生产实绩的消耗数据从工单bom中来
|
Map<String, String> type_statInput = addInputsFromWorkOrderBoms(schWorkorder, o);
|
//保存产出实绩和消耗实绩信息到内存中,避免轮询保存实时数据时,重复从数据库获得这些信息
|
DbOutputOrInputInfos outputOrInputInfos = new DbOutputOrInputInfos();
|
outputOrInputInfos.setStatOutputId(o.getId());
|
outputOrInputInfos.setType_statInputId(type_statInput);
|
SchWorkorder order = schWorkorderDao.findById(SchWorkorder.class, workorder);
|
String equipmentCode = order.getMdEquipment().getEquipmentCode();
|
|
if (!RedisUtil.hasKey("outputInput")) {
|
RedisUtil.setMap("outputInput", new HashMap<>());
|
}
|
RedisUtil.addMap("outputInput", equipmentCode, JSONObject.fromObject(outputOrInputInfos).toString());
|
}
|
return 1;
|
}
|
|
public Map<String, String> addInputsFromWorkOrderBoms(SchWorkorder workorder, SchStatOutput schStatOutput) {
|
Map<String, String> inputs = new HashMap<String, String>();
|
|
List<SchStatInput> inputList = schStatInputDao.query("from SchStatInput o where o.schStatOutput.id = ?", schStatOutput.getId());
|
if (inputList != null && inputList.size() > 0) {
|
for (SchStatInput input : inputList) {
|
inputs.put(input.getMdMat().getMdMatType().getCode(), input.getId());
|
}
|
return inputs;
|
}
|
//查询工单的bom
|
String hql = "from SchWorkorderBom o where o.del=0 and o.bom_lot_id=? ";
|
if (workorder.getType() == 1) {
|
hql += " and o.mdMat.mdMatType.code in (2,3,4)";
|
} else if (workorder.getType() == 2) {
|
hql += " and o.mdMat.mdMatType.code in (5,6,7,8,9,20)";
|
} else if (workorder.getType() == 3) {
|
hql += " and o.mdMat.mdMatType.code in (22)";
|
} else if (workorder.getType() == 4) {
|
hql += " and o.mdMat.mdMatType.code in (13)";
|
}
|
List<SchWorkorderBom> boms = schWorkorderBomDao.query(hql, workorder.getBomVersion());
|
//循环保存bom到input中,计数为零
|
//优点:及时采集程序没有采集到数据,补录数据也无需做新增这一繁琐工作,只需修改数据即可
|
for (SchWorkorderBom schWorkorderBom : boms) {
|
SchStatInput o = new SchStatInput(schWorkorderBom.getMdUnit(), schStatOutput, schWorkorderBom.getMdMat(), 0D, 0D);
|
schStatInputDao.save(o);
|
inputs.put(schWorkorderBom.getMdMat().getMdMatType().getCode(), o.getId());
|
}
|
return inputs;
|
}
|
|
/**
|
* 新增
|
* 修改
|
*/
|
@LogAnno(operateType = "编辑产出数据")
|
@Override
|
public int editOutput(OutputBean outputBean) {
|
SchStatOutput output = schStatOutputDao.findById(SchStatOutput.class, outputBean.getId());
|
|
try {
|
BeanConvertor.copyProperties(outputBean, output);
|
output.setLastUpdateTime(new Date());
|
FillUserInfoUtil.fillUpdateUserInfo(output,request);
|
schWorkorderDao.updateBySqlParam("update sch_workorder set real_etim = ? where id = ? ",output.getEtim(),output.getSchWorkorder().getId());
|
String sql="delete from eqm_qty_records where oid in (select oid from SCH_STAT_OUTPUT where id='"+outputBean.getId()+"' ) ";
|
schWorkorderBomDao.updateBySql(sql,null);
|
//先删除 后添加
|
EqmQtyRecords eq = null;
|
for(int i=0;i<7;i++){
|
eq = new EqmQtyRecords();
|
if(i==0){
|
eq.setType("1");
|
eq.setQty(outputBean.getQty1());
|
}else if(i==1){
|
eq.setType("2");
|
eq.setQty(outputBean.getQty2());
|
}else if(i==2){
|
eq.setType("3");
|
eq.setQty(outputBean.getQty3());
|
}else if(i==3){
|
eq.setType("4");
|
eq.setQty(outputBean.getQty4());
|
}else if(i==4){
|
eq.setType("5");
|
eq.setQty(outputBean.getQty5());
|
}else if(i==5){
|
eq.setType("6");
|
eq.setQty(outputBean.getQty6());
|
}else if(i==6){
|
eq.setType("7");
|
eq.setQty(outputBean.getQty7());
|
}
|
eq.setCreateTime(new Date());
|
eq.setCreateUserName(outputBean.getFeedbackUser());
|
eq.setEqp(outputBean.getEquipment());
|
eq.setShift(outputBean.getShift());
|
eq.setOid(outputBean.getWorkorder());
|
eq.setDel("0");
|
eqmQtyRecordsDao.save(eq);
|
}
|
} catch (Exception e) {
|
log.error("转换异常", e);
|
}
|
return 1;
|
}
|
|
|
/**
|
* @Description // 编辑待反馈产出
|
* @Author bsw
|
* @Date 2020/6/13 15:27
|
* @Param [outputBean]
|
* @return int
|
**/
|
@LogAnno(operateType = "编辑待反馈产出数据")
|
@Override
|
public void editOutputFb(OutputBean outputBean) {
|
SchStatOutputFb output = schStatOutputFbDao.findById(SchStatOutputFb.class, outputBean.getId());
|
try {
|
BeanConvertor.copyProperties(outputBean, output);
|
output.setLastUpdateTime(new Date());
|
FillUserInfoUtil.fillUpdateUserInfo(output,request);
|
} catch (Exception e) {
|
log.error("转换异常", e);
|
}
|
}
|
@LogAnno(operateType = "删除产出数据")
|
@Override
|
public void deleteOutput(String id) {
|
schStatOutputDao.updateByParams("update SchStatOutput o set o.del='1' where o.id=?", id);
|
}
|
|
@LogAnno(operateType = "批量删除产出数据")
|
@Override
|
public void batchDeleteOutput(String ids) {
|
try {
|
String[] id=ids.split(",");
|
for (int i = 0; i < id.length; i++) {
|
this.deleteOutput(id[i]);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
@Override
|
public void deleteOutputByWorkOrder(String workorder) {
|
schStatOutputDao.updateByParams("update SchStatOutput o set o.del='1' where o.schWorkorder.id=?", workorder);
|
}
|
|
@LogAnno(operateType = "新增消耗数据")
|
@Override
|
public int addInput(InputBean inputBean) throws Exception {
|
SchStatInput o = BeanConvertor.copyProperties(inputBean, SchStatInput.class);
|
o.setMdUnit(new MdUnit(inputBean.getUnit()));
|
o.setSchStatOutput(new SchStatOutput(inputBean.getOutputId()));
|
o.setMdMat(new MdMat(inputBean.getMat()));
|
FillUserInfoUtil.fillCreateUserInfo(o, request);
|
schStatInputDao.save(o);
|
return 1;
|
}
|
|
@LogAnno(operateType = "编辑消耗数据")
|
@Override
|
public int editInput(InputBean inputBean) {
|
SchStatInput o = schStatInputDao.findById(SchStatInput.class, inputBean.getId());
|
o.setQty(inputBean.getQty());//只编辑消耗量
|
FillUserInfoUtil.fillUpdateUserInfo(o, request);
|
return 1;
|
}
|
|
@LogAnno(operateType = "编辑待反馈消耗数据")
|
@Override
|
public void editInputFb(InputBean inputBean) {
|
SchStatInputFb o = schStatInputFbDao.findById(SchStatInputFb.class, inputBean.getId());
|
o.setQty(inputBean.getQty());//只编辑消耗量
|
FillUserInfoUtil.fillUpdateUserInfo(o, request);
|
}
|
|
@LogAnno(operateType = "删除消耗数据")
|
@Override
|
public void deleteInput(String id) {
|
schStatInputDao.deleteById(id, SchStatInput.class);
|
}
|
|
@Override
|
public OutputBean getOutputById(String id) {
|
try {
|
SchStatOutput output = schStatOutputDao.findById(SchStatOutput.class, id);
|
|
OutputBean bean = null;
|
if (output!=null) {
|
|
bean = BeanConvertor.copyProperties(output, OutputBean.class);
|
|
SchWorkorder workorder = output.getSchWorkorder();
|
|
|
String wd = String.valueOf(workorder.getType());
|
|
bean.setDate(DateUtil.formatDateToString(workorder.getDate(), "yyyy-MM-dd"));
|
|
bean.setEqpType(wd);
|
|
bean.setShift(workorder.getMdShift().getName());
|
|
bean.setTeam(workorder.getMdTeam().getName());
|
|
bean.setEquipment(workorder.getMdEquipment().getEquipmentName());
|
|
bean.setWorkorder(workorder.getId());
|
|
bean.setWorkorderCode(workorder.getCode());
|
|
bean.setMatProd(workorder.getMdMat().getName());
|
|
bean.setUnitName(output.getMdUnit().getName());
|
|
bean.setUnit(output.getMdUnit().getId());
|
|
bean.setTimeunit(output.getTimeUnit().getName());
|
bean.setDacQty(output.getDACqty());
|
bean.setMainQty(output.getMainQty());
|
bean.setPbjQty("".equals(output.getPbjQty()) || output.getPbjQty() == null ? 0 : output.getPbjQty());
|
bean.setTbjQty(output.getTbjQty());
|
bean.setCxpz(output.getCxpz());//成型盘纸
|
bean.setCxdb(output.getCxdb());//成型大包
|
bean.setCxkl(output.getCxkl());//创库发料
|
bean.setRecQty1(output.getRecQty1());
|
bean.setRecQty2(output.getRecQty2());
|
if ("2".equals(wd)) {//封箱机时查询是否已手动录入产量
|
String sql = "select qty,type from EQM_QTY_RECORDS where oid = '" + workorder.getId() + "'";
|
List<?> eqList = eqmQtyRecordsDao.queryBySql(sql);
|
for (int i = 0; i < eqList.size(); i++) {
|
Object[] obj = (Object[]) eqList.get(i);
|
if ("1".equals(StringUtil.convertObjToString(obj[1]))) {
|
|
bean.setQty1(StringUtil.converObj2Double(obj[0]));
|
|
} else if ("2".equals(StringUtil.convertObjToString(obj[1]))) {
|
|
bean.setQty2(StringUtil.converObj2Double(obj[0]));
|
|
} else if ("3".equals(StringUtil.convertObjToString(obj[1]))) {
|
|
bean.setQty3(StringUtil.converObj2Double(obj[0]));
|
|
} else if ("4".equals(StringUtil.convertObjToString(obj[1]))) {
|
|
bean.setQty4(StringUtil.converObj2Double(obj[0]));
|
|
} else if ("5".equals(StringUtil.convertObjToString(obj[1]))) {
|
bean.setQty5(StringUtil.converObj2Double(obj[0]));
|
|
} else if ("6".equals(StringUtil.convertObjToString(obj[1]))) {
|
bean.setQty6(StringUtil.converObj2Double(obj[0]));
|
|
} else if ("7".equals(StringUtil.convertObjToString(obj[1]))) {
|
bean.setQty7(StringUtil.converObj2Double(obj[0]));
|
}
|
|
}
|
}
|
}
|
|
|
return bean;
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
@Override
|
public OutputBean getOutputFbById(String id) {
|
try {
|
SchStatOutputFb output = schStatOutputFbDao.findById(SchStatOutputFb.class, id);
|
|
OutputBean bean = null;
|
if (output!=null) {
|
|
bean = BeanConvertor.copyProperties(output, OutputBean.class);
|
|
SchWorkorder workorder = output.getSchWorkorder();
|
|
|
String wd = String.valueOf(workorder.getType());
|
|
bean.setDate(DateUtil.formatDateToString(workorder.getDate(), "yyyy-MM-dd"));
|
|
bean.setEqpType(wd);
|
|
bean.setShift(workorder.getMdShift().getName());
|
|
bean.setTeam(workorder.getMdTeam().getName());
|
|
bean.setEquipment(workorder.getMdEquipment().getEquipmentName());
|
|
bean.setWorkorder(workorder.getId());
|
|
bean.setWorkorderCode(workorder.getCode());
|
|
bean.setMatProd(workorder.getMdMat().getName());
|
|
bean.setUnitName(output.getMdUnit().getName());
|
|
bean.setUnit(output.getMdUnit().getId());
|
|
bean.setTimeunit(output.getTimeUnit().getName());
|
bean.setDacQty(output.getDACqty());
|
bean.setMainQty(output.getMainQty());
|
bean.setPbjQty("".equals(output.getPbjQty()) || output.getPbjQty() == null ? 0 : output.getPbjQty());
|
bean.setTbjQty(output.getTbjQty());
|
bean.setCxpz(output.getCxpz());//成型盘纸
|
bean.setCxdb(output.getCxdb());//成型大包
|
bean.setCxkl(output.getCxkl());//创库发料
|
bean.setRecQty1(output.getRecQty1());
|
bean.setRecQty2(output.getRecQty2());
|
if ("2".equals(wd)) {//封箱机时查询是否已手动录入产量
|
String sql = "select qty,type from EQM_QTY_RECORDS where oid = '" + workorder.getId() + "'";
|
List<?> eqList = eqmQtyRecordsDao.queryBySql(sql);
|
for (int i = 0; i < eqList.size(); i++) {
|
Object[] obj = (Object[]) eqList.get(i);
|
if ("1".equals(StringUtil.convertObjToString(obj[1]))) {
|
|
bean.setQty1(StringUtil.converObj2Double(obj[0]));
|
|
} else if ("2".equals(StringUtil.convertObjToString(obj[1]))) {
|
|
bean.setQty2(StringUtil.converObj2Double(obj[0]));
|
|
} else if ("3".equals(StringUtil.convertObjToString(obj[1]))) {
|
|
bean.setQty3(StringUtil.converObj2Double(obj[0]));
|
|
} else if ("4".equals(StringUtil.convertObjToString(obj[1]))) {
|
|
bean.setQty4(StringUtil.converObj2Double(obj[0]));
|
|
} else if ("5".equals(StringUtil.convertObjToString(obj[1]))) {
|
bean.setQty5(StringUtil.converObj2Double(obj[0]));
|
|
} else if ("6".equals(StringUtil.convertObjToString(obj[1]))) {
|
bean.setQty6(StringUtil.converObj2Double(obj[0]));
|
|
} else if ("7".equals(StringUtil.convertObjToString(obj[1]))) {
|
bean.setQty7(StringUtil.converObj2Double(obj[0]));
|
}
|
|
}
|
}
|
}
|
|
|
return bean;
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
@Override
|
public InputBean getInputById(String id) throws Exception {
|
SchStatInput input = schStatInputDao.findById(SchStatInput.class, id);
|
InputBean bean = BeanConvertor.copyProperties(input, InputBean.class);
|
bean.setUnit(input.getMdUnit().getName());
|
bean.setMat(input.getMdMat().getName());
|
return bean;
|
}
|
|
@Override
|
public InputBean getInputFbById(String id) throws Exception {
|
SchStatInputFb input = schStatInputFbDao.findById(SchStatInputFb.class, id);
|
InputBean bean = BeanConvertor.copyProperties(input, InputBean.class);
|
bean.setUnit(input.getMdUnit().getName());
|
bean.setMat(input.getMdMat().getName());
|
return bean;
|
}
|
|
@Override
|
public List<Combobox> getBomsWorkorderId(WorkOrderBean bean) throws Exception {
|
String hql = "select o.mdMat from SchWorkorderBom o , MdEquipment e " +
|
"where o.eqptype = e.equipmentPosition and o.bom_lot_id=? and o.mdMat.id not in " +
|
"(select i.mdMat.id from SchStatInput i where i.schStatOutput.schWorkorder.id=?) " +
|
"and e.id = ? ";
|
//return BeanConvertor.copyList(schStatInputDao.query(List.class, hql, bean.getBomVersion(), bean.getId(),bean.getEquipmentId()), Combobox.class);
|
//返回数据text由name更新为name(code)
|
List<?> mats = schStatInputDao.query(List.class, hql, bean.getBomVersion(), bean.getId(), bean.getEquipmentId());
|
List<Combobox> list = new java.util.ArrayList<Combobox>();
|
if (mats != null && mats.size() > 0) {
|
for (Object o : mats) {
|
com.shlanbao.tzsc.base.mapping.MdMat m = (com.shlanbao.tzsc.base.mapping.MdMat) o;
|
list.add(new Combobox(m.getId(), m.getName() + "(" + m.getCode() + ")"));
|
}
|
}
|
return list;
|
}
|
|
@Override
|
public UnitBean getUnitByMatId(String bomVersion, String matId) {
|
String hql = "select o.mdUnit from SchWorkorderBom o where o.bom_lot_id=? and o.mdMat.id=?";
|
MdUnit obj = (MdUnit) schStatOutputDao.unique(hql, bomVersion, matId);
|
return new UnitBean(obj.getId(), obj.getName());
|
}
|
|
/**
|
* 修改人 shisihai 工单反馈
|
*/
|
@Override
|
public int sendDataToMES(String idOrIds, String feedbackUser) {
|
WorkOrderFeedbackInterceptor workOrderFeedback = new WorkOrderFeedbackInterceptor();
|
return workOrderFeedback.sendWorkOrderDetails(idOrIds, feedbackUser);
|
}
|
|
//
|
// /**
|
// * [功能说明]:工单实际反馈
|
// * 1)通过ID集合,查询工单表集合,返回MES;
|
// * 2)发送成功后修改工单状态;
|
// *
|
// * */
|
// @Override
|
// public int sendDataToMES(String idOrIds,String feedbackUser,Integer type) {
|
// //ids=ids.replaceAll(",", "','");//如: 1,2拼接成 1','2
|
// String[] idst=idOrIds.split(",");
|
// for(int i=0;i<idst.length;i++){
|
// StringBuffer sql=new StringBuffer(1000);
|
// sql.append("select ");
|
// sql.append("a.code,a.shift,a.team,a.stim,a.etim,(select code from MD_MAT where id=mat) as matName, ");
|
// sql.append("b.qty,(select MES_EQPCODE from MD_EQUIPMENT where id=eqp) as eqpCode, ");
|
// sql.append("stop_times,stop_time ");
|
// sql.append("from SCH_WORKORDER a LEFT JOIN SCH_STAT_OUTPUT b on a.id=b.oid ");
|
// if (type==1) {
|
// sql.append("where a.sts=4 and a.id in ('"+idst[i]+"') ");
|
// }
|
// if (type==2) {
|
// sql.append("where a.sts=4 and b.id in ('"+idst[i]+"') ");
|
// }
|
//
|
// //查询工单实际消耗
|
// List<?> wklist=schStatInputDao.queryBySql(sql.toString());
|
// sql.setLength(0);
|
// //查询辅料消耗
|
// sql.append("select a.qty,( select name from MD_UNIT where id=a.unit) as unitName,b.code from SCH_STAT_INPUT a , MD_MAT b where a.mat=b.id ");
|
// if (type==1) {
|
// sql.append("and a.out_id in ( select id from SCH_STAT_OUTPUT where oid in ('"+idst[i]+"') ) ");
|
// }
|
// if (type==2) {
|
// sql.append("and a.out_id in ('"+idst[i]+"')");
|
// }
|
//
|
// List<?> fllist=schStatInputDao.queryBySql(sql.toString());
|
// getListMesWorkOrder(wklist,fllist);
|
// }
|
// return 1;
|
// }
|
//
|
//
|
// public List<MesWorkOrderBean> getListMesWorkOrder(List<?> wklist,List<?> fllist){
|
// List<MesMdMatBean> fllt=new ArrayList<MesMdMatBean>();
|
// MesWorkOrderBean bean=null;
|
// if(wklist.size()>0){
|
// for(Object o:wklist){
|
// bean=new MesWorkOrderBean();
|
// Object[] temp=(Object[]) o;
|
// bean.setCode(temp[0].toString()); //
|
// bean.setShift(temp[1].toString()); //班次
|
// bean.setTeam(temp[2].toString()); //班组
|
// bean.setReal_stim(temp[3].toString()); //实际开始时间
|
// bean.setReal_etim(temp[4].toString()); //实际结束时间
|
// bean.setMatName(temp[5].toString()); //物料名称
|
// if(temp[6]!=null){
|
// bean.setOutput(Double.parseDouble( temp[6].toString() ));//实际产量
|
// }
|
// if(temp[7]!=null){
|
// bean.setEqpCode( temp[7].toString() );//设备mes——code
|
// }
|
// if(temp[8]!=null){
|
// bean.setDowntimeTimes(Integer.parseInt( temp[8].toString() )); //停机次数
|
// }
|
// if(temp[9]!=null){
|
// bean.setDowntimeDuration( temp[9].toString() ); //停机时间
|
// }
|
// //添加物料
|
// if(wklist.size()>0){
|
// MesMdMatBean mesMdMat=null;
|
// for(Object o2:fllist){
|
// mesMdMat=new MesMdMatBean();
|
// Object[] temp2=(Object[]) o2;
|
// if(temp2[0]!=null){
|
// mesMdMat.setQuantity( Float.parseFloat(temp2[0].toString() )); //辅料产量
|
// }
|
// if(temp2[1]!=null){
|
// mesMdMat.setUom(temp2[1].toString() ); //辅料单位
|
// }
|
// if(temp2[2]!=null){
|
// mesMdMat.setMaterialCode( temp2[2].toString() ); //辅料编码
|
// }
|
// fllt.add(mesMdMat);
|
// }
|
// }
|
// bean.setListFl(fllt);
|
// //循环向MES发送
|
// WorkOrderStatChangeInterceptor.getInstance().DASSendOrderResult(bean);
|
// }
|
// }
|
// return null;
|
// }
|
//
|
//
|
|
/**
|
* 修改生产实绩反馈状态
|
*
|
* @author Leejean
|
* @create 2014年12月4日下午2:58:50
|
*/
|
public void editOutputIsFeedback(String id, String feedbackUser) {
|
SchStatOutput output = schStatOutputDao.findById(SchStatOutput.class, id);
|
output.setIsFeedback(1L);
|
output.setFeedbackTime(new Date());
|
output.setFeedbackUser(feedbackUser);
|
|
}
|
|
|
/**
|
* 根据设备ID保存设备故障汇总信息
|
*
|
* @param eid
|
* @return
|
*/
|
public boolean saveTrouble(String eid, Hashtable<String, String> faultHt) {
|
//根据设备ID获取设备故障集合,String[] //0:机台Code,1:班次,2:故障描述,3:次数,4:故障发生总时长
|
List<String[]> list = null;
|
if (StringUtil.notNull(eid)) {
|
list = FaultDataCalc.getInstance().getFaultList(eid);
|
} else {
|
list = FaultDataCalc.getInstance().getAllFaultList();
|
}
|
for (String[] string : list) {
|
if (!StringUtil.notNull(string[0])) {
|
log.error("保存故障信息失败,设备CODE(" + string[0] + ")不存在。");
|
continue;
|
}
|
String value = eqpCodeOutputList.get(string[0]);
|
if (value == null || !StringUtil.notNull(value)) {
|
log.info("数据为空【无法获取当前设备Code(" + string[0] + ")对应的运行工单实际产量ID信息】");
|
continue;
|
}
|
SchStatFault fault = new SchStatFault();
|
//如果故障ID已存在,并且故障名称一致,则进行修改
|
if (StringUtil.notNull(value)) {
|
String faultId = faultHt.get(string[0] + string[2]);
|
if (faultId != null) {
|
fault.setId(faultId);
|
}
|
}
|
//SCH_STAT_OUTPUT ID
|
fault.setSchStatOutput(new SchStatOutput(value));
|
//故障名称
|
fault.setName(string[2]);
|
//时长
|
fault.setTime(Double.parseDouble(string[4]));
|
//次数
|
fault.setTimes((long) Double.parseDouble(string[3]));
|
//反馈状态
|
fault.setFlag(0L);
|
SchStatFaultDao.saveOrUpdate(fault);
|
}
|
return false;
|
}
|
|
@Override
|
public void saveAllErrorData(List<String[]> list) {
|
Hashtable<String, String> ht = getAllWorkOrderOutputListHT();
|
log.info("保存所有机台故障汇总信息……");
|
//故障
|
saveTrouble(null, ht);
|
}
|
|
|
private Hashtable<String, String> eqpCodeOutputList;
|
|
/**
|
* 获取所有运行的设备output Id
|
*
|
* @return ht<code, id>
|
*/
|
public Hashtable<String, String> getAllWorkOrderOutputListHT() {
|
StringBuffer sqlBuffer = new StringBuffer();
|
//设备Code,实际生产数据ID,故障id,日期
|
sqlBuffer.append("select e.EQUIPMENT_CODE,ou.ID,fault.ID as fault_id,fault.NAME,wo.DATE_ from SCH_WORKORDER wo ");
|
sqlBuffer.append("left join SCH_STAT_OUTPUT ou on wo.ID=ou.OID ");
|
sqlBuffer.append("left join SCH_STAT_FAULT fault on ou.ID=fault.OID ");
|
sqlBuffer.append("left join MD_EQUIPMENT e on wo.EQP=e.ID ");
|
sqlBuffer.append("where wo.del=0 and wo.IS_CHECK=1 and wo.sts=2 ");
|
sqlBuffer.append("and ou.ID is not null order by wo.DATE_ desc ");
|
Hashtable<String, String> ht = new Hashtable<String, String>();
|
eqpCodeOutputList = new Hashtable<String, String>();
|
List<?> list = SchStatFaultDao.queryBySql(sqlBuffer.toString());
|
for (Object o : list) {
|
Object[] temp = (Object[]) o;
|
//保存设备code和正在运行工单的生产实绩表 对应关系
|
//key eqpCode,value output ID
|
if (eqpCodeOutputList.get(temp[0].toString().trim()) == null) {
|
eqpCodeOutputList.put(temp[0].toString().trim(), StringUtil.convertObj(temp[1]));
|
}
|
//过滤没有当前设备运行工单没有故障信息
|
if (temp[3] != null && StringUtil.notNull(temp[3].toString()) && ht.get(temp[0].toString().trim() + StringUtil.convertObj(temp[3])) == null) {
|
//key 设备code,value 0:生产实际ID,1:故障ID,2:故障名称
|
ht.put(temp[0].toString().trim() + StringUtil.convertObj(temp[3]), StringUtil.convertObj(temp[2]));
|
}
|
}
|
return ht;
|
}
|
|
/**
|
* [功能描述]:提升机数据,在开始结束本班次后,保存提升机产量到相关机台
|
*
|
* @author wanchanghuang
|
* @createTime 2015年11月27日17:43:30
|
*/
|
@Override
|
public Map<String, String> queryByEquiment() {
|
Map<String, String> map = new HashMap<String, String>();
|
//获取包装机code
|
Integer code = SysEqpTypeBase.packerEqpTypeCode;
|
String sql = "select id,EQUIPMENT_CODE from MD_EQUIPMENT where EQP_TYPE_ID in(select a.id from MD_EQP_TYPE a,MD_EQP_CATEGORY b where a.cid=b.id and b.code='" + code + "')";
|
List<?> list = schStatInputDao.queryBySql(sql);
|
if (list.size() > 0 && list != null) {
|
for (int i = 0; i < list.size(); i++) {
|
Object[] temp = (Object[]) list.get(i);
|
if (temp[0] != null && temp[1] != null) {
|
map.put(temp[1].toString(), temp[0].toString());
|
}
|
}
|
|
}
|
return map;
|
}
|
|
/**
|
* [功能说明]:用提升机产量更新工单产量
|
*
|
* @param -提升机产量 eqp_id-工单ID
|
* @param tSQty=条 /250 =箱
|
* @author wanchanghuang
|
* @createTime 2015年11月30日08:43:06
|
*/
|
@Override
|
public void supdateSchStatInputOutById(SchCalendarBean bean, Double tSQty, String eqp_id) {
|
//StringBuffer hql=new StringBuffer(1000);
|
sqlbf.setLength(0);
|
sqlbf.append(" update SCH_STAT_OUTPUT set dacqty=qty,qty='" + tSQty + "' where oid=( ");
|
sqlbf.append(" select b.id from SCH_STAT_OUTPUT a ,SCH_WORKORDER b where ");
|
sqlbf.append(" a.oid=b.id and b.shift='" + bean.getMdShiftCode() + "' and CONVERT(varchar(50),b.date,23)=CONVERT(varchar(50),GETDATE(),23) and b.eqp='" + eqp_id + "' ");
|
sqlbf.append(" and a.dacqty is null ) ");
|
//修改
|
try {
|
schStatInputDao.updateInfo(sqlbf.toString(), null);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
/**
|
* 导出PMS卷包机产量信息
|
* TODO
|
*
|
* @param date
|
* @param date2
|
* @return TRAVLER
|
* 2015年12月2日下午2:48:51
|
*/
|
@LogAnno(operateType = "导出PMS卷包机产量信息")
|
@Override
|
public HSSFWorkbook exportQtyInfo(String date, String date2, String shift, String team, String eqp, String eqpType) {
|
HSSFWorkbook workBook = null;
|
ExportExcel ee = new ExportExcel();
|
workBook = new HSSFWorkbook();
|
HSSFSheet sheet = workBook.createSheet();
|
workBook.setSheetName(0, "temp1");
|
sheet.setVerticallyCenter(true);
|
sheet.setDefaultColumnWidth((short) 15);
|
sheet.setDefaultRowHeight((short) 15);
|
HSSFCellStyle tableStyle = ee.getTableStyle(workBook, true);
|
HSSFCellStyle tdStyle = ee.getTableStyle(workBook, false);
|
tdStyle.setWrapText(false);
|
try {
|
// th 当前开始行,当前结束行, 从1开始计算行 一共多少列 从0开始计算总列数
|
int[] thTables = {1, 3, 13};
|
List<String> th = new ArrayList<String>();
|
|
th.add("1,1,13,1,卷包生产实绩");//开始行 开始列 结束列 结束行
|
th.add("2,1,2,2,日期");
|
th.add("2,3,5,2," + date + " 到 " + date2);
|
th.add("3,1,1,3,班次");
|
th.add("3,2,2,3,班组");
|
th.add("3,3,3,3,设备");
|
th.add("3,4,4,3,计划产量");
|
th.add("3,5,5,3,计划开始时间");
|
th.add("3,6,6,3,计划结束时间");
|
th.add("3,7,7,3,实际产量");
|
th.add("3,8,8,3,实际剔除");
|
th.add("3,9,9,3,实际开始时间");
|
th.add("3,10,10,3,实际结束时间");
|
th.add("3,11,11,3,实际运行时间");
|
th.add("3,12,12,3,实际停机时间");
|
th.add("3,13,13,3,实际停机次数");
|
//获取List集合
|
List<RoutputBean> ls = this.queryQtyInfo(date, date2, shift, team, eqp, eqpType);
|
//方法集合,同表头一致
|
String[] method = new String[]{"getShift", "getTeam", "getEqpName", "getpQty", "getpSTime"
|
, "getpETime", "getQty", "getBadQty", "getStime",
|
"getEtime", "getRunTime", "getStopTime", "getStopTimes"
|
};
|
//开始行
|
int startLine = 3;
|
ee.exportExcelMoreTh(thTables, th, startLine, method, RoutputBean.class, ls, sheet, tableStyle, tdStyle, null, null, null, null, null);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return workBook;
|
}
|
|
/**
|
* 查询PMS卷包产量数据查询
|
* TODO
|
*
|
* @param date
|
* @param date2
|
* @return TRAVLER
|
* 2015年12月2日下午2:52:22
|
*/
|
private List<RoutputBean> queryQtyInfo(String date, String date2, String shift, String team, String eqp, String eqpType) {
|
List<RoutputBean> beans = new ArrayList<RoutputBean>();
|
StringBuffer sb = new StringBuffer();
|
sb.append(" select (select name from MD_SHIFT where id=a.shift) ,(select equipment_name from MD_EQUIPMENT where id=a.eqp), ");
|
sb.append(" a.qty as qty_,TO_CHAR( A .stim, 'yyyy-MM-dd hh24:mi:ss'),to_char( A .etim, 'yyyy-MM-dd hh24:mi:ss'), ");
|
sb.append(" b.qty,b.bad_qty,to_char ( b.stim, 'yyyy-MM-dd hh24:mi:ss'),");
|
sb.append(" to_char ( b.etim, 'yyyy-MM-dd hh24:mi:ss'),b.run_time,b.stop_time,");
|
sb.append(" b.stop_times,(SELECT name FROM MD_TEAM WHERE id = a.TEAM ) from SCH_WORKORDER a,SCH_STAT_OUTPUT b where a.id=b.oid ");
|
sb.append(" and 1=1 ");
|
if (StringUtil.notNull(date)) {
|
sb.append(" and to_char ( A . DATE_, 'yyyy-MM-dd')>='" + date + "'");
|
}
|
if (StringUtil.notNull(date2)) {
|
sb.append(" and to_char ( A . DATE_, 'yyyy-MM-dd')<='" + date2 + "'");
|
}
|
//班组
|
if (StringUtil.notNull(team)) {
|
sb.append(" AND a.TEAM=" + team);
|
}
|
//班次
|
if (StringUtil.notNull(shift)) {
|
sb.append(" AND a.SHIFT=" + shift);
|
}
|
//机台
|
if (StringUtil.notNull(eqp)) {
|
sb.append(" AND a.EQP='" + eqp + "'");
|
}
|
//机型
|
if (StringUtil.notNull(eqpType)) {
|
sb.append(" and a.type=" + eqpType);
|
}
|
sb.append(" and a.STS=4 order by a.date_,(select equipment_name from MD_EQUIPMENT where id=a.eqp)");
|
List<?> ls = schStatOutputDao.queryBySql(sb.toString());
|
Object[] o = null;
|
RoutputBean b = null;
|
if (ls != null && ls.size() > 0) {
|
for (Object obj : ls) {
|
b = new RoutputBean();
|
o = (Object[]) obj;
|
b.setShift(StringUtil.convertObjToString(o[0]));
|
b.setEqpName(StringUtil.convertObjToString(o[1]));
|
b.setpQty(this.convDouble(o[2]));
|
b.setpSTime(StringUtil.convertObjToString(o[3]));
|
b.setpETime(StringUtil.convertObjToString(o[4]));
|
b.setQty(this.convDouble(o[5]));
|
b.setBadQty(this.convDouble(o[6]));
|
b.setStime(StringUtil.convertObjToString(o[7]));
|
b.setEtime(StringUtil.convertObjToString(o[8]));
|
b.setRunTime(StringUtil.convertObjToString(o[9]));
|
b.setStopTime(StringUtil.convertObjToString(o[10]));
|
b.setStopTimes(StringUtil.convertObjToString(o[11]));
|
b.setTeam(StringUtil.convertObjToString(o[12]));
|
beans.add(b);
|
}
|
}
|
|
//添加合计
|
b = new RoutputBean();
|
b.setEqpName("合计");
|
//计划产量
|
Double pQty = 0.0;
|
//实际产量
|
Double rQty = 0.0;
|
//实际剔除
|
Double badQty = 0.0;
|
//实际运行时间
|
Double runTime = 0.0;
|
//实际停机时间
|
Double stopTime = 0.0;
|
//实际停机次数
|
Double stopTimes = 0.0;
|
for (RoutputBean b0 : beans) {
|
pQty += this.convDouble(b0.getpQty());
|
rQty += this.convDouble(b0.getQty());
|
badQty += this.convDouble(b0.getBadQty());
|
runTime += this.convDouble(b0.getRunTime());
|
stopTime += this.convDouble(b0.getStopTime());
|
stopTimes += this.convDouble(b0.getStopTimes());
|
}
|
b.setpQty(pQty);
|
b.setQty(rQty);
|
b.setBadQty(badQty);
|
b.setRunTime(runTime.toString());
|
b.setStopTime(stopTime.toString());
|
b.setStopTimes(stopTimes.toString());
|
beans.add(b);
|
return beans;
|
|
}
|
|
/**
|
* Obje 转Double
|
* TODO
|
*
|
* @param o
|
* @return TRAVLER
|
* 2015年12月2日下午4:30:32
|
*/
|
private Double convDouble(Object o) {
|
Double d = 0.0;
|
if (o != null && StringUtil.isDouble(o.toString())) {
|
d = Double.valueOf(o.toString());
|
}
|
return d;
|
}
|
|
|
/**
|
* @param outputBean
|
* @return void
|
* @title saveEquipmentData
|
* @description 保存单个机台实时数据
|
* @author bsw
|
* @params [equipmentCode, data]
|
* @updateTime 13:26 2019/8/6 0006
|
*/
|
@Override
|
public void saveEquipmentData(OutputBean outputBean) {
|
String shiftId = (String) RedisUtil.getMapKey("shift", "ID");
|
|
if (null != outputBean) {
|
String equipmentCode = outputBean.getEqpCode();
|
int eqpCode = Integer.valueOf(equipmentCode);
|
Map<String, Object> dbOutputOrInputInfos = RedisUtil.getMap("outputInput");
|
DbOutputOrInputInfos info = (DbOutputOrInputInfos) JSONUtil.JSONString2Bean(dbOutputOrInputInfos.get(equipmentCode).toString(), DbOutputOrInputInfos.class);
|
String dbOutputId = info.getStatOutputId();
|
//当前运行的工单的产出表id
|
String oid = outputBean.getId();
|
//判断产出表id是否一致,不一致将dbOutputId设置为null。
|
if (oid == null || (oid != null && !oid.equals(dbOutputId))) {
|
dbOutputId = null;
|
}
|
//手动点击工单运行
|
if (null == dbOutputId || "".equals(dbOutputId)) {//如果卷烟机 包装机 成型机 封箱机 查询 辅料数据
|
try {
|
outputBean.setStim(DateUtil.getNowDateTime("yyyy-MM-dd HH:mm:ss"));
|
this.addOutput(outputBean, 0);
|
} catch (Exception e) {
|
log.error("StatServiceImpl->addOutput:" + e.getMessage());
|
}
|
dbOutputOrInputInfos = RedisUtil.getMap("outputInput");
|
info = (DbOutputOrInputInfos) JSONUtil.JSONString2Bean(dbOutputOrInputInfos.get(equipmentCode).toString(), DbOutputOrInputInfos.class);
|
dbOutputId = info.getStatOutputId();
|
}
|
if (dbOutputId == null || "".equals(dbOutputId)) {
|
log.info("工单未运行[equipmentCode=" + equipmentCode + "];或者sch_stat_output表没有生成对应数据");
|
return;
|
}
|
OutputBean bean = getOutputById(dbOutputId);
|
if (bean == null ){
|
return;
|
}
|
//卷烟机=====================
|
if (100 <= eqpCode && eqpCode <= 199) {
|
RollerData edata = getRollerData(shiftId, equipmentCode, null);
|
try {
|
log.info("保存产量[equipmentCode=" + equipmentCode + ",value=" + edata.getQty() + "]");
|
if (edata.getQty() > 0 && edata.getQty() >= bean.getQty()) {//产量只要大于0 才记录,防止 PLC换班了,程序自动换班没有换班,赋值 0
|
//保存产量
|
this.editOutput(new OutputBean(dbOutputId,
|
edata.getQty() > 0 ? edata.getQty() : null,
|
edata.getBadQty() > 0 ? edata.getBadQty() : null,
|
edata.getRunTime() > 0 ? edata.getRunTime() : null,
|
edata.getStopTime() > 0 ? edata.getStopTime() : null,
|
Long.valueOf(edata.getStopTimes()),
|
edata.getQty(), 0D, 0D, 0D, 0D, 0D, 0D, edata.getRecQty1(), edata.getRecQty2()));
|
|
String inputId = info.getInputIdByType("2");
|
InputBean inputBean = null;
|
if (inputId != null) {//装配、保存【卷烟纸】
|
inputBean = new InputBean(inputId, 0D, edata.getJuanyanzhiVal());
|
if (edata.getJuanyanzhiVal() > 1) {//产量大于 0 才更新//if(edata.getQty()>0){//产量大于 0 才更新
|
editInput(inputBean);
|
log.info("保存消耗[equipmentCode=" + equipmentCode + ",type=卷烟纸,value=" + edata.getJuanyanzhiVal() + "]");
|
}
|
}
|
inputId = info.getInputIdByType("3");
|
if (inputId != null) {//装配、保存【水松纸】
|
inputBean = new InputBean(inputId, 0D, edata.getShuisongzhiVal());
|
if (edata.getShuisongzhiVal() > 1) {//if(edata.getQty()>0){//产量大于 0 才更新
|
editInput(inputBean);
|
log.info("保存消耗[equipmentCode=" + equipmentCode + ",type=水松纸,value=" + edata.getShuisongzhiVal() + "]");
|
}
|
}
|
inputId = info.getInputIdByType("4");
|
if (inputId != null) {//装配、保存【滤棒】
|
inputBean = new InputBean(inputId, 0D, edata.getLvbangVal());
|
if (edata.getLvbangVal() > 1) {//if(edata.getQty()>0){//产量大于 0 才更新
|
editInput(inputBean);
|
log.info("保存消耗[equipmentCode=" + equipmentCode + ",type=滤棒,value=" + edata.getLvbangVal() + "]");
|
}
|
}
|
}
|
} catch (Exception e) {
|
log.info("实时保存卷烟机产量异常" + equipmentCode + ">>>>>>>>>>>" + dbOutputId);
|
e.printStackTrace();
|
}
|
|
/* Map<String,Object> rollerMap = RedisUtil.getMap(shiftId+equipmentCode+"M");
|
if (rollerMap!=null){
|
|
}*/
|
|
return;
|
}
|
//====================
|
|
//包装机=====================产量为提升机产量 dacqty保存的是包转箱数据
|
if (200 <= eqpCode && eqpCode <= 299) {
|
PackerData edata = getPackerDatas(shiftId, equipmentCode);
|
try {
|
if (edata.getQty() > 1) {
|
log.info("保存产量[equipmentCode=" + equipmentCode + ",value=" + edata.getQty() + "]");
|
//保存产量
|
this.editOutput(new OutputBean(
|
dbOutputId,
|
MathUtil.roundHalfUp(edata.getTsQty() / 250.000, 3) > 0 ? MathUtil.roundHalfUp(edata.getTsQty() / 250.000, 3) : null,
|
edata.getBadQty() > 0 ? edata.getBadQty() : null,
|
edata.getRunTime() > 0 ? edata.getRunTime() : null,
|
edata.getStopTime() > 0 ? edata.getStopTime() : null,
|
Long.valueOf(edata.getStopTimes()),
|
edata.getQty() > 0 ? edata.getQty() : null,
|
edata.getMainQty() > 0 ? edata.getMainQty() : null,
|
edata.getMainBadQty() > 0 ? edata.getMainBadQty() : null,
|
edata.getTbjQty() > 0 ? edata.getTbjQty() : null,
|
edata.getTbjGdQty() > 0 ? edata.getTbjGdQty() : null,
|
edata.getTbjBadQty() > 0 ? edata.getTbjBadQty() : null,
|
0D,0D,0D
|
)
|
);
|
//保存物料消耗
|
String inputId = info.getInputIdByType("5");
|
InputBean inputBean = null;
|
if (inputId != null) {//装配、保存
|
inputBean = new InputBean(inputId, 0D, edata.getXiaohemoVal());
|
if (edata.getXiaohemoVal() > 1) {//if(edata.getQty()>0){//产量大于 0 才更新
|
editInput(inputBean);
|
log.info("保存消耗[equipmentCode=" + equipmentCode + ",type=小盒膜,value=" + edata.getXiaohemoVal() + "]");
|
}
|
}
|
|
inputId = info.getInputIdByType("6");
|
if (inputId != null) {//装配、保存
|
inputBean = new InputBean(inputId, 0D, edata.getTiaohemoVal());
|
if (edata.getTiaohemoVal() > 1) {//if(edata.getQty()>0){//产量大于 0 才更新
|
editInput(inputBean);
|
log.info("保存消耗[equipmentCode=" + equipmentCode + ",type=条盒膜,value=" + edata.getTiaohemoVal() + "]");
|
}
|
}
|
|
inputId = info.getInputIdByType( "7");
|
if (inputId != null) {//装配、保存
|
inputBean = new InputBean(inputId, 0D, edata.getXiaohezhiVal());
|
if (edata.getXiaohezhiVal() > 1) {//if(edata.getQty()>0){//产量大于 0 才更新
|
editInput(inputBean);
|
log.info("保存消耗[equipmentCode=" + equipmentCode + ",type=小盒纸,value=" + edata.getXiaohezhiVal() + "]");
|
}
|
}
|
|
inputId = info.getInputIdByType("8");
|
if (inputId != null) {//装配、保存
|
inputBean = new InputBean(inputId, 0D, edata.getTiaohezhiVal());
|
if (edata.getTiaohezhiVal() > 1) {//if(edata.getQty()>0){//产量大于 0 才更新
|
editInput(inputBean);
|
log.info("保存消耗[equipmentCode=" + equipmentCode + ",type=条盒纸,value=" + edata.getTiaohezhiVal() + "]");
|
}
|
}
|
|
inputId = info.getInputIdByType("9");
|
if (inputId != null) {//装配、保存
|
inputBean = new InputBean(inputId, 0D, edata.getNeichenzhiVal());
|
if (edata.getNeichenzhiVal() > 1) {//if(edata.getQty()>0){//产量大于 0 才更新
|
editInput(inputBean);
|
log.info("保存消耗[equipmentCode=" + equipmentCode + ",type=内衬纸,value=" + edata.getNeichenzhiVal() + "]");
|
}
|
}
|
}
|
} catch (Exception e) {
|
log.error("实时保存包装机产量异常" + equipmentCode + ">>>>>>>>>>>" + dbOutputId + e.getMessage());
|
}
|
return;
|
}
|
|
//封箱机=====================需要确认封箱机能采集的数据
|
if (300 <= eqpCode && eqpCode <= 399) {
|
BoxerData edata = getBoxerDatas(shiftId, equipmentCode);
|
try {
|
if (edata.getQty() > 0 && edata.getQty() >= bean.getQty()) {
|
this.editOutput(new OutputBean(dbOutputId,
|
edata.getQty(),
|
0D,
|
0D,
|
0D,
|
0L,
|
edata.getQty(), 0D, 0D, 0D, 0D, 0D, edata.getPbjQty(), 0d, 0d));
|
log.info("保存产量[equipmentCode=" + equipmentCode + ",value=" + edata.getQty() + "]");
|
String inputId =info.getInputIdByType("22");
|
InputBean inputBean = null;
|
if (inputId != null) {//装配、保存
|
if (edata.getQty() > 0) {//产量大于 0 才更新 1大箱=5小箱
|
inputBean = new InputBean(inputId, 0D, edata.getQty() * 5);
|
editInput(inputBean);
|
log.info("保存消耗[equipmentCode=" + equipmentCode + ",type=纸箱,value=" + edata.getQty() * 5 + "]");
|
}
|
}
|
}
|
|
} catch (Exception e) {
|
log.error("实时保存装箱机数据异常!!!!" + e.getMessage());
|
}
|
return;
|
}
|
|
//成型机===========================
|
if (500 <= eqpCode && eqpCode <= 599) {
|
FilterData edata = getFilterData(shiftId, equipmentCode);
|
try {
|
if (edata.getQty() > 0 && edata.getQty() >= bean.getQty()) {
|
this.editOutput(new OutputBean(dbOutputId,
|
edata.getQty(),
|
edata.getBadQty(),
|
MathUtil.roundHalfUp(edata.getRunTime() / 60, 2),
|
MathUtil.roundHalfUp(edata.getStopTime() / 60, 2),
|
Long.valueOf(edata.getStopTimes().toString()),
|
edata.getQty(), 0D, 0D, 0D, 0D, 0D, 0D, 0d, 0d));
|
log.info("保存产量[equipmentCode=" + equipmentCode + ",value=" + edata.getQty() + "]");
|
String inputId = info.getInputIdByType("4");//滤棒
|
if ("".equals(inputId) || null == inputId) {
|
inputId = info.getInputIdByType("13");//滤棒盘纸
|
}
|
InputBean inputBean = null;
|
if (inputId != null) {//装配、保存
|
inputBean = new InputBean(inputId, 0D, edata.getPanzhiVal());
|
editInput(inputBean);
|
log.info("保存消耗[equipmentCode=" + equipmentCode + ",type=滤棒盘纸,value=" + edata.getPanzhiVal() + "]");
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return;
|
}
|
|
|
}
|
}
|
@LogAnno(operateType = "批量删除消耗数据")
|
@Override
|
public void batchDeleteInput(String ids) {
|
|
try {
|
String[] id=ids.split(",");
|
for (int i = 0; i < id.length; i++) {
|
schStatInputDao.deleteById(id[i], SchStatInput.class);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
|
|
/**
|
* @return com.shlanbao.tzsc.data.runtime.bean.RollerData
|
* @title getRollerData
|
* @description 从redis中获取卷烟机实时数据
|
* @author bsw
|
* @params [shiftId, equipmentCode, equipmentType]
|
* @updateTime 13:01 2019/8/7 0007
|
**/
|
public RollerData getRollerData(String shiftId, String equipmentCode, String equipmentType) {
|
|
Integer online = 0; //网络状态(0异常 1正常)
|
Double qty = 0D; //产量
|
Double badQty = 0D; //剔除产量
|
Double lvbangVal = 0D; //滤棒消耗
|
Double juanyanzhiVal = 0D; //卷烟纸消耗
|
Double shuisongzhiVal = 0D; //水松纸消耗
|
Double runTime = 0D; //运行时间
|
Double stopTime = 0D; //停机时间
|
Integer stopTimes = 0; //停机次数
|
Integer speed = 0; //车速
|
Integer runStatus = 0; //卷烟机状态:1:Online / 0:offline
|
Double cy = 0D; //储烟设备储量
|
Integer cy_cs = 0; //储烟设备车速(1-包装机 6-卷烟机)
|
Integer cy_online = 0; //储烟装置状态:1:Online / 0:offline
|
Integer js_online = 0; //接收机状态:1:Online / 0:offline
|
Double recQty1 = 0D; //接收机量
|
Double recQty2 = 0D; //接收机量2
|
|
//拼接获得key值(如:1101)
|
String key = shiftId + equipmentCode;
|
//获得卷烟机设备的实时数据
|
Map rollerDataMap = RedisUtil.getMap(key);
|
|
if (rollerDataMap != null && !rollerDataMap.isEmpty()) {
|
//online的值根据redis中key为"设备类型State"来获取数据
|
// online = GetValueUtil.getIntegerValue(rollerDataMap.get(equipmentType + "State").toString());
|
//online与runStatus的数据一样
|
runStatus = online;
|
//获得储烟机状态
|
cy_online = GetValueUtil.getIntegerValue(String.valueOf(RedisUtil.getMapKey(key + "C", "NETSTATE")));
|
//获得接收机状态
|
js_online = GetValueUtil.getIntegerValue(String.valueOf(RedisUtil.getMapKey(key + "J", "NETSTATE")));
|
recQty1 = GetValueUtil.getDoubleValue(String.valueOf(rollerDataMap.get("recQty1")));
|
runTime = GetValueUtil.getDoubleValue(String.valueOf(rollerDataMap.get("runTime")));
|
lvbangVal = GetValueUtil.getDoubleValue(String.valueOf(rollerDataMap.get("lvbangVal")));
|
stopTimes = GetValueUtil.getIntegerValue(String.valueOf(rollerDataMap.get("stopTimes")));
|
shuisongzhiVal = GetValueUtil.getDoubleValue(String.valueOf(rollerDataMap.get("shuisongzhiVal")));
|
juanyanzhiVal = GetValueUtil.getDoubleValue(String.valueOf(rollerDataMap.get("juanyanzhiVal")));
|
stopTime = GetValueUtil.getDoubleValue(String.valueOf(rollerDataMap.get("stopTime")));
|
qty = GetValueUtil.getDoubleValue(String.valueOf(rollerDataMap.get("qty")));
|
cy = GetValueUtil.getDoubleValue(String.valueOf(rollerDataMap.get("cy")));
|
cy_cs = GetValueUtil.getIntegerValue(String.valueOf(rollerDataMap.get("cySpeed")));
|
recQty2 = GetValueUtil.getDoubleValue(String.valueOf(rollerDataMap.get("recQty2")));
|
badQty = GetValueUtil.getDoubleValue(String.valueOf(rollerDataMap.get("badQty")));
|
Long speedL = Math.round(GetValueUtil.getDoubleValue(String.valueOf(rollerDataMap.get("speed"))));
|
speed = speedL.intValue();
|
|
} else {
|
log.error("ERROR>>>>卷烟机实时数据为空!!!");
|
}
|
|
return new RollerData(online, qty, badQty, lvbangVal, juanyanzhiVal, shuisongzhiVal,
|
runTime, stopTime, stopTimes, speed, runStatus, cy, cy_cs, cy_online, js_online, recQty1, recQty2);
|
|
}
|
|
/**
|
* @return com.shlanbao.tzsc.data.runtime.bean.PackerData
|
* @title getPackerDatas
|
* @description 从redis 中获取包装机实时数据
|
* @author bsw
|
* @params [shift, equipmentCode]
|
* @updateTime 13:02 2019/8/7 0007
|
**/
|
|
public PackerData getPackerDatas(String shift, String equipmentCode) {
|
int id = Integer.valueOf(equipmentCode);
|
|
Map<String, Object> packerData = RedisUtil.getMap(shift + equipmentCode);
|
|
//提升机数据
|
Map<String, Object> TSData = RedisUtil.getMap(shift + "601");
|
//网络
|
Integer online = 0;
|
//停机次数
|
Integer stopTimes = 0;
|
//产量
|
Double qty = 0D;
|
//剔除量
|
double badQty = 0D;
|
//车速
|
Integer speed = 0;
|
//运行时间
|
Double runTime = 0D;
|
//停机时间
|
Double stopTime = 0D;
|
//消耗数据(小盒膜,条盒膜,小盒纸,条盒纸,内衬纸)
|
Double xiaohemoVal = 0D;
|
Double tiaohemoVal = 0D;
|
Double xiaohezhiVal = 0D;
|
Double tiaohezhiVal = 0D;
|
Double neichenzhiVal = 0D;
|
|
Double mainQty = 0D; //主机产量(小包机)
|
Double mainBadQty = 0D; //主机剔除量
|
Double tbjQty = 0D; //透包机产量
|
Double tbjGdQty = 0D; //主机剔除量
|
Double tbjBadQty = 0D; //透包机产量
|
|
Double tsQty = 0D;//提升机产量
|
if (packerData != null) {
|
//车速
|
speed = GetValueUtil.getIntegerValue(String.valueOf(packerData.get("x2ptSpeed")));
|
//网络
|
online = speed > 0 ? 1 : 0;
|
//产量
|
qty = MathUtil.roundHalfUp(GetValueUtil.getDoubleValue(String.valueOf(packerData.get("chcQty"))) / 2500, 3);
|
//剔除量
|
badQty = MathUtil.roundHalfUp(GetValueUtil.getDoubleValue(String.valueOf(packerData.get("chcRejQty"))) / 2500, 2);
|
//运行时间
|
runTime = MathUtil.roundHalfUp(GetValueUtil.getDoubleValue(String.valueOf(packerData.get("ptchRunTime"))) / 60, 0);
|
//停机时间
|
stopTime = MathUtil.roundHalfUp(GetValueUtil.getDoubleValue(String.valueOf(packerData.get("ptchStopTime"))) / 60, 0);
|
//停机次数
|
stopTimes = GetValueUtil.getIntegerValue(String.valueOf(packerData.get("ptchStopCount")));
|
|
//# 106铝箔纸 107小盒纸 108小盒烟膜 109条盒纸 110条盒烟膜
|
neichenzhiVal = GetValueUtil.getDoubleValue(String.valueOf(packerData.get("foilPaper")));
|
xiaohezhiVal = GetValueUtil.getDoubleValue(String.valueOf(packerData.get("brandPaper")));
|
xiaohemoVal = GetValueUtil.getDoubleValue(String.valueOf(packerData.get("boxFilm")));
|
tiaohezhiVal = GetValueUtil.getDoubleValue(String.valueOf(packerData.get("barrelPaper")));
|
tiaohemoVal = GetValueUtil.getDoubleValue(String.valueOf(packerData.get("barrelFilm")));
|
|
//获得:主机产量/主机剔除 ,透包机产量/透包机剔除好包/透包机剔除坏包
|
try {
|
mainQty = MathUtil.roundHalfUp(GetValueUtil.getDoubleValue(String.valueOf(packerData.get("x2Qty"))) / 2500, 3); // x2Qty
|
mainBadQty = MathUtil.roundHalfUp(GetValueUtil.getDoubleValue(String.valueOf(packerData.get("x2RejQty"))), 3); // x2RejQty
|
tbjQty = MathUtil.roundHalfUp(GetValueUtil.getDoubleValue(String.valueOf(packerData.get("chQty"))) / 2500, 3); // chQty
|
tbjGdQty = MathUtil.roundHalfUp(GetValueUtil.getDoubleValue(String.valueOf(packerData.get("chRejGoodQty"))), 3); // chRejGoodQty
|
tbjBadQty = MathUtil.roundHalfUp(GetValueUtil.getDoubleValue(String.valueOf(packerData.get("chRejBadQty"))), 3); // chRejBadQty
|
|
|
} catch (Exception e) {
|
log.info("获取主机产量,透包机产量异常...");
|
e.printStackTrace();
|
}
|
}
|
//提升机数据id和机台code对应关系
|
if (TSData != null) {
|
tsQty = MathUtil.roundHalfUp(GetValueUtil.getIntegerValue(String.valueOf(TSData.get("tQty" + (id - 200)))) * 1.000, 3);
|
}
|
return new PackerData(online, qty, badQty, xiaohemoVal, tiaohemoVal, xiaohezhiVal, tiaohezhiVal,
|
neichenzhiVal, runTime, stopTime, stopTimes, speed, tsQty, mainQty, mainBadQty, tbjQty, tbjGdQty, tbjBadQty);
|
}
|
|
/**
|
* @return com.shlanbao.tzsc.data.runtime.bean.BoxerData
|
* @title getBoxerDatas
|
* @description 从redis 中获取包装机实时数据
|
* @author bsw
|
* @params [shift, equipmentCode]
|
* @updateTime 13:02 2019/8/7 0007
|
**/
|
public BoxerData getBoxerDatas(String shift, String equipmentCode) {
|
double qty = 0D;
|
int online = 0;
|
double pbjQty = 0d;
|
if (StringUtil.isInteger(equipmentCode)) {
|
int id = Integer.valueOf(equipmentCode);
|
Map<String, Object> mainData = RedisUtil.getMap(shift + equipmentCode);
|
if (mainData != null) {
|
//网络
|
online = GetValueUtil.getIntegerValue(String.valueOf(mainData.get("CONVEYORState")));
|
qty = GetValueUtil.getIntegerValue(String.valueOf(mainData.get("qty1")));
|
//封箱机的产量是件,5件是1箱
|
qty = MathUtil.roundHalfUp(qty / 5, 2);
|
}
|
try {
|
|
pbjQty = GetValueUtil.getIntegerValue(String.valueOf(mainData.get("pQty" + (id - 300))));
|
} catch (Exception e) {
|
log.info("获取排包机异常...");
|
e.printStackTrace();
|
}
|
}
|
|
return new BoxerData(equipmentCode, online, qty, pbjQty);
|
}
|
|
|
/**
|
* @return com.shlanbao.tzsc.data.runtime.bean.FilterData
|
* @title getFilterData
|
* @description 从redis 中获取成型机实时数据
|
* @author bsw
|
* @params [shift, equipmentCode]
|
* @updateTime 13:03 2019/8/7 0007
|
**/
|
public FilterData getFilterData(String shift, String equipmentCode) {
|
try {
|
//网络
|
Integer online = 0;
|
//停机次数
|
Integer stopTimes = 0;
|
//产量
|
Double qty = 0D;
|
//剔除量
|
Double badQty = 0D;
|
//车速
|
Integer speed = 0;
|
//运行时间
|
Double runTime = 0D;
|
//停机时间
|
Double stopTime = 0D;
|
//消耗数据(盘纸)
|
Double pzVal = 0D;
|
//装盘机数量
|
Double zpVal = 0D;
|
if (StringUtil.isInteger(equipmentCode)) {
|
int id = Integer.valueOf(equipmentCode);
|
Map<String, Object> mainData = RedisUtil.getMap(shift + equipmentCode);
|
|
if (mainData != null) {
|
|
//车速
|
speed = GetValueUtil.getIntegerValue(String.valueOf(mainData.get("speed")));
|
//产量
|
qty = MathUtil.roundHalfUp(GetValueUtil.getDoubleValue(String.valueOf(mainData.get("qty"))) / 10000, 2);
|
//剔除量
|
badQty = MathUtil.roundHalfUp(GetValueUtil.getDoubleValue(String.valueOf(mainData.get("badQty"))) / 10000, 2);
|
//运行时间
|
runTime = MathUtil.roundHalfUp(GetValueUtil.getDoubleValue(String.valueOf(mainData.get("runTime"))), 0); // runTime
|
//停机时间
|
stopTime = MathUtil.roundHalfUp(GetValueUtil.getDoubleValue(String.valueOf(mainData.get("stopTime"))), 0); // stopTime
|
//停机次数
|
stopTimes = 0;
|
pzVal = MathUtil.roundHalfUp(GetValueUtil.getDoubleValue(String.valueOf(mainData.get("paperQty"))), 2); // paperQty
|
zpVal = MathUtil.roundHalfUp(GetValueUtil.getDoubleValue(String.valueOf(mainData.get("trayQty"))), 1); // trayQty
|
}
|
|
}
|
return new FilterData(equipmentCode, zpVal, online, qty, badQty, pzVal, runTime, stopTime, stopTimes, speed);
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return null;
|
|
}
|
}
|