admin
2025-03-14 ae6879a7575f79d814c70781e6efc1b6218f3732
Merge remote-tracking branch 'origin/master'
已添加1个文件
已修改34个文件
1481 ■■■■ 文件已修改
billion-admin/pom.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-admin/src/main/resources/application-druid.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/api/service/impl/WorkOrdersInfoServiceImpl.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/bs/controller/BsBomChildInfoController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | 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/bs/service/IBsBomChildInfoService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/bs/service/impl/BsBomChildInfoServiceImpl.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/constant/Constants.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/da/controller/DaMaterialCollectionController.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/da/controller/DaParamCollectionController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/da/domain/DaParamCollection.java 315 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/da/domain/DaStationCollection.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/da/service/impl/DaParamCollectionServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | 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 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/om/service/impl/OmProductionOrderInfoServiceImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/plcServer/CustomRunner.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/plcServer/conf/OPCElement.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/plcServer/sub/OPCUaSubscription.java 247 ●●●●● 补丁 | 查看 | 原始文档 | 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/src/main/resources/mapper/da/DaParamCollectionMapper.xml 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/resources/mapper/om/OmOrderSchedulingMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/resources/mapper/om/OmProductionOrderInfoMapper.xml 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-ui/src/views/main/bs/bomChildInfo/index.vue 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-ui/src/views/main/bs/bomInfo/index.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-ui/src/views/main/bs/lineInfo/index.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-ui/src/views/main/da/materialCollection/index.vue 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-ui/src/views/main/da/paramCollection/index.vue 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-ui/src/views/main/da/stationCollection/index.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-ui/src/views/main/om/info/index.vue 246 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-admin/pom.xml
@@ -68,6 +68,12 @@
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.3.3</version>
        </dependency>
        <dependency>
            <groupId>com.billion</groupId>
            <artifactId>billion-main</artifactId>
        </dependency>
@@ -78,6 +84,7 @@
    </dependencies>
    <build>
        <plugins>
            <plugin>
billion-admin/src/main/resources/application-druid.yml
@@ -12,6 +12,7 @@
                url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=billion-db
                username: sa
                password: 123456
#                password: 123456
#                password: admin@123
            # åˆå§‹è¿žæŽ¥æ•°
            initialSize: 10
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/api/service/impl/WorkOrdersInfoServiceImpl.java
@@ -43,6 +43,10 @@
            omProductionOrderInfo.setBodyQty(Long.valueOf("0"));
            omProductionOrderInfo.setHeadQty(Long.valueOf("0"));
            omProductionOrderInfo.setPreQty(Long.valueOf("0"));
            omProductionOrderInfo.setBodyStatus("0");
            omProductionOrderInfo.setHeadStatus("0");
            omProductionOrderInfo.setPreStatus("0");
            omProductionOrderInfo.setDelFlag("0");
            omProductionOrderInfo.setWorkOrderNo(workOrdersInfo.getOrderNumber());
            omProductionOrderInfo.setSalesOrderCode(workOrdersInfo.getBatchNumber());
            omProductionOrderInfo.setProductCode(workOrdersInfo.getMaterialNumber());
@@ -52,7 +56,6 @@
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date startTime = sdf.parse(workOrdersInfo.getStartTime());
            omProductionOrderInfo.setPlanStartTime(startTime);
//            omProductionOrderInfo.setRemarks(Long.valueOf(workOrdersInfo.getDescription()));
            omProductionOrderInfo.setOrderStatus(workOrdersInfo.getState());
            omProductionOrderInfo.setFlag(workOrdersInfo.getFlag());
            omProductionOrderInfoService.insertOmProductionOrderInfo(omProductionOrderInfo);
billion-main/src/main/java/com/billion/main/bs/controller/BsBomChildInfoController.java
@@ -11,6 +11,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@@ -28,6 +29,21 @@
    @Autowired
    private IBsBomChildInfoService bsBomChildInfoService;
    @PostMapping("/importTemplate")
    public void importTemplate(HttpServletResponse response)
    {
        ExcelUtil<BsBomChildInfo> util = new ExcelUtil<BsBomChildInfo>(BsBomChildInfo.class);
        util.importTemplateExcel(response, "bom子表数据");
    }
    @PreAuthorize("@ss.hasPermi('bs:bomChildInfo:import')")
    @PostMapping("/importData")
    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
    {
        ExcelUtil<BsBomChildInfo> util = new ExcelUtil<BsBomChildInfo>(BsBomChildInfo.class);
        List<BsBomChildInfo> bomChildList = util.importExcel(file.getInputStream());
        String message = bsBomChildInfoService.importBomChild(bomChildList, updateSupport, "1");
        return success(message);
    }
    /**
     * æŸ¥è¯¢åŸºç¡€BOM子信息列表
     */
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/bs/service/IBsBomChildInfoService.java
@@ -61,4 +61,5 @@
     */
    public int deleteBsBomChildInfoById(Long id);
    void insertBatch(List<BsBomChildInfo> confList);
    public String importBomChild(List<BsBomChildInfo> bomChildList, Boolean isUpdateSupport, String operName);
}
billion-main/src/main/java/com/billion/main/bs/service/impl/BsBomChildInfoServiceImpl.java
@@ -1,12 +1,16 @@
package com.billion.main.bs.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.billion.common.exception.ServiceException;
import com.billion.common.utils.StringUtils;
import com.billion.common.utils.bean.BeanValidators;
import com.billion.main.bs.domain.BsBomChildInfo;
import com.billion.main.bs.mapper.BsBomChildInfoMapper;
import com.billion.main.bs.service.IBsBomChildInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.validation.Validator;
import java.util.List;
/**
@@ -19,6 +23,48 @@
public class BsBomChildInfoServiceImpl extends ServiceImpl<BsBomChildInfoMapper, BsBomChildInfo> implements IBsBomChildInfoService
{
    @Autowired
    protected Validator validator;
    @Autowired
    private IBsBomChildInfoService bsBomChildInfoService;
    @Override
    public String importBomChild(List<BsBomChildInfo> bomChildList, Boolean isUpdateSupport, String operName)
    {
        if (StringUtils.isNull(bomChildList) || bomChildList.size() == 0)
        {
            throw new ServiceException("导入数据不能为空!");
        }
        StringBuilder successMsg = new StringBuilder();
        for (BsBomChildInfo list : bomChildList)
        {
            try
            {
                BeanValidators.validateWithException(validator, list);
                BsBomChildInfo bsBomChildInfo = new BsBomChildInfo();
                bsBomChildInfo.setProductCode(list.getProductCode());
                bsBomChildInfo.setProductName(list.getProductName());
                bsBomChildInfo.setLocationCode(list.getLocationCode());
                bsBomChildInfo.setLocationName(list.getLocationName());
                bsBomChildInfo.setMaterialCode(list.getMaterialCode());
                bsBomChildInfo.setMaterialName(list.getMaterialName());
                bsBomChildInfo.setCostQty(list.getCostQty());
                bsBomChildInfo.setBomCode(list.getBomCode());
                bsBomChildInfoService.insertBsBomChildInfo(bsBomChildInfo);
                successMsg.append( " æ›´æ–°æˆåŠŸ");
            }
            catch (Exception e)
            {
                String msg =  " å¯¼å…¥å¤±è´¥";
                log.error(msg, e);
            }
        }
        return successMsg.toString();
    }
    @Autowired
    private BsBomChildInfoMapper bsBomChildInfoMapper;
    /**
billion-main/src/main/java/com/billion/main/constant/Constants.java
@@ -10,6 +10,7 @@
    public static final String TWO= "2";
    public static final String RecordData= "RecordData";
    public static final String WorkOrderRequest= "WorkOrderRequest";
//    public static final String TEST= "TEST";//缸盖上线工位
    public static final List<String> PLC1 = new ArrayList<>();
    public static final List<String> PLC2 = new ArrayList<>();
@@ -90,6 +91,7 @@
    public static final String OP050= "OP050";
    public static final String OP110= "OP110";
    public static final String OP140= "OP140";
    public static final String OP070_1= "OP070-1";
}
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/controller/DaParamCollectionController.java
@@ -5,7 +5,6 @@
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.DateUtils;
import com.billion.common.utils.poi.ExcelUtil;
import com.billion.main.da.domain.DaParamCollection;
import com.billion.main.da.service.IDaParamCollectionService;
@@ -72,8 +71,6 @@
    @PostMapping
    public AjaxResult add(@RequestBody DaParamCollection daParamCollection)
    {
        daParamCollection.setCreateBy(getUsername());
        daParamCollection.setCreateTime(DateUtils.getNowDate());
        return toAjax(daParamCollectionService.insertDaParamCollection(daParamCollection));
    }
@@ -85,8 +82,6 @@
    @PutMapping
    public AjaxResult edit(@RequestBody DaParamCollection daParamCollection)
    {
        daParamCollection.setUpdateBy(getUsername());
        daParamCollection.setUpdateTime(DateUtils.getNowDate());
        return toAjax(daParamCollectionService.updateDaParamCollection(daParamCollection));
    }
billion-main/src/main/java/com/billion/main/da/domain/DaParamCollection.java
@@ -1,16 +1,8 @@
package com.billion.main.da.domain;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.HeadFontStyle;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.billion.common.annotation.Excel;
import com.billion.main.common.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@@ -21,42 +13,21 @@
 * @date 2024-11-20
 */
