|
|
@ -0,0 +1,403 @@
|
|
|
|
|
|
|
|
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.busi.IMesEarlyWarningService;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.*;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.edi.wh.order.MesCimGmGepics;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.KanBanPictureModel;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.MesEarlyWarningKanBanModel;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.MesKanBanShowModel;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.*;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.wh.MesCimGmGepicsRepository;
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
|
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
|
import org.apache.commons.beanutils.BeanUtils;
|
|
|
|
|
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import javax.persistence.EntityManager;
|
|
|
|
|
|
|
|
import javax.persistence.Query;
|
|
|
|
|
|
|
|
import java.lang.reflect.InvocationTargetException;
|
|
|
|
|
|
|
|
import java.text.ParseException;
|
|
|
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
|
|
import java.util.Calendar;
|
|
|
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
|
|
|
public class MesEarlyWarningServiceImpl implements IMesEarlyWarningService {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
|
|
|
private MesEarlyWarningKanBanRepository earlyWarningKanBanRao;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
|
|
|
private MesCimGmGepicsRepository cimGmGepicsRao;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
|
|
|
private MesWorkOrderAssemblyRepository workOrderAssemblyRao;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
|
|
|
private MesWorkOrderRepository workOrderRao;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
|
|
|
private EntityManager entityManager;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
|
|
|
private MesEarlyWarningRecordRepository earlyWarningRecordRao;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
|
|
|
private MesQueueOrderRepository queueOrderRao;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public List<MesEarlyWarningKanBan> getEarlyWarningList(String organizeCode) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
|
|
|
return earlyWarningKanBanRao.findByHqlWhere(ddlPackBean);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void saveEarlyWarning(MesEarlyWarningKanBanModel model) {
|
|
|
|
|
|
|
|
MesEarlyWarningKanBan kanBan = new MesEarlyWarningKanBan();
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
BeanUtils.copyProperties(kanBan,model);
|
|
|
|
|
|
|
|
} catch (IllegalAccessException | InvocationTargetException e) {
|
|
|
|
|
|
|
|
log.error(e.getMessage());
|
|
|
|
|
|
|
|
MesException.throwMesBusiException("类型转换出错!"+e.getMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
ConvertBean.saveOrUpdate(kanBan,model.getCreateUser());
|
|
|
|
|
|
|
|
earlyWarningKanBanRao.insert(kanBan);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void updateEarlyWarning(MesEarlyWarningKanBan earlyWarning) {
|
|
|
|
|
|
|
|
ConvertBean.saveOrUpdate(earlyWarning,earlyWarning.getCreateUser());
|
|
|
|
|
|
|
|
earlyWarningKanBanRao.insert(earlyWarning);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void deleteEarlyWarning(Long id, String organizeCode,String userName) {
|
|
|
|
|
|
|
|
earlyWarningKanBanRao.deleteWeaklyByProperties(new String[]{"id","organizeCode"},new Object[]{id,organizeCode},userName);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public MesEarlyWarningKanBan getKanbanData(Long id,String organizeCode) {
|
|
|
|
|
|
|
|
List<MesEarlyWarningKanBan> list = earlyWarningKanBanRao.findByProperty(new String[]{"id", "organizeCode"}, new Object[]{id, organizeCode});
|
|
|
|
|
|
|
|
if (!list.isEmpty()){
|
|
|
|
|
|
|
|
return list.get(0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return new MesEarlyWarningKanBan();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public MesKanBanShowModel getData(Long id, String organizeCode) throws ParseException {
|
|
|
|
|
|
|
|
DdlPackBean earlyWarningKanBanPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(id, "id", earlyWarningKanBanPackBean);
|
|
|
|
|
|
|
|
List<MesEarlyWarningKanBan> list = earlyWarningKanBanRao.findByHqlTopWhere(earlyWarningKanBanPackBean, 1);
|
|
|
|
|
|
|
|
if (list.isEmpty()) {
|
|
|
|
|
|
|
|
return new MesKanBanShowModel();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MesEarlyWarningKanBan kanBan = list.get(0);
|
|
|
|
|
|
|
|
String jacInfoPoint = kanBan.getJacInfoPoint();
|
|
|
|
|
|
|
|
int custOnlineInfo = kanBan.getCustOnlineInfo();
|
|
|
|
|
|
|
|
String workCenterCode = kanBan.getWorkCenterCode();
|
|
|
|
|
|
|
|
String workCellCode = kanBan.getWorkCellCode();
|
|
|
|
|
|
|
|
//1.获取最近的20条v107信息
|
|
|
|
|
|
|
|
List<MesCimGmGepics> gmGepicsList = getlastDataList(1, jacInfoPoint, organizeCode, 20);
|
|
|
|
|
|
|
|
//2.获取最新的一条报文信息,取gmGepicsList的第一条
|
|
|
|
|
|
|
|
MesCimGmGepics lastCimGmGepics = gmGepicsList.get(0);
|
|
|
|
|
|
|
|
//3.获取最新的一条报文信息
|
|
|
|
|
|
|
|
List<MesCimGmGepics> gmGepicsListOne = getlastDataList(custOnlineInfo, jacInfoPoint, organizeCode, 1);
|
|
|
|
|
|
|
|
MesCimGmGepics lastOne = gmGepicsListOne.get(0);
|
|
|
|
|
|
|
|
if (lastOne==null){
|
|
|
|
|
|
|
|
return new MesKanBanShowModel();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//4.获取最新工位单号 获取工单的产线和工位的最新的工单
|
|
|
|
|
|
|
|
MesWorkOrder lastWorkOrder = getLastWorkOrder(workCenterCode, workCellCode, organizeCode);
|
|
|
|
|
|
|
|
//5.获取最新下线工单
|
|
|
|
|
|
|
|
MesWorkOrder lastOfflineOrder = getLastOfflineOrder(workCenterCode, organizeCode);
|
|
|
|
|
|
|
|
if (lastWorkOrder == null){
|
|
|
|
|
|
|
|
//todo 暂时
|
|
|
|
|
|
|
|
lastWorkOrder = lastOfflineOrder;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//6.查询报警产量 & 获取开班起始时间
|
|
|
|
|
|
|
|
String dStart;
|
|
|
|
|
|
|
|
Date now = new Date();
|
|
|
|
|
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
|
|
|
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
|
|
String date = sdf.format(now);
|
|
|
|
|
|
|
|
String tempStartDatetime = date + " " + kanBan.getShiftStartTime() + ":00";
|
|
|
|
|
|
|
|
Date shiftStartTime = sdf1.parse(tempStartDatetime);
|
|
|
|
|
|
|
|
//如果小于当前时间,显示前一天的统计
|
|
|
|
|
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
|
|
|
|
|
if (shiftStartTime.before(now)) {
|
|
|
|
|
|
|
|
calendar.setTime(now);
|
|
|
|
|
|
|
|
calendar.add(Calendar.DATE, -1);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
calendar.setTime(shiftStartTime);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
String realEndTime = sdf1.format(calendar.getTime());
|
|
|
|
|
|
|
|
//7.根据条件获取工单的数量
|
|
|
|
|
|
|
|
Integer workCounts = getWorkCounts(realEndTime, organizeCode, workCenterCode);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//8.查询报警产量
|
|
|
|
|
|
|
|
Calendar calendar1 = Calendar.getInstance();
|
|
|
|
|
|
|
|
calendar1.setTime(now);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int productCount = kanBan.getProductCount();
|
|
|
|
|
|
|
|
int productDay = kanBan.getProductDay();
|
|
|
|
|
|
|
|
calendar1.add(Calendar.DATE,-productDay);
|
|
|
|
|
|
|
|
List<String> vehicleNoList = getCLWarning(sdf1.format(calendar1.getTime()), productCount,organizeCode);
|
|
|
|
|
|
|
|
//9.汇总数据
|
|
|
|
|
|
|
|
return doGetSGMData(kanBan, gmGepicsList, lastCimGmGepics, lastOne, lastWorkOrder, lastOfflineOrder, workCounts, vehicleNoList);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void savePicture(KanBanPictureModel model) {
|
|
|
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
|
|
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(model.getId(),"id", ddlPackBean);
|
|
|
|
|
|
|
|
earlyWarningRecordRao.updateByProperties(new String[]{"picture"},new Object[]{model.getPicture()},ddlPackBean);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 获取最新20条数据
|
|
|
|
|
|
|
|
* @param type 固定 1
|
|
|
|
|
|
|
|
* @param gaRule 信息点
|
|
|
|
|
|
|
|
* @return
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private List<MesCimGmGepics> getlastDataList(int type, String gaRule,String organizeCode,Integer count){
|
|
|
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(type,"type",ddlPackBean);
|
|
|
|
|
|
|
|
if (!StringUtils.isEmpty(gaRule)){
|
|
|
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(gaRule,"gaRule",ddlPackBean);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(organizeCode,"organizeCode",ddlPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue(),CommonEnumUtil.ASC_OR_DESC.DESC.getValue()},new String[]{"createDatetime","rowNo"},ddlPackBean);
|
|
|
|
|
|
|
|
return cimGmGepicsRao.findByHqlTopWhere(ddlPackBean,count);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 根据产线工位 查询最新的工单
|
|
|
|
|
|
|
|
* 工单status 不是 40已关闭,90已拆解 状态
|
|
|
|
|
|
|
|
* sort_flag 不是 E X 单
|
|
|
|
|
|
|
|
* @param workCenterCode
|
|
|
|
|
|
|
|
* @param workCellCode
|
|
|
|
|
|
|
|
* @param organizeCode
|
|
|
|
|
|
|
|
* @return
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private MesWorkOrder getLastWorkOrder(String workCenterCode,String workCellCode,String organizeCode){
|
|
|
|
|
|
|
|
//工单status 不是 40已关闭,90已拆解 状态
|
|
|
|
|
|
|
|
//工单sort_flag 不是 E X单
|
|
|
|
|
|
|
|
//工单order_type 类型为 排序单类型
|
|
|
|
|
|
|
|
//工单 cust_order_code 不为空
|
|
|
|
|
|
|
|
//工单 的id in装配件清单表中 工位等于@workCellCode 且 status = 1
|
|
|
|
|
|
|
|
//工单 productSeq = work_order表中最大的排序信息 【work_order 的id in (装配件清单表中 工位等于@workCellCode 且 status = 1 已经装配) 产线=,order_type = 排序单,sort_flag 不为 x ,E;status not in 入参1,入参2,cust_order_code不为空】
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// workOrderAssembly
|
|
|
|
|
|
|
|
DdlPackBean assemblyPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",assemblyPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workCellCode,"workCellCode",assemblyPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(),"assemblyStatus",assemblyPackBean);
|
|
|
|
|
|
|
|
List<MesWorkOrderAssembly> mesWorkOrderAssemblyList = workOrderAssemblyRao.findByHqlWhere(assemblyPackBean);
|
|
|
|
|
|
|
|
List<String> workOrderNoList = mesWorkOrderAssemblyList.stream().map(MesWorkOrderAssembly::getWorkOrderNo).distinct().collect(Collectors.toList());
|
|
|
|
|
|
|
|
List<Integer> orderStatusList = new ArrayList<>();
|
|
|
|
|
|
|
|
orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue());
|
|
|
|
|
|
|
|
orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.DISMANTLE.getValue());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<String> orderFlagList = new ArrayList<>();
|
|
|
|
|
|
|
|
orderFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue());
|
|
|
|
|
|
|
|
orderFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue());
|
|
|
|
|
|
|
|
DdlPackBean queueOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
|
|
|
DdlPreparedPack.getInPackList(workOrderNoList,"workOrderNo",queueOrderPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",queueOrderPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workCellCode,"workCellCode",queueOrderPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getNotInPack(orderFlagList,"orderFlag",queueOrderPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getStringNotBlanklPack("custOrderNo",queueOrderPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), queueOrderPackBean);
|
|
|
|
|
|
|
|
//先查对列表,找到对应产线工位的工单
|
|
|
|
|
|
|
|
List<MesQueueOrder> queueOrderList = queueOrderRao.findByHqlWhere(queueOrderPackBean);
|
|
|
|
|
|
|
|
//过滤掉关闭和拆解的工单
|
|
|
|
|
|
|
|
List<String> workOrderNoQueueList = queueOrderList.stream().map(MesQueueOrder::getWorkOrderNo).distinct().collect(Collectors.toList());
|
|
|
|
|
|
|
|
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
|
|
|
DdlPreparedPack.getInPackList(workOrderNoQueueList,"workOrderNo",orderPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getInPackList(orderStatusList,"workOrderStatus",orderPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getOrderBy("productSeq",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), orderPackBean);
|
|
|
|
|
|
|
|
List<MesWorkOrder> workOrderList = workOrderRao.findByHqlTopWhere(orderPackBean, 1);
|
|
|
|
|
|
|
|
return !workOrderList.isEmpty() ? workOrderList.get(0) : null;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private MesWorkOrder getLastOfflineOrder(String workCenterCode,String organizeCode){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<String> sortFlagList = new ArrayList<>();
|
|
|
|
|
|
|
|
sortFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.E.getValue());
|
|
|
|
|
|
|
|
sortFlagList.add(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<Integer> orderStatusList = new ArrayList<>();
|
|
|
|
|
|
|
|
orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
|
|
|
|
|
|
|
|
orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue());
|
|
|
|
|
|
|
|
DdlPackBean workOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",workOrderPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getInPackList(orderStatusList,"workOrderStatus",workOrderPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.SORT.getValue(),"workOrderType",workOrderPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getNotInPack(sortFlagList,"orderFlag",workOrderPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getStringNotBlanklPack("custOrderNo",workOrderPackBean);
|
|
|
|
|
|
|
|
List<MesWorkOrder> mesWorkOrders = workOrderRao.findByHqlTopWhere(workOrderPackBean, 1);
|
|
|
|
|
|
|
|
return mesWorkOrders.get(0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private Integer getWorkCounts(String realEndTime,String organizeCode,String workCenterCode){
|
|
|
|
|
|
|
|
DdlPackBean workOrderPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
|
|
|
List<Integer> orderStatusList = new ArrayList<>();
|
|
|
|
|
|
|
|
orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
|
|
|
|
|
|
|
|
orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue());
|
|
|
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",workOrderPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getInPackList(orderStatusList,"workOrderStatus",workOrderPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.SORT.getValue(),"workOrderType",workOrderPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getStringBiggerPack(realEndTime,"endTime",workOrderPackBean);
|
|
|
|
|
|
|
|
DdlPreparedPack.getStringNoEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue(),"orderFlag",workOrderPackBean);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return workOrderRao.findByHqlWhereCount(workOrderPackBean);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//报警产量
|
|
|
|
|
|
|
|
private List<String> getCLWarning(String date, int qty,String organizeCode) {
|
|
|
|
|
|
|
|
List<Integer> orderStatusList = new ArrayList<>();
|
|
|
|
|
|
|
|
orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.DISMANTLE.getValue());
|
|
|
|
|
|
|
|
orderStatusList.add(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
StringBuilder hql = new StringBuilder();
|
|
|
|
|
|
|
|
hql.append(" select carModelCode from MesWorkOrder");
|
|
|
|
|
|
|
|
hql.append(" where organizeCode = :organizeCode");
|
|
|
|
|
|
|
|
hql.append(" and createDatetime <= :createDatetime");
|
|
|
|
|
|
|
|
hql.append(" and workOrderStatus in (:workOrderStatus)");
|
|
|
|
|
|
|
|
hql.append(" and orderFlag != :sortFlag");
|
|
|
|
|
|
|
|
hql.append(" group by carModelCode ");
|
|
|
|
|
|
|
|
hql.append(" having count(carModelCode) <= :qty");
|
|
|
|
|
|
|
|
Query query = entityManager.createQuery(hql.toString());
|
|
|
|
|
|
|
|
query.setParameter("workOrderStatus",orderStatusList);
|
|
|
|
|
|
|
|
query.setParameter("organizeCode",organizeCode);
|
|
|
|
|
|
|
|
query.setParameter("createDatetime", date);
|
|
|
|
|
|
|
|
query.setParameter("qty", (long)qty);
|
|
|
|
|
|
|
|
query.setParameter("sortFlag", MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.X.getValue());
|
|
|
|
|
|
|
|
return (List<String>)query.getResultList();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//汇总数据
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @param infoV107List 报文信息
|
|
|
|
|
|
|
|
* @param infoDD 最新报文信息
|
|
|
|
|
|
|
|
* @param infoKH 最新客户上线信息
|
|
|
|
|
|
|
|
* @param workOrder 最新工单
|
|
|
|
|
|
|
|
* @param workOrderLast 最新下线工单
|
|
|
|
|
|
|
|
* @param workCount 工单数量
|
|
|
|
|
|
|
|
* @param vehicleNoList 报警
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private MesKanBanShowModel doGetSGMData(MesEarlyWarningKanBan kanBan,List<MesCimGmGepics> infoV107List,MesCimGmGepics infoDD, MesCimGmGepics infoKH, MesWorkOrder workOrder,MesWorkOrder workOrderLast,int workCount,List<String> vehicleNoList) {
|
|
|
|
|
|
|
|
MesKanBanShowModel mesKanBanShowModel = new MesKanBanShowModel();
|
|
|
|
|
|
|
|
//是否截图
|
|
|
|
|
|
|
|
boolean shortCut = false;
|
|
|
|
|
|
|
|
if (infoV107List.isEmpty()){
|
|
|
|
|
|
|
|
return mesKanBanShowModel;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
for (int i = 0; i < infoV107List.size()-1; i++) {
|
|
|
|
|
|
|
|
int preCsnNo = Integer.parseInt(infoV107List.get(i+1).getCsnNo().substring(3,10));
|
|
|
|
|
|
|
|
int curCsnNo = Integer.parseInt(infoV107List.get(i).getCsnNo().substring(3,10));
|
|
|
|
|
|
|
|
if (curCsnNo != preCsnNo+1){
|
|
|
|
|
|
|
|
//需要保留截图
|
|
|
|
|
|
|
|
//需要发声音
|
|
|
|
|
|
|
|
mesKanBanShowModel.setVoice("跳号的声音");
|
|
|
|
|
|
|
|
//需要发送记录信息 当前csnNo进行了跳号
|
|
|
|
|
|
|
|
mesKanBanShowModel.setErrorMsg(String.format("当前CsnNo:%d进行了跳号",curCsnNo));
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// if (infoDD == null){
|
|
|
|
|
|
|
|
// return mesKanBanShowModel;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if (infoKH == null){
|
|
|
|
|
|
|
|
// return mesKanBanShowModel;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if (workOrder == null){
|
|
|
|
|
|
|
|
// return mesKanBanShowModel;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if (workOrderLast == null){
|
|
|
|
|
|
|
|
// return mesKanBanShowModel;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
//最新v107信息
|
|
|
|
|
|
|
|
String v107Msg = infoDD.getCsnNo() + " @ " + infoDD.getDate() + " " + infoDD.getTime();
|
|
|
|
|
|
|
|
mesKanBanShowModel.setV107Msg(v107Msg);
|
|
|
|
|
|
|
|
//最新客户上线信息
|
|
|
|
|
|
|
|
String infoKHCsnNo = infoKH.getCsnNo() + " @ " + infoKH.getDate() + " " + infoKH.getTime();
|
|
|
|
|
|
|
|
mesKanBanShowModel.setInfoKHCsnNo(infoKHCsnNo);
|
|
|
|
|
|
|
|
//生产线
|
|
|
|
|
|
|
|
String workOrderCenter = kanBan.getWorkCenterName() +" " + kanBan.getWorkCenterDescription();
|
|
|
|
|
|
|
|
mesKanBanShowModel.setWorkOrderCenter(workOrderCenter);
|
|
|
|
|
|
|
|
//供货缓冲 >=
|
|
|
|
|
|
|
|
Long supplyRedBuffer = kanBan.getSupplyRedBuffer();
|
|
|
|
|
|
|
|
mesKanBanShowModel.setSupplyRedBuffer(supplyRedBuffer);
|
|
|
|
|
|
|
|
//供货缓冲实际
|
|
|
|
|
|
|
|
Long realSupplyBuffer = Long.parseLong(infoDD.getCsnNo().substring(3,10)) - Long.parseLong(infoKH.getCsnNo().substring(3,10)) - kanBan.getOnlineAdjustNum();
|
|
|
|
|
|
|
|
mesKanBanShowModel.setRealSupplyBuffer(realSupplyBuffer);
|
|
|
|
|
|
|
|
//成品缓冲文字颜色
|
|
|
|
|
|
|
|
//private String realSupplyBufferColor;
|
|
|
|
|
|
|
|
//线头积单
|
|
|
|
|
|
|
|
Long summaryWorkOrderRedCount = kanBan.getSummaryWorkOrderRedCount();
|
|
|
|
|
|
|
|
mesKanBanShowModel.setSummaryWorkOrderRedCount(summaryWorkOrderRedCount);
|
|
|
|
|
|
|
|
//线头实际积单
|
|
|
|
|
|
|
|
long summaryRealSupplyRealCount;
|
|
|
|
|
|
|
|
String custOrderNo = workOrder.getCustOrderNo();
|
|
|
|
|
|
|
|
if(custOrderNo.length() >= 10){
|
|
|
|
|
|
|
|
summaryRealSupplyRealCount = Long.parseLong(infoDD.getCsnNo().substring(3, 10)) - Long.parseLong(workOrder.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)) - kanBan.getOnlineAdjustNum();
|
|
|
|
|
|
|
|
}else {
|
|
|
|
|
|
|
|
summaryRealSupplyRealCount = Long.parseLong(infoDD.getCsnNo().substring(infoDD.getCsnNo().length() - 5))- Long.parseLong(workOrder.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)) - kanBan.getOnlineAdjustNum();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
mesKanBanShowModel.setSummaryRealSupplyRealCount(summaryRealSupplyRealCount);
|
|
|
|
|
|
|
|
//成品缓冲
|
|
|
|
|
|
|
|
Long productionRedBuffer =kanBan.getProductionRedBuffer();
|
|
|
|
|
|
|
|
mesKanBanShowModel.setProductionRedBuffer(productionRedBuffer);
|
|
|
|
|
|
|
|
//成品实际缓冲
|
|
|
|
|
|
|
|
Long realProductionBuffer;
|
|
|
|
|
|
|
|
if (workOrderLast.getCustOrderNo().length() >= 10){
|
|
|
|
|
|
|
|
realProductionBuffer = Long.parseLong(workOrderLast.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 7)) - Long.parseLong(infoKH.getCsnNo().substring(3, 10)) - kanBan.getOnlineToShippingAdjustNum();
|
|
|
|
|
|
|
|
}else {
|
|
|
|
|
|
|
|
realProductionBuffer = Long.parseLong(workOrderLast.getCustOrderNo().substring(workOrderLast.getCustOrderNo().length() - 5)) - Long.parseLong(infoKH.getCsnNo().substring(infoKH.getCsnNo().length()-5)) - kanBan.getOnlineToShippingAdjustNum();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
mesKanBanShowModel.setRealProductionBuffer(realProductionBuffer);
|
|
|
|
|
|
|
|
//成品缓冲文字颜色
|
|
|
|
|
|
|
|
//private String realProductionBufferColor;
|
|
|
|
|
|
|
|
//声音信息
|
|
|
|
|
|
|
|
//private String voice;
|
|
|
|
|
|
|
|
//错误信息
|
|
|
|
|
|
|
|
//private String errorMsg;
|
|
|
|
|
|
|
|
//截图地址
|
|
|
|
|
|
|
|
String saveUrl = kanBan.getPictureUrl();
|
|
|
|
|
|
|
|
mesKanBanShowModel.setShortCut(shortCut);
|
|
|
|
|
|
|
|
mesKanBanShowModel.setSaveUrl(saveUrl);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (kanBan.getRecord().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue())){
|
|
|
|
|
|
|
|
MesEarlyWarningRecord record = new MesEarlyWarningRecord();
|
|
|
|
|
|
|
|
record.setWorkCenterCode(workOrderCenter);
|
|
|
|
|
|
|
|
record.setGaNo(infoDD.getCsnNo());
|
|
|
|
|
|
|
|
record.setLastGaNo(infoKH.getCsnNo());
|
|
|
|
|
|
|
|
ConvertBean.saveOrUpdate(record,"kanban");
|
|
|
|
|
|
|
|
earlyWarningRecordRao.insert(record);
|
|
|
|
|
|
|
|
mesKanBanShowModel.setRecordId(record.getId());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return mesKanBanShowModel;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|