hdy
3 天以前 51eb318f6df9ebc7d1ff47522e33b2ee7cea1ba8
修改
已修改11个文件
已添加1个文件
457 ■■■■■ 文件已修改
billion-main/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/bs/domain/BsBomChildInfo.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/bs/domain/BsBomInfo.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/da/controller/DaMaterialCollectionController.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/da/domain/DaStationCollection.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/om/domain/OmOrderScheduling.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/om/domain/OmProductionOrderInfo.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/om/service/impl/OmOrderSchedulingServiceImpl.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/plcServer/CustomRunner.java 158 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/plcServer/sub/OPCUaSubscription.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/plcServer/util/TimeUtil.java 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/resources/mapper/da/DaCollectionParamConfMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/pom.xml
@@ -83,6 +83,12 @@
            <version>3.5.13</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.33</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</project>
billion-main/src/main/java/com/billion/main/bs/domain/BsBomChildInfo.java
@@ -1,10 +1,10 @@
package com.billion.main.bs.domain;
import com.billion.common.annotation.Excel;
import com.billion.main.common.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
@@ -14,7 +14,7 @@
 * @date 2024-11-25
 */
@Data
public class BsBomChildInfo
public class BsBomChildInfo extends BaseEntity
{
    private static final long serialVersionUID = 1L;
@@ -47,7 +47,7 @@
    /** å•è€— */
    @Excel(name = "单耗")
    private BigDecimal costQty;
    private String costQty;
    /** å•ä½ */
    @Excel(name = "单位")
@@ -83,7 +83,4 @@
    private Date updateTime;
    public void setCostQty(String count) {
    }
}
billion-main/src/main/java/com/billion/main/bs/domain/BsBomInfo.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.TableId;
import com.billion.common.annotation.Excel;
import com.billion.main.common.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
@@ -14,7 +15,7 @@
 * @date 2024-11-25
 */
@Data
public class BsBomInfo
public class BsBomInfo extends BaseEntity
{
    private static final long serialVersionUID = 1L;
billion-main/src/main/java/com/billion/main/da/controller/DaMaterialCollectionController.java
@@ -1,25 +1,19 @@
package com.billion.main.da.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.billion.common.annotation.Log;
import com.billion.common.core.controller.BaseController;
import com.billion.common.core.domain.AjaxResult;
import com.billion.common.core.page.TableDataInfo;
import com.billion.common.enums.BusinessType;
import com.billion.common.utils.poi.ExcelUtil;
import com.billion.main.da.domain.DaMaterialCollection;
import com.billion.main.da.service.IDaMaterialCollectionService;
import com.billion.common.utils.poi.ExcelUtil;
import com.billion.common.core.page.TableDataInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * ç‰©æ–™é‡‡é›†Controller
billion-main/src/main/java/com/billion/main/da/domain/DaStationCollection.java
@@ -1,7 +1,6 @@
package com.billion.main.da.domain;
import com.billion.common.annotation.Excel;
import com.billion.main.common.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
@@ -14,7 +13,7 @@
 * @date 2025-02-12
 */
@Data
public class DaStationCollection extends BaseEntity
public class DaStationCollection
{
    private static final long serialVersionUID = 1L;
billion-main/src/main/java/com/billion/main/om/domain/OmOrderScheduling.java
@@ -57,6 +57,20 @@
    /** å½“前订单已上线数量 */
    @Excel(name = "当前订单已上线数量")
    private Long nowQty;
    private String nowQty;
    /** åˆ›å»ºè€… */
    private String createBy;
    /** åˆ›å»ºæ—¶é—´ */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /** æ›´æ–°è€… */
    private String updateBy;
    /** æ›´æ–°æ—¶é—´ */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
}
billion-main/src/main/java/com/billion/main/om/domain/OmProductionOrderInfo.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.TableId;
import com.billion.common.annotation.Excel;
import com.billion.main.common.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
@@ -14,7 +15,7 @@
 * @date 2024-11-20
 */
@Data
public class OmProductionOrderInfo
public class OmProductionOrderInfo extends BaseEntity
{
    @TableId
    /** ä¸»é”®id */
billion-main/src/main/java/com/billion/main/om/service/impl/OmOrderSchedulingServiceImpl.java
@@ -3,10 +3,7 @@
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.billion.common.core.domain.entity.SysUser;
import com.billion.common.core.domain.model.LoginUser;
import com.billion.common.exception.ServiceException;
import com.billion.common.utils.SecurityUtils;
import com.billion.main.om.domain.OmOrderScheduling;
import com.billion.main.om.mapper.OmOrderSchedulingMapper;
import com.billion.main.om.service.IOmOrderSchedulingService;
@@ -66,12 +63,12 @@
        if (CollUtil.isNotEmpty(list)){
            throw new ServiceException(MessageFormat.format("已存在总成序列号为{0}的数据",omOrderScheduling.getSfcCode()));
        }
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysUser user = loginUser.getUser();
//        LoginUser loginUser = SecurityUtils.getLoginUser();
//        SysUser user = loginUser.getUser();
        omOrderScheduling.setCreateTime(new Date());
        omOrderScheduling.setUpdateTime(new Date());
        omOrderScheduling.setCreateBy(user.getUserName());
        omOrderScheduling.setUpdateBy(user.getUserName());
//        omOrderScheduling.setCreateBy(user.getUserName());
//        omOrderScheduling.setUpdateBy(user.getUserName());
        return omOrderSchedulingMapper.insertOmOrderScheduling(omOrderScheduling);
    }
@@ -90,10 +87,10 @@
        if (CollUtil.isNotEmpty(list)){
            throw new ServiceException(MessageFormat.format("已存在总成序列号为{0}的数据",omOrderScheduling.getSfcCode()));
        }
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysUser user = loginUser.getUser();
//        LoginUser loginUser = SecurityUtils.getLoginUser();
//        SysUser user = loginUser.getUser();
        omOrderScheduling.setUpdateTime(new Date());
        omOrderScheduling.setUpdateBy(user.getUserName());
//        omOrderScheduling.setUpdateBy(user.getUserName());
        return omOrderSchedulingMapper.updateOmOrderScheduling(omOrderScheduling);
    }