@Data
@ExcelIgnoreUnannotated
@ColumnWidth(16)
@HeadRowHeight(14)
@HeadFontStyle(fontHeightInPoints = 11)
public class DaParamCollection extends BaseEntity
public class DaParamCollection
{
    private static final long serialVersionUID = 1L;
    /** ä¸»é”®id */
    private Long id;
    /** å·¥å•ç¼–号 */
    @Excel(name = "工单编号")
    private String workOrderNo;
    private String repairFlag;
    /** æ€»æˆåºåˆ—号 */
    @Excel(name = "箱体编码")
    @Excel(name = "总成序列号")
    private String sfcCode;
    /** äº§å“ç¼–号 */
    @Excel(name = "产品编号")
    private String productCode;
    /** äº§çº¿ç¼–号 */
    @Excel(name = "产线编号")
    private String productionLine;
    /** å·¥ä½ç¼–号 */
    @Excel(name = "工位编号")
    private String locationCode;
    /** è®¾å¤‡ç¼–号 */
    @Excel(name = "设备编号")
    private String equipmentNo;
    /** å‚数编码 */
    @Excel(name = "参数编码")
@@ -66,295 +37,29 @@
    @Excel(name = "参数值")
    private String paramValue;
    /** å‚数上限 */
    @Excel(name = "参数上限")
    private String paramUpper;
    /** å‚数下限 */
    @Excel(name = "参数下限")
    private String paramLower;
    /** æ ‡å‡†å€¼ */
    @Excel(name = "标准值")
    private String paramStandard;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "采集时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date collectTime;
    /** é‡‡é›†æ—¶é—´ */
    @Excel(name = "采集时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date collectionTime;
    @Excel(name = "采集时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date startTime;
    /** é¢„留字段1 */
    private String spareField1;
    /** é¢„留字段2 */
    private String spareField2;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "采集时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date stopTime;
    /** åˆ›å»ºç”¨æˆ· */
    private String createUser;
    /** æ›´æ”¹ç”¨æˆ· */
    private String updateUser;
    /** çŠ¶æ€ï¼ˆ1合格、2不合格) */
    @Excel(name = "状态", readConverterExp = "1=合格、2不合格")
    private String state;
    /** å‚数名称 */
    @Excel(name = "参数名称")
    private String paramName;
    /** å•ä½ */
    @Excel(name = "单位")
    private String unit;
    /** ç±»åž‹ */
    @Excel(name = "类型")
    private String type;
    private String[] dateConditions;
    private String startTime;
    private String endTime;
    public String[] getDateConditions() {
        return dateConditions;
    }
    public void setDateConditions(String[] dateConditions) {
        this.dateConditions = dateConditions;
    }
    public String getStartTime() {return startTime;}
    public void setStartTime(String startTime) {
        this.startTime = startTime;
    }
    public String getEndTime() {
        return endTime;
    }
    public void setEndTime(String endTime) {
        this.endTime = endTime;
    }
    public void setId(Long id)
    {
        this.id = id;
    }
    public Long getId()
    {
        return id;
    }
    public void setWorkOrderNo(String workOrderNo)
    {
        this.workOrderNo = workOrderNo;
    }
    public String getWorkOrderNo()
    {
        return workOrderNo;
    }
    public void setSfcCode(String sfcCode)
    {
        this.sfcCode = sfcCode;
    }
    public String getSfcCode()
    {
        return sfcCode;
    }
    public void setProductCode(String productCode)
    {
        this.productCode = productCode;
    }
    public String getProductCode()
    {
        return productCode;
    }
    public void setProductionLine(String productionLine)
    {
        this.productionLine = productionLine;
    }
    public String getProductionLine()
    {
        return productionLine;
    }
    public void setLocationCode(String locationCode)
    {
        this.locationCode = locationCode;
    }
    public String getLocationCode()
    {
        return locationCode;
    }
    public void setEquipmentNo(String equipmentNo)
    {
        this.equipmentNo = equipmentNo;
    }
    public String getEquipmentNo()
    {
        return equipmentNo;
    }
    public void setParamCode(String paramCode)
    {
        this.paramCode = paramCode;
    }
    public String getParamCode()
    {
        return paramCode;
    }
    public void setParamValue(String paramValue)
    {
        this.paramValue = paramValue;
    }
    public String getParamValue()
    {
        return paramValue;
    }
    public void setParamUpper(String paramUpper)
    {
        this.paramUpper = paramUpper;
    }
    public String getParamUpper()
    {
        return paramUpper;
    }
    public void setParamLower(String paramLower)
    {
        this.paramLower = paramLower;
    }
    public String getParamLower()
    {
        return paramLower;
    }
    public void setParamStandard(String paramStandard)
    {
        this.paramStandard = paramStandard;
    }
    public String getParamStandard()
    {
        return paramStandard;
    }
    public void setCollectionTime(Date collectionTime)
    {
        this.collectionTime = collectionTime;
    }
    public Date getCollectionTime()
    {
        return collectionTime;
    }
    public void setSpareField1(String spareField1)
    {
        this.spareField1 = spareField1;
    }
    public String getSpareField1()
    {
        return spareField1;
    }
    public void setSpareField2(String spareField2)
    {
        this.spareField2 = spareField2;
    }
    public String getSpareField2()
    {
        return spareField2;
    }
    public void setCreateUser(String createUser)
    {
        this.createUser = createUser;
    }
    public String getCreateUser()
    {
        return createUser;
    }
    public void setUpdateUser(String updateUser)
    {
        this.updateUser = updateUser;
    }
    public String getUpdateUser()
    {
        return updateUser;
    }
    public void setState(String state)
    {
        this.state = state;
    }
    public String getState()
    {
        return state;
    }
    public void setParamName(String paramName)
    {
        this.paramName = paramName;
    }
    public String getParamName()
    {
        return paramName;
    }
    public void setUnit(String unit)
    {
        this.unit = unit;
    }
    public String getUnit()
    {
        return unit;
    }
    public void setType(String type)
    {
        this.type = type;
    }
    public String getType()
    {
        return type;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("workOrderNo", getWorkOrderNo())
                .append("sfcCode", getSfcCode())
                .append("productCode", getProductCode())
                .append("productionLine", getProductionLine())
                .append("locationCode", getLocationCode())
                .append("equipmentNo", getEquipmentNo())
                .append("paramCode", getParamCode())
                .append("paramValue", getParamValue())
                .append("paramUpper", getParamUpper())
                .append("paramLower", getParamLower())
                .append("paramStandard", getParamStandard())
                .append("collectionTime", getCollectionTime())
                .append("spareField1", getSpareField1())
                .append("spareField2", getSpareField2())
                .append("createUser", getCreateUser())
                .append("createTime", getCreateTime())
                .append("updateUser", getUpdateUser())
                .append("updateTime", getUpdateTime())
                .append("state", getState())
                .append("paramName", getParamName())
                .append("unit", getUnit())
                .append("type", getType())
                .toString();
    }
}
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/da/service/impl/DaParamCollectionServiceImpl.java
@@ -1,6 +1,5 @@
package com.billion.main.da.service.impl;
import com.billion.common.utils.DateUtils;
import com.billion.main.da.domain.DaParamCollection;
import com.billion.main.da.mapper.DaParamCollectionMapper;
import com.billion.main.da.service.IDaParamCollectionService;
@@ -54,11 +53,6 @@
    @Override
    public List<DaParamCollection> selectDaParamCollectionList(DaParamCollection daParamCollection)
    {
        if(daParamCollection.getDateConditions()!=null){
            String[] conditions = daParamCollection.getDateConditions();
            daParamCollection.setStartTime(conditions[0]);
            daParamCollection.setEndTime(conditions[1]);
        }
        return daParamCollectionMapper.selectDaParamCollectionList(daParamCollection);
    }
@@ -71,7 +65,6 @@
    @Override
    public int insertDaParamCollection(DaParamCollection daParamCollection)
    {
        daParamCollection.setCreateTime(DateUtils.getNowDate());
        return daParamCollectionMapper.insertDaParamCollection(daParamCollection);
    }
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
@@ -1,20 +1,13 @@
package com.billion.main.om.service.impl;
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.common.utils.DateUtils;
import com.billion.main.om.domain.OmOrderScheduling;
import com.billion.main.om.mapper.OmOrderSchedulingMapper;
import com.billion.main.om.service.IOmOrderSchedulingService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.MessageFormat;
import java.util.Date;
import java.util.List;
/**
@@ -62,17 +55,19 @@
    @Override
    public int insertOmOrderScheduling(OmOrderScheduling omOrderScheduling)
    {
        List<OmOrderScheduling> list = this.list(new LambdaQueryWrapper<OmOrderScheduling>().eq(OmOrderScheduling::getSfcCode, omOrderScheduling.getSfcCode()));
        if (CollUtil.isNotEmpty(list)){
            throw new ServiceException(MessageFormat.format("已存在总成序列号为{0}的数据",omOrderScheduling.getSfcCode()));
        }
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysUser user = loginUser.getUser();
        omOrderScheduling.setCreateTime(new Date());
        omOrderScheduling.setUpdateTime(new Date());
        omOrderScheduling.setCreateBy(user.getUserName());
        omOrderScheduling.setUpdateBy(user.getUserName());
        return omOrderSchedulingMapper.insertOmOrderScheduling(omOrderScheduling);
        omOrderScheduling.setUpdateTime(DateUtils.getNowDate());
        return omOrderSchedulingMapper.updateOmOrderScheduling(omOrderScheduling);
//        List<OmOrderScheduling> list = this.list(new LambdaQueryWrapper<OmOrderScheduling>().eq(OmOrderScheduling::getSfcCode, omOrderScheduling.getSfcCode()));
//        if (CollUtil.isNotEmpty(list)){
//            throw new ServiceException(MessageFormat.format("已存在总成序列号为{0}的数据",omOrderScheduling.getSfcCode()));
//        }
//        LoginUser loginUser = SecurityUtils.getLoginUser();
//        SysUser user = loginUser.getUser();
//        omOrderScheduling.setCreateTime(new Date());
//        omOrderScheduling.setUpdateTime(new Date());
//        omOrderScheduling.setCreateBy(user.getUserName());
//        omOrderScheduling.setUpdateBy(user.getUserName());
//        return omOrderSchedulingMapper.insertOmOrderScheduling(omOrderScheduling);
    }
    /**
@@ -84,17 +79,19 @@
    @Override
    public int updateOmOrderScheduling(OmOrderScheduling omOrderScheduling)
    {
        List<OmOrderScheduling> list = this.list(new LambdaQueryWrapper<OmOrderScheduling>()
                .eq(OmOrderScheduling::getSfcCode, omOrderScheduling.getSfcCode())
                .notIn(OmOrderScheduling::getId,omOrderScheduling.getId()));
        if (CollUtil.isNotEmpty(list)){
            throw new ServiceException(MessageFormat.format("已存在总成序列号为{0}的数据",omOrderScheduling.getSfcCode()));
        }
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysUser user = loginUser.getUser();
        omOrderScheduling.setUpdateTime(new Date());
        omOrderScheduling.setUpdateBy(user.getUserName());
        omOrderScheduling.setUpdateTime(DateUtils.getNowDate());
        return omOrderSchedulingMapper.updateOmOrderScheduling(omOrderScheduling);
//        List<OmOrderScheduling> list = this.list(new LambdaQueryWrapper<OmOrderScheduling>()
//                .eq(OmOrderScheduling::getSfcCode, omOrderScheduling.getSfcCode())
//                .notIn(OmOrderScheduling::getId,omOrderScheduling.getId()));
//        if (CollUtil.isNotEmpty(list)){
//            throw new ServiceException(MessageFormat.format("已存在总成序列号为{0}的数据",omOrderScheduling.getSfcCode()));
//        }
//        LoginUser loginUser = SecurityUtils.getLoginUser();
//        SysUser user = loginUser.getUser();
//        omOrderScheduling.setUpdateTime(new Date());
//        omOrderScheduling.setUpdateBy(user.getUserName());
//        return omOrderSchedulingMapper.updateOmOrderScheduling(omOrderScheduling);
    }
    /**
billion-main/src/main/java/com/billion/main/om/service/impl/OmProductionOrderInfoServiceImpl.java
@@ -3,17 +3,15 @@
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.common.utils.DateUtils;
import com.billion.main.om.domain.OmProductionOrderInfo;
import com.billion.main.om.mapper.OmProductionOrderInfoMapper;
import com.billion.main.om.service.IOmProductionOrderInfoService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import java.util.List;
/**
 * ç”Ÿäº§å·¥å•Service业务层处理
@@ -129,20 +127,16 @@
    @Override
    public int updateOmProductionOrderInfo(OmProductionOrderInfo omProductionOrderInfo)
    {
        Collection<Long> omProductionOrderInfoIds = Collections.emptyList();
        List<OmProductionOrderInfo> checkList = this.list(new LambdaQueryWrapper<OmProductionOrderInfo>()
                .eq(OmProductionOrderInfo::getWorkOrderNo, omProductionOrderInfo.getWorkOrderNo())
                        .notIn(OmProductionOrderInfo::getId, omProductionOrderInfoIds));
//                .stream().filter(x -> !x.getId().equals(omProductionOrderInfo.getId()))
//                .collect(Collectors.toList());
        if (CollUtil.isNotEmpty(checkList)){
            throw new ServiceException("已存在工单编号为"+omProductionOrderInfo.getWorkOrderNo()+"的数据");
        }
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysUser user = loginUser.getUser();
        omProductionOrderInfo.setUpdateTime(new Date());
        omProductionOrderInfo.setUpdateBy(user.getUserName());
        return OmProductionOrderInfoMapper.updateOmProductionOrderInfo(omProductionOrderInfo);
//        Collection<Long> omProductionOrderInfoIds = Collections.emptyList();
//        List<OmProductionOrderInfo> checkList = this.list(new LambdaQueryWrapper<OmProductionOrderInfo>()
//                .eq(OmProductionOrderInfo::getWorkOrderNo, omProductionOrderInfo.getWorkOrderNo())
//                        .notIn(OmProductionOrderInfo::getId, omProductionOrderInfoIds));
//        if (CollUtil.isNotEmpty(checkList)){
//            throw new ServiceException("已存在工单编号为"+omProductionOrderInfo.getWorkOrderNo()+"的数据");
//        }
//        return OmProductionOrderInfoMapper.updateOmProductionOrderInfo(omProductionOrderInfo);
        omProductionOrderInfo.setUpdateTime(DateUtils.getNowDate());
        return  OmProductionOrderInfoMapper.updateOmProductionOrderInfo(omProductionOrderInfo);
    }
    /**
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);
@@ -109,15 +105,18 @@
        Constants.PLC4.add(Constants.OP030);
        Constants.PLC4.add(Constants.OP050);
        Constants.PLC4.add(Constants.OP110);
        Constants.PLC4.add(Constants.OP070_1);
        Constants.PLC4.add(Constants.OP140);
        //上线工位
        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);
        Constants.OFFLINE.add(Constants.P010);
        OPCUaSubscription OPCUaSubscription = new OPCUaSubscription(miloService,
                daParamCollectionService,
@@ -145,10 +144,10 @@
        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.OP005.WorkOrderRequest");//请求工单
        lists.add("PLC2.OP010.RecordData");
        lists.add("PLC2.OP020.RecordData");
        lists.add("PLC2.OP040.RecordData");
        lists.add("PLC2.OP045.RecordData");
@@ -205,12 +204,20 @@
        lists.add("PLC4.C040.RecordData");
        lists.add("PLC4.OP030.RecordData");
        lists.add("PLC4.OP050.RecordData");
        lists.add("PLC4.OP070.RecordData");
        lists.add("PLC4.OP070_1.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");
        return lists;
    }
billion-main/src/main/java/com/billion/main/plcServer/conf/OPCElement.java
@@ -7,13 +7,6 @@
public class OPCElement {
    /**
     * C005
     */
    public static final String PLC1_C005_RecordData = "PLC1.C005.RecordData";//请求记录数据
    public static final String PLC1_C005_WorkOrderRequest = "PLC1.C005.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;
@@ -17,6 +16,7 @@
import com.billion.main.om.domain.OmProductionOrderInfo;
import com.billion.main.om.service.IOmOrderSchedulingService;
import com.billion.main.om.service.IOmProductionOrderInfoService;
import com.billion.main.plcServer.util.TimeUtil;
import com.billion.main.sys.domain.SysCount;
import com.billion.main.sys.service.ISysCountService;
import com.kangaroohy.milo.model.ReadWriteEntity;
@@ -25,6 +25,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
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,32 +92,40 @@
            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.C005.equals(device) || Constants.OP005.equals(device) || Constants.P010.equals(device)){
                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("11").build());
                    if(Constants.ONLINE.contains(device)){
                        miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(11).build());
                    }
                    ///////除首工站所有工站
                    else if(Constants.PLC1.contains(device) && Constants.OP310.contains(device)){
                    //除首工站所有工站
                    else if(
                            Constants.PLC1.contains(device) ||
                            Constants.PLC2.contains(device) ||
                            Constants.PLC3.contains(device) ||
                            Constants.PLC4.contains(device) ||
                            Constants.OFFLINE.contains(device)
                    ){
                        //校验SFCCode是否存在
                        Object SFCCode = miloService.readFromOpcUa(thoroughfare + "." + device + ".SFCCode").getValue();
                        Object PalletID = miloService.readFromOpcUa(thoroughfare + "." + device + ".PalletID").getValue();
                        if (SFCCode == null ) {
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("23").build());
                                miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(13).build());
                        } else {
                            OmOrderScheduling omOrderScheduling = new OmOrderScheduling();
                            omOrderScheduling.setRemarks(PalletID.toString());
                            omOrderScheduling.setSfcCode(SFCCode.toString());
                            List<OmOrderScheduling> resultList = omOrderSchedulingService.selectOmOrderSchedulingList(omOrderScheduling);
                            log.info("查询结果数量: {}", resultList);
                            BsBomChildInfo bsbomChildInfo= new BsBomChildInfo();
                            bsbomChildInfo.setLocationCode(device);
                            bsbomChildInfo.setBomCode(resultList.get(0).getWorkOrderNo());
                            //下发配方
                            formula(thoroughfare, device, bsbomChildInfo);
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("11").build());
                            if(resultList != null){
                                String getWorkOrderNo = resultList.get(0).getWorkOrderNo();
                                BsBomChildInfo bsbomChildInfo= new BsBomChildInfo();
                                bsbomChildInfo.setLocationCode(device);
                                bsbomChildInfo.setBomCode(getWorkOrderNo);
                                //下发配方
                                formula(thoroughfare, device, bsbomChildInfo);
                                miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(11).build());
                            }else {
                                miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(13).build());
                            }
                        }
                    }
                //出站保存数据
