wu
2024-09-09 5c1c365628826eba34b6a9d84b8691454484ad92
Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes
10个文件已修改
14个文件已添加
928 ■■■■ 已修改文件
UI-Project/config.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/utils/constants.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/AsyncTaskExecutorConfig.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/entity/SysDictData.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/entity/SysDictType.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/mapper/SysDictDataMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/mapper/SysDictTypeMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/SysDictDataService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/SysDictTypeService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/impl/SysDictDataServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/impl/SysDictTypeServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java 160 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java 108 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/BarcodeReadThread.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/config.js
@@ -1,10 +1,10 @@
export default {
 serverUrl: "10.153.19.150:88/api",
//  serverUrl: "10.153.19.150:88/api",
//  serverUrl: "192.168.1.199:88/api",
//  serverUrl: "127.0.0.1:88/api",
  serverUrl2: "10.153.19.150:88"
 serverUrl: "127.0.0.1:88/api",
  // serverUrl2: "10.153.19.150:88"
  // serverUrl2: "192.168.1.199:88"
    // serverUrl2: "127.0.0.1:88"
    serverUrl2: "127.0.0.1:88"
  //serverUrl:"res.abeim.cn"
}
UI-Project/src/utils/constants.js
@@ -1,4 +1,4 @@
//  export const WebSocketHost = "192.168.1.199";
export const WebSocketHost = "10.153.19.150";
// export const WebSocketHost = "127.0.0.1";
// export const WebSocketHost = "10.153.19.150";
export const WebSocketHost = "127.0.0.1";
export const host = "88";
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/AsyncTaskExecutorConfig.java
New file
@@ -0,0 +1,51 @@
package com.mes.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ThreadPoolExecutor;
/**
 * <p> @Title AsyncTaskExecutorConfig
 * <p> @Description 异步线程池配置
 *
 * @author ACGkaka
 * @date 2023/4/24 19:48
 */
@EnableAsync
@Configuration
public class AsyncTaskExecutorConfig {
    /**
     * 核心线程数(线程池维护线程的最小数量)
     */
    private int corePoolSize = 10;
    /**
     * 最大线程数(线程池维护线程的最大数量)
     */
    private int maxPoolSize = 200;
    /**
     * 队列最大长度
     */
    private int queueCapacity = 10;
    @Bean
    public TaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(corePoolSize);
        executor.setMaxPoolSize(maxPoolSize);
        executor.setQueueCapacity(queueCapacity);
        executor.setThreadNamePrefix("MyExecutor-");
        // for passing in request scope context 转换请求范围的上下文
//        executor.setTaskDecorator(new ContextCopyingDecorator());
        // rejection-policy:当pool已经达到max size的时候,如何处理新任务
        // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.setWaitForTasksToCompleteOnShutdown(true);
        executor.initialize();
        return executor;
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/entity/SysDictData.java
New file
@@ -0,0 +1,48 @@
package com.mes.sysdict.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 *
 * </p>
 *
 * @author wu
 * @since 2024-09-05
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class SysDictData implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "dict_id", type = IdType.AUTO)
    private Long dictId;
    private Integer dictSort;
    private String dictLabel;
    private String dictValue;
    private String dictType;
    private String dictTypeValue;
    private String state;
    private String description;
    private Date createTime;
    @TableLogic
    private String deleted;
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/entity/SysDictType.java
New file
@@ -0,0 +1,43 @@
package com.mes.sysdict.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 *
 * </p>
 *
 * @author wu
 * @since 2024-09-05
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class SysDictType implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "dict_id", type = IdType.AUTO)
    private Long dictId;
    private String dictName;
    private String dictType;
    private String state;
    private String description;
    private LocalDateTime createTime;
    @TableLogic
    private String deleted;
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/mapper/SysDictDataMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.sysdict.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.sysdict.entity.SysDictData;
/**
 * <p>
 * Mapper 接口
 * </p>
 *
 * @author wu
 * @since 2024-09-05
 */