billion-main/src/main/java/com/billion/main/plcServer/CustomRunner.java
@@ -22,13 +22,10 @@
public class CustomRunner implements ApplicationRunner {
    @Autowired
    private MiloService miloService;
    @Autowired
    public IDaParamCollectionService daParamCollectionService;
    @Autowired
    public IDaStationCollectionService daStationCollectionService;
    @Autowired
    public IOmProductionOrderInfoService omProductionOrderInfoService;
    @Autowired
@@ -50,7 +47,6 @@
        Constants.PLC1.add(Constants.C020);
        Constants.PLC1.add(Constants.C030);
        Constants.PLC1.add(Constants.C050);
        Constants.PLC1.add(Constants.C060);
        //PLC2设备//排查上下线
        Constants.PLC2.add(Constants.OP005);
        Constants.PLC2.add(Constants.OP010);
@@ -114,7 +110,7 @@
        Constants.ONLINE.add(Constants.C005);
        Constants.ONLINE.add(Constants.OP005);
        //下线工位
        Constants.OFFLINE.add(Constants.C070);
        Constants.OFFLINE.add(Constants.C060);
        Constants.OFFLINE.add(Constants.OP310);
        OPCUaSubscription OPCUaSubscription = new OPCUaSubscription(miloService,
@@ -135,77 +131,87 @@
    public List<String> getList(){
        List<String> lists = new ArrayList<>();
        //PLC1
        lists.add("PLC1.C005.RecordData");
        lists.add("PLC1.C005.WorkOrderRequest");//请求工单
        lists.add("PLC1.C010.RecordData");
        lists.add("PLC1.C020.RecordData");
        lists.add("PLC1.C030.RecordData");
        lists.add("PLC1.C050.RecordData");
        lists.add("PLC1.C060.RecordData");
        lists.add("PLC1.C070.RecordData");
        //PLC2
        lists.add("PLC2.OP005.RecordData");
        lists.add("PLC2.OP010.WorkOrderRequest");//请求工单
        lists.add("PLC2.OP020.RecordData");
        lists.add("PLC2.OP040.RecordData");
        lists.add("PLC2.OP045.RecordData");
        lists.add("PLC2.OP060.RecordData");
        lists.add("PLC2.OP070.RecordData");
        lists.add("PLC2.OP075.RecordData");
        lists.add("PLC2.OP080.RecordData");
        lists.add("PLC2.OP090.RecordData");
        lists.add("PLC2.OP095-1.RecordData");
        lists.add("PLC2.OP095-2.RecordData");
        lists.add("PLC2.OP100-1.RecordData");
        lists.add("PLC2.OP100-2.RecordData");
        lists.add("PLC2.OP120.RecordData");
        lists.add("PLC2.P010.RecordData");
        lists.add("PLC2.P010.WorkOrderRequest");//请求工单
        //PLC3
        lists.add("PLC3.OP130.RecordData");
        lists.add("PLC3.OP145-1.RecordData");
        lists.add("PLC3.OP145-2.RecordData");
        lists.add("PLC3.OP150-1.RecordData");
        lists.add("PLC3.OP150-2.RecordData");
        lists.add("PLC3.OP160.RecordData");
        lists.add("PLC3.OP165-1.RecordData");
        lists.add("PLC3.OP165-2.RecordData");
        lists.add("PLC3.OP170-1.RecordData");
        lists.add("PLC3.OP170-2.RecordData");
        lists.add("PLC3.OP180.RecordData");
        lists.add("PLC3.OP190-1.RecordData");
        lists.add("PLC3.OP190-2.RecordData");
        lists.add("PLC3.OP200-1.RecordData");
        lists.add("PLC3.OP200-2.RecordData");
        lists.add("PLC3.OP210-1.RecordData");
        lists.add("PLC3.OP210-2.RecordData");
        lists.add("PLC3.OP220-1.RecordData");
        lists.add("PLC3.OP220-2.RecordData");
        lists.add("PLC3.OP230-1.RecordData");
        lists.add("PLC3.OP230-2.RecordData");
        lists.add("PLC3.OP240-1.RecordData");
        lists.add("PLC3.OP240-2.RecordData");
        lists.add("PLC3.OP250-1.RecordData");
        lists.add("PLC3.OP250-2.RecordData");
        lists.add("PLC3.OP260-1.RecordData");
        lists.add("PLC3.OP260-2.RecordData");
        lists.add("PLC3.OP270-1.RecordData");
        lists.add("PLC3.OP270-2.RecordData");
        lists.add("PLC3.OP275.RecordData");
        lists.add("PLC3.OP280.RecordData");
        lists.add("PLC3.OP290-1.RecordData");
        lists.add("PLC3.OP290-2.RecordData");
        lists.add("PLC3.OP295.RecordData");
        lists.add("PLC3.OP300.RecordData");
        lists.add("PLC3.OP310.RecordData");
        //PLC4
        lists.add("PLC4.C040.RecordData");
        lists.add("PLC4.OP030.RecordData");
        lists.add("PLC4.OP050.RecordData");
        lists.add("PLC4.OP070.RecordData");
        lists.add("PLC3.OP110.RecordData");
        lists.add("PLC3.OP140.RecordData");
//        //PLC1
//        lists.add("PLC1.C005.RecordData");
//        lists.add("PLC1.C005.WorkOrderRequest");//请求工单
//        lists.add("PLC1.C010.RecordData");
//        lists.add("PLC1.C020.RecordData");
//        lists.add("PLC1.C030.RecordData");
//        lists.add("PLC1.C050.RecordData");
//        lists.add("PLC1.C060.RecordData");
//        //PLC2
//        lists.add("PLC2.OP005.RecordData");
//        lists.add("PLC2.OP010.WorkOrderRequest");//请求工单
//        lists.add("PLC2.OP020.RecordData");
//        lists.add("PLC2.OP040.RecordData");
//        lists.add("PLC2.OP045.RecordData");
//        lists.add("PLC2.OP060.RecordData");
//        lists.add("PLC2.OP070.RecordData");
//        lists.add("PLC2.OP075.RecordData");
//        lists.add("PLC2.OP080.RecordData");
//        lists.add("PLC2.OP090.RecordData");
//        lists.add("PLC2.OP095-1.RecordData");
//        lists.add("PLC2.OP095-2.RecordData");
//        lists.add("PLC2.OP100-1.RecordData");
//        lists.add("PLC2.OP100-2.RecordData");
//        lists.add("PLC2.OP120.RecordData");
//        lists.add("PLC2.P010.RecordData");
//        lists.add("PLC2.P010.WorkOrderRequest");//请求工单
//        //PLC3
//        lists.add("PLC3.OP130.RecordData");
//        lists.add("PLC3.OP145-1.RecordData");
//        lists.add("PLC3.OP145-2.RecordData");
//        lists.add("PLC3.OP150-1.RecordData");
//        lists.add("PLC3.OP150-2.RecordData");
//        lists.add("PLC3.OP160.RecordData");
//        lists.add("PLC3.OP165-1.RecordData");
//        lists.add("PLC3.OP165-2.RecordData");
//        lists.add("PLC3.OP170-1.RecordData");
//        lists.add("PLC3.OP170-2.RecordData");
//        lists.add("PLC3.OP180.RecordData");
//        lists.add("PLC3.OP190-1.RecordData");
//        lists.add("PLC3.OP190-2.RecordData");
//        lists.add("PLC3.OP200-1.RecordData");
//        lists.add("PLC3.OP200-2.RecordData");
//        lists.add("PLC3.OP210-1.RecordData");
//        lists.add("PLC3.OP210-2.RecordData");
//        lists.add("PLC3.OP220-1.RecordData");
//        lists.add("PLC3.OP220-2.RecordData");
//        lists.add("PLC3.OP230-1.RecordData");
//        lists.add("PLC3.OP230-2.RecordData");
//        lists.add("PLC3.OP240-1.RecordData");
//        lists.add("PLC3.OP240-2.RecordData");
//        lists.add("PLC3.OP250-1.RecordData");
//        lists.add("PLC3.OP250-2.RecordData");
//        lists.add("PLC3.OP260-1.RecordData");
//        lists.add("PLC3.OP260-2.RecordData");
//        lists.add("PLC3.OP270-1.RecordData");
//        lists.add("PLC3.OP270-2.RecordData");
//        lists.add("PLC3.OP275.RecordData");
//        lists.add("PLC3.OP280.RecordData");
//        lists.add("PLC3.OP290-1.RecordData");
//        lists.add("PLC3.OP290-2.RecordData");
//        lists.add("PLC3.OP295.RecordData");
//        lists.add("PLC3.OP300.RecordData");
//        lists.add("PLC3.OP310.RecordData");
//        //PLC4
//        lists.add("PLC4.C040.RecordData");
//        lists.add("PLC4.OP030.RecordData");
//        lists.add("PLC4.OP050.RecordData");
//        lists.add("PLC4.OP070.RecordData");
//        lists.add("PLC3.OP110.RecordData");
//        lists.add("PLC3.OP140.RecordData");
        //TEST
        lists.add("TEST.C005.RecordData");
        lists.add("TEST.C005.WorkOrderRequest");
        lists.add("TEST.C060.RecordData");
        lists.add("TEST.OP005.RecordData");
        lists.add("TEST.OP005.WorkOrderRequest");
        lists.add("TEST.OP010.RecordData");
        lists.add("TEST.OP310.RecordData");
        lists.add("TEST.P010.RecordData");
        lists.add("TEST.P010.WorkOrderRequest");
billion-main/src/main/java/com/billion/main/plcServer/sub/OPCUaSubscription.java
@@ -1,7 +1,6 @@
package com.billion.main.plcServer.sub;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.billion.common.utils.StringUtils;
import com.billion.main.bs.domain.BsBomChildInfo;
import com.billion.main.bs.service.IBsBomChildInfoService;
import com.billion.main.constant.Constants;
@@ -24,7 +23,9 @@
import com.kangaroohy.milo.service.MiloService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import com.billion.main.plcServer.util.TimeUtil;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
@@ -33,6 +34,8 @@
@Slf4j
@Component
public class OPCUaSubscription implements SubscriptionCallback {
    public static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public static MiloService miloService;
    public IDaParamCollectionService daParamCollectionService;
    public IDaStationCollectionService daStationCollectionService;
@@ -89,12 +92,12 @@
            if (Constants.RecordData.equals(tab)){
                //工站交互初始化
                if (Constants.ZERO.equals(valueString)){
                    miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("0").build());
                    miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(0).build());
                //请求进站
                } else if (Constants.ONE.equals(valueString)){
                    //1.1//首工站
                    if(Constants.ONLINE.contains(device)){
                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("11").build());
                        miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(11).build());
                    }
                    //除首工站所有工站
                    else if(Constants.PLC1.contains(device) ||
@@ -106,7 +109,7 @@
                        //校验SFCCode是否存在
                        Object SFCCode = miloService.readFromOpcUa(thoroughfare + "." + device + ".SFCCode").getValue();
                        if (SFCCode == null ) {
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("23").build());
                            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(23).build());
                        } else {
                            OmOrderScheduling omOrderScheduling = new OmOrderScheduling();
                            List<OmOrderScheduling> resultList = omOrderSchedulingService.selectOmOrderSchedulingList(omOrderScheduling);
@@ -116,7 +119,7 @@
                            bsbomChildInfo.setBomCode(resultList.get(0).getWorkOrderNo());
                            //下发配方
                            formula(thoroughfare, device, bsbomChildInfo);
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("11").build());
                            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(11).build());
                        }
                    }
                //出站保存数据