@@ -123,22 +134,44 @@
                    OmOrderScheduling omOrderScheduling = new OmOrderScheduling();
                    Object SFCCode = miloService.readFromOpcUa(thoroughfare + "." + device + ".SFCCode").getValue();
                    //上线工位
//                    if(Constants.ONLINE.contains(device) || Constants.TEST.equals(device) ){
                    if(Constants.ONLINE.contains(device)){
                        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());
                        Date Time = new Date();
                        ReadWriteEntity TimeRead = miloService.readFromOpcUa(thoroughfare + "." + device + ".StartTime");
                        Time = format.parse(TimeUtil.test(TimeUtil.stringProcessing(TimeRead.getValue().toString())));
                        omOrderScheduling.setOnlineTime(Time);
                        omOrderScheduling.setStatus("1");
                        //托盘绑定SFCCode和工单和产线
                        if(Constants.OP005.equals(device)){
                            omProductionOrderInfoService.updateBodyStatus1();
                            omOrderScheduling.setRemarks("Body");
                            sysCountService.updateSerialNumber();
                            OmProductionOrderInfo getBodyOrder2 = omProductionOrderInfoService.getBodyOrder();
                            if (Objects.equals(getBodyOrder2.getBodyQty(), getBodyOrder2.getPlanQty())){
                                omProductionOrderInfoService.updateBodyStatus2();
                            }
                        }
                        if(Constants.C005.equals(device)){
                            omProductionOrderInfoService.updateHeadStatus1();
                            omOrderScheduling.setRemarks("Head");
                            sysCountService.updateHeadNumber();
                            OmProductionOrderInfo getHeadOrder2 = omProductionOrderInfoService.getHeadOrder();
                            if (Objects.equals(getHeadOrder2.getHeadQty(), getHeadOrder2.getPlanQty())){
                                omProductionOrderInfoService.updateHeadStatus2();
                            }
                        }
                        omOrderSchedulingService.insertOmOrderScheduling(omOrderScheduling);
                    }else if(Constants.OFFLINE.contains(device)){
                        if(Constants.C070.equals(device)){
                        Date Time = new Date();
                        ReadWriteEntity TimeRead = miloService.readFromOpcUa(thoroughfare + "." + device + ".StopTime");
                        Time = format.parse(TimeUtil.test(TimeUtil.stringProcessing(TimeRead.getValue().toString())));
                        omOrderScheduling.setOfflineTime(Time);
                        if(Constants.C060.equals(device)){
                            omOrderScheduling.setRemarks("Head");
                            omOrderScheduling.setSfcCode(SFCCode.toString());
                            List<OmOrderScheduling> omOrderSchedulingList = omOrderSchedulingService.selectOmOrderSchedulingList(omOrderScheduling);
@@ -148,12 +181,9 @@
                            List<OmProductionOrderInfo> omProductionOrderInfoList = omProductionOrderInfoService.selectOmProductionOrderInfoList(omProductionOrderInfo);
                            Object headQty = omProductionOrderInfoList.get(0).getHeadQty();
                            if (nowQty == headQty){
//                                omProductionOrderInfoList.get(0).setHeadStatus("3");
//                                omProductionOrderInfoService.updateOmProductionOrderInfo(omProductionOrderInfoList.get(0));
                                UpdateWrapper<OmProductionOrderInfo> updateWrapper = new UpdateWrapper<>();
                                updateWrapper.eq("work_order_no", omProductionOrderInfoList.get(0).getWorkOrderNo());
                                updateWrapper.set("body_status", "3");
                                updateWrapper.set("head_status", "2");
                                omProductionOrderInfoService.update(new OmProductionOrderInfo(),updateWrapper);
                            }
                        } else if (Constants.OP310.equals(device)) {
@@ -166,17 +196,17 @@
                            List<OmProductionOrderInfo> omProductionOrderInfoList = omProductionOrderInfoService.selectOmProductionOrderInfoList(omProductionOrderInfo);
                            Object bodyQty = omProductionOrderInfoList.get(0).getBodyQty();
                            if (nowQty == bodyQty){
                                omProductionOrderInfoList.get(0).setBodyStatus("3");
                                omProductionOrderInfoService.updateOmProductionOrderInfo(omProductionOrderInfoList.get(0));
                                UpdateWrapper<OmProductionOrderInfo> updateWrapper = new UpdateWrapper<>();
                                updateWrapper.eq("work_order_no", omProductionOrderInfoList.get(0).getWorkOrderNo());
                                updateWrapper.set("body_status", "2");
                                omProductionOrderInfoService.update(new OmProductionOrderInfo(),updateWrapper);
                            }
                        }
                    } else if (Constants.P010.equals(device)) {
                        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);
@@ -186,11 +216,17 @@
                        List<OmProductionOrderInfo> omProductionOrderInfoList = omProductionOrderInfoService.selectOmProductionOrderInfoList(omProductionOrderInfo);
                        Object preQty = omProductionOrderInfoList.get(0).getPreQty();
                        if (nowQty == preQty){
                            omProductionOrderInfoList.get(0).setPreStatus("3");
                            UpdateWrapper<OmProductionOrderInfo> updateWrapper = new UpdateWrapper<>();
                            updateWrapper.eq("work_order_no", omProductionOrderInfoList.get(0).getWorkOrderNo());
                            updateWrapper.set("pre_status", "2");
                            omProductionOrderInfoService.update(new OmProductionOrderInfo(),updateWrapper);
                        }
                            omProductionOrderInfoService.updateOmProductionOrderInfo(omProductionOrderInfoList.get(0));
                        sysCountService.updatePreNumber();
                        omProductionOrderInfoService.updatePreStatus1();
                        OmProductionOrderInfo getPreOrder2 = omProductionOrderInfoService.getPreOrder();
                        if (Objects.equals(getPreOrder2.getPreQty(), getPreOrder2.getPlanQty())){
                            omProductionOrderInfoService.updatePreStatus2();
                        }
                    }
                    //查询descriptive字段等于1的采集项保存到扫码保存到da_material_collection表里
