admin
2024-10-15 cb4e543d5e4236ad3fc95ff4ed21a4a1f683062e
优化
已修改9个文件
261 ■■■■ 文件已修改
jcdm-main/src/main/java/com/jcdm/main/bs/formulaChild/domain/PrintOfflineReportInfo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/constant/Constants.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/controller/DaParamCollectionController.java 196 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/domain/DaParamCollection.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/service/IDaParamCollectionService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/service/impl/DaParamCollectionServiceImpl.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/restful/qingYan/service/ExternalInterface.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-ui/src/views/components/offlineQualificationReport.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-ui/src/views/main/kb/stationTerminal/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/bs/formulaChild/domain/PrintOfflineReportInfo.java
@@ -5,6 +5,8 @@
@Data
public class PrintOfflineReportInfo {
    private String inspectionDate;
    private String reviewerDate;
    private String productNum;
    private String param18;
    private String param19;
    private String param20;
jcdm-main/src/main/java/com/jcdm/main/constant/Constants.java
@@ -73,10 +73,10 @@
    public static final Integer INT_THREE= 3;
    public static final Integer INT_FOUR= 4;
    public static final Integer INT_ZERO= 0;
    public static final String FACTORY_EMS_UAT_GET_RUL = "https://imes-uat-group.geelycv-test.com/api/mom-open/restful/aMesSysIntegration/";
    public static final String FACTORY_EMS_UAT_POST_RUL = "https://imes-uat-group.geelycv-test.com/api/mom-open/restful/interface/";
//    public static final String FACTORY_EMS_UAT_GET_RUL = "https://imes-group.geelycv.com/api/mom-open/restful/aMesSysIntegration/";
//    public static final String FACTORY_EMS_UAT_POST_RUL = "https://imes-group.geelycv.com/api/mom-open/restful/interface/";
//    public static final String FACTORY_EMS_UAT_GET_RUL = "https://imes-uat-group.geelycv-test.com/api/mom-open/restful/aMesSysIntegration/";
//    public static final String FACTORY_EMS_UAT_POST_RUL = "https://imes-uat-group.geelycv-test.com/api/mom-open/restful/interface/";
    public static final String FACTORY_EMS_UAT_GET_RUL = "https://imes-group.geelycv.com/api/mom-open/restful/aMesSysIntegration/";
    public static final String FACTORY_EMS_UAT_POST_RUL = "https://imes-group.geelycv.com/api/mom-open/restful/interface/";
    public static final String FACTORY_EMS_SITE_CODE = "3983";
jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/controller/DaParamCollectionController.java
@@ -1,5 +1,9 @@
package com.jcdm.main.da.paramCollection.controller;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jcdm.common.annotation.Log;
import com.jcdm.common.core.controller.BaseController;
import com.jcdm.common.core.domain.AjaxResult;
@@ -10,6 +14,8 @@
import com.jcdm.main.bs.formulaChild.domain.PrintOfflineReportInfo;
import com.jcdm.main.da.paramCollection.domain.DaParamCollection;
import com.jcdm.main.da.paramCollection.service.IDaParamCollectionService;
import com.jcdm.main.da.testDeviceInterface.domain.DaTestDeviceInterface;
import com.jcdm.main.da.testDeviceInterface.service.IDaTestDeviceInterfaceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@@ -33,35 +39,165 @@
    @Autowired
    private IDaParamCollectionService daParamCollectionService;
    @Autowired
    private IDaTestDeviceInterfaceService daTestDeviceInterfaceService;
    /**
     * 查询设备产品过程参数采集列表
     */
    @GetMapping("/getPrintOfflineReportInfo")
    public AjaxResult getPrintOfflineReportInfo(DaParamCollection daParamCollection)
    {
        String result = "S";
        PrintOfflineReportInfo info = new PrintOfflineReportInfo();
        info.setParam18(">500");
        info.setParam19("0.3%,0%,0.5%");
        info.setParam20(">600");
        info.setParam21(">700");
        info.setParam22("0.22");
        info.setParam23("362");
        info.setParam24("8.18");
        info.setParam25("0.1");
        info.setParam26("21.53,42.33,42.19");
        info.setParam27("49.20,49.34,49.15");
        info.setParam28("0.061%,0.163%,0.223%");
        info.setParam29("35.1,35.0,35.1");
        info.setParam30("√");
        info.setParam31("0.0041");
        info.setParam32("3.06");
        info.setParam33("o.48");
        info.setParam34("4.7uA");
        info.setParam35("562.1");
        info.setParam36("-137.1");
        info.setParam37("√");
        DaParamCollection OP130_InsulationResistance1 = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP130_InsulationResistance1").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        info.setParam18(OP130_InsulationResistance1.getParamValue());
        DaParamCollection OP030_DifferenceProduct2_3 = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP030_DifferenceProduct2_3").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        DaParamCollection OP030_DifferenceProduct1_3 = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP030_DifferenceProduct1_3").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        DaParamCollection OP030_DifferenceProduct1_2 = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP030_DifferenceProduct1_2").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        info.setParam19(OP030_DifferenceProduct2_3.getParamValue()+","+OP030_DifferenceProduct1_3.getParamValue()+","+OP030_DifferenceProduct1_2.getParamValue());
        DaParamCollection OP130_InsulationResistance2 = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP130_InsulationResistance2").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        info.setParam20(OP130_InsulationResistance2.getParamValue());
        DaParamCollection OP130_TemperatureControlledWinding = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP130_TemperatureControlledWinding").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        info.setParam21(OP130_TemperatureControlledWinding.getParamValue());
        DaParamCollection OP130_WarmTransmission = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP130_WarmTransmission").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        info.setParam22(OP130_WarmTransmission.getParamValue());
        DaParamCollection OP130_InsulationResistance3 = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP130_InsulationResistance3").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        info.setParam23(OP130_InsulationResistance3.getParamValue());
        DaParamCollection OP130_Casing = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP130_Casing").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        info.setParam24(OP130_Casing.getParamValue());
        DaParamCollection OP130_GroundWithstandVoltage = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP130_GroundWithstandVoltage").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        info.setParam25(OP130_GroundWithstandVoltage.getParamValue());
        DaParamCollection OP130_RotaryResistanceValue3 = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP130_RotaryResistanceValue3").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        DaParamCollection OP130_RotaryResistanceValue2 = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP130_RotaryResistanceValue2").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        DaParamCollection OP130_RotaryResistanceValue1 = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP130_RotaryResistanceValue1").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        info.setParam26(OP130_RotaryResistanceValue3.getParamValue()+","+OP130_RotaryResistanceValue2.getParamValue()+","+OP130_RotaryResistanceValue1.getParamValue());
        DaParamCollection OP130_ThreePhaseResistance3 = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP130_ThreePhaseResistance3").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        DaParamCollection OP130_BalanceDegree2 = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP130_ThreePhaseResistance2").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        DaParamCollection OP130_BalanceDegree1 = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP130_ThreePhaseResistance1").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        info.setParam27(OP130_ThreePhaseResistance3.getParamValue()+","+OP130_BalanceDegree2.getParamValue()+","+OP130_BalanceDegree1.getParamValue());
        DaParamCollection OP130_28_BalanceDegree1 = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP130_BalanceDegree1").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        DaParamCollection OP130_28_BalanceDegree2 = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP130_BalanceDegree2").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        DaParamCollection OP130_28_BalanceDegree3 = daParamCollectionService.getOne(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP130_BalanceDegree3").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        info.setParam28(OP130_28_BalanceDegree1.getParamValue()+","+OP130_28_BalanceDegree2.getParamValue()+","+OP130_28_BalanceDegree3.getParamValue());
        info.setParam29(getParam29(daParamCollection.getProductNum()));
        List<DaParamCollection> OP030_RotationDirection = daParamCollectionService.list(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP030_RotationDirection").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        if(ObjectUtil.isNotEmpty(OP030_RotationDirection)){
            //1√ 2×
            String paramValue = OP030_RotationDirection.get(OP030_RotationDirection.size() - 1).getParamValue();
            if(paramValue.equals("1")){
                info.setParam30("√");
            }else if(paramValue.equals("2")){
                info.setParam30("❌");
            }else {
                info.setParam30("未知");
            }
        }else {
            result = "F";
        }
        List<DaParamCollection> OP230_GroundingMohm = daParamCollectionService.list(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP230_GroundingMohm").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        if(ObjectUtil.isNotEmpty(OP230_GroundingMohm)){
            //取小数点后两位 mΩ
            String paramValue = OP230_GroundingMohm.get(OP230_GroundingMohm.size() - 1).getParamValue();
            info.setParam31(paramValue.substring(0, 4)+"mΩ");
        }else {
            result = "F";
        }
        List<DaParamCollection> OP220_Divulge1 = daParamCollectionService.list(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP220_Divulge1").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        if(ObjectUtil.isNotEmpty(OP220_Divulge1)){
            info.setParam32(OP220_Divulge1.get(OP220_Divulge1.size()-1).getParamValue());
        }else {
            result = "F";
        }
        List<DaParamCollection> OP220_Divulge2 = daParamCollectionService.list(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP220_Divulge2").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        if(ObjectUtil.isNotEmpty(OP220_Divulge2)){
            info.setParam33(OP220_Divulge2.get(OP220_Divulge2.size()-1).getParamValue());
        }else {
            result = "F";
        }
        List<DaParamCollection> OP230_WithstanduUA = daParamCollectionService.list(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP230_WithstanduUA").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        if(ObjectUtil.isNotEmpty(OP230_WithstanduUA)){
            DaParamCollection daParamCollection1 = OP230_WithstanduUA.get(OP230_WithstanduUA.size() - 1);
            String paramValue = daParamCollection1.getParamValue();
            info.setParam34(OP230_WithstanduUA.get(OP230_WithstanduUA.size()-1).getParamValue()+"uA");
        }else {
            result = "F";
        }
        List<DaParamCollection> OP230_InsulationMohm = daParamCollectionService.list(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP230_InsulationMohm").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        if(ObjectUtil.isNotEmpty(OP230_InsulationMohm)){
            info.setParam35(OP230_InsulationMohm.get(OP230_InsulationMohm.size()-1).getParamValue());
        }else {
            result = "F";
        }
        List<DaParamCollection> OP120_2_RotatingAngle = daParamCollectionService.list(new LambdaQueryWrapper<DaParamCollection>().eq(DaParamCollection::getParamCode, "OP120-2_RotatingAngle").eq(DaParamCollection::getSfcCode,daParamCollection.getProductNum()));
        if(ObjectUtil.isNotEmpty(OP120_2_RotatingAngle)){
            info.setParam36(OP120_2_RotatingAngle.get(OP120_2_RotatingAngle.size()-1).getParamValue());
        }else {
            result = "F";
        }
        info.setParam37(getParam37(daParamCollection.getProductNum()));
//        info.setParam18(">500");
//        info.setParam19("0.3%,0%,0.5%");
//        info.setParam20(">600");
//        info.setParam21(">700");
//        info.setParam22("0.22");
//        info.setParam23("362");
//        info.setParam24("8.18");
//        info.setParam25("0.1");
//        info.setParam26("21.53,42.33,42.19");
//        info.setParam27("49.20,49.34,49.15");
//        info.setParam28("0.061%,0.163%,0.223%");
//        info.setParam29("35.1,35.0,35.1");
//        info.setParam30("√");
//        info.setParam31("0.0041");
//        info.setParam32("3.06");
//        info.setParam33("o.48");
//        info.setParam34("4.7uA");
//        info.setParam35("562.1");
//        info.setParam36("-137.1");
//        info.setParam37("√");
        info.setInspectionDate(getInspectionDate());
        info.setReviewerDate(getReviewerDate());
        info.setProductNum(daParamCollection.getProductNum().substring(13,26));
        System.out.println(info);
        return AjaxResult.success(info);
    }
    public String getParam37(String productNum){
        productNum = productNum.substring(13,26);
        List<DaTestDeviceInterface> one = daTestDeviceInterfaceService.list(new LambdaQueryWrapper<DaTestDeviceInterface>().like(DaTestDeviceInterface::getProductNum, productNum).eq(DaTestDeviceInterface::getStationCode,"OP240"));
        JSONArray jsonArray = new JSONArray(one.get(one.size()-1).getCheckList());
        JSONObject item = jsonArray.getJSONObject(1);
        return item.getStr("itemValue");
    }
    public String getParam29(String productNum){
        List<DaTestDeviceInterface> one = daTestDeviceInterfaceService.list(new LambdaQueryWrapper<DaTestDeviceInterface>().eq(DaTestDeviceInterface::getProductNum, productNum).eq(DaTestDeviceInterface::getStationCode,"OP150"));
        JSONArray jsonArray = new JSONArray(one.get(one.size()-1).getCheckList());
        JSONObject itemU = jsonArray.getJSONObject(0);
        JSONObject itemV = jsonArray.getJSONObject(1);
        JSONObject itemW = jsonArray.getJSONObject(2);
        return itemU.getStr("itemValue")+","+itemV.getStr("itemValue")+","+itemW.getStr("itemValue");
    }
    public static String getInspectionDate(){
@@ -73,8 +209,26 @@
        return today.format(formatter);
    }
    public static String getReviewerDate(){
        // 获取当前日期
        LocalDate today = LocalDate.now();
        // 定义日期格式(年.月.日)
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
        // 格式化当前日期
        return today.format(formatter);
    }
    public static void main(String[] args) {
        System.out.println(getInspectionDate());
        String input = "4.257426";
        // 确定起始位置和结束位置
        int startIndex = 13; // 起始位置
        int endIndex = 26;   // 结束位置
        // 截取字符串
        String extracted = input.substring(0, 4);
        System.out.println(getReviewerDate());
    }
    /**
jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/domain/DaParamCollection.java
@@ -120,6 +120,9 @@
    private String weightValue;
    @TableField(exist = false)
    private String productNum;
    @TableField(exist = false)
    private BsFormulaChildInfo formulaChildEntity;
    @TableField(exist = false)
jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/service/IDaParamCollectionService.java
@@ -92,4 +92,6 @@
    void preInstallOut(DaParamCollection daParamCollection);
    void saveParameters(DaParamCollection daParamCollection);
    void pushStartStopTime(String paramCode,String paramName,String productNum);
}
jcdm-main/src/main/java/com/jcdm/main/da/paramCollection/service/impl/DaParamCollectionServiceImpl.java
@@ -405,6 +405,35 @@
            daParamCollectionTempService.insertBatch(saveParamListTemp);
        }
    }
    @Override
    public void pushStartStopTime(String paramCode, String paramName, String productNum) {
        ParentVO parentVO = new ParentVO();
        parentVO.setSiteCode("3983");
        parentVO.setRecordId(String.valueOf(Instant.now().toEpochMilli()));
        parentVO.setStationCode("OP165");
        parentVO.setProductNum(productNum);
        parentVO.setTotalResult("1");
        List<ChildVO> listChildVo = new ArrayList<>();
        ChildVO childVO = new ChildVO();
        childVO.setItemCode(paramCode);
        childVO.setItemType("3");
        childVO.setItemText(paramName);
        childVO.setItemValue(format.format(new Date()));
        childVO.setCheckResult("1");
        childVO.setCheckTime(format.format(new Date()));
        listChildVo.add(childVO);
        parentVO.setCheckList(listChildVo);
        try{
            CompletableFuture<Void> cp1 = CompletableFuture.runAsync(() -> {
                HttpResponse execute = HttpRequest.post(Constants.FACTORY_EMS_UAT_GET_RUL+"deviceResultFeedback").body(JSONUtil.toJsonStr(parentVO)).execute();
                System.out.println(execute.body());
            });
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
    }
    @Override
    public void insertBatch(List<DaParamCollection> confList){
        try{
jcdm-main/src/main/java/com/jcdm/main/restful/qingYan/service/ExternalInterface.java
@@ -76,6 +76,9 @@
    @Autowired
    private IBsBeatSettingService bsBeatSettingService;
    @Autowired
    private IDaParamCollectionService daParamCollectionService;
    /**
     * 导出点检任务列表
     */