@@ -129,7 +132,7 @@
                        Object workOrderNumber = miloService.readFromOpcUa(thoroughfare + "." + device + ".WorkOrderNumber").getValue();
                        Object nowQty = miloService.readFromOpcUa(thoroughfare + "." + device + ".PalletID").getValue();
                        omOrderScheduling.setWorkOrderNo(workOrderNumber.toString());
                        omOrderScheduling.setNowQty((Long) nowQty);
                        omOrderScheduling.setNowQty(nowQty.toString());
                        omOrderScheduling.setSfcCode(SFCCode.toString());
                        //托盘绑定SFCCode和工单和产线
                        if(Constants.OP005.equals(device)){
@@ -140,7 +143,7 @@
                        }
                        omOrderSchedulingService.insertOmOrderScheduling(omOrderScheduling);
                    }else if(Constants.OFFLINE.contains(device)){
                        if(Constants.C070.equals(device)){
                        if(Constants.C060.equals(device)){
                            omOrderScheduling.setRemarks("Head");
                            omOrderScheduling.setSfcCode(SFCCode.toString());
                            List<OmOrderScheduling> omOrderSchedulingList = omOrderSchedulingService.selectOmOrderSchedulingList(omOrderScheduling);
@@ -175,7 +178,7 @@
                        Object workOrderNumber = miloService.readFromOpcUa(thoroughfare + "." + device + ".WorkOrderNumber").getValue();
                        Object nowQty = miloService.readFromOpcUa(thoroughfare + "." + device + ".PalletID").getValue();
                        omOrderScheduling.setWorkOrderNo(workOrderNumber.toString());
                        omOrderScheduling.setNowQty((Long) nowQty);
                        omOrderScheduling.setNowQty(nowQty.toString());
                        omOrderScheduling.setSfcCode(SFCCode.toString());
                        omOrderScheduling.setRemarks("Pre");
                        omOrderSchedulingService.insertOmOrderScheduling(omOrderScheduling);
@@ -194,15 +197,12 @@
                    //查询descriptive字段等于1的采集项保存到扫码保存到da_material_collection表里
                    DaCollectionParamConf daCollectionParamConf1 = new DaCollectionParamConf();
                    daCollectionParamConf1.setProcessesCode(device);
                    daCollectionParamConf1.setDescriptive("1");
                    daCollectionParamConf1.setDescriptive("3");
                    List<DaCollectionParamConf> daCollectionParamConfList1 = daCollectionParamConfService.selectDaCollectionParamConfList(daCollectionParamConf1);
                    for (DaCollectionParamConf conf : daCollectionParamConfList1) {
                        String gatherAddress = conf.getGatherAddress();
                        Object valueObj = miloService.readFromOpcUa(gatherAddress).getValue(); // èŽ·å–原始值对象‌:ml-citation{ref="4" data="citationList"}
                        if (valueObj == null || StringUtils.isEmpty(valueObj.toString())) {
                            log.warn("采集地址{}返回空值,跳过存储", gatherAddress);
                            continue; // ç»ˆæ­¢å½“前循环迭代‌:ml-citation{ref="1,2" data="citationList"}
                        }
                        if (valueObj != null ) {
                        DaMaterialCollection materialCollection = new DaMaterialCollection();
                        materialCollection.setSfcCode(SFCCode.toString());
                        materialCollection.setLocationCode(device);
@@ -211,18 +211,16 @@
                        materialCollection.setCollectTime(new Date());
                        daMaterialCollectionService.insertDaMaterialCollection(materialCollection);
                    }
                    }
                    //查询descriptive字段等于2的采集项保存到扫码保存到da_param_collection表里
                    DaCollectionParamConf daCollectionParamConf2 = new DaCollectionParamConf();
                    daCollectionParamConf2.setProcessesCode(device);
                    daCollectionParamConf2.setDescriptive("2");
                    daCollectionParamConf2.setDescriptive("4");
                    List<DaCollectionParamConf> daCollectionParamConfList2 = daCollectionParamConfService.selectDaCollectionParamConfList(daCollectionParamConf2);
                    for (DaCollectionParamConf conf : daCollectionParamConfList2) {
                        String gatherAddress = conf.getGatherAddress();
                        Object valueObj = miloService.readFromOpcUa(gatherAddress).getValue(); // èŽ·å–原始值对象‌:ml-citation{ref="4" data="citationList"}
                        if (valueObj == null || StringUtils.isEmpty(valueObj.toString())) {
                            log.warn("采集地址{}返回空值,跳过存储", gatherAddress);
                            continue; // ç»ˆæ­¢å½“前循环迭代‌:ml-citation{ref="1,2" data="citationList"}
                        }
                        if (valueObj != null ) {
                        DaParamCollection paramCollection = new DaParamCollection();
                        paramCollection.setSfcCode(SFCCode.toString());
                        paramCollection.setLocationCode(device);
@@ -231,13 +229,22 @@
                        paramCollection.setCollectionTime(new Date());
                        daParamCollectionService.insertDaParamCollection(paramCollection);
                    }
                    }
                    DaStationCollection daStationCollection = new DaStationCollection();
                    daStationCollection.setLocationCode(device);
                    daStationCollection.setSfcCode(SFCCode.toString());
                    daStationCollection.setInboundTime((Date) miloService.readFromOpcUa(thoroughfare + "." + device + ".StartTime").getValue());
                    daStationCollection.setOutboundTime((Date) miloService.readFromOpcUa(thoroughfare + "." + device + ".StopTime").getValue());
                    Object StationStatus = miloService.readFromOpcUa(thoroughfare + "." + device + ".StationStatus").getValue();
                    Date startTime = new Date();
                    ReadWriteEntity startTimeRead = miloService.readFromOpcUa(thoroughfare + "." + device + ".StartTime");//进站时间
                    startTime = format.parse(TimeUtil.test(TimeUtil.stringProcessing(startTimeRead.getValue().toString())));
                    daStationCollection.setInboundTime( startTime);
                    Date stopTime = new Date();
                    ReadWriteEntity stopTimeRead = miloService.readFromOpcUa(thoroughfare + "." + device + ".StopTime");//进站时间
                    stopTime = format.parse(TimeUtil.test(TimeUtil.stringProcessing(stopTimeRead.getValue().toString())));
                    daStationCollection.setOutboundTime( stopTime);
                    daStationCollection.setStatus(StationStatus.toString());
                    daStationCollectionService.insertDaStationCollection(daStationCollection);
                    miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("21").build());
                    miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(21).build());
                }
            }
        }
