package com.northglass.service.rawpackage;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
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.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.northglass.constants.GlassColor;
|
import com.northglass.constants.ShelfTaskFlag;
|
import com.northglass.constants.ShelfTaskType;
|
import com.northglass.constants.StateConstants.RackState;
|
import com.northglass.constants.StateConstants.ShelfHoistState;
|
import com.northglass.constants.StateConstants.ShelfRankState;
|
import com.northglass.constants.StateConstants.ShelfTaskState;
|
import com.northglass.entity.GlassNumberColor;
|
import com.northglass.entity.LoadMachineRack;
|
import com.northglass.entity.LoadMachineTask;
|
import com.northglass.entity.OptPattern;
|
import com.northglass.entity.RawPackage;
|
import com.northglass.entity.ShelfHoist;
|
import com.northglass.entity.ShelfRank;
|
import com.northglass.entity.ShelfTask;
|
import com.northglass.repository.GlassNumberColorDao;
|
import com.northglass.repository.LoadMachineRackDao;
|
import com.northglass.repository.LoadMachineTaskDao;
|
import com.northglass.repository.RawPackageDao;
|
import com.northglass.repository.ShelfHoistDao;
|
import com.northglass.repository.ShelfRankDao;
|
import com.northglass.repository.ShelfTaskDao;
|
|
import net.sf.json.JSONObject;
|
import net.sf.json.JsonConfig;
|
import net.sf.json.util.PropertyFilter;
|
|
@Component
|
@Transactional
|
public class RawPackageService {
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(RawPackageService.class);
|
|
@Autowired
|
private RawPackageDao rawPackageDao;
|
|
@Autowired
|
private ShelfHoistDao shelfHoistDao;
|
|
@Autowired
|
private ShelfRankDao shelfRankDao;
|
|
@Autowired
|
private ShelfTaskDao shelfTaskDao;
|
|
@Autowired
|
private LoadMachineRackDao loadMachineRackDao;
|
|
@Autowired
|
private LoadMachineTaskDao loadMachineTaskDao;
|
|
@Autowired
|
private GlassNumberColorDao glassNumberColorDao;
|
|
public List<RawPackage> getAll() {
|
return rawPackageDao.findAll();
|
}
|
|
public RawPackage getById(Long id) {
|
return rawPackageDao.findOne(id);
|
}
|
|
public String getShelfRankNumberById(Long shelfRankId) {
|
ShelfRank rank = shelfRankDao.findOne(shelfRankId);
|
|
if (rank != null) {
|
return rank.getNumber();
|
}
|
|
return "";
|
}
|
|
public String getShelfHoistNumberById(Long shelfHoistId) {
|
ShelfHoist hoist = shelfHoistDao.findOne(shelfHoistId);
|
|
if (hoist != null) {
|
return hoist.getNumber();
|
}
|
|
return "";
|
}
|
|
public List<String> getFreeShelfRankNumberList() {
|
List<ShelfRank> freeShelfRanks = shelfRankDao.findFreeRanks();
|
List<String> result = new ArrayList<String>();
|
|
for (ShelfRank shelfRank : freeShelfRanks) {
|
result.add(shelfRank.getNumber());
|
}
|
|
return result;
|
}
|
|
public List<String> getInWorkShelfNumberList() {
|
List<ShelfRank> shelfRanks = shelfRankDao.findInWorkRanks();
|
List<String> result = new ArrayList<String>();
|
|
for (ShelfRank shelfRank : shelfRanks) {
|
if (shelfRank.getRawPackage() != null) {
|
result.add(shelfRank.getNumber());
|
}
|
}
|
|
return result;
|
}
|
|
//根据料架Id查找当前料架
|
public ShelfRank getInWorkShelfRankById(Long shelfRankId) {
|
ShelfRank rank = shelfRankDao.findOne(shelfRankId);
|
return rank;
|
}
|
|
public List<String> getManufacturerList() {
|
return rawPackageDao.findManufacturers();
|
}
|
|
public List<String> getColorList() {
|
List<String> strList=new ArrayList<String>();
|
|
List<GlassNumberColor> GlassNumberColorList = glassNumberColorDao.findAll();
|
|
for(GlassNumberColor glassNumberColor : GlassNumberColorList){
|
strList.add(glassNumberColor.getGlassId());
|
}
|
|
return strList;
|
}
|
|
|
public List<String> getShelfType(){
|
List<String> shelfTypeList=new ArrayList<String>();
|
|
shelfTypeList.add(ShelfTaskType.FROM_HOIST_TO_EMPTY_RANK);
|
shelfTypeList.add(ShelfTaskType.FROM_LOAD_MACHINE_RACK_TO_SHELF_RACK);
|
|
return shelfTypeList;
|
}
|
|
/**
|
*
|
* @param shelfRankNumber
|
*/
|
public void saveSingle(String startPosition,String endPosition,String shelfType){
|
|
RawPackage rawPackage=new RawPackage("",0, ShelfRankState.FREE, 0.0, 0.0,0.0,"", 1, "0", new Date());
|
|
rawPackageDao.save(rawPackage);
|
|
ShelfRank shelfRank = shelfRankDao.findOne(Long.valueOf(endPosition));
|
|
shelfRank.setRawPackage(rawPackage);
|
shelfRank.setColor(rawPackage.getColor());
|
shelfRank.setGlassId(rawPackage.getGlassId());
|
shelfRank.setLength(rawPackage.getHeight());
|
shelfRank.setPieces(rawPackage.getPieces());
|
shelfRank.setThickness(rawPackage.getThickness());
|
shelfRank.setWidth(rawPackage.getWidth());
|
shelfRank.setCreateTime(rawPackage.getCreateTime());
|
|
if(shelfType.equals(ShelfTaskType.FROM_HOIST_TO_EMPTY_RANK)){
|
|
ShelfTask fromHoistToRank = new ShelfTask(ShelfTaskState.WAITING, ShelfTaskType.FROM_HOIST_TO_EMPTY_RANK, new Date(), ShelfTaskFlag.SHELF_FLAG,shelfHoistDao.findAll().get(0), shelfRank);
|
|
shelfTaskDao.save(fromHoistToRank);
|
}
|
|
if(shelfType.equals(ShelfTaskType.FROM_LOAD_MACHINE_RACK_TO_SHELF_RACK)){
|
|
LoadMachineRack loadMachineRack = loadMachineRackDao.findLoadMachineRacksByRankNumber(startPosition);
|
ShelfTask fromLoadMachineRackToShelfRack = new ShelfTask(ShelfTaskState.WAITING, ShelfTaskType.FROM_LOAD_MACHINE_RACK_TO_SHELF_RACK,
|
new Date(), "1",shelfRank , loadMachineRack);
|
|
shelfTaskDao.save(fromLoadMachineRackToShelfRack);
|
}
|
}
|
|
|
public void cancelAction(String shelfRankNumber) {
|
LOGGER.debug("> Start cancel");
|
LOGGER.debug("shelfRankNumber: " + shelfRankNumber);
|
|
ShelfHoist shelfHoist = shelfHoistDao.findAll().get(0);
|
|
ShelfRank shelfRank = shelfRankDao.findShelfRankByNumber(shelfRankNumber);
|
shelfRank.setState(ShelfRankState.ON_WAITING);
|
shelfRankDao.save(shelfRank);
|
|
RawPackage rawPackage = shelfRank.getRawPackage();
|
rawPackage.setState(ShelfRankState.ON_WAITING);
|
rawPackageDao.save(rawPackage);
|
|
ShelfTask fromRankToHoistTask = new ShelfTask(ShelfTaskState.WAITING, ShelfTaskType.FROM_RANK_TO_HOIST, new Date(), "0",shelfHoist, shelfRank);
|
ShelfTask fromHoistToEmptyRankTask = new ShelfTask(ShelfTaskState.WAITING, ShelfTaskType.FROM_HOIST_TO_EMPTY_RANK, new Date(), "0",shelfHoist, shelfRank);
|
|
shelfTaskDao.save(fromRankToHoistTask);
|
shelfTaskDao.save(fromHoistToEmptyRankTask);
|
|
LOGGER.debug("> End cancel");
|
}
|
|
public String getRawPackageInfoJSON(String rankNumber) throws JsonProcessingException {
|
LOGGER.debug("> Start getRawPackageInfoJSON");
|
LOGGER.debug("rankNumber: " + rankNumber);
|
|
ShelfRank rank = shelfRankDao.findShelfRankByNumber(rankNumber);
|
// ObjectMapper mapper = new ObjectMapper();
|
|
//创建过滤器
|
JsonConfig cfg = new JsonConfig();
|
cfg.setJsonPropertyFilter(new PropertyFilter(){
|
public boolean apply(Object source, String name, Object value) {
|
if(name.equals("shelfRank")||name.equals("rawPackageTxt")) {
|
return true;
|
}
|
else{
|
return false;
|
}
|
}
|
});
|
|
// String json = mapper.writeValueAsString(rank.getRawPackage());
|
JSONObject json= JSONObject.fromObject(rank.getRawPackage(),cfg);
|
LOGGER.debug("json: " + json);
|
|
LOGGER.debug("> End getRawPackageInfoJSON");
|
return json.toString();
|
}
|
|
public RawPackage saveForEditShelfRank(RawPackage rawPackage, Long shelfRankId) {
|
LOGGER.debug("> Start saveForEditShelfRank");
|
|
String color = rawPackage.getColor();
|
rawPackage.setColor(color);
|
|
if(glassNumberColorDao.findGlassNumberColorByGlassId(color)!=null){
|
rawPackage.setComment(GlassColor.SPECIAL_FLAG);
|
|
}else{
|
rawPackage.setComment(GlassColor.GENERAL_FLAG);
|
}
|
rawPackage.setLeftPieces(rawPackage.getPieces());
|
rawPackage.setState(ShelfRankState.IN_WORK);
|
rawPackage.setCreateTime(new Date());
|
|
rawPackage = rawPackageDao.save(rawPackage);
|
|
if (shelfRankId != null) {
|
ShelfRank shelfRank = shelfRankDao.findOne(shelfRankId);
|
shelfRank.setState(ShelfRankState.IN_WORK);
|
shelfRank.setRawPackage(rawPackage);
|
shelfRank.setColor(rawPackage.getColor());
|
shelfRank.setGlassId(rawPackage.getGlassId());
|
shelfRank.setLength(rawPackage.getHeight());
|
shelfRank.setPieces(rawPackage.getPieces());
|
shelfRank.setThickness(rawPackage.getThickness());
|
shelfRank.setWidth(rawPackage.getWidth());
|
shelfRank.setCreateTime(rawPackage.getCreateTime());
|
shelfRankDao.save(shelfRank);
|
}
|
|
|
LOGGER.debug("> End saveForEditShelfRank");
|
return rawPackage;
|
}
|
|
//根据料架号查询料架
|
public void SaveShelfRankByPieces(int pieces,String shelfRankNumber){
|
ShelfRank shelfRank = shelfRankDao.findShelfRankByNumber(shelfRankNumber);
|
if(shelfRank.getRawPackage()!=null){
|
shelfRank.getRawPackage().setLeftPieces(pieces);
|
shelfRankDao.save(shelfRank);
|
}
|
}
|
|
//根据料架号保存料架
|
public void SaveShelfRankByNumber(RawPackage rawPackage,String shelfRankNumber){
|
|
String color = rawPackage.getColor();
|
rawPackage.setColor(color);
|
|
if(glassNumberColorDao.findGlassNumberColorByGlassId(color)!=null){
|
rawPackage.setComment(GlassColor.SPECIAL_FLAG);
|
|
}else{
|
rawPackage.setComment(GlassColor.GENERAL_FLAG);
|
}
|
// rawPackage.setLeftPieces(rawPackage.getPieces());
|
rawPackage.setState(ShelfRankState.ON_WAITING);
|
rawPackage.setCreateTime(new Date());
|
|
rawPackage = rawPackageDao.save(rawPackage);
|
|
ShelfRank shelfRank = shelfRankDao.findShelfRankByNumber(shelfRankNumber);
|
shelfRank.setState(ShelfRankState.ON_WAITING);
|
shelfRank.setRawPackage(rawPackage);
|
shelfRank.setColor(rawPackage.getColor());
|
shelfRank.setGlassId(rawPackage.getGlassId());
|
shelfRank.setLength(rawPackage.getHeight());
|
shelfRank.setPieces(rawPackage.getPieces());
|
shelfRank.setThickness(rawPackage.getThickness());
|
shelfRank.setWidth(rawPackage.getWidth());
|
shelfRank.setCreateTime(rawPackage.getCreateTime());
|
shelfRankDao.save(shelfRank);
|
|
//创建三个吊装任务
|
ShelfTask displayInfo = new ShelfTask(ShelfTaskState.WAITING, ShelfTaskType.DISPLAY_INFO, new Date(), ShelfTaskFlag.SHELF_FLAG,shelfHoistDao.findAll().get(0), shelfRank);
|
ShelfTask fromEmptyRankToHoist = new ShelfTask(ShelfTaskState.WAITING, ShelfTaskType.FROM_EMPTY_RANK_TO_HOIST, new Date(), ShelfTaskFlag.SHELF_FLAG,shelfHoistDao.findAll().get(0), shelfRank);
|
ShelfTask fromHoistToRank = new ShelfTask(ShelfTaskState.WAITING, ShelfTaskType.FROM_HOIST_TO_RANK, new Date(), ShelfTaskFlag.SHELF_FLAG,shelfHoistDao.findAll().get(0), shelfRank);
|
|
shelfTaskDao.save(displayInfo);
|
shelfTaskDao.save(fromEmptyRankToHoist);
|
shelfTaskDao.save(fromHoistToRank);
|
|
}
|
|
public RawPackage saveForEditShelfHoist(RawPackage rawPackage, Long shelfHoistId) {
|
LOGGER.debug("> Start saveForEditShelfHoist");
|
|
String color = rawPackage.getColor();
|
rawPackage.setColor(GlassColor.getCodeByColor(color));
|
|
rawPackage.setLeftPieces(rawPackage.getPieces());
|
rawPackage = rawPackageDao.save(rawPackage);
|
|
if (shelfHoistId != null) {
|
ShelfHoist shelfHoist = shelfHoistDao.findOne(shelfHoistId);
|
shelfHoist.setState(ShelfHoistState.IN_WORK);
|
shelfHoist.setRawPackage(rawPackage);
|
shelfHoistDao.save(shelfHoist);
|
}
|
|
|
LOGGER.debug("> End saveForEditShelfHoist");
|
return rawPackage;
|
}
|
|
public boolean isRawPackageEqualToOptPattern(RawPackage rawPackage, OptPattern optPattern) {
|
return (rawPackage.getWidth() == optPattern.getWidth())
|
&& (rawPackage.getHeight() == optPattern.getHeight())
|
&& (rawPackage.getThickness() == optPattern.getGlassThickness());
|
}
|
|
public RawPackage saveAndCreateTask(RawPackage rawPackage, Long shelfHoistId, String shelfRankNumber) {
|
LOGGER.debug("> Start saveAndCreateTask");
|
LOGGER.debug("shelfHoistId: " + shelfHoistId);
|
LOGGER.debug("shelfRankNumber: " + shelfRankNumber);
|
|
String color = rawPackage.getColor();
|
rawPackage.setColor(color);
|
|
rawPackage.setLeftPieces(rawPackage.getPieces());
|
rawPackage = rawPackageDao.save(rawPackage);
|
|
if (shelfHoistId != null && shelfRankNumber != null) {
|
ShelfHoist shelfHoist = shelfHoistDao.findOne(shelfHoistId);
|
shelfHoist.setState(ShelfHoistState.IN_WORK);
|
shelfHoist.setRawPackage(rawPackage);
|
shelfHoistDao.save(shelfHoist);
|
|
ShelfRank shelfRank = shelfRankDao.findShelfRankByNumber(shelfRankNumber);
|
shelfRank.setState(ShelfRankState.IN_WORK);
|
shelfRank.setRawPackage(rawPackage);
|
shelfRank.setColor(rawPackage.getColor());
|
shelfRank.setGlassId(rawPackage.getGlassId());
|
shelfRank.setLength(rawPackage.getHeight());
|
shelfRank.setPieces(rawPackage.getPieces());
|
shelfRank.setThickness(rawPackage.getThickness());
|
shelfRank.setWidth(rawPackage.getWidth());
|
shelfRank.setCreateTime(rawPackage.getCreateTime());
|
shelfRankDao.save(shelfRank);
|
|
ShelfTask displayInfo = new ShelfTask(ShelfTaskState.WAITING, ShelfTaskType.DISPLAY_INFO, new Date(), "0",shelfHoist, shelfRank);
|
ShelfTask fromEmptyRankToHoist = new ShelfTask(ShelfTaskState.WAITING, ShelfTaskType.FROM_EMPTY_RANK_TO_HOIST, new Date(),"0", shelfHoist, shelfRank);
|
ShelfTask fromHoistToRank = new ShelfTask(ShelfTaskState.WAITING, ShelfTaskType.FROM_HOIST_TO_RANK, new Date(),"0", shelfHoist, shelfRank);
|
|
shelfTaskDao.save(displayInfo);
|
shelfTaskDao.save(fromEmptyRankToHoist);
|
shelfTaskDao.save(fromHoistToRank);
|
|
List<LoadMachineRack> loadMachineRackList = loadMachineRackDao.findAll();
|
for (LoadMachineRack loadMachineRack : loadMachineRackList) {
|
|
LoadMachineTask currentTask = loadMachineTaskDao.findInWorkTaskByLoadMachineRack(loadMachineRack.getId());
|
LOGGER.debug("currentTask: " + (currentTask == null ? null : currentTask.getId()));
|
|
if (currentTask == null) {
|
// 获取第一个任务
|
List<LoadMachineTask> waitingLoadMachineTaskList = loadMachineTaskDao.findWaitingTasksByLoadMachineRack(loadMachineRack.getId());
|
LOGGER.debug("waitingLoadMachineTaskList: " + waitingLoadMachineTaskList.size());
|
|
if (waitingLoadMachineTaskList.size() == 0) {
|
continue;
|
}
|
|
currentTask = waitingLoadMachineTaskList.get(0);
|
}
|
|
|
OptPattern optPattern = currentTask.getOptPattern();
|
LOGGER.debug("optPattern: " + optPattern.getDescription());
|
|
// 1. 上片位上没有原片
|
// 2. 上片位上需要原片
|
// 3. 原片尺寸与OptPattern尺寸一致,且料架没有被分配任务,
|
// 仅当以上三个条件都满足时,创建运送到上片位的任务
|
if (loadMachineRack.getRawPackage() == null && !loadMachineRack.isRawPackageReady()
|
&& isRawPackageEqualToOptPattern(rawPackage, optPattern) && shelfRank.getState() == RackState.IN_WORK) {
|
ShelfTask fromShelfRackToLoadMachineRack = new ShelfTask(
|
ShelfTaskState.WAITING, ShelfTaskType.FROM_SHELF_RACK_TO_LOAD_MACHINE_RACK,
|
new Date(), "1",shelfRank, loadMachineRack);
|
shelfTaskDao.save(fromShelfRackToLoadMachineRack);
|
shelfRank.setState(RackState.ON_WAITING);
|
shelfRankDao.save(shelfRank);
|
LOGGER.debug("创建从仓储料架【" + shelfRank.getNumber() + "】到上片位【" + loadMachineRack.getNumber() + "】任务");
|
continue;
|
}
|
|
// 1. 上片位上有原片
|
// 2. 上片位上需要原片
|
// 3. 上片位上的原片尺寸与OptPattern尺寸不一致
|
// 4. 仓库中原片的尺寸与OptPattern尺寸一致
|
// 仅当以上四个条件都满足时,先创建从上片位下片任务,在创建运送到上片位的任务
|
RawPackage oldRawPackage = loadMachineRack.getRawPackage();
|
LOGGER.debug("oldRawPackage: " + (oldRawPackage == null ? null : oldRawPackage.getDescription()));
|
|
if (loadMachineRack.getRawPackage() != null && !loadMachineRack.isRawPackageReady()
|
&& !isRawPackageEqualToOptPattern(oldRawPackage, optPattern) && isRawPackageEqualToOptPattern(rawPackage, optPattern)
|
&& shelfRank.getState() == RackState.IN_WORK) {
|
ShelfTask fromLoadMachineRackToShelfRack = new ShelfTask(
|
ShelfTaskState.WAITING, ShelfTaskType.FROM_LOAD_MACHINE_RACK_TO_SHELF_RACK,
|
new Date(),"1", oldRawPackage.getShelfRank(), loadMachineRack);
|
ShelfTask fromShelfRackToLoadMachineRack = new ShelfTask(
|
ShelfTaskState.WAITING, ShelfTaskType.FROM_SHELF_RACK_TO_LOAD_MACHINE_RACK,
|
new Date(), "1",shelfRank, loadMachineRack);
|
shelfTaskDao.save(fromLoadMachineRackToShelfRack);
|
shelfTaskDao.save(fromShelfRackToLoadMachineRack);
|
|
LOGGER.debug("创建从上片位【" + loadMachineRack.getNumber() + "】到仓储料架【" + shelfRank.getNumber() + "】任务");
|
LOGGER.debug("创建从仓储料架【" + shelfRank.getNumber() + "】到上片位【" + loadMachineRack.getNumber() + "】任务");
|
continue;
|
}
|
}
|
}
|
|
LOGGER.debug("> End saveAndCreateTask");
|
return rawPackage;
|
}
|
}
|