@@ -200,46 +236,70 @@
                    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"}
                        String valueObj = null;
                        ReadWriteEntity entity = miloService.readFromOpcUa(gatherAddress);
                        if (entity != null) {
                            Object value = entity.getValue();
                            if (value != null) {
                                valueObj = value.toString();  // æœ€ç»ˆèµ‹å€¼
                                if (!Objects.equals(valueObj, "                                                  ")) {
                                    DaMaterialCollection materialCollection = new DaMaterialCollection();
                                    materialCollection.setSfcCode(SFCCode.toString());
                                    materialCollection.setLocationCode(device);
                                    materialCollection.setParamName(conf.getParameterSetName());
                                    materialCollection.setParamValue(miloService.readFromOpcUa(gatherAddress).getValue().toString());
                                    Date Time = new Date();
                                    ReadWriteEntity TimeRead = miloService.readFromOpcUa(thoroughfare + "." + device + ".StopTime");
                                    Time = format.parse(TimeUtil.test(TimeUtil.stringProcessing(TimeRead.getValue().toString())));
                                    materialCollection.setCollectTime(Time);
                                    daMaterialCollectionService.insertDaMaterialCollection(materialCollection);
                                }
                                else {
                                    log.debug("采集项为空: {}", gatherAddress);
                                }
                            }
                        }
                        DaMaterialCollection materialCollection = new DaMaterialCollection();
                        materialCollection.setSfcCode(SFCCode.toString());
                        materialCollection.setLocationCode(device);
                        materialCollection.setParamName(conf.getParameterSetName());
                        materialCollection.setParamValue((String) miloService.readFromOpcUa(gatherAddress).getValue());
                        materialCollection.setCollectTime(new Date());
                        daMaterialCollectionService.insertDaMaterialCollection(materialCollection);
                    }
                    //查询descriptive字段等于2的采集项保存到扫码保存到da_param_collection表里
//                    æŸ¥è¯¢descriptive字段等于2的采集项保存到扫码保存到da_param_collection表里
                    DaCollectionParamConf daCollectionParamConf2 = new DaCollectionParamConf();
                    daCollectionParamConf2.setProcessesCode(device);
                    daCollectionParamConf2.setDescriptive("2");
                    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"}
                        String valueObj = miloService.readFromOpcUa(gatherAddress).getValue().toString(); // èŽ·å–原始值对象‌:ml-citation{ref="4" data="citationList"}
                        if (!Objects.equals(valueObj, "0.0") && !Objects.equals(valueObj, "0")) {
                            DaParamCollection paramCollection = new DaParamCollection();
                            paramCollection.setSfcCode(SFCCode.toString());
                            paramCollection.setLocationCode(device);
                            paramCollection.setParamName(conf.getParameterSetName());
                            paramCollection.setParamValue(miloService.readFromOpcUa(gatherAddress).getValue().toString());
                            Date Time = new Date();
                            ReadWriteEntity TimeRead = miloService.readFromOpcUa(thoroughfare + "." + device + ".StopTime");
                            Time = format.parse(TimeUtil.test(TimeUtil.stringProcessing(TimeRead.getValue().toString())));
                            paramCollection.setCollectTime(Time);
                            daParamCollectionService.insertDaParamCollection(paramCollection);
                        }
                        DaParamCollection paramCollection = new DaParamCollection();
                        paramCollection.setSfcCode(SFCCode.toString());
                        paramCollection.setLocationCode(device);
                        paramCollection.setParamName(conf.getParameterSetName());
                        paramCollection.setParamValue((String) miloService.readFromOpcUa(gatherAddress).getValue());
                        paramCollection.setCollectionTime(new Date());
                        daParamCollectionService.insertDaParamCollection(paramCollection);
                        else {
                            log.debug("采集项为空: {}", gatherAddress);
                        }
                    }
                    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());
                }
            }
        }
@@ -247,13 +307,14 @@
            log.error(e.getMessage());
        }
}
    //首工站下发工单,并生成SN码
    private static final String[] MONTH = {"A","B","C","D","E","F","G","H","I","J","K","L"};
    public void plackWorkOrder(String thoroughfare, String device, String tab, String valueString) {
    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)){
                    // æŸ¥è¯¢æ•°æ®åº“获取符合条件的订单信息
@@ -262,7 +323,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();
@@ -276,7 +336,6 @@
                                String SFCCode = A1 + A2 + A3+ A4 + A5;
                                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
                                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
                                sysCountService.updateSerialNumber();
                            }else{
                                sysCountService.clean();
                                sysCountService.updateYear();
@@ -288,7 +347,6 @@
                                String SFCCode = A1 + A2 + newA3+ A4 + A5;
                                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
                                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
                                sysCountService.updateSerialNumber();
                            }
                            // æ›´æ–° WorkOrderRequestDone åœ°å€å—
                            BsBomChildInfo bsbomChildInfo= new BsBomChildInfo();
