package com.northglass.service.loadmachine;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Set;
|
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.northglass.constants.ShelfTaskType;
|
import com.northglass.constants.StateConstants.ConnectState;
|
import com.northglass.constants.StateConstants.GlassArrangeState;
|
import com.northglass.constants.StateConstants.LoadMachineState;
|
import com.northglass.constants.StateConstants.LoadMachineTaskState;
|
import com.northglass.constants.StateConstants.RackState;
|
import com.northglass.constants.StateConstants.ShelfRankState;
|
import com.northglass.constants.StateConstants.ShelfTaskState;
|
import com.northglass.constants.StateConstants.sendGlassState;
|
import com.northglass.entity.Glass;
|
import com.northglass.entity.LoadMachine;
|
import com.northglass.entity.LoadMachineFixRack;
|
import com.northglass.entity.LoadMachineRack;
|
import com.northglass.entity.LoadMachineTask;
|
import com.northglass.entity.OptPattern;
|
import com.northglass.entity.RawPackage;
|
import com.northglass.entity.RawPackageTxt;
|
import com.northglass.entity.ShelfRank;
|
import com.northglass.entity.ShelfTask;
|
import com.northglass.entity.SingalGlass;
|
import com.northglass.entity.TestOut;
|
import com.northglass.listener.LoadMachineClientListener;
|
import com.northglass.listener.LoadMachineServerListener;
|
import com.northglass.repository.GlassDao;
|
import com.northglass.repository.LoadMachineDao;
|
import com.northglass.repository.LoadMachineFixRackDao;
|
import com.northglass.repository.LoadMachineRackDao;
|
import com.northglass.repository.LoadMachineTaskDao;
|
import com.northglass.repository.OptPatternDao;
|
import com.northglass.repository.ProdLineStateDao;
|
import com.northglass.repository.RawPackageTxtDao;
|
import com.northglass.repository.ShelfRankDao;
|
import com.northglass.repository.ShelfTaskDao;
|
import com.northglass.repository.SingalGlassDao;
|
import com.northglass.repository.TestOutDao;
|
import com.northglass.service.device.DeviceService;
|
import com.northglass.service.machine.MachineService;
|
import com.northglass.service.message.LoadMachineMessageProcessor;
|
import com.northglass.service.shelf.ShelfService;
|
|
|
@Component
|
@Transactional
|
public class LoadMachineService {
|
|
@Autowired
|
private LoadMachineDao loadMachineDao;
|
|
@Autowired
|
private LoadMachineMessageProcessor messageProcessor;
|
|
@Autowired
|
private OptPatternDao optPatternDao;
|
|
@Autowired
|
private LoadMachineRackDao loadMachineRackDao;
|
|
@Autowired
|
ProdLineStateDao prodLineStateDao;
|
|
@Autowired
|
RawPackageTxtDao rawPackageTxtDao;
|
|
@Autowired
|
LoadMachineTaskDao loadMachineTaskDao;
|
|
@Autowired
|
private TestOutDao testOutDao;
|
|
@Autowired
|
private ShelfRankDao shelfRankDao;
|
|
@Autowired
|
private LoadMachineFixRackDao loadMachineFixRackDao;
|
|
@Autowired
|
private SingalGlassDao singalGlassDao;
|
|
@Autowired
|
private ShelfTaskDao shelfTaskDao;
|
|
@Autowired
|
private ShelfService shelfService;
|
|
@Autowired
|
private GlassDao glassDao;
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(LoadMachineService.class);
|
|
public void setConnectState(LoadMachine loadMachine, String connectState) {
|
loadMachine.setConnectState(connectState);
|
loadMachine.setModifyTime(new Date());;
|
loadMachineDao.save(loadMachine);
|
}
|
|
public LoadMachine getById(Long id) {
|
return loadMachineDao.findOne(id);
|
}
|
|
public List<LoadMachine> getAll() {
|
return loadMachineDao.findAll();
|
}
|
|
public String generateReturnMessage(String sendMessageHex, LoadMachine loadMachine) {
|
return messageProcessor.generateReturnMessage(sendMessageHex, loadMachine);
|
}
|
|
public void connect() {
|
List<LoadMachine> loadMachineList = loadMachineDao.findAll();
|
// 若监听线程为空,则新建监听线程
|
for (LoadMachine loadMachine : loadMachineList) {
|
LOGGER.debug("> 创建连接:"+loadMachine.getIpAddress()+":"+loadMachine.getPort());
|
if (loadMachine.getServerConnection().getThread() == null) {
|
Thread thread = new Thread(new LoadMachineClientListener(loadMachine, this));
|
thread.start();
|
setConnectState(loadMachine, ConnectState.CONNECTING);
|
loadMachine.getServerConnection().setThread(thread);
|
}
|
}
|
}
|
|
public void resetState() {
|
List<LoadMachine> loadMachineList = loadMachineDao.findAll();
|
|
for (LoadMachine loadMachine : loadMachineList) {
|
loadMachine.setConnectState(ConnectState.NO_CONNECT);
|
loadMachine.setState(LoadMachineState.STOPPED);
|
}
|
|
loadMachineDao.save(loadMachineList);
|
}
|
|
public LoadMachine saveLoadMachine(LoadMachine loadMachine) {
|
return loadMachineDao.saveAndFlush(loadMachine);
|
}
|
|
public String getLoadMachineHtml() {
|
Map<String, Object> language=DeviceService.readLanguage();
|
StringBuffer html = new StringBuffer();
|
|
List<LoadMachine> loadMachineList = loadMachineDao.findAll();
|
for (LoadMachine loadMachine : loadMachineList) {
|
List<LoadMachineRack> racks = loadMachine.getLoadMachineRacks();
|
boolean firstRow = true;
|
|
for (LoadMachineRack rack : racks) {
|
|
html.append("<tr>");
|
if (firstRow) {
|
html.append("<td rowspan='").append(racks.size()).append("'>");
|
html.append("<br>");
|
html.append("<a href='/gmms2/loadmachine/list/").append(loadMachine.getId()).append("'>上片机");
|
html.append(loadMachine.getNumber()).append("</a> ");
|
html.append(MachineService.getMachineStateHtml(loadMachine.getState())).append(" ");
|
html.append(MachineService.getConnectStateHtml(loadMachine.getConnectState())).append("</td>");
|
|
firstRow = false;
|
}
|
|
html.append("<td>");
|
html.append("<a href='javascript:void(0)'>").append("上片位");
|
html.append(rack.getNumber()).append("</a> ");
|
html.append("</td>");
|
|
html.append("<td>");
|
if (rack.getRawPackage() != null) {
|
ShelfRank rank = shelfRankDao.findRankByRawId(rack.getRawPackage().getId());
|
if(rank==null){
|
html.append(rack.getNumber()+" "+language.get("clearInformation")+"!");
|
// rack.setRawPackage(null);
|
// loadMachineRackDao.save(rack);
|
}else{
|
html.append("【").append(rank.getNumber()).append("号】").append(rack.getRawPackage().getDescription());
|
}
|
}else {
|
if (!rack.getState().equals(RackState.FREE)) {
|
html.append(rack.getNumber()+" "+language.get("clearInformation")+"!");
|
}
|
}
|
html.append("</td>");
|
|
html.append("<td>");
|
html.append(rack.getMessage() == null ? "" : rack.getMessage());
|
html.append("</td>");
|
html.append("<td>");
|
if (rack.getState().equals(RackState.FREE)) {
|
html.append("<button class='btn btn-large btn-success' onclick='addload(").append(rack.getId()).append(")'>"+language.get("addOriginalFilm")+"</button>");
|
}else {
|
html.append("<button class='btn btn-large btn-warning' onclick='modifyload(").append(rack.getId()).append(")'>"+language.get("modifyOriginalFilm")+"</button>");
|
html.append(" <button class='btn btn-large btn-danger' onclick='deleteload(").append(rack.getId()).append(")'>"+language.get("clearInformation")+"</button>");
|
html.append(" <button class='btn btn-large btn-danger' onclick='tuiku(").append(rack.getId()).append(")'>"+language.get("sendBackWarehouse")+"</button>");
|
}
|
|
html.append("</td>");
|
html.append("</tr>");
|
}
|
|
}
|
|
return html.toString();
|
}
|
|
public String getLoadMachineFixHtml() {
|
StringBuffer html = new StringBuffer();
|
List<LoadMachineFixRack> racks = loadMachineFixRackDao.findAll();
|
if(racks.size()>0){
|
for(LoadMachineFixRack rack:racks){
|
html.append("<tr>");
|
html.append("<td>").append("固定料架").append(rack.getId()).append("</td>");
|
html.append("<td>").append(rack.getNumber()).append("</td>");
|
if (rack.getState().equals("空闲")) {
|
html.append("<td>").append("无").append("</td>");
|
html.append("<td>").append("<button class='btn btn-large btn-success' onclick='addinfo(").append(rack.getId()).append(")'>添加原片").append("</button></td>");
|
}else {
|
html.append("<td>").append(rack.getThickness()+rack.getColor()).append("【").append(rack.getHeight()+"*"+rack.getWidth()+" 】"+rack.getLeftPieces()+"片" ).append("</td>");
|
html.append("<td>").append("<button class='btn btn-large btn-danger' onclick='deleteinfo(").append(rack.getId()).append(")'>删除原片").append("</button></td>");
|
}
|
html.append("</tr>");
|
}
|
}
|
|
return html.toString();
|
}
|
|
/**
|
* 显示当前切割任务
|
* @return
|
*/
|
public List<LoadMachineTask> getTaskList(String loadMachineId){
|
RawPackageTxt rawPackageTxt = rawPackageTxtDao.findAcceptedByGroup(loadMachineId);
|
List<LoadMachineTask> tasks = new ArrayList<LoadMachineTask>();
|
if(rawPackageTxt != null){
|
String batch = rawPackageTxt.getTxt_name();
|
List<OptPattern> optPatterns = optPatternDao.findOptPatternByBatchNumber(batch);
|
List<LoadMachineTask> loadMachineTasks =null;
|
for(OptPattern opt:optPatterns){
|
Long id = opt.getId();
|
loadMachineTasks = loadMachineTaskDao.findByOptId(id);
|
for(int i=0; i<loadMachineTasks.size() ; i++){
|
LoadMachineTask loadMachineTask = loadMachineTasks.get(i);
|
tasks.add(loadMachineTask);
|
}
|
}
|
}
|
|
|
boolean lineState = prodLineStateDao.findById(Integer.valueOf(loadMachineId)).isState();
|
if(!"".equals(tasks) && tasks!=null){
|
|
int sum = 0;
|
for(int i=0; i<tasks.size(); i++){
|
String state = tasks.get(i).getState();
|
if(state.equals(LoadMachineTaskState.WAITING)||state.equals(LoadMachineTaskState.WAITING_START)||lineState==true){
|
sum++;
|
}
|
if(sum!=0){
|
break;
|
}
|
|
}
|
if(sum!=0){
|
return tasks;
|
}
|
}
|
return null;
|
|
}
|
|
/**
|
* 设置缺片信息
|
*/
|
public void setNoRawPackageInLoadMachineRackMessage(LoadMachineRack loadMachineRack, OptPattern optPattern, int currentRawPackageOneLeftPieces) {
|
String txt_name = optPattern.getRawPackageTxt().getTxt_name();
|
//当前规格原片的信息
|
String glassId = optPattern.getGlassId();
|
double glassThickness = optPattern.getGlassThickness();
|
double width = optPattern.getWidth();
|
double height = optPattern.getHeight();
|
String color = optPattern.getColor();
|
String glassDescription = optPattern.getGlassDescription();
|
int pieces = optPattern.getPieces();
|
int completedPieces = optPattern.getCompletedPieces();
|
|
OptPattern optPatternCount=new OptPattern(glassId, glassDescription, glassThickness, pieces, completedPieces, width, height, color);
|
|
//得到当前任务的所有optPattern
|
List<OptPattern> OptPatterns=optPatternDao.findOptPatternByBatchNumberAndState(txt_name);
|
for(int i = 0; i < OptPatterns.size(); i++){
|
OptPattern optPattern2 = OptPatterns.get(i);
|
|
if((optPattern2.getGlassThickness()==glassThickness
|
&& optPattern2.getWidth()==width
|
&& optPattern2.getHeight()==height
|
&& optPattern2.getColor().equals(color)
|
&& optPattern2.getPieces()!=optPattern2.getCompletedPieces())||(optPattern2.getGlassThickness()==glassThickness
|
&& optPattern2.getWidth()==height
|
&& optPattern2.getHeight()==width
|
&& optPattern2.getColor().equals(color)
|
&& optPattern2.getPieces()!=optPattern2.getCompletedPieces())){
|
optPatternCount.setPieces(optPatternCount.getPieces()+optPattern2.getPieces());
|
optPatternCount.setCompletedPieces(optPatternCount.getCompletedPieces()+optPattern2.getCompletedPieces());
|
}
|
}
|
|
optPatternCount.setPieces(optPatternCount.getPieces()-pieces-currentRawPackageOneLeftPieces);
|
optPatternCount.setCompletedPieces(optPatternCount.getCompletedPieces()-completedPieces);
|
|
loadMachineRack=loadMachineRackDao.findOne(loadMachineRack.getId());
|
loadMachineRack.setMessage("当前没有匹配到原片:<div style='color: red;font-weight: bold;'>" + optPatternCount.getDescription() + "</div>");
|
loadMachineRack=loadMachineRackDao.save(loadMachineRack);
|
}
|
|
public void clearMessage(LoadMachineRack loadMachineRack) {
|
if(loadMachineRack!=null){
|
loadMachineRack=loadMachineRackDao.findOne(loadMachineRack.getId());
|
loadMachineRack.setMessage("");
|
loadMachineRack=loadMachineRackDao.save(loadMachineRack);
|
}
|
}
|
|
public void getright(String name) {
|
TestOut testOut = new TestOut(name);
|
testOut.setStart_time(new Date());
|
testOutDao.save(testOut);
|
}
|
|
public void getendtime(String name) {
|
List<TestOut> testOuts = testOutDao.findByName(name);
|
if (testOuts.size() > 0) {
|
TestOut testOut = testOuts.get(testOuts.size() - 1);
|
if (testOut.getEnd_time() != null && !testOut.getEnd_time().equals("")) {
|
TestOut test = new TestOut(name);
|
test.setStart_time(new Date());
|
testOutDao.save(test);
|
} else {
|
testOut.setEnd_time(new Date());
|
testOutDao.save(testOut);
|
}
|
} else {
|
TestOut testOut = new TestOut(name + "start");
|
testOut.setStart_time(new Date());
|
testOutDao.save(testOut);
|
}
|
|
}
|
|
public String deleteinfo(String loadMachineId) {
|
LoadMachineRack rack = loadMachineRackDao.findOne(Long.valueOf(loadMachineId));
|
rack.setState(RackState.FREE);
|
RawPackage raw = rack.getRawPackage();
|
if (raw != null) {
|
ShelfRank rank = shelfRankDao.findRankByRawId(raw.getId());
|
if (rank != null) {
|
if (rank.getState().equals(RackState.IN_WORKING)) {
|
rank.setState(RackState.IN_WORK);
|
shelfRankDao.save(rank);
|
}
|
}
|
}
|
rack.setRawPackage(null);
|
loadMachineRackDao.save(rack);
|
return "redirect:/loadmachine/loadmachinerack";
|
}
|
|
public String Tuikuis(String loadMachineId) {
|
try {
|
LoadMachineRack rack = loadMachineRackDao.findOne(Long.valueOf(loadMachineId));
|
ShelfTask fromLoadMachineRackToShelfRack = shelfTaskDao
|
.findShelfTaskFromLoadMachineRackToShelfRack(rack.getId(),
|
rack.getRawPackage().getShelfRank().getId());
|
// 若没创建,则新建从上片位到货架的任务
|
if (fromLoadMachineRackToShelfRack == null) {
|
fromLoadMachineRackToShelfRack = new ShelfTask(ShelfTaskState.WAITING,
|
ShelfTaskType.FROM_LOAD_MACHINE_RACK_TO_SHELF_RACK, new Date(), "1",
|
rack.getRawPackage().getShelfRank(),
|
rack);
|
shelfService.saveShelfTask(fromLoadMachineRackToShelfRack);
|
}
|
} catch (Exception e) {
|
// TODO: handle exception
|
}
|
return "redirect:/loadmachine/loadmachinerack";
|
}
|
public String deletefixinfo(String loadMachineId) {
|
LoadMachineFixRack rack = loadMachineFixRackDao.findOne(Long.valueOf(loadMachineId));
|
if (rack != null) {
|
rack.setState(RackState.FREE);
|
rack.setColor(null);
|
rack.setGlassId(null);
|
rack.setHeight(0);
|
rack.setWidth(0);
|
rack.setLeftPieces(0);
|
rack.setPieces(0);
|
rack.setThickness(0);
|
loadMachineFixRackDao.save(rack);
|
}
|
|
return "redirect:/loadmachine/loadmachinerack";
|
}
|
|
public String processMessage(String sendMessageHex, LoadMachine loadMachine) {
|
return messageProcessor.generateReturnMessage(sendMessageHex, loadMachine);
|
}
|
|
/***
|
*
|
* 2020年4月13日
|
* @author northglass
|
* 功能:把当前的opt文件里面的小片信息转换成glass表,用于测量的数据对比
|
* @param optid
|
*
|
*
|
* *****/
|
public void bcglass(Long optid) {
|
//得到optid 版面下的所以 小片类型singalGlasses信息
|
List<SingalGlass> singalGlasses = singalGlassDao.findByOptPattern(optid);
|
if (singalGlasses.size()>0) {
|
//在Glass表中,找到当前singalGlasses中任务名称
|
List<Glass> glasses = glassDao.findGlassByBatchs(singalGlasses.get(0).getManufacture_batch());
|
for (int i = 0; i < singalGlasses.size(); i++) {
|
SingalGlass singalGlass = singalGlasses.get(i);
|
if (glasses.size()>0) {
|
for (int j = 0; j < glasses.size(); j++) {
|
Glass gla = glasses.get(j);
|
//有相同尺寸 合并片数
|
if (singalGlass.getLength() == gla.getLength() &&
|
singalGlass.getWidth() == gla.getWidth() &&
|
singalGlass.getSort() == gla.getSort()) {
|
gla.setPieces(gla.getPieces()+singalGlass.getPieces());
|
glassDao.save(gla);
|
break ;
|
}
|
//无相同尺寸 重新添加
|
if (j == glasses.size()-1) {
|
Glass glass = new Glass("0", 0, singalGlass.getLength(), singalGlass.getWidth(), singalGlass.getThickness(), singalGlass.getColor(), singalGlass.getCustomer(),
|
GlassArrangeState.MEASURE, "", singalGlass.getApart_id(), singalGlass.getManufacture_batch(), singalGlass.getPieces(), 0,0, singalGlass.getRawPackageTxt(),singalGlass.getApplication(),
|
singalGlass.getProduction(), singalGlass.getFloor_number(), singalGlass.getOrder_number(), singalGlass.getPiece_sign(), singalGlass.getRemark(),singalGlass.getPolish(),singalGlass.getRemove());
|
glass.setStartlength(singalGlass.getStartlength());
|
glass.setStartwidth(singalGlass.getStartwidth());
|
glass.setSort(singalGlass.getSort());
|
glassDao.save(glass);
|
}
|
}
|
}else {
|
Glass glass = new Glass("0", 0, singalGlass.getLength(), singalGlass.getWidth(), singalGlass.getThickness(), singalGlass.getColor(), singalGlass.getCustomer(),
|
GlassArrangeState.MEASURE, "", singalGlass.getApart_id(), singalGlass.getManufacture_batch(), singalGlass.getPieces(), 0,0, singalGlass.getRawPackageTxt(),singalGlass.getApplication(),
|
singalGlass.getProduction(), singalGlass.getFloor_number(), singalGlass.getOrder_number(), singalGlass.getPiece_sign(), singalGlass.getRemark(),singalGlass.getPolish(),singalGlass.getRemove());
|
glass.setStartlength(singalGlass.getStartlength());
|
glass.setStartwidth(singalGlass.getStartwidth());
|
glass.setSort(singalGlass.getSort());
|
glassDao.save(glass);
|
}
|
|
|
}
|
// for(SingalGlass singalGlass: singalGlasses){
|
//
|
// Glass glass = new Glass("0", 0, singalGlass.getLength(), singalGlass.getWidth(), singalGlass.getThickness(), singalGlass.getColor(), singalGlass.getCustomer(),
|
// GlassArrangeState.MEASURE, "", singalGlass.getApart_id(), singalGlass.getManufacture_batch(), singalGlass.getPieces(), 0,0, singalGlass.getRawPackageTxt(),singalGlass.getApplication(),
|
// singalGlass.getProduction(), singalGlass.getFloor_number(), singalGlass.getOrder_number(), singalGlass.getPiece_sign(), singalGlass.getRemark(),singalGlass.getPolish(),singalGlass.getRemove());
|
// glass.setStartlength(singalGlass.getStartlength());
|
// glass.setStartwidth(singalGlass.getStartwidth());
|
// glassDao.save(glass);
|
// }
|
}
|
}
|
}
|