@@ -251,7 +258,7 @@
    try {
        if (Constants.WorkOrderRequest.equals(tab)) {
            if (Constants.ZERO.equals(valueString)) {
                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("0").build());
                miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value(0).build());
            }else if (Constants.ONE.equals(valueString)){
                if (Constants.OP005.equals(device)){
                    // æŸ¥è¯¢æ•°æ®åº“获取符合条件的订单信息
@@ -260,7 +267,6 @@
                        //判断当前下发数量是否满足计划数量
                            //更新工单状态
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(getBodyOrder.getWorkOrderNo()).build());
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ProductionPlan").value(String.valueOf(getBodyOrder.getPlanQty())).build());
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".EngineType").value(getBodyOrder.getEngineType()).build());
                            //生成sn码
                            SysCount serialNumber = sysCountService.getSerialNumber();
@@ -300,8 +306,11 @@
                            if (Objects.equals(getBodyOrder2.getBodyQty(), getBodyOrder2.getPlanQty())){
                                omProductionOrderInfoService.updateBodyStatus2();
                            }
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(getBodyOrder2.getBodyQty()).build());
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("11").build());
                            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(getBodyOrder2.getBodyQty()).build());
                            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value(11).build());
                    }
                    else{
                        miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value(12).build());
                    }
                } else if (Constants.C005.equals(device)) {
                    // æŸ¥è¯¢æ•°æ®åº“获取符合条件的订单信息
@@ -310,7 +319,6 @@
                        //判断当前下发数量是否满足计划数量
                        //更新工单状态
                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(getHeadOrder.getWorkOrderNo()).build());
                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ProductionPlan").value(String.valueOf(getHeadOrder.getPlanQty())).build());
                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".EngineType").value(getHeadOrder.getEngineType()).build());
                        //生成sn码
                        SysCount headNumber = sysCountService.getHeadNumber();