@@ -296,15 +354,19 @@
                            bsbomChildInfo.setBomCode(getBodyOrder.getWorkOrderNo());
                            //发下工艺配方
                            formula(thoroughfare, device, bsbomChildInfo);
                            omProductionOrderInfoService.updateBodyStatus1();
//                          omProductionOrderInfoService.updateBodyStatus1();
                            //判断缸体工单完成
                            OmProductionOrderInfo getBodyOrder2 = omProductionOrderInfoService.getBodyOrder();
                            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());
//                            OmProductionOrderInfo getBodyOrder2 = omProductionOrderInfoService.getBodyOrder();
//                            if (Objects.equals(getBodyOrder2.getBodyQty(), getBodyOrder2.getPlanQty())){
//                                omProductionOrderInfoService.updateBodyStatus2();
//                            }
                            String PalletID = String.valueOf(getBodyOrder.getBodyQty() + 1);
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(PalletID).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)) {
                    // æŸ¥è¯¢æ•°æ®åº“获取符合条件的订单信息
                    OmProductionOrderInfo getHeadOrder = omProductionOrderInfoService.getHeadOrder();
@@ -312,7 +374,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();
@@ -326,7 +387,6 @@
                            String SFCCode = A1 + A2 + A3+ A4 + A5;
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
                            sysCountService.updateHeadNumber();
                        }else{
                            sysCountService.clean();
                            sysCountService.updateYear();
@@ -338,7 +398,6 @@
                            String SFCCode = A1 + A2 + newA3+ A4 + A5;
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
                            sysCountService.updateHeadNumber();
                        }
                        // æ›´æ–° WorkOrderRequestDone åœ°å€å—
                        BsBomChildInfo bsbomChildInfo= new BsBomChildInfo();
@@ -346,14 +405,18 @@
                        bsbomChildInfo.setBomCode(getHeadOrder.getWorkOrderNo());
                        //发下工艺配方
                        formula(thoroughfare, device, bsbomChildInfo);
                        omProductionOrderInfoService.updateHeadStatus1();
//                        omProductionOrderInfoService.updateHeadStatus1();
                        //判断缸体工单完成
                        OmProductionOrderInfo getHeadOrder2 = omProductionOrderInfoService.getHeadOrder();
                        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());
//                        OmProductionOrderInfo getHeadOrder2 = omProductionOrderInfoService.getHeadOrder();
//                        if (Objects.equals(getHeadOrder2.getHeadQty(), getHeadOrder2.getPlanQty())){
//                            omProductionOrderInfoService.updateHeadStatus2();
//                        }
                        String PalletID = String.valueOf(getHeadOrder.getHeadQty() + 1);
                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(PalletID).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)) {
                    // æŸ¥è¯¢æ•°æ®åº“获取符合条件的订单信息
@@ -362,7 +425,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();
@@ -375,7 +437,6 @@
                            String SFCCode = A1 + A2 + A3+ A4 + A5;
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
                            sysCountService.updatePreNumber();
                        }else{
                            sysCountService.clean();
                            sysCountService.updateYear();
@@ -387,23 +448,25 @@
                            String SFCCode = A1 + A2 + newA3+ A4 + A5;
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
                            sysCountService.updateHeadNumber();
                        }
                        // æ›´æ–° WorkOrderRequestDone åœ°å€å—
                        BsBomChildInfo bsbomChildInfo= new BsBomChildInfo();
                        bsbomChildInfo.setLocationCode(device);
                        bsbomChildInfo.setBomCode(getPreOrder.getWorkOrderNo());
                        //发下工艺配方
                        formula(thoroughfare, device, bsbomChildInfo);
                        omProductionOrderInfoService.updatePreStatus1();
//                        omProductionOrderInfoService.updatePreStatus1();
                        //判断缸体工单完成
                        OmProductionOrderInfo getPreOrder2 = omProductionOrderInfoService.getPreOrder();
                        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());
//                        OmProductionOrderInfo getPreOrder2 = omProductionOrderInfoService.getPreOrder();
//                        if (Objects.equals(getPreOrder2.getPreQty(), getPreOrder2.getPlanQty())){
//                            omProductionOrderInfoService.updatePreStatus2();
//                        }
                        String PalletID = String.valueOf(getPreOrder.getPreQty() + 1);
                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(PalletID).build());
                        miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value(11).build());
                    }
                    else{
                        miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value(12).build());
                    }
                }
            }
@@ -418,9 +481,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>
    
billion-main/src/main/resources/mapper/da/DaParamCollectionMapper.xml
@@ -38,21 +38,21 @@
    <insert id="insertDaParamCollection" parameterType="DaParamCollection" useGeneratedKeys="true" keyProperty="id">
        insert into da_param_collection
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="sfcCode != null and sfcCode != ''">sfc_code,</if>
            <if test="locationCode != null and locationCode != ''">location_code,</if>
            <if test="paramCode != null and paramCode != ''">param_code,</if>
            <if test="sfcCode != null">sfc_code,</if>
            <if test="locationCode != null">location_code,</if>
            <if test="paramCode != null">param_code,</if>
            <if test="paramName != null">param_name,</if>
            <if test="paramValue != null and paramValue != ''">param_value,</if>
            <if test="paramValue != null">param_value,</if>
            <if test="collectTime != null">collect_time,</if>
         </trim>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="sfcCode != null and sfcCode != ''">#{sfcCode},</if>
            <if test="locationCode != null and locationCode != ''">#{locationCode},</if>
            <if test="paramCode != null and paramCode != ''">#{paramCode},</if>
            <if test="sfcCode != null">#{sfcCode},</if>
            <if test="locationCode != null">#{locationCode},</if>
            <if test="paramCode != null">#{paramCode},</if>
            <if test="paramName != null">#{paramName},</if>
            <if test="paramValue != null and paramValue != ''">#{paramValue},</if>
            <if test="paramValue != null">#{paramValue},</if>
            <if test="collectTime != null">#{collectTime},</if>
         </trim>
        </trim>
    </insert>
    <update id="updateDaParamCollection" parameterType="DaParamCollection">
billion-main/src/main/resources/mapper/om/OmOrderSchedulingMapper.xml
@@ -31,8 +31,10 @@
            <if test="workOrderNo != null  and workOrderNo != ''"> and work_order_no = #{workOrderNo}</if>
            <if test="sfcCode != null  and sfcCode != ''"> and sfc_code = #{sfcCode}</if>
            <if test="productCode != null  and productCode != ''"> and product_code = #{productCode}</if>
            <if test="params.beginOnlineTime != null and params.beginOnlineTime != '' and params.endOnlineTime != null and params.endOnlineTime != ''"> and online_time between #{params.beginOnlineTime} and #{params.endOnlineTime}</if>
            <if test="params.beginOfflineTime != null and params.beginOfflineTime != '' and params.endOfflineTime != null and params.endOfflineTime != ''"> and offline_time between #{params.beginOfflineTime} and #{params.endOfflineTime}</if>
<!--            <if test="params.beginOnlineTime != null and params.beginOnlineTime != '' and params.endOnlineTime != null and params.endOnlineTime != ''"> and online_time between #{params.beginOnlineTime} and #{params.endOnlineTime}</if>-->
<!--            <if test="params.beginOfflineTime != null and params.beginOfflineTime != '' and params.endOfflineTime != null and params.endOfflineTime != ''"> and offline_time between #{params.beginOfflineTime} and #{params.endOfflineTime}</if>-->
<!--&#45;&#45;          <if test="params.beginOnlineTime != null and params.beginOnlineTime != '' and params.endOnlineTime != null and params.endOnlineTime != ''"> </if>-->
<!--            <if test="params.beginOfflineTime != null and params.beginOfflineTime != '' and params.endOfflineTime != null and params.endOfflineTime != ''"></if>-->
            <if test="status != null  and status != ''"> and status = #{status}</if>
            <if test="nowQty != null  and nowQty != ''"> and now_qty = #{nowQty}</if>
        </where>
billion-main/src/main/resources/mapper/om/OmProductionOrderInfoMapper.xml
@@ -20,6 +20,16 @@
        <result property="updateBy"    column="update_by"    />
        <result property="remarks"    column="remarks"    />
        <result property="delFlag"    column="del_flag"    />
        <result property="engineType"    column="engine_type"    />
        <result property="engineName"    column="engine_name"    />
        <result property="flag"    column="flag"    />
        <result property="bodyQty"    column="body_qty"    />
        <result property="headQty"    column="head_qty"    />
        <result property="preQty"    column="pre_qty"    />
        <result property="bodyStatus"    column="body_status"    />
        <result property="headStatus"    column="head_status"    />
        <result property="preStatus"    column="pre_status"    />
    </resultMap>
    <sql id="selectOmProductionOrderInfoVo">
@@ -31,6 +41,7 @@
            SELECT TOP 1 *
            FROM om_production_order_info
            WHERE body_status IN (0,1)
            AND body_qty != plan_qty
            ORDER BY plan_start_time ASC
    </select>
    <select id="updateBodyStatus1" resultType="OmProductionOrderInfo">
