package com.mes.rawglassdetails.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.kangaroohy.milo.model.ReadWriteEntity;
|
import com.kangaroohy.milo.service.MiloService;
|
import com.mes.common.config.Const;
|
import com.mes.rawglassdetails.entity.RawGlassStorageDetails;
|
import com.mes.rawglassdetails.entity.request.RawGlassRequest;
|
import com.mes.rawglassdetails.mapper.RawGlassStorageDetailsMapper;
|
import com.mes.rawglassdetails.service.RawGlassStorageDetailsService;
|
import com.mes.rawglasstask.entity.RawGlassStorageTask;
|
import com.mes.rawglasstask.service.RawGlassStorageTaskService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* @author system
|
* @since 2024-07-09 14:51:27
|
*/
|
@Service
|
@Slf4j
|
public class RawGlassStorageDetailsServiceImpl extends ServiceImpl<RawGlassStorageDetailsMapper, RawGlassStorageDetails> implements RawGlassStorageDetailsService {
|
|
@Autowired
|
RawGlassStorageTaskService rawGlassStorageTaskService;
|
|
@Autowired(required = false)
|
MiloService miloService;
|
|
@Override
|
public boolean deleteRawGlassStorageDetails(String device_id) {
|
QueryWrapper<RawGlassStorageDetails> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("device_id", device_id);
|
return remove(queryWrapper);//remove才是删除,delete得用另外的依赖,默认方法是remove返回bool
|
}
|
|
@Override
|
//返回类型 方法名 传输值
|
public List<RawGlassStorageDetails> selectDetails() {
|
// QueryWrapper<RawGlassStorageDetails>queryWrapper=new QueryWrapper<>();
|
// queryWrapper.eq("id",rs.getId());
|
// return list(queryWrapper);
|
return list();
|
}
|
|
|
@Override
|
public String warehousingRequest(int leftingStation) {
|
RawGlassStorageDetails storageDetails = getOne(new LambdaQueryWrapper<RawGlassStorageDetails>()
|
.in(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN_ALL));
|
if (null != storageDetails) {
|
log.info("当前吊装位有架子,结束本地入库请求");
|
return "fail";
|
}
|
List<Integer> shelfList = listBySlotState(Const.RAW_GLASS_DEVICE, Const.RAW_GLASS_STATE_IN_ALL);
|
if (CollectionUtils.isEmpty(shelfList)) {
|
log.info("当前工位不存在可用的空架子");
|
return "fail";
|
}
|
Integer shelf = shelfList.get(0);
|
log.info("生成任务");
|
try {
|
generateTask(shelf, leftingStation, shelf, 0, Const.RAW_GLASS_TASK_TYPE_IN_REQUEST);
|
} catch (Exception e) {
|
return "fail";
|
}
|
//生成一条详情数据 仅记录架子状态
|
RawGlassStorageDetails details = new RawGlassStorageDetails();
|
details.setSlot(shelf);
|
details.setShelf(shelf);
|
details.setState(Const.RAW_GLASS_STATE_RUNNING);
|
save(details);
|
return "success";
|
}
|
|
@Override
|
public String patternWarehousing(RawGlassRequest request) {
|
RawGlassStorageDetails glassStorageDetails = getOne(new LambdaQueryWrapper<RawGlassStorageDetails>()
|
.eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
|
.eq(RawGlassStorageDetails::getSlot, request.getSlot()));
|
if (null == glassStorageDetails) {
|
log.info("当前吊装位没有架子");
|
}
|
//原片信息存入详情表
|
BeanUtils.copyProperties(request, glassStorageDetails);
|
log.info("覆盖后得到的工位详情信息为:{}", glassStorageDetails);
|
updateById(glassStorageDetails);
|
return "success";
|
}
|
|
@Override
|
public String UpdateQuantity(RawGlassRequest request) {
|
update(
|
new LambdaUpdateWrapper<RawGlassStorageDetails>()
|
.set(RawGlassStorageDetails::getRemainQuantity, request.getRemainQuantity())
|
.eq(RawGlassStorageDetails::getSlot, request.getSlot())
|
.eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN));
|
return "success";
|
}
|
|
@Override
|
public String deleteWarehousing(Long slotId) {
|
update(new LambdaUpdateWrapper<RawGlassStorageDetails>().eq(RawGlassStorageDetails::getSlot, slotId)
|
.eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_OUT)
|
.set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN));
|
return "success";
|
}
|
|
@Override
|
public String outWarehousing(Long slotId) {
|
update(new LambdaUpdateWrapper<RawGlassStorageDetails>().eq(RawGlassStorageDetails::getSlot, slotId)
|
.eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
|
.set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_WAIT_OUT));
|
//生成一条详情数据 仅记录架子状态
|
return "success";
|
}
|
|
@Override
|
public List<Integer> listBySlotState(List<Integer> liftingStation, List<Integer> state) {
|
return baseMapper.listBySlotState(liftingStation, state);
|
}
|
|
|
@Override
|
public String outWarehousingRequest(int leftingStation) {
|
//对应工位是否有空架子
|
RawGlassStorageDetails details = getOne(new LambdaQueryWrapper<RawGlassStorageDetails>().eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_IN)
|
.eq(RawGlassStorageDetails::getSlot, leftingStation));
|
if (null == details) {
|
log.info("无空架子,结束本地出片请求");
|
return "fail";
|
}
|
//生成一条详情数据 仅记录架子状态
|
update(new LambdaUpdateWrapper<RawGlassStorageDetails>()
|
.eq(RawGlassStorageDetails::getSlot, details.getSlot())
|
.eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_IN)
|
.set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING));
|
try {
|
generateTask(leftingStation, details.getShelf(), details.getShelf(), details.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_OUT_REQUEST);
|
} catch (Exception e) {
|
return "fail";
|
}
|
return "success";
|
}
|
|
/**
|
* 生成原片仓储任务
|
*
|
* @param startSlot
|
* @param endSlot
|
* @param patternQuantity
|
* @param taskType
|
* @return
|
*/
|
@Override
|
public boolean generateTask(int startSlot, int endSlot, int shelf, int patternQuantity, int taskType) throws Exception {
|
RawGlassStorageTask task = RawGlassStorageTask.builder()
|
.startSlot(startSlot)
|
.endSlot(endSlot)
|
.patternQuantity(patternQuantity)
|
.taskType(taskType)
|
.taskState(Const.RAW_GLASS_TASK_NEW)
|
.shelf(shelf)
|
.createTime(new Date()).build();
|
rawGlassStorageTaskService.save(task);
|
|
|
List<ReadWriteEntity> list = new ArrayList<>();
|
list.add(generateReadWriteEntity("A01-CC.dev.taskWord", 1));
|
list.add(generateReadWriteEntity("A01-CC.dev.taskSending", 1));
|
list.add(generateReadWriteEntity("A01-CC.dev.startSlot", startSlot));
|
list.add(generateReadWriteEntity("A01-CC.dev.endSlot", endSlot));
|
miloService.writeToOpcWord(list);
|
return Boolean.TRUE;
|
}
|
|
private ReadWriteEntity generateReadWriteEntity(String identifier, int value) {
|
ReadWriteEntity readWriteEntity = new ReadWriteEntity();
|
readWriteEntity.setIdentifier(identifier);
|
readWriteEntity.setValue(value);
|
return readWriteEntity;
|
}
|
}
|