public interface SysDictDataMapper extends BaseMapper<SysDictData> {
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/mapper/SysDictTypeMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.sysdict.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.sysdict.entity.SysDictType;
/**
 * <p>
 * Mapper 接口
 * </p>
 *
 * @author wu
 * @since 2024-09-05
 */
public interface SysDictTypeMapper extends BaseMapper<SysDictType> {
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/SysDictDataService.java
New file
@@ -0,0 +1,16 @@
package com.mes.sysdict.service;
import com.github.yulichang.base.MPJBaseService;
import com.mes.sysdict.entity.SysDictData;
/**
 * <p>
 * 服务类
 * </p>
 *
 * @author wu
 * @since 2024-09-05
 */
public interface SysDictDataService extends MPJBaseService<SysDictData> {
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/SysDictTypeService.java
New file
@@ -0,0 +1,16 @@
package com.mes.sysdict.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.sysdict.entity.SysDictType;
/**
 * <p>
 * 服务类
 * </p>
 *
 * @author wu
 * @since 2024-09-05
 */
public interface SysDictTypeService extends IService<SysDictType> {
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/impl/SysDictDataServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.sysdict.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.sysdict.entity.SysDictData;
import com.mes.sysdict.mapper.SysDictDataMapper;
import com.mes.sysdict.service.SysDictDataService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author wu
 * @since 2024-09-05
 */
@Service
public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDictData> implements SysDictDataService {
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/sysdict/service/impl/SysDictTypeServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.sysdict.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.sysdict.entity.SysDictType;
import com.mes.sysdict.mapper.SysDictTypeMapper;
import com.mes.sysdict.service.SysDictTypeService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author wu
 * @since 2024-09-05
 */
@Service
public class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeMapper, SysDictType> implements SysDictTypeService {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java
New file
@@ -0,0 +1,104 @@
package com.mes.bigstorage.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.mes.base.entity.BigStorageCageBaseInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Api(description = "大理片笼详情")
@Data
@EqualsAndHashCode(callSuper = false)
public class BigStorageCageDetails extends BigStorageCageBaseInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 大理片笼详情表id
     */
    @ApiModelProperty(value = "大理片笼详情表id", position = 2)
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 设备id
     */
    @ApiModelProperty(value = "设备id", position = 3)
    private Integer deviceId;
    /**
     * 小片在格内的顺序
     */
    @ApiModelProperty(value = "小片在格内的顺序", position = 6)
    private Integer sequence;
    /**
     * 流程卡号
     */
    @ApiModelProperty(value = "流程卡号", position = 7)
    private String flowCardId;
    /**
     * 玻璃类型
     */
    @ApiModelProperty(value = "玻璃类型", position = 8)
    private Integer glassType;
    /**
     * 厚度
     */
    @ApiModelProperty(value = "厚度", position = 11)
    private double thickness;
    /**
     * 钢化版图id
     */
    @ApiModelProperty(value = "钢化版图id", position = 12)
    private Integer temperingLayoutId;
    /**
     * 钢化版图片序
     */
    @ApiModelProperty(value = "钢化版图片序", position = 13)
    private Integer temperingFeedSequence;
    /**
     * 状态
     */
    @ApiModelProperty(value = "状态", position = 14)
    private Integer state;
    /**
     * 玻璃间隙
     */
    @ApiModelProperty(value = "玻璃间隙", position = 15)
    private Integer gap;
    /**
     * 工程号
     */
    @ApiModelProperty(value = "工程号", position = 16)
    private String engineerId;
    /**
     * 工程号
     */
    @ApiModelProperty(value = "层", position = 17)
    private int layer;
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
New file
@@ -0,0 +1,21 @@
package com.mes.bigstorage.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface BigStorageCageDetailsMapper extends MPJBaseMapper<BigStorageCageDetails> {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
New file
@@ -0,0 +1,21 @@
package com.mes.bigstorage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.glassinfo.entity.GlassInfo;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * 服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
public interface BigStorageCageDetailsService extends IService<BigStorageCageDetails> {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
New file
@@ -0,0 +1,25 @@
package com.mes.bigstorage.service.impl;
import com.github.yulichang.base.MPJBaseServiceImpl;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper;
import com.mes.bigstorage.service.BigStorageCageDetailsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Slf4j
@Service
public class BigStorageCageDetailsServiceImpl extends MPJBaseServiceImpl<BigStorageCageDetailsMapper, BigStorageCageDetails> implements BigStorageCageDetailsService {
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java
@@ -17,6 +17,8 @@
 */
public interface EdgStorageCageDetailsService extends MPJBaseService<EdgStorageCageDetails> {
//    boolean identWorn(Map<String, Object> arguments);
    /**
     * 获取 切割当前版图
     * @return
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
@@ -8,8 +8,11 @@
import com.github.yulichang.query.MPJLambdaQueryWrapper;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.mes.bigstorage.entity.BigStorageCageDetails;
import com.mes.bigstorage.service.BigStorageCageDetailsService;
import com.mes.common.config.Const;
import com.mes.damage.entity.Damage;
import com.mes.damage.mapper.DamageMapper;
import com.mes.damage.service.DamageService;
import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
import com.mes.edgglasstask.entity.request.IdentWornRequest;
@@ -19,6 +22,8 @@
import com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper;
import com.mes.edgstoragecage.mapper.EdgStorageCageMapper;
import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
import com.mes.engineering.entity.Engineering;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.mapper.GlassInfoMapper;
import com.mes.pp.entity.OptimizeDetail;
import com.mes.pp.entity.OptimizeLayout;
@@ -65,11 +70,51 @@
    TaskCacheService taskCacheService;
    @Autowired
    DamageMapper damageMapper;
    @Autowired
    DamageService damageService;
    @Autowired
    EdgGlassTaskInfoService edgGlassTaskInfoService;
    @Autowired
    BigStorageCageDetailsService bigStorageCageDetailsService;
//
//    @Override
//    public boolean identWorn(Map<String, Object> arguments) {
//        String glassId=arguments.get("glassId").toString();
//        int state=arguments.get("state").toString().isEmpty()?0:Integer.parseInt(arguments.get("state").toString());
//        int line=arguments.get("line").toString().isEmpty()?0:Integer.parseInt(arguments.get("line").toString());
//        String workingProcedure=arguments.get("workingProcedure").toString();
//        if(state==0||line==0||workingProcedure==null||glassId==null||glassId.isEmpty()){
//            log.info("前端传递数据不全:{}",arguments);
//            return false;
//        }
//        List<GlassInfo> GlassInfos = glassInfoMapper.selectList(new MPJLambdaQueryWrapper<GlassInfo>()
//                .selectAll(GlassInfo.class)
//                .eq(GlassInfo::getGlassId, glassId));
//        if (GlassInfos.size() == 1) {
//            Damage damage =new Damage();
//            damage.setGlassId(glassId);
//            damage.setLine(line);
//            damage.setWorkingProcedure(workingProcedure);
//            damage.setRemark("");
//            damage.setStatus(state);//8破损,9拿走
//            damageService.insertDamage(damage);
//        }else{
//            return false;
//        }
//        List<EdgStorageCageDetails> edgStorageCageDetails = baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
//                .selectAll(EdgStorageCageDetails.class)
//                .eq(EdgStorageCageDetails::getGlassId, glassId));
//        if (edgStorageCageDetails.size() == 1) {
//            EdgStorageCageDetails item = edgStorageCageDetails.get(0);
//            item.setState(state);
//            baseMapper.update(item, new MPJLambdaWrapper<EdgStorageCageDetails>().selectAll(EdgStorageCageDetails.class).eq(EdgStorageCageDetails::getGlassId, glassId));
//        }
//        return true;
//    }
    /**
     * 获取 切割当前版图
     *
@@ -77,13 +122,17 @@
     */
    @Override
    public List<Map<String, Object>> selectCutTerritory() {
        List<UpPattenUsage> upPattenUsage = upPattenUsageMapper.selectList(new MPJLambdaWrapper<UpPattenUsage>()
        List<UpPattenUsage> upPattenUsage=upPattenUsageMapper.selectJoinList(UpPattenUsage.class, new MPJLambdaWrapper<UpPattenUsage>()
                .selectAll(UpPattenUsage.class)
                .innerJoin(Engineering.class, on -> on
                        .eq(Engineering::getEngineerId, UpPattenUsage::getEngineeringId))
                .eq(Engineering::getState,1)
                .orderByDesc(UpPattenUsage::getState)
                .orderByDesc(UpPattenUsage::getId));
                .orderByDesc(UpPattenUsage::getId)
        );
        if (!upPattenUsage.isEmpty()) {
            UpPattenUsage upPattenUsage1 = upPattenUsage.get(0);
            List<Map<String, Object>> cutTerritorys = optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
            List<Map<String, Object>> cutTerritorys=optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
                    .selectAll(OptimizeDetail.class)
                    .selectAs(OptimizeLayout::getWidth, "olWidth")
                    .selectAs(OptimizeLayout::getHeight, "olHeight")
@@ -93,29 +142,34 @@
                    .eq(OptimizeDetail::getProjectNo, upPattenUsage1.getEngineeringId())
                    .eq(OptimizeDetail::getStockId, upPattenUsage1.getLayoutSequence())
            );
            List<Map<String, Object>> ResultcutTerritorys = new ArrayList<>();
            for (Map<String, Object> cutTerritory : cutTerritorys) {
                EdgStorageCageDetails edgStorageCageDetails = baseMapper.selectOne(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
                        .selectAll(EdgStorageCageDetails.class)
                        .eq(EdgStorageCageDetails::getGlassId, cutTerritory.get("glass_id"))
                        .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN));
//                log.info("内容:{}-------{}",cutTerritory,edgStorageCageDetails);
                if (edgStorageCageDetails != null) {
                    cutTerritory.put("glass_state", edgStorageCageDetails.getState());
                } else {
                    cutTerritory.put("glass_state", 0);
                }
                ResultcutTerritorys.add(cutTerritory);
            }
            return ResultcutTerritorys;
            Map<String, EdgStorageCageDetails> edgMaps=baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
                    .selectAll(EdgStorageCageDetails.class)
                    .eq(EdgStorageCageDetails::getEngineerId,upPattenUsage1.getEngineeringId())
                    .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
            ).stream().collect(Collectors.toMap(EdgStorageCageDetails::getGlassId,EdgStorageCageDetails->EdgStorageCageDetails));
//            Sql版本
//            return optimizeDetailMapper.selectJoinMaps(new MPJQueryWrapper<OptimizeDetail>().selectAll(OptimizeDetail.class)
//                    .select("ol.width as olwidth","ol.height as olheight")
//                    .leftJoin("optimize_layout ol on t.project_no=ol.project_no and t.stock_id=ol.stock_id")
//                    .eq("t.project_no", upPattenUsage1.getEngineeringId())
//                    .eq("t.stock_id",upPattenUsage1.getLayoutSequence())
//            );
            Map<String, Damage> damageMaps=damageMapper.selectList(new MPJLambdaQueryWrapper<Damage>()
                    .selectAll(Damage.class)
                    .eq(Damage::getEngineerId,upPattenUsage1.getEngineeringId())
            ).stream().collect(Collectors.toMap(Damage::getGlassId,Damage->Damage,(V1,V2)->V2));
            List<Map<String, Object>> resultCutTerritory=new ArrayList<>();
            for (Map<String, Object> cutTerritory : cutTerritorys) {
//                log.info("内容:{}-------{}",cutTerritory,edgStorageCageDetails);
                if(cutTerritory.get("glass_id")==null||"".equals(cutTerritory.get("glass_id"))){
                    log.info("优化数据中glassId存在空值-----内容:{}",cutTerritorys);
                    return new ArrayList<>();
                }else if(edgMaps.get(cutTerritory.get("glass_id"))!=null){
                    cutTerritory.put("glass_state",edgMaps.get(cutTerritory.get("glass_id")).getState());
                }else if(damageMaps.get(cutTerritory.get("glass_id"))!=null){
                    //log.info("玻璃已破损/拿走-----内容:{}",damageMaps.get(item.get("glass_id")));
                    cutTerritory.put("glass_state",damageMaps.get(cutTerritory.get("glass_id")).getStatus());
                }else{
                    cutTerritory.put("glass_state",0);
                }
                resultCutTerritory.add(cutTerritory);
            }
            return resultCutTerritory;
        }
        return null;
    }
@@ -128,10 +182,17 @@
     */
    @Override
    public List<List<Map<String, Object>>> selectCurrentCutTerritory(String current) {
        //大理片笼进过的玻璃
        Map<String, BigStorageCageDetails> mapBigCage=bigStorageCageDetailsService.list(
                new LambdaQueryWrapper<BigStorageCageDetails>()
                        .eq(BigStorageCageDetails::getEngineerId,current)
                        .gt(BigStorageCageDetails::getState,Const.GLASS_STATE_NEW)
        ).stream().collect(Collectors.toMap(BigStorageCageDetails::getGlassId,BigStorageCageDetails->BigStorageCageDetails,(V1,V2)->V2));;
        //结果
        List<Map<String, Object>> ResultcutTerritorys = new ArrayList<>();
        List<Map<String, Object>> resultCutTerritory=new ArrayList<>();
        //此工程的所有优化数据
        List<Map<String, Object>> cutTerritorys = optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
        List<Map<String, Object>> cutTerritory=optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
                .selectAll(OptimizeDetail.class)
                .selectAs(OptimizeLayout::getWidth, "olWidth")
                .selectAs(OptimizeLayout::getHeight, "olHeight")
@@ -141,32 +202,39 @@
                .eq(OptimizeDetail::getProjectNo, current)
        );
        Map<String, EdgStorageCageDetails> edgMaps = baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
        Map<String, EdgStorageCageDetails> edgMaps=baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
                .selectAll(EdgStorageCageDetails.class)
                .eq(EdgStorageCageDetails::getEngineerId, current)
                .eq(EdgStorageCageDetails::getEngineerId,current)
                .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
        ).stream().collect(Collectors.toMap(EdgStorageCageDetails::getGlassId, EdgStorageCageDetails -> EdgStorageCageDetails));
        for (Map<String, Object> cutTerritory : cutTerritorys) {
//                log.info("内容:{}-------{}",cutTerritory,edgStorageCageDetails);
            if (cutTerritory.get("glass_id") == null || "".equals(cutTerritory.get("glass_id"))) {
                log.info("优化数据中glassId存在空值-----内容:{}", cutTerritorys);
        ).stream().collect(Collectors.toMap(EdgStorageCageDetails::getGlassId,EdgStorageCageDetails->EdgStorageCageDetails,(V1,V2)->V2));
        Map<String, Damage> damageMaps=damageMapper.selectList(new MPJLambdaQueryWrapper<Damage>()
                .selectAll(Damage.class)
                .eq(Damage::getEngineerId,current)
        ).stream().collect(Collectors.toMap(Damage::getGlassId,Damage->Damage,(V1,V2)->V2));
        for (Map<String, Object> item : cutTerritory) {
//          log.info("内容:{}-------{}",cutTerritory,edgStorageCageDetails);
            if(item.get("glass_id")==null||"".equals(item.get("glass_id"))){
                log.info("优化数据中glassId存在空值-----内容:{}",cutTerritory);
                return new ArrayList<>();
            } else if (edgMaps.get(cutTerritory.get("glass_id")) != null) {
                cutTerritory.put("glass_state", edgMaps.get(cutTerritory.get("glass_id")).getState());
            } else {
                cutTerritory.put("glass_state", 0);
            }
            ResultcutTerritorys.add(cutTerritory);
            if(damageMaps.get(item.get("glass_id"))!=null){
                //log.info("玻璃已破损/拿走-----内容:{}",damageMaps.get(item.get("glass_id")));
                item.put("glass_state",damageMaps.get(item.get("glass_id")).getStatus());
            }else if(mapBigCage.get(item.get("glass_id"))!=null){
                //进过大理片笼
                item.put("glass_state",98);
            }else if(edgMaps.get(item.get("glass_id"))!=null){
                item.put("glass_state",edgMaps.get(item.get("glass_id")).getState());
            }else{
                item.put("glass_state",0);
            }
            resultCutTerritory.add(item);
        }
        Map<String, List<Map<String, Object>>> groupBy = ResultcutTerritorys.stream().collect(Collectors.groupingBy(item -> item.get("stock_id").toString()));
        Map<String, List<Map<String, Object>>> groupBy=resultCutTerritory.stream().collect(Collectors.groupingBy(item->item.get("stock_id").toString()));
//        List<List<Map<String, Object>>> Result=groupBy.values().stream().collect(Collectors.toList());
        return new ArrayList<>(groupBy.values());
//Sql版本
//        return optimizeDetailMapper.selectJoinMaps(new MPJQueryWrapper<OptimizeDetail>().selectAll(OptimizeDetail.class)
//                .select("ol.width as olwidth","ol.height as olheight")
//                .leftJoin("optimize_layout ol on t.project_no=ol.project_no and t.stock_id=ol.stock_id")
//                .eq("t.project_no",current)
//        );
    }
    /**
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -726,14 +726,6 @@
    public void CacheGlassTasks() {
        JSONObject jsonObject = new JSONObject();
        List<Map<String, Object>> currentCutTerritorys = edgStorageCageDetailsService.selectCutTerritory();
//        List<Map<String, Object>> currentCutTerritorys=new ArrayList<>();
//        if(engineerId==null||engineerId.isEmpty()){
//            //识别摆片 当前版图数据
//            currentCutTerritorys = edgStorageCageDetailsService.selectCutTerritory();
//        }else{
//            //识别摆片 此engineerId 工程版图数据
//            currentCutTerritorys = edgStorageCageDetailsService.selectCurrentCutTerritory(engineerId);
//        }
        jsonObject.append("currentCutTerritory", currentCutTerritorys);
        //log.info("本次识别版图{},++++{}",engineerId,currentCutTerritorys);
        //磨边信息
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java
@@ -8,15 +8,21 @@
import com.mes.damage.entity.Damage;
import com.mes.damage.service.DamageService;
import com.mes.device.PlcParameterObject;
import com.mes.sysdict.entity.SysDictData;
import com.mes.sysdict.service.SysDictDataService;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.temperingglass.service.TemperingGlassInfoService;
import com.mes.temperingrecord.entity.TemperingRecord;
import com.mes.temperingrecord.service.TemperingRecordService;
import com.mes.tools.S7control;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@@ -31,7 +37,7 @@
public class TemperingTask {
    @Autowired
    private TemperingRecordService temporalRecordService;
    private TemperingRecordService temperingRecordService;
    @Autowired
    private TemperingGlassInfoService temporaryGlassInfoService;
@@ -39,53 +45,105 @@
    @Autowired
    private DamageService damageService;
    @Autowired
    private SysDictDataService sysDictDataService;
    private static final String ALONE_STATE = "0";
    @Value("${mes.width}")
    private Integer temperingWidth;
    @Value("${mes.height}")
    private Integer temperingHeight;
    @Scheduled(fixedDelay = 1000)
    public void temperingGlassBefore() {
        Date startDate = new Date();
        log.info("本次任务开始执行时间:{}", startDate);
        PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
        S7control plcControl = S7object.getinstance().plccontrol;
        String state = plcParameterObject.getPlcParameter("state").getValue();
//        当前连线状态为
        if (ALONE_STATE.equals(state)) {
            log.info("当前钢化炉连线模式为:{},不执行该任务", state);
            log.info("当前钢化炉连线模式为:{},(0:手动;1:连线),不执行该任务", state);
            return;
        }
        //将确认字置为0
        S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 0);
        //todo:获取钢化版图中状态为2的(进炉完成的玻璃信息)  且不存在钢化记录表内的
        List<Object> temperRecordIdListObj = temporalRecordService.listObjs(new QueryWrapper<TemperingRecord>().select("distinct tempering_layout_id"));
        List<String> temperRecordIdList = temperRecordIdListObj.stream().map(String::valueOf).collect(Collectors.toList());
        if (CollectionUtils.isEmpty(temperRecordIdList)) {
        plcControl.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 0);
        //可能有几炉玻璃同时在钢,需要获取钢化小片表中的数据信息状态为2(旋转台玻璃已送出未钢化,正在钢化)
        List<TemperingGlassInfo> temperingGlassInfoList = temporaryGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>()
                .eq(TemperingGlassInfo::getState, Const.TEMPERING_START));
        if (CollectionUtils.isEmpty(temperingGlassInfoList)) {
            log.info("当前系统没有需要钢化的玻璃信息");
            return;
        }
        List<TemperingGlassInfo> list = temporaryGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>()
                .eq(TemperingGlassInfo::getState, Const.TEMPERING_START).notIn(TemperingGlassInfo::getTemperingLayoutId, temperRecordIdList));
        if (CollectionUtils.isEmpty(list)) {
            log.info("当前系统没有需要钢化的玻璃信息");
            return;
        }
        List<Integer> temperingLayoutIdList = list.stream().map(TemperingGlassInfo::getTemperingLayoutId).distinct().collect(Collectors.toList());
        if (CollectionUtils.isNotEmpty(temperRecordIdList)) {
            temperingLayoutIdList.removeAll(temperRecordIdList);
        }
        if (CollectionUtils.isEmpty(temperingLayoutIdList)) {
            log.info("当前玻璃有正在钢化的任务");
        }
//        获取钢化下片表状态为2的玻璃信息
        TemperingGlassInfo maxGlassInfo = temperingGlassInfoList.stream().max(Comparator.comparingLong(TemperingGlassInfo::getId)).get();
        //拿到工程id及炉号
//        List<EngineerTemperingDTO> engineerTemperingList = temperingGlassInfoList.stream().map(e -> {
//            EngineerTemperingDTO engineerTemperingDTO = new EngineerTemperingDTO();
//            BeanUtils.copyProperties(e, engineerTemperingDTO);
//            return engineerTemperingDTO;
//        }).distinct().collect(Collectors.toList());
        //将正在钢化的炉号过滤掉,仅获取待钢化的玻璃
//        List<TemperingRecord> temperingRecords = temperingRecordService.list(new LambdaQueryWrapper<TemperingRecord>().and(i -> i.isNull(TemperingRecord::getCoolEnergy).or().eq(TemperingRecord::getCoolEnergy, "")));
//        List<EngineerTemperingDTO> temperingList = new ArrayList<>();
//        if (CollectionUtils.isNotEmpty(temperingRecords)) {
//            temperingList = temperingRecords.stream().map(e -> {
//                EngineerTemperingDTO engineerTemperingDTO = new EngineerTemperingDTO();
//                BeanUtils.copyProperties(e, engineerTemperingDTO);
//                return engineerTemperingDTO;
//            }).collect(Collectors.toList());
//        }
//        engineerTemperingList.removeAll(temperingList);
//        if (CollectionUtils.isEmpty(engineerTemperingList)) {
//            log.info("没有待钢化的任务,结束");
//            return;
//        }
//        if (engineerTemperingList.size() > 1) {
//            log.info("存在多炉待钢化的任务,请检查现场是否有异常数据未处理");
//            return;
//        }
//        EngineerTemperingDTO temperingDTO = engineerTemperingList.get(0);
        //获取待钢化的所有玻璃信息
        List<TemperingGlassInfo> temperingGlassList = temperingGlassInfoList.stream()
                .filter(e -> e.getEngineerId().equals(maxGlassInfo.getEngineerId())
                        && e.getTemperingLayoutId().equals(maxGlassInfo.getTemperingLayoutId()))
                .sorted(Comparator.comparing(TemperingGlassInfo::getTemperingFeedSequence)).collect(Collectors.toList());
        //按照膜系获取玻璃材质
        SysDictData glassTypeSysDictData = sysDictDataService.getOne(new QueryWrapper<SysDictData>()
                .eq(StringUtils.isNotBlank(temperingGlassList.get(0).getFilmsid()), "dict_label", temperingGlassList.get(0).getFilmsid()));
        double sumArea = temperingGlassList.stream().mapToDouble(e -> e.getWidth() * e.getHeight()).sum();
        double maxArea = temperingGlassList.stream().mapToDouble(e -> e.getWidth() * e.getHeight()).max().orElse(0.0);
        double minArea = temperingGlassList.stream().mapToDouble(e -> e.getWidth() * e.getHeight()).min().orElse(0.0);
        double areaDifference = (10000 * (maxArea - minArea) / maxArea);
        double loadingRate = (int) (10000 * sumArea / (temperingHeight * temperingWidth));
        TemperingRecord temperingRecord = new TemperingRecord();
        temperingRecord.setEngineerId(maxGlassInfo.getEngineerId());
        temperingRecord.setTemperingLayoutId(maxGlassInfo.getTemperingLayoutId());
        temperingRecord.setGlassType(Integer.parseInt(glassTypeSysDictData.getDictTypeValue()));
        temperingRecord.setTemperingType(1);//全钢
        temperingRecord.setThickness(temperingGlassList.get(0).getThickness());
        temperingRecord.setAreaDifference(areaDifference);
        temperingRecord.setLoadingRate(loadingRate);
        temperingRecord.setState(Const.GLASS_STATE_NEW);
        //如果出现同一炉重读被处理,主键直接异常处理,不会发给plc钢化信息
        temperingRecordService.save(temperingRecord);
//      向plc发送钢化信息
        plcControl.writeWord(plcParameterObject.getPlcParameter("temperingLayoutId").getAddress(), maxGlassInfo.getTemperingLayoutId());
        plcControl.writeWord(plcParameterObject.getPlcParameter("filmsid").getAddress(), Integer.parseInt(glassTypeSysDictData.getDictTypeValue()));
        plcControl.writeWord(plcParameterObject.getPlcParameter("temperingType").getAddress(), 1);
        plcControl.writeWord(plcParameterObject.getPlcParameter("thickness").getAddress(), (int) (temperingGlassList.get(0).getThickness() * 10));
        plcControl.writeWord(plcParameterObject.getPlcParameter("areaDifference").getAddress(), (int) areaDifference);
        plcControl.writeWord(plcParameterObject.getPlcParameter("loadingRate").getAddress(), (int) loadingRate);
        //完成任务将确认字置为1
        S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 1);
        plcControl.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 1);
        Date endDate = new Date();
        log.info("本次任务结束时间:{},共耗时:{}ms", endDate, endDate.getTime() - startDate.getTime());
    }
    @Scheduled(fixedDelay = 1000)
    public void temperingGlassAfter() {
        //暂不处理
    }
    @Scheduled(fixedDelay = 1000)
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application.yml
@@ -11,4 +11,7 @@
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mes:
  width: 2800
  height: 5000
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/BarcodeReadThread.java
New file
@@ -0,0 +1,82 @@
package com.mes.job;
import com.mes.glassinfo.service.GlassInfoService;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.Socket;
public class BarcodeReadThread extends Thread{
    public BarcodeReadThread(String ip,Integer port,Downpush downpush)
    {
        this.ip=ip;
        this.port=port;
        this.downpush=downpush;
    }
    private Socket socket;
    private String ip;
    private Integer port;
    private Downpush downpush;
    private  BufferedReader in;
    @SneakyThrows
    @Override
    public void run()
    {
        connectCheckin();//初次 循环尝试连接,直到连接成功
        while (this!=null)
        {
            try
            {
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String response = in.readLine();
                if(response!=null)
                {
                    downpush.barcodeCheckin(response);
                }
            }
            catch (Exception exception)
            {
                //异常,重连
                connectCheckin();
            }
            finally {
                if(in!=null)
                {
                    in.close();
                }
            }
            Thread.sleep(100);
        }
    }
    @SneakyThrows
    private void connectCheckin()
    {
        while (this!=null)
        {
            try
            {
                socket=new Socket();
                socket.setSoTimeout(10000);
                socket.connect(new InetSocketAddress(ip,port));
                if(socket.isConnected())
                {
                    return;
                }
            }
            catch (Exception exception)
            {
            }
            Thread.sleep(1000);
        }
    }
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
@@ -30,6 +30,7 @@
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@@ -80,6 +81,7 @@
    @Scheduled(fixedDelay = 300)
    @Async
    public void plcHomeEdgTask() {
        PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
        String requestWord = plcParameterObject.getPlcParameter("requestWord").getValue();
@@ -129,6 +131,7 @@
    }
    @Scheduled(fixedDelay = 300)
    @Async
    public void plcShelfFull() {
        List<DownWorkstation> list = downGlassInfoService.queryWorkStationIsFull();
        if (CollectionUtils.isNotEmpty(list)) {
@@ -139,6 +142,7 @@
    }
    @Scheduled(fixedDelay = 1000)
    @Async
    public void dealDamageTask() {
        Date startDate = new Date();
        log.info("下片破损玻璃清除任务开始执行时间:{}", startDate);
@@ -183,6 +187,7 @@
     * 更新已绑定工位流程卡的破损/拿走的数量信息
     */
    @Scheduled(fixedDelay = 1000)
    @Async
    public void updateWorkStationOtherCount() {
        Date startDate = new Date();
        log.info("下片破更新损玻璃数量任务开始执行时间:{}", startDate);
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java
@@ -22,15 +22,19 @@
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.*;
import java.util.stream.Collectors;
@Slf4j
@@ -47,6 +51,13 @@
    private DownGlassTaskService downGlassTaskService;
    @Autowired
    private GlassInfoService glassInfoService;
    private final ExecutorService scanCodeThreadPool = new ThreadPoolExecutor(
            10, // core pool size
            20, // maximum pool size
            60L, TimeUnit.SECONDS,
            new LinkedBlockingQueue<>()
    );
    private final ExecutorService isRunThreadPool = Executors.newFixedThreadPool(5);
    @Value("${mes.scan.ip}")
    private String scanIp;
@@ -185,52 +196,85 @@
    @Scheduled(fixedDelay = 1000)
    public void isRun() {
        JSONObject jsonObject = new JSONObject();
        //正在进行的任务
        List<DownWorkstation> downWorkstation = downWorkstationService.getoneDownWorkstations(1, 6);
        jsonObject.append("downWorkstation", downWorkstation);
        List<DownGlassTask> downGlassTask = downGlassTaskService.selectOutTaskCache();
        jsonObject.append("downGlassTask", downGlassTask);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("unLoadGlassIsRun");
        if (sendwServer != null) {
            for (WebSocketServer webserver : sendwServer) {
                if (webserver != null) {
                    webserver.sendMessage(jsonObject.toString());
                } else {
                    log.info("unLoadGlassIsRun is closed");
        isRunThreadPool.execute(() -> {
            JSONObject jsonObject = new JSONObject();
            //正在进行的任务
            List<DownWorkstation> downWorkstation = downWorkstationService.getoneDownWorkstations(1, 6);
            jsonObject.append("downWorkstation", downWorkstation);
            List<DownGlassTask> downGlassTask = downGlassTaskService.selectOutTaskCache();
            jsonObject.append("downGlassTask", downGlassTask);
            ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("unLoadGlassIsRun");
            if (sendwServer != null) {
                for (WebSocketServer webserver : sendwServer) {
                    if (webserver != null) {
                        webserver.sendMessage(jsonObject.toString());
                    } else {
                        log.info("unLoadGlassIsRun is closed");
                    }
                }
            }
        });
    }
    @Async
    @Scheduled(fixedDelay = Long.MAX_VALUE)
    public void scanCodeTask() {
        JSONObject jsonObject = new JSONObject();
        log.info("扫描任务已启动");
        while (true) {
            try (Socket socket = new Socket(scanIp, scanPort);
                 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
                // 接收服务器响应
//                socket.setSoTimeout(1000);
                log.info("等待扫码中......");
                    String glassId = in.readLine();
                    log.info("扫描到的玻璃id:{}", glassId);
                    List<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("unloadglass");
                    if (CollectionUtils.isNotEmpty(sendwServer)) {
                        //按照玻璃id获取玻璃信息返回给前端界面,具体需要哪些数据待确认
                        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
                                .eq(GlassInfo::getGlassId, glassId).last("limit 1"));
                        if (null == glassInfo) {
                            log.info("按照玻璃id:{},无法找到玻璃信息", glassId);
                        } else {
                            jsonObject.append("scanGlass",glassInfo);
                            sendwServer.get(0).sendMessage(jsonObject.toString());
                        }
                    }
            } catch (Exception exception) {
                log.info("读取异常,原因为{}", exception.getMessage());
            }
        }
    }
    @Scheduled(fixedDelay = Long.MAX_VALUE)
    public void scanCodeTask() {
    public void scanCodeTaskCopy()
    {
        log.info("扫描任务已启动");
        while (true) {
            new Thread(() -> {
                try (Socket socket = new Socket(scanIp, scanPort);
                     BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
                    // 接收服务器响应
                    String response;
                    log.info("等待扫码中......");
                    while ((response = in.readLine()) != null) {
                        log.info("扫描到的玻璃id:{}", response);
                        List<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("scanCode");
                        if (CollectionUtils.isNotEmpty(sendwServer)) {
                            //按照玻璃id获取玻璃信息返回给前端界面,具体需要哪些数据待确认
                            GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
                                    .eq(GlassInfo::getGlassId, response).last("limit 1"));
                            if (null == glassInfo) {
                                log.info("按照玻璃id:{},无法找到玻璃信息", response);
                            } else {
                                sendwServer.get(0).sendMessage(glassInfo.toString());
                            }
                        }
                    }
                } catch (Exception exception) {
                    log.info("读取异常,原因为{}", exception.getMessage());
                }
            }).start();
        try {
            BarcodeReadThread brt=new BarcodeReadThread(scanIp,scanPort,this);
            brt.start();
        }catch (Exception exception) {
            log.info("扫描任务启动异常,原因为{}", exception.getMessage());
        }
    }
    //socket读取到消息后会调用这个函数
    public void barcodeCheckin(String response)
    {
        log.info("扫描到的玻璃id:{}", response);
        List<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("scanCode");
        if (CollectionUtils.isNotEmpty(sendwServer)) {
            //按照玻璃id获取玻璃信息返回给前端界面,具体需要哪些数据待确认
            GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
                    .eq(GlassInfo::getGlassId, response).last("limit 1"));
            if (null == glassInfo) {
                log.info("按照玻璃id:{},无法找到玻璃信息", response);
            } else {
                sendwServer.get(0).sendMessage(glassInfo.toString());
            }
        }
    }
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml
@@ -8,6 +8,11 @@
    name: unLoadGlass
  liquibase:
    enabled: false
  task:
    scheduling:
      pool:
        size: 10
      thread-name-prefix: task-unLoad
mybatis-plus:
@@ -24,5 +29,5 @@
  throughHeight: 2500
  threshold: 5      #下片的最大阈值
  scan:
    ip: 127.0.0.1
    ip: 169.254.171.199
    port: 5000