@@ -46,7 +57,7 @@
    </select>
    <select id="updateBodyStatus2" resultType="OmProductionOrderInfo">
        UPDATE om_production_order_info
        SET body_status = 2
        SET body_status = 4
        WHERE id = (
            SELECT TOP 1 id
            FROM om_production_order_info
@@ -58,6 +69,7 @@
        SELECT TOP 1 *
        FROM om_production_order_info
        WHERE head_status IN (0,1)
          AND head_qty != plan_qty
        ORDER BY plan_start_time ASC
    </select>
    <select id="updateHeadStatus1" resultType="OmProductionOrderInfo">
@@ -73,7 +85,7 @@
    </select>
    <select id="updateHeadStatus2" resultType="OmProductionOrderInfo">
        UPDATE om_production_order_info
        SET head_status = 2
        SET head_status = 4
        WHERE id = (
            SELECT TOP 1 id
            FROM om_production_order_info
@@ -85,6 +97,7 @@
        SELECT TOP 1 *
        FROM om_production_order_info
        WHERE pre_status IN (0,1)
          AND pre_qty != plan_qty
        ORDER BY plan_start_time ASC
    </select>
    <select id="updatePreStatus1" resultType="OmProductionOrderInfo">
@@ -100,7 +113,7 @@
    </select>
    <select id="updatePreStatus2" resultType="OmProductionOrderInfo">
        UPDATE om_production_order_info
        SET pre_status = 2
        SET pre_status = 4
        WHERE id = (
            SELECT TOP 1 id
            FROM om_production_order_info
@@ -108,7 +121,6 @@
            ORDER BY plan_start_time ASC
        );
    </select>
@@ -134,7 +146,6 @@
            <if test="workOrderNo != null and workOrderNo != ''">work_order_no,</if>
            <if test="salesOrderCode != null and salesOrderCode != ''">sales_order_code,</if>
            <if test="productCode != null and productCode != ''">product_code,</if>
            <if test="lineCode != null and lineCode != ''">line_code,</if>
            <if test="planQty != null">plan_qty,</if>
            <if test="planStartTime != null">plan_start_time,</if>
            <if test="planEndTime != null">plan_end_time,</if>
@@ -150,7 +161,6 @@
            <if test="workOrderNo != null and workOrderNo != ''">#{workOrderNo},</if>
            <if test="salesOrderCode != null and salesOrderCode != ''">#{salesOrderCode},</if>
            <if test="productCode != null and productCode != ''">#{productCode},</if>
            <if test="lineCode != null and lineCode != ''">#{lineCode},</if>
            <if test="planQty != null">#{planQty},</if>
            <if test="planStartTime != null">#{planStartTime},</if>
            <if test="planEndTime != null">#{planEndTime},</if>
@@ -161,6 +171,7 @@
            <if test="updateBy != null">#{updateBy},</if>
            <if test="remarks != null">#{remarks},</if>
            <if test="delFlag != null">#{delFlag},</if>
            set del_flag = 0,
         </trim>
    </insert>
@@ -170,7 +181,6 @@
            <if test="workOrderNo != null and workOrderNo != ''">work_order_no = #{workOrderNo},</if>
            <if test="salesOrderCode != null and salesOrderCode != ''">sales_order_code = #{salesOrderCode},</if>
            <if test="productCode != null and productCode != ''">product_code = #{productCode},</if>
            <if test="lineCode != null and lineCode != ''">line_code = #{lineCode},</if>
            <if test="planQty != null">plan_qty = #{planQty},</if>
            <if test="planStartTime != null">plan_start_time = #{planStartTime},</if>
            <if test="planEndTime != null">plan_end_time = #{planEndTime},</if>
@@ -181,6 +191,12 @@
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="remarks != null">remarks = #{remarks},</if>
            <if test="delFlag != null">del_flag = #{delFlag},</if>
            <if test="bodyQty != null">body_qty = #{bodyQty},</if>
            <if test="headQty != null">head_qty = #{headQty},</if>
            <if test="preQty != null">pre_qty = #{preQty},</if>
            <if test="bodyStatus != null">body_status = #{bodyStatus},</if>
            <if test="headStatus != null">head_status = #{headStatus},</if>
            <if test="preStatus != null">pre_status = #{preStatus},</if>
        </trim>
        where id = #{id}
    </update>
billion-ui/src/views/main/bs/bomChildInfo/index.vue
@@ -81,6 +81,16 @@
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="info"
          plain
          icon="el-icon-upload2"
          size="mini"
          @click="handleImport"
          v-hasPermi="['system:user:import']"
        >导入</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="warning"
          plain
          icon="el-icon-download"
@@ -186,6 +196,38 @@
        <el-button @click="cancel">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
    <!-- ç”¨æˆ·å¯¼å…¥å¯¹è¯æ¡† -->
    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
      <el-upload
        ref="upload"
        :limit="1"
        accept=".xlsx, .xls"
        :headers="upload.headers"
        :action="upload.url + '?updateSupport=' + upload.updateSupport"
        :disabled="upload.isUploading"
        :on-progress="handleFileUploadProgress"
        :on-success="handleFileSuccess"
        :auto-upload="false"
        drag
      >
        <i class="el-icon-upload"></i>
        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
        <div class="el-upload__tip text-center" slot="tip">
          <div class="el-upload__tip" slot="tip">
            <el-checkbox v-model="upload.updateSupport" /> æ˜¯å¦æ›´æ–°å·²ç»å­˜åœ¨çš„数据
          </div>
          <span>仅允许导入xls、xlsx格式文件。</span>
          <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
        </div>
      </el-upload>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitFileForm">ç¡® å®š</el-button>
        <el-button @click="upload.open = false">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
  </div>
</template>
@@ -193,6 +235,7 @@
import { listBomChildInfo, getBomChildInfo, delBomChildInfo, addBomChildInfo, updateBomChildInfo } from "@/api/main/bs/bomChildInfo";
import { listBomInfo } from "@/api/main/bs/bomInfo";
import ItemSelect from "@/components/itemSelect/single.vue";
import {getToken} from "@/utils/auth";
export default {
  name: "BomChildInfo",
@@ -240,7 +283,19 @@
        productCode: "",
        productName: ""
      },
      // ç”¨æˆ·å¯¼å…¥å‚æ•°
      upload: {
        open: false,
        title: "",
        // æ˜¯å¦ç¦ç”¨ä¸Šä¼ 
        isUploading: false,
        // æ˜¯å¦æ›´æ–°å·²ç»å­˜åœ¨çš„用户数据
        updateSupport: 0,
        // è®¾ç½®ä¸Šä¼ çš„请求头部
        headers: { Authorization: "Bearer " + getToken() },
        // ä¸Šä¼ çš„地址
        url: process.env.VUE_APP_BASE_API + "/bs/bomChildInfo/importData"
      },
      // è¡¨å•å‚æ•°
      form: {},
      // è¡¨å•æ ¡éªŒ
@@ -388,7 +443,33 @@
      this.download('bs/bomChildInfo/export', {
        ...this.queryParams
      }, `bomChildInfo_${new Date().getTime()}.xlsx`)
    }
    },
    /** å¯¼å…¥æŒ‰é’®æ“ä½œ */
    handleImport() {
      this.upload.title = "数据导入";
      this.upload.open = true;
    },
    // æ–‡ä»¶ä¸Šä¼ ä¸­å¤„理
    handleFileUploadProgress(event, file, fileList) {
      this.upload.isUploading = true;
    },
    // æ–‡ä»¶ä¸Šä¼ æˆåŠŸå¤„理
    handleFileSuccess(response, file, fileList) {
      this.upload.open = false;
      this.upload.isUploading = false;
      this.$refs.upload.clearFiles();
      this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
      this.getList();
    },
    // æäº¤ä¸Šä¼ æ–‡ä»¶
    submitFileForm() {
      this.$refs.upload.submit();
    },
    /** ä¸‹è½½æ¨¡æ¿æ“ä½œ */
    importTemplate() {
      this.download('bs/bomChildInfo/importTemplate', {
      }, `bom_child_${new Date().getTime()}.xlsx`)
    },
  }
};
</script>
billion-ui/src/views/main/bs/bomInfo/index.vue
@@ -74,16 +74,6 @@
      </el-col>
      <el-col :span="1.5">
        <el-button
          plain
          icon="el-icon-setting"
          size="mini"
          :disabled="multiple"
          @click="statusChange"
          v-hasPermi="['bs:bomInfo:remove']"
        >状态变更</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="warning"
          plain
          icon="el-icon-download"
billion-ui/src/views/main/bs/lineInfo/index.vue
@@ -73,13 +73,6 @@
      <el-table-column :show-overflow-tooltip="true" label="产线编号" align="center" prop="lineCode" />
      <el-table-column :show-overflow-tooltip="true" label="产线名称" align="center" prop="lineName" />
      <el-table-column :show-overflow-tooltip="true" label="备注" align="center" prop="remarks" />
      <el-table-column :show-overflow-tooltip="true" label="创建用户" align="center" prop="createBy" />
      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
      </el-table-column>
      <el-table-column :show-overflow-tooltip="true" label="更改用户" align="center" prop="updateBy" />
      <el-table-column label="更改时间" align="center" prop="updateTime" width="180">
      </el-table-column>
      <el-table-column :show-overflow-tooltip="true" label="状态" align="center" prop="status" />
    </el-table>
    <pagination
billion-ui/src/views/main/da/materialCollection/index.vue
@@ -19,30 +19,6 @@
          end-placeholder="结束日期">
        </el-date-picker>
      </el-form-item>
