package com.shlanbao.tzsc.base.interceptor;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import org.dom4j.Document;
|
import org.dom4j.DocumentHelper;
|
import org.dom4j.Element;
|
|
import com.shlanbao.tzsc.base.dao.SchCalendarDaoI;
|
import com.shlanbao.tzsc.base.dao.SchStatOutputDaoI;
|
import com.shlanbao.tzsc.base.dao.SysMessageQueueDaoI;
|
import com.shlanbao.tzsc.base.mapping.SchStatOutput;
|
import com.shlanbao.tzsc.base.mapping.SysMessageQueue;
|
import com.shlanbao.tzsc.data.webservice.client.SendMessageClient;
|
import com.shlanbao.tzsc.pms.sch.stat.beans.InputBean;
|
import com.shlanbao.tzsc.pms.sch.stat.beans.OutputBean;
|
import com.shlanbao.tzsc.utils.tools.ApplicationContextUtil;
|
import com.shlanbao.tzsc.utils.tools.StringUtil;
|
|
/**
|
* 工单产耗信息反馈
|
* @author shisihai
|
*
|
*/
|
public class WorkOrderFeedbackInterceptor {
|
|
|
/**
|
*
|
*说明:工单产耗信息反馈
|
* @param idOrIds
|
* @param feedbackUser
|
* @return
|
* shisihai
|
* 20162016年2月22日上午9:06:15
|
*/
|
public Integer sendWorkOrderDetails(String idOrIds,String feedbackUser){
|
SchCalendarDaoI dao=ApplicationContextUtil.getBean(SchCalendarDaoI.class);
|
SendMessageClient sendMessageClient=new SendMessageClient();
|
for(String id : StringUtil.splitToStringList(idOrIds, ",")){
|
//1.根据产出id查询出所需数据
|
String sql=getFeedbackSql(id);
|
//1.2封装数据
|
List<?> ls=dao.queryBySql(sql);
|
Map<String,Object> map=packData(ls,"1");//默认是换班类型的反馈
|
//2.生成xml字符串数据文件,单个工单信息xml字符串
|
String xmlStr=createXMLStr(map);
|
//调用mes接收工单信息反馈的方法,将xml字符串传过去
|
//*********************
|
//sendMessageClient.SendMessageToMes("SDCSFinishedEntryInfo", xmlStr);
|
if(!xmlStr.equals("")){
|
addLog("工单反馈outid:"+id,1);
|
this.editOutputIsFeedback(id, feedbackUser);//修改状态
|
}else{
|
addLog("工单反馈outid:"+id,0);
|
return 0;
|
}
|
}
|
return 1;
|
}
|
|
|
|
/**
|
*说明:修改生产实绩反馈状态
|
* @param id
|
* @param feedbackUser
|
* shisihai
|
* 20162016年2月22日上午9:03:11
|
*/
|
private void editOutputIsFeedback(String id,String feedbackUser){
|
SchStatOutputDaoI schStatOutputDao=ApplicationContextUtil.getBean(SchStatOutputDaoI.class);
|
SchStatOutput output = schStatOutputDao.findById(SchStatOutput.class, id);
|
output.setIsFeedback(1L);
|
output.setFeedbackTime(new Date());
|
output.setFeedbackUser(feedbackUser);
|
|
}
|
|
|
|
/**
|
*说明:接口日志
|
* @param des
|
* @param flag 1成功 0失败
|
* shisihai
|
* 20152015年12月28日下午4:56:58
|
*/
|
private void addLog(String des,Integer flag) {
|
SysMessageQueueDaoI sysMessageQueueDaoI=ApplicationContextUtil.getBean(SysMessageQueueDaoI.class);
|
SysMessageQueue log=new SysMessageQueue();
|
log.setSysReceive(2L);//接受方
|
log.setSysSend(1L);//发送方
|
log.setDel(0L);
|
log.setMsgType(1L);
|
log.setDes(des);//描述
|
log.setFlag(flag);
|
log.setDate(new Date());
|
try {
|
sysMessageQueueDaoI.saveAndReturn(log);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
/**
|
*说明:生成工单产耗详细xml,反馈给mes
|
* @param map
|
* @return
|
* shisihai
|
* 20152015年12月28日下午2:20:21
|
*/
|
@SuppressWarnings("unchecked")
|
private String createXMLStr(Map<String, Object> map) {
|
OutputBean out=(OutputBean) map.get("out");
|
List<InputBean> inputs=(List<InputBean>) map.get("input");
|
try {
|
Document doc=DocumentHelper.createDocument();
|
Element root=doc.addElement("EntryShiftORFinished");//根节点
|
Element entryBasicInfo=root.addElement("EntryBasicInfo");
|
if (out!=null) {
|
//订单号
|
entryBasicInfo.addElement("OrderID").setText(out.getOrderNum());
|
//工单号
|
entryBasicInfo.addElement("EntryID").setText(out.getWorkorderCode());
|
//生产日期
|
entryBasicInfo.addElement("ProduceDate").setText(out.getDate());
|
//牌号编码
|
entryBasicInfo.addElement("OutMaterialID").setText(out.getMatId());
|
//批次作业号
|
entryBasicInfo.addElement("LotID").setText(out.getBth());
|
//产量信息
|
Element outMaterialQuantity = entryBasicInfo.addElement("OutMaterialQuantity");
|
//实际产量
|
outMaterialQuantity.addElement("RealOutMaterialQuantity")
|
.setText(StringUtil.convertObjToString(out.getQty()));
|
//修改产量
|
outMaterialQuantity.addElement("ChangeMaterialQuantity")
|
.setText(StringUtil.convertObjToString(out.getChangeQty()));
|
//修改产量标识
|
outMaterialQuantity.addElement("ChangeIdentifer").setText(out.getChangeFlag());
|
//单位
|
entryBasicInfo.addElement("UOM").setText(out.getUnitName());
|
//设备编码
|
entryBasicInfo.addElement("DeviceID").setText(out.getEqpCode());
|
//批次作业顺序号
|
entryBasicInfo.addElement("SequenceNumber").setText(out.getSequenceNumber());
|
//计划开始时间
|
entryBasicInfo.addElement("PlanningStartTime").setText(out.getPstim());
|
//计划结束时间
|
entryBasicInfo.addElement("PlanningFinishedTime").setText(out.getPetim());
|
//实际开始时间
|
entryBasicInfo.addElement("ActualStartTime").setText(out.getStim());
|
//实际结束时间
|
entryBasicInfo.addElement("ActualFinishedTime").setText(out.getEtim());
|
//外联设备相关信息
|
Element destination = entryBasicInfo.addElement("Destination");
|
destination.addElement("DestinationID");
|
destination.addElement("DestinationType");
|
Element sourceDevice = entryBasicInfo.addElement("SourceDevice");
|
for (int i = 0; i < 2; i++) {
|
Element item = sourceDevice.addElement("Item");
|
item.addElement("SouceDeviceID");
|
item.addElement("SouceDeviceType");
|
}
|
//工单类型编号
|
entryBasicInfo.addElement("EntryType").setText(out.getOrderType());
|
//班次
|
entryBasicInfo.addElement("ShiftID").setText(out.getShift());
|
//班组
|
entryBasicInfo.addElement("TeamID").setText(out.getTeam());
|
//结果类型
|
entryBasicInfo.addElement("Result").setText(out.getResult());
|
//删除标志
|
entryBasicInfo.addElement("DeleteFlag").setText(StringUtil.convertObjToString(out.getDel()));
|
}
|
if (inputs!=null) {
|
//辅料消耗信息
|
Element materialInfo = root.addElement("MaterialInfo");
|
for (InputBean input : inputs) {
|
Element item = materialInfo.addElement("Item");
|
//辅料类型
|
item.addElement("MaterialClass").setText(input.getMatType());
|
//辅料编码
|
item.addElement("MaterialID").setText(input.getMatCode());
|
//物料批次号
|
item.addElement("LotID").setText(input.getBth());
|
//消耗
|
item.addElement("Quantity").setText(StringUtil.convertObjToString(input.getQty()));
|
//单位
|
item.addElement("UOM").setText(input.getUnit());
|
}
|
}
|
StringBuffer xmlStr=new StringBuffer(doc.asXML());
|
// Document document = DocumentHelper.parseText(xmlStr.toString());
|
// System.err.println(document.asXML());
|
return xmlStr.toString();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return "";
|
}
|
|
/**
|
*
|
*说明:查询工单产耗信息
|
* @param id
|
* @return
|
* shisihai
|
* 20162016年2月22日上午10:52:04
|
*/
|
private String getFeedbackSql(String id){
|
StringBuffer sb=new StringBuffer();
|
sb.append("SELECT ");
|
sb.append(" swo.erp_code AS mod_id,swo.code AS orderCode,to_char(swo.DATE_,'yyyy-mm-dd') as sdate,swo.MAT,swo.BTH,");
|
sb.append(" nvl(sso.QTY, 0) as qty,nvl(sso.DACQTY, 0) as dacQty,(SELECT mes_code as mes_code from MD_UNIT mdu where sso.UNIT=mdu.id) as unit,");
|
sb.append(" (SELECT MES_EQPCODE FROM MD_EQUIPMENT WHERE id = swo.EQP) AS eqpCode,");
|
sb.append(" RUN_SEQ as sequenceNumber,");
|
sb.append(" to_char(swo.STIM,'yyyy-mm-dd hh24:mi:ss') as stim,to_char(swo.ETIM,'yyyy-mm-dd hh24:mi:ss') as etim,to_char(swo.REAL_STIM,'yyyy-mm-dd hh24:mi:ss') as rstim,to_char(swo.REAL_ETIM,'yyyy-mm-dd hh24:mi:ss') as retim,");
|
sb.append(" swo.TYPE,swo.SHIFT,swo.TEAM,");
|
sb.append(" swo.sts,tab.*");
|
sb.append(" FROM SCH_STAT_OUTPUT sso LEFT JOIN SCH_WORKORDER swo ON sso.OID = swo.id");
|
sb.append(" LEFT JOIN ( SELECT (SELECT TID FROM MD_MAT WHERE mat = id ) AS flClass,(SELECT code FROM MD_MAT WHERE mat = id ) AS flCode,");
|
sb.append(" '物料批次' AS wuBth,");
|
sb.append(" QTY AS flQty,(SELECT mes_code as mes_code FROM MD_UNIT WHERE UNIT = id) AS flunName,OUT_ID FROM SCH_STAT_INPUT ) tab ON tab.OUT_ID = sso.ID");
|
sb.append(" WHERE sso.id ='"+id+"'");
|
return sb.toString();
|
}
|
|
|
|
/**
|
*
|
*说明:封装工单详细反馈数据
|
* @param ls
|
* @param FeedbackType 反馈类型 0-结束工单 1-换班
|
* @return
|
* shisihai
|
* 20152015年12月28日下午1:51:22
|
*/
|
private Map<String, Object> packData(List<?> ls,String FeedbackType) {
|
Map<String,Object> map=new HashMap<String,Object>();
|
List<InputBean> inputs=new ArrayList<InputBean>();
|
InputBean input=null;
|
OutputBean out=null;
|
if(ls!=null && ls.size()>0){
|
Object[] obj=null;
|
for (int i = 0; i < ls.size(); i++) {
|
obj=(Object[]) ls.get(i);
|
if(i==0){
|
out=new OutputBean();
|
//ERP订单号
|
out.setOrderNum(StringUtil.convertObjToString(obj[0]));
|
//工单号
|
out.setWorkorderCode(StringUtil.convertObjToString(obj[1]));
|
//工单日期
|
out.setDate(StringUtil.convertObjToString(obj[2]));
|
//牌号编码
|
out.setMatId(StringUtil.convertObjToString(obj[3]));
|
//作业批次号
|
out.setBth(StringUtil.convertObjToString(obj[4]));
|
//实际产量
|
out.setQty(this.convDouble(obj[5]));
|
//修改产量
|
out.setChangeQty(this.convDouble(obj[5])-this.convDouble(obj[6]));
|
//修改标志
|
out.setChangeFlag("");
|
//单位
|
out.setUnitName(StringUtil.convertObjToString(obj[7]));
|
//设备code
|
out.setEqpCode(StringUtil.convertObjToString(obj[8]));
|
//批次作业顺序号
|
out.setSequenceNumber(StringUtil.convertObjToString(obj[9]));
|
//计划开始
|
out.setPstim(StringUtil.convertObjToString(obj[10]));
|
//计划结束
|
out.setPetim(StringUtil.convertObjToString(obj[11]));
|
//实际开始
|
out.setStim(StringUtil.convertObjToString(obj[12]));
|
//实际结束
|
out.setEtim(StringUtil.convertObjToString(obj[13]));
|
//工单类型编号
|
out.setOrderType(StringUtil.convertObjToString(obj[14]));
|
//班次
|
out.setShift(StringUtil.convertObjToString(obj[15]));
|
//班组
|
out.setTeam(StringUtil.convertObjToString(obj[16]));
|
//结果
|
out.setResult("");
|
//删除状态
|
out.setDel(0L);
|
//工单状态
|
out.setOrderStat(StringUtil.convertObjToString(obj[17]));
|
map.put("out", out);
|
}
|
input=new InputBean();
|
//辅料类型
|
input.setMatType(StringUtil.convertObjToString(obj[18]));
|
//辅料code
|
input.setMatCode(StringUtil.convertObjToString(obj[19]));
|
//物料批次
|
input.setBth(StringUtil.convertObjToString(obj[20]));
|
//消耗量
|
input.setQty(convDouble(obj[21]));
|
//单位
|
input.setUnit(StringUtil.convertObjToString(obj[22]));
|
inputs.add(input);
|
}
|
}
|
map.put("input", inputs);
|
return map;
|
}
|
|
/**
|
* 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;
|
}
|
|
}
|