@@ -350,8 +358,11 @@
                        if (Objects.equals(getHeadOrder2.getHeadQty(), getHeadOrder2.getPlanQty())){
                            omProductionOrderInfoService.updateHeadStatus2();
                        }
                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(getHeadOrder2.getHeadQty()).build());
                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("11").build());
                        miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(getHeadOrder2.getHeadQty()).build());
                        miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value(11).build());
                    }
                    else{
                        miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value(12).build());
                    }
                } else if (Constants.P010.equals(device)) {
                    // æŸ¥è¯¢æ•°æ®åº“获取符合条件的订单信息
@@ -360,7 +371,6 @@
                        //判断当前下发数量是否满足计划数量
                        //更新工单状态
                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(getPreOrder.getWorkOrderNo()).build());
                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ProductionPlan").value(String.valueOf(getPreOrder.getPlanQty())).build());
                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".EngineType").value(getPreOrder.getEngineType()).build());
                        //生成sn码
                        SysCount preNumber = sysCountService.getPreNumber();
@@ -399,8 +409,11 @@
                        if (Objects.equals(getPreOrder2.getPreQty(), getPreOrder2.getPlanQty())){
                            omProductionOrderInfoService.updatePreStatus2();
                        }
                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(getPreOrder2.getPreQty()).build());
                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("11").build());
                        miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(getPreOrder2.getPreQty()).build());
                        miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value(11).build());
                    }
                    else{
                        miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value(12).build());
                    }
                }
            }