@@ -147,6 +150,12 @@
        return AjaxResult.success();
    }
    @GetMapping("/pushStartStopTime")
    public AjaxResult pushStartStopTime(@RequestParam String paramCode,@RequestParam String paramName,@RequestParam String productNum){
        daParamCollectionService.pushStartStopTime(paramCode,paramName,productNum);
        return AjaxResult.success();
    }
    /**
     * 放行请空状态
     */
jcdm-ui/src/views/components/offlineQualificationReport.vue
@@ -21,7 +21,7 @@
        <span>检验日期:{{printParam.inspectionDate}}</span>
      </td>
      <td colspan="4">
        <span>追溯编号:2409030000032</span>
        <span>追溯编号:{{printParam.productNum}}</span>
      </td>
    </tr>
    <tr align="center">
@@ -222,7 +222,7 @@
      <td>B</td>
      <td>内径千分尺</td>
      <td>全检</td>
      <td>150.085</td>
      <td>√</td>
      <td>OK</td>
      <td></td>
      <td></td>
@@ -572,10 +572,10 @@
    <tr>
      <td colspan="4">
        检验员/日期:程林波/20240904
        检验员/日期:程林波/{{printParam.reviewerDate}}
      </td>
      <td colspan="7">
        审核人/日期:崔海胜/20240904
        审核人/日期:崔海胜/{{printParam.reviewerDate}}
      </td>
    </tr>
  </table>
jcdm-ui/src/views/main/kb/stationTerminal/index.vue
@@ -191,7 +191,7 @@
                     #
                   </span>
                   <span style="margin-left: -10px;font-size: 16px;font-family: FZYaoti;letter-spacing: -0.7px">
                     SSW002.005
                     SSW001.001
                   </span>
                   <span style="margin-left: -4px;font-size: 19px;font-family: FangSong;letter-spacing: -0.7px">
                     #
@@ -242,7 +242,7 @@
                     #
                   </span>
                   <span style="margin-left: -10px;font-size: 16px;font-family: FZYaoti;letter-spacing: -0.7px">
                     SSW002.005
                     SSW001.001
                   </span>
                   <span style="margin-left: -4px;font-size: 19px;font-family: FangSong;letter-spacing: -0.7px">
                     #