<!--      <el-form-item label="工位编码" prop="locationCode">-->
<!--        <el-input-->
<!--          v-model="queryParams.locationCode"-->
<!--          placeholder="请输入工位编码"-->
<!--          clearable-->
<!--          @keyup.enter.native="handleQuery"-->
<!--        />-->
<!--      </el-form-item>-->
<!--      <el-form-item label="参数编码" prop="paramCode">-->
<!--        <el-input-->
<!--          v-model="queryParams.paramCode"-->
<!--          placeholder="请输入参数编码"-->
<!--          clearable-->
<!--          @keyup.enter.native="handleQuery"-->
<!--        />-->
<!--      </el-form-item>-->
<!--      <el-form-item label="参数名称" prop="paramName">-->
<!--        <el-input-->
<!--          v-model="queryParams.paramName"-->
<!--          placeholder="请输入参数名称"-->
<!--          clearable-->
<!--          @keyup.enter.native="handleQuery"-->
<!--        />-->
<!--      </el-form-item>-->
      <el-form-item style="float: right">
        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -50,38 +26,6 @@
    </el-form>
    <el-row :gutter="10" class="mb8">
<!--      <el-col :span="1.5">-->
<!--        <el-button-->
<!--          type="primary"-->
<!--          plain-->
<!--          icon="el-icon-plus"-->
<!--          size="mini"-->
<!--          @click="handleAdd"-->
<!--          v-hasPermi="['da:materialCollection:add']"-->
<!--        >新增</el-button>-->
<!--      </el-col>-->
<!--      <el-col :span="1.5">-->
<!--        <el-button-->
<!--          type="success"-->
<!--          plain-->
<!--          icon="el-icon-edit"-->
<!--          size="mini"-->
<!--          :disabled="single"-->
<!--          @click="handleUpdate"-->
<!--          v-hasPermi="['da:materialCollection:edit']"-->
<!--        >修改</el-button>-->
<!--      </el-col>-->
<!--      <el-col :span="1.5">-->
<!--        <el-button-->
<!--          type="danger"-->
<!--          plain-->
<!--          icon="el-icon-delete"-->
<!--          size="mini"-->
<!--          :disabled="multiple"-->
<!--          @click="handleDelete"-->
<!--          v-hasPermi="['da:materialCollection:remove']"-->
<!--        >删除</el-button>-->
<!--      </el-col>-->
      <el-col :span="1.5">
        <el-button
          type="warning"
@@ -99,7 +43,6 @@
<!--      <el-table-column label="主键id" align="center" prop="id" />-->
      <el-table-column label="总成序列号" align="center" prop="sfcCode" />
      <el-table-column label="工位编码" align="center" prop="locationCode" />
      <el-table-column label="参数编码" align="center" prop="paramCode" />
      <el-table-column label="参数名称" align="center" prop="paramName" />
      <el-table-column label="参数值" align="center" prop="paramValue" />
      <el-table-column label="采集时间" align="center" prop="collectTime" width="180">
billion-ui/src/views/main/da/paramCollection/index.vue
@@ -9,9 +9,9 @@
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
     <el-form-item label-width="120" label="采集时间" prop="timeQuery">
     <el-form-item label-width="120" label="采集时间" prop="collectTime">
        <el-date-picker
          v-model="queryParams.timeQuery"
          v-model="queryParams.collectTime"
          type="datetimerange"
          range-separator="至"
          value-format="yyyy-MM-dd HH:mm:ss"
@@ -61,38 +61,6 @@
    </el-form>
    <el-row :gutter="10" class="mb8">
<!--      <el-col :span="1.5">-->
<!--        <el-button-->
<!--          type="primary"-->
<!--          plain-->
<!--          icon="el-icon-plus"-->
<!--          size="mini"-->
<!--          @click="handleAdd"-->
<!--          v-hasPermi="['da:paramCollection:add']"-->
<!--        >新增</el-button>-->
<!--      </el-col>-->
<!--      <el-col :span="1.5">-->
<!--        <el-button-->
<!--          type="success"-->
<!--          plain-->
<!--          icon="el-icon-edit"-->
<!--          size="mini"-->
<!--          :disabled="single"-->
<!--          @click="handleUpdate"-->
<!--          v-hasPermi="['da:paramCollection:edit']"-->
<!--        >修改</el-button>-->
<!--      </el-col>-->
<!--      <el-col :span="1.5">-->
<!--        <el-button-->
<!--          type="danger"-->
<!--          plain-->
<!--          icon="el-icon-delete"-->
<!--          size="mini"-->
<!--          :disabled="multiple"-->
<!--          @click="handleDelete"-->
<!--          v-hasPermi="['da:paramCollection:remove']"-->
<!--        >删除</el-button>-->
<!--      </el-col>-->
      <el-col :span="1.5">
        <el-button
          type="warning"
@@ -108,10 +76,8 @@
    <el-table v-loading="loading" border :data="paramCollectionList" @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" align="center" />
<!--      <el-table-column label="主键id" align="center" prop="id" />-->
      <el-table-column label="总成序列号" align="center" prop="sfcCode" />
      <el-table-column label="工位编码" align="center" prop="locationCode" />
      <el-table-column label="参数编码" align="center" prop="paramCode" />
      <el-table-column label="参数名称" align="center" prop="paramName" />
      <el-table-column label="参数值" align="center" prop="paramValue" />
      <el-table-column label="采集时间" align="center" prop="collectTime" width="180">
billion-ui/src/views/main/da/stationCollection/index.vue
@@ -94,14 +94,13 @@
    <el-table border v-loading="loading" :data="daStationCollectionList" @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" align="center" />
      <el-table-column label="主键id" align="center" prop="id" />
      <el-table-column :show-overflow-tooltip="true" label="总成序列号" align="center" prop="sfcCode" />
      <el-table-column :show-overflow-tooltip="true" label="工位编码" align="center" prop="locationCode" />
      <el-table-column label="进站时间" align="center" prop="inboundTime" width="180">
      </el-table-column>
      <el-table-column label="出站时间" align="center" prop="outboundTime" width="180">
      </el-table-column>
      <el-table-column :show-overflow-tooltip="true" label="状态" align="center" prop="status" />
      <el-table-column :show-overflow-tooltip="true" label="站状态" align="center" prop="status" />
      <el-table-column label="采集时间" align="center" prop="collectTime" width="180">
      </el-table-column>
    </el-table>
billion-ui/src/views/main/om/info/index.vue
@@ -26,16 +26,6 @@
            @keyup.enter.native="handleQuery"
          />
        </el-form-item>
        <el-form-item label="工单状态" prop="orderStatus">
          <el-select v-model="queryParams.orderStatus" placeholder="请选择工单状态" clearable>
            <el-option
              v-for="dict in dict.type.order_status"
              :key="dict.value"
              :label="dict.label"
              :value="dict.value"
            />
          </el-select>
        </el-form-item>
        <el-form-item style="float: right; margin-right: 90px">
          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -46,16 +36,6 @@
    <div style="width: 600px">
      <el-row :gutter="10" class="mb8" >
        <el-col :span="1.5">
          <el-button
            type="primary"
            plain
            icon="el-icon-plus"
            size="mini"
            @click="handleAdd"
            v-hasPermi="['main:info:add']"
          >新增</el-button>
        </el-col>
        <el-col :span="1.5">
          <el-button
            type="success"
@@ -69,17 +49,6 @@
        </el-col>
        <el-col :span="1.5">
          <el-button
            type="danger"
            plain
            icon="el-icon-delete"
            size="mini"
            :disabled="multiple"
            @click="handleDelete"
            v-hasPermi="['main:info:remove']"
          >删除</el-button>
        </el-col>
        <el-col :span="1.5">
          <el-button
            type="warning"
            plain
            icon="el-icon-download"
@@ -90,62 +59,85 @@
        </el-col>
        <el-col :span="1.5">
          <el-button
            type="primary"
            type="success"
            plain
            icon="el-icon-receiving"
            icon="el-icon-edit"
            size="mini"
            @click="handleReceive"
          >接收工单</el-button>
            :disabled="single"
            @click="bodyStatus"
            v-hasPermi="['main:info:edit']"
          >缸体暂停\启动</el-button>
        </el-col>
        <el-col :span="1.5">
          <el-button
            type="primary"
            plain
            :disabled="multiple"
            icon="el-icon-magic-stick"
            icon="el-icon-edit"
            size="mini"
            @click="handleCreate"
          >生成</el-button>
            :disabled="single"
            @click="headStatus"
            v-hasPermi="['main:info:edit']"
          >缸盖暂停\启动</el-button>
        </el-col>
        <el-col :span="1.5">
          <el-button
            type="info"
            plain
            icon="el-icon-edit"
            size="mini"
            :disabled="single"
            @click="preStatus"
            v-hasPermi="['main:info:edit']"
          >预装暂停\启动</el-button>
        </el-col>
        <!--      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
      </el-row>
    </div>
    <el-table v-loading="loading" :data="infoList" @selection-change="handleSelectionChange">
    <el-table border  v-loading="loading" :data="infoList" @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" align="center" />
      <el-table-column label="工单编号" align="center" prop="workOrderNo" width="120">
        <template slot-scope="scope">
          <a style="color: #7099F9"  @click="orderDetail(scope.row.workOrderNo)" >{{scope.row.workOrderNo}}
          </a>