@@ -415,9 +428,9 @@
        List<BsBomChildInfo> bomChildList = bsBomChildInfoService.selectBsBomChildInfoList(bsbomChildInfo);
        for (int i = 1; i <= bomChildList.size(); i++) {
            // ç”Ÿæˆ MaterialCode èŠ‚点
            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".Material1Code"+ i).value(bomChildList.get(i-1).getMaterialCode()).build());
            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".Material"+ i +"Code").value(bomChildList.get(i-1).getMaterialCode()).build());
            // ç”Ÿæˆ MaterialNumber èŠ‚点
            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".Material1Number"+ i).value(bomChildList.get(i-1).getCostQty()).build());
            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".Material"+ i +"Number").value(Integer.parseInt(bomChildList.get(i-1).getCostQty())).build());
        }
    }
billion-main/src/main/java/com/billion/main/plcServer/util/TimeUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,139 @@
package com.billion.main.plcServer.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TimeUtil {
    public static void main(String[] args) {
        String dateString = "Tue May 14 18:25:18 CST 2024";
//        System.out.println(test(dateString));
//        String str = "OP330";
//        System.out.println(str.substring(0,5));
//        String tightenData = "[9.077463,12.0,OK,OK]";
//        tightenData = tightenData.replace("[", "").replace("]", "").replace(" ", "");
//        String[] tightenDataParts = tightenData.split(",");
//        for (int i = 0; i < tightenDataParts.length; i++) {
//            System.out.println(tightenDataParts[i]);
//        }
        String originalString = "[3.6,7.8,OK,OK]";
        String modifiedString = originalString.replaceFirst("OK", "NG");
        System.out.println(modifiedString); // è¾“出: [3.6,7.8,NG,OK]
//        System.out.println(isNumberInRange(7.7, 7.5, 8.5));
//        System.out.println(test( stringProcessing("DateTime{utcTime=133601559184960000, javaDate=Tue May 14 18:25:18 CST 2024}")));
    }
    public static String replaceNumber(String input) {
        String regex = ",(\\d+),";
        String replacement = ",NG,";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        return matcher.replaceAll(replacement);
    }
    // æ£€æŸ¥ä¸€ä¸ªæ•°æ˜¯å¦åœ¨ä¸¤ä¸ªæ•°å®šä¹‰çš„区间内(不包含边界)
    public static boolean isNumberInRange(Double number, Double start, Double end) {
        return number >= start && number <= end;
    }
    public static String stringProcessing(String dateTimeStr){
        String result = "";
        // æ‰¾åˆ° "javaDate=" çš„位置
        int javaDateIndex = dateTimeStr.indexOf("javaDate=");
        if (javaDateIndex != -1) {
            // ä»Ž "javaDate=" åŽé¢å¼€å§‹æˆªå–
            javaDateIndex += "javaDate=".length();
            // æ‰¾åˆ°æ—¥æœŸæ—¶é—´å­—符串结束的位置,这里假设是字符串的结尾或者空格的位置
            int endIndex = dateTimeStr.indexOf('}', javaDateIndex);
            if (endIndex == -1) {
                // å¦‚果没有找到空格,就取到字符串的末尾
                endIndex = dateTimeStr.length();
            }
            // ä½¿ç”¨ substring æ–¹æ³•æˆªå–日期时间部分
            String dateTimePart = dateTimeStr.substring(javaDateIndex, endIndex);
            result = dateTimePart;
        } else {
            System.out.println("javaDate= not found in the string.");
        }
        return result;
    }
    public static String getTimestamp(String param){
        String result = "";
        // å®šä¹‰æ—¥æœŸæ—¶é—´æ ¼å¼å’Œæ—¶åŒº
        SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+8")); // CST通常表示中国标准时间,即东八区
        try {
            // è§£æžæ—¥æœŸæ—¶é—´å­—符串
            Date date = sdf.parse("Mon Jan 01 17:05:23 CST 2024");
            // èŽ·å–时间戳(毫秒)
            long timestamp = date.getTime();
            // è¾“出13位时间戳
            result = String.valueOf(timestamp);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return result;
    }
    public static String getYyyyDdMm(String inputDate){
        String outputPattern = "yyyy-MM-dd HH:mm:ss";
        // å®šä¹‰ä¸€ä¸ªè§£æžå™¨ï¼Œç”¨äºŽå¿½ç•¥æ—¶åŒºï¼ˆä»…作为示例,可能需要调整以处理不同的输入)
        SimpleDateFormat parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
        parser.setLenient(false); // è®¾ç½®ä¸å®½æ¾ï¼Œä»¥ä¸¥æ ¼åŒ¹é…æ ¼å¼
        // è§£æžæ—¥æœŸå­—符串
        Date date = null;
        try {
            date = parser.parse(inputDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        // å®šä¹‰ä¸€ä¸ªæ ¼å¼åŒ–器,用于输出所需的格式
        SimpleDateFormat formatter = new SimpleDateFormat(outputPattern);
        // æ ¼å¼åŒ–日期
        String outputDate = formatter.format(date);
        return outputDate;
    }
    public static String test(String param){
        String str = "";
        // åˆ›å»ºä¸€ä¸ªSimpleDateFormat对象来解析输入的日期字符串(假设CST为中国标准时间)
        SimpleDateFormat inputFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
        inputFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); // è®¾ç½®ä¸ºä¸­å›½æ—¶åŒº
        Date date = null;
        try {
            date = inputFormat.parse(param);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        // åˆ›å»ºä¸€ä¸ªSimpleDateFormat对象来格式化日期为UTC时间
        SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        outputFormat.setTimeZone(TimeZone.getTimeZone("UTC")); // è®¾ç½®ä¸ºUTC时区
        // æ ¼å¼åŒ–日期
        if (date != null) {
            str = outputFormat.format(date);
        }
        return str;
    }
}
billion-main/src/main/resources/mapper/da/DaCollectionParamConfMapper.xml
@@ -37,7 +37,7 @@
            <if test="parameterSetName != null  and parameterSetName != ''"> and parameter_set_name like concat('%', #{parameterSetName}, '%')</if>
            <if test="productCode != null  and productCode != ''"> and product_code like concat('%', #{productCode}, '%')</if>
            <if test="gatherAddress != null  and gatherAddress != ''"> and gather_address like concat('%', #{gatherAddress}, '%')</if>
            <if test="descriptive != null  and descriptive != ''"> and descriptive like concat('%', #{descriptive}, '%')</if>
        </where>
    </select>