<!--          <div @click="orderDetail(scope.row.workOrderNo)">{{scope.row.workOrderNo}}</div>-->
        </template>
      </el-table-column>
      <el-table-column label="订单编号" align="center" prop="salesOrderCode" width="120"/>
      <el-table-column label="产品编号" align="center" prop="productCode" width="180"/>
      <el-table-column label="产线编号" align="center" prop="lineCode" />
      <el-table-column label="订单编号" align="center" prop="salesOrderCode" />
      <el-table-column label="产品编号" align="center" prop="productCode" />
      <el-table-column label="计划数量" align="center" prop="planQty" />
      <el-table-column label="计划开始时间" align="center" prop="planStartTime" width="120">
      <el-table-column label="计划开始时间" align="center" prop="planStartTime" >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.planStartTime, '{y}-{m}-{d}') }}</span>
          <span>{{ parseTime(scope.row.planStartTime, '{y}-{m}-{d} {h}:{i}') }}</span>
        </template>
      </el-table-column>
      <el-table-column label="计划结束时间" align="center" prop="planEndTime" width="120">
      <el-table-column label="计划结束时间" align="center" prop="planEndTime" >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.planEndTime, '{y}-{m}-{d}') }}</span>
          <span>{{ parseTime(scope.row.planEndTime, '{y}-{m}-{d} {h}:{i}') }}</span>
        </template>
      </el-table-column>
      <el-table-column label="工单状态" align="center" prop="orderStatus">
<!--      <el-table-column label="更新时间" align="center" prop="updateTime" >-->
<!--        <template slot-scope="scope">-->
<!--          <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}') }}</span>-->
<!--        </template>-->
<!--      </el-table-column>-->
      <el-table-column label="缸体上线数量" align="center" prop="bodyQty" />
      <el-table-column label="缸盖上线数量" align="center" prop="headQty" />
      <el-table-column label="预装上线数量" align="center" prop="preQty" />
      <el-table-column label="缸体工单状态" align="center" prop="bodyStatus" >
        <template slot-scope="scope">
          <dict-tag :options="dict.type.order_status" :value="scope.row.orderStatus"/>
          <dict-tag :options="dict.type.order_status" :value="scope.row.bodyStatus"/>
        </template>
      </el-table-column>
      <el-table-column label="更新时间" align="center" prop="updateTime" width="180">
      <el-table-column label="缸盖工单状态" align="center" prop="headStatus" >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
          <dict-tag :options="dict.type.order_status" :value="scope.row.headStatus"/>
        </template>
      </el-table-column>
      <el-table-column label="更新用户" align="center" prop="updateBy" />
      <el-table-column label="预装工单状态" align="center" prop="preStatus" >
        <template slot-scope="scope">
          <dict-tag :options="dict.type.order_status" :value="scope.row.preStatus"/>
        </template>
      </el-table-column>
      <el-table-column label="备注" width="180px" show-overflow-tooltip align="center" prop="remarks" />
    </el-table>
@@ -160,45 +152,51 @@
    <!-- æ·»åŠ æˆ–修改生产工单对话框 -->
    <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
        <el-form-item label="工单编号" prop="workOrderNo">
          <el-input v-model="form.workOrderNo" placeholder="请输入工单编号" />
        <el-form-item  label="工单编号" prop="workOrderNo">
          <el-input  disabled v-model="form.workOrderNo" placeholder="请输入工单编号" />
        </el-form-item>
        <el-form-item label="订单编号" prop="salesOrderCode">
          <el-input v-model="form.salesOrderCode" placeholder="请输入订单编号" />
        <el-form-item  label="订单编号" prop="salesOrderCode">
          <el-input disabled v-model="form.salesOrderCode" placeholder="请输入订单编号" />
        </el-form-item>
        <el-form-item label="产品编号" prop="productCode">
          <el-input v-model="form.productCode" placeholder="请输入产品编号" />
        <el-form-item  label="产品编号" prop="productCode">
          <el-input disabled v-model="form.productCode" placeholder="请输入产品编号" />
        </el-form-item>
        <el-form-item label="产线编号" prop="lineCode">
          <el-input v-model="form.lineCode" placeholder="请输入产线编号" />
        </el-form-item>
        <el-form-item label="计划数量" prop="planQty">
          <el-input v-model="form.planQty" placeholder="请输入计划数量" />
        <el-form-item  label="计划数量" prop="planQty">
          <el-input  v-model="form.planQty" placeholder="请输入计划数量" />
        </el-form-item>
        <el-form-item label="计划开始时间" prop="planStartTime">
          <el-date-picker clearable
            v-model="form.planStartTime"
            type="date"
            value-format="yyyy-MM-dd"
            type="datetime"
            value-format="yyyy-MM-dd HH:mm:ss"
            placeholder="请选择计划开始时间">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="计划结束时间" prop="planEndTime">
          <el-date-picker clearable
            v-model="form.planEndTime"
            type="date"
            value-format="yyyy-MM-dd"
            type="datetime"
            value-format="yyyy-MM-dd HH:mm:ss"
            placeholder="请选择计划结束时间">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="工单状态" prop="orderStatus" v-if = updateFlag>
          <el-radio-group v-model="form.orderStatus">
            <el-radio
              v-for="dict in dict.type.order_status"
              :key="dict.value"
              :label="dict.value"
            >{{dict.label}}</el-radio>
          </el-radio-group>
        <el-form-item  label="缸体数量" prop="bodyQty">
          <el-input  v-model="form.bodyQty" placeholder="请输入计划数量" />
        </el-form-item>
<!--        <el-form-item label="缸体工单状态" prop="bodyStatus" v-if = updateFlag>-->
<!--          <el-radio-group v-model="form.bodyStatus">-->
<!--            <el-radio-->
<!--              v-for="dict in dict.type.status"-->
<!--              :key="dict.value"-->
<!--              :label="dict.value"-->
<!--            >{{dict.label}}</el-radio>-->
<!--          </el-radio-group>-->
<!--        </el-form-item>-->
        <el-form-item  label="缸套数量" prop="headStatus">
          <el-input  v-model="form.headStatus" placeholder="请输入计划数量" />
        </el-form-item>
        <el-form-item  label="预装数量" prop="preStatus">
          <el-input  v-model="form.preStatus" placeholder="请输入计划数量" />
        </el-form-item>
        <el-form-item label="备注" prop="remarks">
          <el-input
@@ -330,9 +328,6 @@
        productCode: [
          { required: true, message: "产品编号不能为空", trigger: "blur" }
        ],
        lineCode: [
          { required: true, message: "产线编号不能为空", trigger: "blur" }
        ],
        planQty: [
          { required: true, message: "计划数量不能为空", trigger: "blur" }
        ],
@@ -407,6 +402,12 @@
        updateBy: null,
        remarks: null,
        delFlag: null,
        bodyQty: null,
        headQty: null,
        preQty: null,
        bodyStatus :null,
        headStatus :null,
        preStatus :null,
      };
      this.resetForm("form");
      this.addFlag = false
@@ -447,6 +448,91 @@
        this.title = "修改生产工单";
      });
    },
    /** ä¿®æ”¹ç¼¸ä½“状态按钮操作 */
    bodyStatus(row) {
      this.reset();
      const id = row.id || this.ids
      getInfo(id).then(response => {
        this.form = response.data;
        if(this.form.bodyStatus === "1"){
          this.form.bodyStatus = "5";
          updateInfo(this.form).then(response => {
            this.$modal.msgSuccess("暂停成功");
            this.getList();});
        }else if(this.form.bodyStatus === "2"){
          this.$message('订单已完成禁止修改');
        }else if(this.form.bodyStatus === "3") {
          this.$message('订单关闭禁止修改');
        }else if(this.form.bodyStatus === "4") {
          this.$message('订单已全部上线完成禁止修改');
        }
        else if(this.form.bodyStatus === "5") {
          this.form.bodyStatus = "1";
          updateInfo(this.form).then(response => {
            this.$modal.msgSuccess("重启成功");
            this.getList();});
        }else if(this.form.bodyStatus === "0"){
          this.$message('订单未开始');
        }
      });
    },
    /** ä¿®æ”¹ç¼¸ç›–状态按钮操作 */
    headStatus(row) {
      this.reset();
      const id = row.id || this.ids
      getInfo(id).then(response => {
        this.form = response.data;
        if(this.form.headStatus === "1"){
          this.form.headStatus = "5";
          updateInfo(this.form).then(response => {
            this.$modal.msgSuccess("暂停成功");
            this.getList();});
        }else if(this.form.headStatus === "2"){
          this.$message('订单已完成禁止修改');
        }else if(this.form.headStatus === "3") {
          this.$message('订单关闭禁止修改');
        }else if(this.form.headStatus === "4") {
          this.$message('订单已全部上线完成禁止修改');
        }
        else if(this.form.headStatus === "5") {
          this.form.headStatus = "1";
          updateInfo(this.form).then(response => {
            this.$modal.msgSuccess("重启成功");
            this.getList();});
        }else if(this.form.headStatus === "0"){
          this.$message('订单未开始');
        }
      });
    },
    /** ä¿®æ”¹é¢„装状态按钮操作 */
    preStatus(row) {
      this.reset();
      const id = row.id || this.ids
      getInfo(id).then(response => {
        this.form = response.data;
        if(this.form.preStatus === "1"){
          this.form.preStatus = "5";
          updateInfo(this.form).then(response => {
            this.$modal.msgSuccess("暂停成功");
            this.getList();});
        }else if(this.form.preStatus === "2"){
          this.$message('订单已完成禁止修改');
        }else if(this.form.preStatus === "3") {
          this.$message('订单关闭禁止修改');
        }else if(this.form.preStatus === "4") {
          this.$message('订单已全部上线完成禁止修改');
        }
        else if(this.form.preStatus === "5") {
          this.form.preStatus = "1";
          updateInfo(this.form).then(response => {
            this.$modal.msgSuccess("重启成功");
            this.getList();});
        }else if(this.form.preStatus === "0"){
          this.$message('订单未开始');
        }
      });
    },
    /** æäº¤æŒ‰é’® */
    submitForm() {
      this.$refs["form"].validate(valid => {
pom.xml
@@ -285,4 +285,5 @@
        </pluginRepository>
    </pluginRepositories>
</project>