Selaa lähdekoodia

web端查看并导出报告pdf

bmmx 1 vuosi sitten
vanhempi
commit
307f26f58b

+ 28 - 0
pom.xml

@@ -28,6 +28,7 @@
         <knife4j.version>3.0.3</knife4j.version>
         <hutool.version>5.8.21</hutool.version>
         <hibernate-validator.version>6.1.5.Final</hibernate-validator.version>
+        <itext7.version>7.1.7</itext7.version>
     </properties>
 
 
@@ -166,6 +167,33 @@
             <artifactId>esdk-obs-java</artifactId>
             <version>3.20.6.1</version>
         </dependency>
+
+        <!-- itextpdf -->
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>kernel</artifactId>
+            <version>${itext7.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>io</artifactId>
+            <version>${itext7.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>layout</artifactId>
+            <version>${itext7.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>forms</artifactId>
+            <version>${itext7.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.itextpdf</groupId>
+            <artifactId>pdfa</artifactId>
+            <version>${itext7.version}</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 27 - 0
src/main/java/com/om/controller/admin/CommonController.java

@@ -0,0 +1,27 @@
+package com.om.controller.admin;
+
+import com.om.service.IRepairService;
+import com.om.utils.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("web")
+@Api(tags = "公共控制器")
+public class CommonController {
+
+    @Resource
+    private IRepairService repairService;
+
+    @GetMapping("report/pdf")
+    @ApiOperation("查看诊断报告---导出pdf")
+    public Result<String> reportPdf(@RequestParam("id") Integer id){
+       return repairService.reportPdf(id);
+    }
+}

+ 14 - 0
src/main/java/com/om/entity/dto/ControlListMap.java

@@ -0,0 +1,14 @@
+package com.om.entity.dto;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Map;
+
+@Data
+@NoArgsConstructor
+public class ControlListMap {
+    private String name;
+    private Map<String,String> faultCodeMap;
+    private Map<String,String> versionMap;
+}

+ 6 - 0
src/main/java/com/om/entity/po/Repair.java

@@ -73,6 +73,12 @@ public class Repair implements Serializable {
     @ApiModelProperty(value = "报告序列号")
     private String repairSn;
 
+    @ApiModelProperty(value = "vin编号")
+    private String vin;
+
+    @ApiModelProperty(value = "年款")
+    private String modelYear;
+
     @ApiModelProperty(value = "状态")
     private Integer status;
 

+ 6 - 0
src/main/java/com/om/entity/po/User.java

@@ -37,6 +37,12 @@ public class User implements Serializable {
     @ApiModelProperty(value = "用户名")
     private String username;
 
+    @ApiModelProperty(value = "地址")
+    private String address;
+
+    @ApiModelProperty(value = "公司")
+    private String company;
+
     @ApiModelProperty(value = "密码")
     private String password;
 

+ 0 - 4
src/main/java/com/om/entity/vo/UserAddVO.java

@@ -8,10 +8,6 @@ import lombok.NoArgsConstructor;
 @Data
 @NoArgsConstructor
 public class UserAddVO extends User {
-    @ApiModelProperty("维修厂地址")
-    public String address;
-    @ApiModelProperty("维修厂公司")
-    public String company;
     @ApiModelProperty("登录token")
     public String loginToken;
     @ApiModelProperty("一页条数")

+ 1 - 1
src/main/java/com/om/service/IRepairService.java

@@ -36,5 +36,5 @@ public interface IRepairService extends IService<Repair> {
     Result<RepairQueryPageVO> getPageList(RepairQueryPageDTO dto);
 
 
-
+    Result<String> reportPdf(Integer id);
 }

+ 97 - 0
src/main/java/com/om/service/impl/RepairServiceImpl.java

@@ -12,14 +12,23 @@ import com.om.exception.BizException;
 import com.om.mapper.RepairMapper;
 import com.om.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.om.utils.HuaweiObsUtil;
+import com.om.utils.ITextPdfUtil;
 import com.om.utils.Result;
 import com.om.utils.UserContext;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
+import org.springframework.web.multipart.support.StandardServletMultipartResolver;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -50,6 +59,12 @@ public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> impleme
     @Resource
     IUserService userService;
 
+    @Resource
+    private HuaweiObsUtil huaweiObsUtil;
+
+    @Resource
+    private HttpServletRequest request;
+
     @Override
     @Transactional
     public Result AppCreateReport(APPReportCreateDTO dto) {
@@ -323,5 +338,87 @@ public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> impleme
 
         return Result.ok(vo);
     }
+
+    @Override
+    public Result<String> reportPdf(Integer id) {
+        //根据id查询报告是否存在
+        Repair repair = this.getById(id);
+
+        if (BeanUtil.isEmpty(repair)){
+            throw new BadReqException("该诊断报告不存在");
+        }
+
+        Map<String,String> baseMap = new HashMap<>();
+        baseMap.put("车架号",repair.getVin());
+        baseMap.put("年款",repair.getMileage());
+        baseMap.put("里程",repair.getMileage());
+        baseMap.put("诊断路径",repair.getDiagnosticPath());
+        baseMap.put("报告编号",repair.getRepairNum());
+        baseMap.put("SN",repair.getSn());
+
+        String username = repair.getUsername();
+        //根据用户名查询用户
+        User user = userService.lambdaQuery()
+                .eq(User::getUsername, username)
+                .one();
+        if (BeanUtil.isEmpty(user)){
+            throw new BadReqException("该用户不存在");
+        }
+
+        Map<String,String> companyMap = new HashMap<>();
+        companyMap.put("公司",user.getCompany());
+        companyMap.put("电话",user.getTel());
+        companyMap.put("地址",user.getAddress());
+
+        List<ControlListMap> controlListMap = new ArrayList<>();
+
+        String electronicControlIds = repair.getElectronicControlIds();
+        List<Integer> eleIds = Arrays.stream(electronicControlIds.split(","))
+                .map(Integer::parseInt)
+                .collect(Collectors.toList());
+
+        List<ElectronicControl> electronicControlList = electronicControlService.listByIds(eleIds);
+        for (Integer eleId : eleIds) {
+            ElectronicControl electronicControl = electronicControlService.getById(eleId);
+
+            List<EcuInfo> EcuList = ecuInfoService.lambdaQuery()
+                    .eq(EcuInfo::getElectronicControlId, eleId)
+                    .list();
+
+            List<FaultCode> FaultList = faultCodeService.lambdaQuery()
+                    .eq(FaultCode::getElectronicControlId, eleId)
+                    .eq(FaultCode::getStatus,1)
+                    .list();
+
+            Map<String,String> faultCodeMap = new HashMap<>();
+            Map<String,String> versionMap = new HashMap<>();
+            for (EcuInfo ecuInfo : EcuList) {
+                versionMap.put(ecuInfo.getStrCaption(),ecuInfo.getStrInformation());
+            }
+
+            for (FaultCode faultCode : FaultList) {
+                faultCodeMap.put(faultCode.getFaultCode(),faultCode.getDescription());
+            }
+            ControlListMap controlListMap1 = new ControlListMap();
+            controlListMap1.setName(electronicControl.getElectronicControlName());
+            controlListMap1.setVersionMap(versionMap);
+            controlListMap1.setFaultCodeMap(faultCodeMap);
+            controlListMap.add(controlListMap1);
+        }
+
+
+        File file = ITextPdfUtil.MapToPDF(repair.getId(), controlListMap, baseMap, companyMap);
+        if (file==null){
+            throw new BizException("该pdf文件不存在");
+        }
+        try {
+             huaweiObsUtil.upload(file, "report");
+            String uploadUrl1 = huaweiObsUtil.getUploadUrl(file.getName(), "report");
+
+            return Result.ok(uploadUrl1);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
 }
 

+ 38 - 1
src/main/java/com/om/utils/HuaweiObsUtil.java

@@ -11,6 +11,8 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.HashMap;
@@ -67,14 +69,47 @@ public class HuaweiObsUtil {
                 String objectUrl = "https://"+path + "/" + objectName;
                 return objectUrl;
             }
-        } finally {
             // 关闭OBS客户端
             obsClient.close();
+        } finally {
+
         }
         return null;
     }
 
+    /**
+     * 文件上传
+     *
+     * @param file 要上传的文件
+     * @return 文件在OBS中的URL
+     * @throws IOException IO异常
+     */
+    public String upload(File file, String prefix) throws IOException {
+        ObsClient obsClient = null;
+        try {
+            String originalFilename = file.getName();
+            // 拼接文件在OBS中的路径
+            String objectName = prefix + "/"+ originalFilename;
+            // 初始化OBS客户端
+            obsClient = new ObsClient(ak, sk, endpoint);
+            // 上传文件到OBS
+            FileInputStream fileInputStream = new FileInputStream(file);
+            HeaderResponse response = obsClient.putObject(bucketName, objectName, fileInputStream);
+            log.info(JSONObject.toJSONString(response));
+            // 判断上传是否成功
+            int statusCode = response.getStatusCode();
+            if (200 == statusCode) {
+                // 拼接文件在OBS中的URL并返回
+                String objectUrl = "https://"+path + "/" + objectName;
+                return objectUrl;
+            }
+            // 关闭OBS客户端
+            obsClient.close();
+        } finally {
 
+        }
+        return null;
+    }
 
 
 
@@ -192,6 +227,8 @@ public class HuaweiObsUtil {
 
 
 
+
+
     public enum FileType {
 
         TEST("test", "测试");

+ 295 - 0
src/main/java/com/om/utils/ITextPdfUtil.java

@@ -0,0 +1,295 @@
+package com.om.utils;
+
+
+import com.itextpdf.io.font.PdfEncodings;
+import com.itextpdf.kernel.colors.Color;
+import com.itextpdf.kernel.colors.DeviceRgb;
+import com.itextpdf.kernel.font.PdfFont;
+import com.itextpdf.kernel.font.PdfFontFactory;
+import com.itextpdf.kernel.geom.PageSize;
+import com.itextpdf.kernel.pdf.PdfDocument;
+import com.itextpdf.kernel.pdf.PdfReader;
+import com.itextpdf.kernel.pdf.PdfWriter;
+import com.itextpdf.kernel.pdf.canvas.draw.SolidLine;
+import com.itextpdf.layout.Document;
+import com.itextpdf.layout.Style;
+import com.itextpdf.layout.borders.Border;
+import com.itextpdf.layout.element.*;
+import com.itextpdf.layout.property.BorderRadius;
+import com.itextpdf.layout.property.HorizontalAlignment;
+import com.itextpdf.layout.property.TextAlignment;
+import com.om.entity.dto.ControlListMap;
+import org.apache.commons.lang3.StringUtils;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * itextpdf 工具类
+ * iText 7是iText强大的PDF工具包的最新版本,用于PDF生成,PDF编程,处理和操作,如数字签名等。
+ * https://kb.itextpdf.com/home/it7kb/ebooks
+ */
+public class ITextPdfUtil {
+    //字体,我这里使用系统自带的simhei黑体
+    private static final String FONT = "C:/Windows/Fonts/simhei.ttf";
+
+
+    //生成简单PDF
+    public static File MapToPDF(Integer id,List<ControlListMap> controlListMap
+            , Map<String,String> baseMap, Map<String,String> companyMap ) {
+
+        String yyyyMMdd = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+        try (PdfWriter writer = new PdfWriter("src\\main\\resources\\template\\outpdf\\"+yyyyMMdd+"report"+id+".pdf");
+             //FileOutputStream out  = new FileOutputStream(new File("src\\main\\resources\\outpdf\\report.pdf"))
+             PdfDocument pdf = new PdfDocument(writer);
+             Document document = new Document(pdf, PageSize.A6);
+
+        ) {
+            DeviceRgb red = new DeviceRgb(255, 59, 48);
+            DeviceRgb black = new DeviceRgb( 34, 34, 34);
+            //设置文档属性
+            pdf.getDocumentInfo().setAuthor("bmmx");
+            pdf.getDocumentInfo().setTitle("IText测试PDF");
+            pdf.getDocumentInfo().setSubject("XXX公司");
+            pdf.getDocumentInfo().setMoreInfo("1", "111");
+            pdf.getDocumentInfo().setCreator("huanzi");
+            pdf.getDocumentInfo().setKeywords("IText");
+
+            //设置字体
+            document.setFont(ITextPdfUtil.getPdfFont());
+
+            //页边距
+            document.setMargins(10, 10, 10, 10);
+
+            //诊断报告 + 时间
+            document.add(new Div()
+                    .add(new Paragraph("诊断报告")
+                            .addStyle(new Style()
+                                    .setBold()))
+                    .add(new Paragraph("— " + LocalDateTime.now()
+                            .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + " —"))
+                    .addStyle(new Style()
+                            .setFontColor(new DeviceRgb(54, 85, 153)))
+                    .setBackgroundColor(new DeviceRgb(235, 241, 250))
+                    .setTextAlignment(TextAlignment.CENTER));
+            DeviceRgb c1 = new DeviceRgb(136, 136, 136);
+            DeviceRgb c2 = new DeviceRgb(40, 40, 40);
+            Table baseTable = new Table(2);
+            mapToTable(baseMap,baseTable,c1,c2);
+
+
+
+
+            // 车辆信息
+            document.add(new Div()
+                            .setMarginTop(10)
+                            .setHorizontalAlignment(HorizontalAlignment.CENTER)
+                            .setBackgroundColor(new DeviceRgb(235, 241, 250))
+                            .setBorderRadius(new BorderRadius(5))
+
+                        .add(new Div()
+                            .setBackgroundColor(new DeviceRgb( 64,109,183))
+                                .setBorderBottomLeftRadius(new BorderRadius(8))
+                                .setBorderBottomRightRadius(new BorderRadius(8))
+                                .setWidth(100)
+                                .setHorizontalAlignment(HorizontalAlignment.CENTER)
+                                .add(new Paragraph("车辆信息")
+                                        .setTextAlignment(TextAlignment.CENTER)
+                                        .addStyle(new Style()
+                                                .setFontColor(new DeviceRgb(255,255,255))
+                                                .setBold()
+                                        )))
+                    .add(baseTable));
+
+            SolidLine solidLine = new SolidLine(0.2f);
+            solidLine.setColor(new DeviceRgb(64,109,183));
+            //solidLine.setLineWidth(260);
+
+            for (ControlListMap listMap : controlListMap) {
+                String name = listMap.getName();
+                Map<String, String> versionMap = listMap.getVersionMap();
+                Map<String, String> faultCodeMap = listMap.getFaultCodeMap();
+
+                Table faultCodeTable = new Table(2);
+
+                mapToTable(faultCodeMap,faultCodeTable,red,red);
+
+                Table versionTable = new Table(2);
+
+                mapToTable(versionMap,versionTable,black,black);
+                // 车辆信息
+                document.add(new Div()
+                        .setMarginTop(10)
+                        .setHorizontalAlignment(HorizontalAlignment.CENTER)
+                        .setBackgroundColor(new DeviceRgb(235, 241, 250))
+                        .setBorderRadius(new BorderRadius(5))
+
+                        .add(new Div()
+                                .setBackgroundColor(new DeviceRgb( 64,109,183))
+                                .setBorderBottomLeftRadius(new BorderRadius(8))
+                                .setBorderBottomRightRadius(new BorderRadius(8))
+                                .setWidth(100)
+                                .setHorizontalAlignment(HorizontalAlignment.CENTER)
+                                .add(new Paragraph("诊断详情")
+                                        .setTextAlignment(TextAlignment.CENTER)
+                                        .addStyle(new Style()
+                                                .setFontColor(new DeviceRgb(255,255,255))
+                                                .setBold()
+                                        )))
+                        .add(new Div()
+                                .setBackgroundColor(new DeviceRgb( 64,109,183))
+                                .setMarginTop(20)
+                                .setBorderTopRightRadius(new BorderRadius(5))
+                                .setMaxWidth(150)
+                                .setMaxHeight(30)
+                                .add(new Paragraph(name)
+                                        .setFontColor(new DeviceRgb(255,255,255))
+                                        .setFontSize(10)
+                                        .setTextAlignment(TextAlignment.CENTER)
+                                )
+                        )
+                        .add(new LineSeparator(solidLine).setMarginRight(10))
+                        .add(new Paragraph("故障码("+faultCodeMap.size()+")")
+                                .setFontColor(new DeviceRgb(153,153,153))
+                                .setFontSize(10)
+                                .setMarginLeft(10)
+                                .setMarginTop(10)
+                        )
+                        .add(faultCodeTable).setFontSize(10)
+
+                        .add(new Paragraph("版本信息("+versionMap.size()+")")
+                                .setFontColor(new DeviceRgb(153,153,153))
+                                .setFontSize(10)
+                                .setMarginLeft(10)
+                                .setMarginTop(10)
+                        )
+                        .add(versionTable).setFontSize(10));
+            }
+
+
+
+
+            Table companyTable = new Table(2);
+            DeviceRgb grey = new DeviceRgb( 136,136,136);
+            mapToTable(companyMap,companyTable,grey,grey);
+
+            Text firstCh = new Text("*").setFontColor(red).setFontSize(8);
+            Text rest = new Text("该车辆检测报告仅对本次检查结果负责")
+                    .setFontSize(8)
+                    .setFontColor(grey);
+
+            document.add(new Div()
+                            .setBackgroundColor(new DeviceRgb( 235,241,250))
+                            .add(companyTable)
+                            .setMarginTop(10)
+                            .add(new Paragraph().add(firstCh).add(rest)
+                                    .setMarginLeft(10)
+                            )
+                    );
+            document.close();
+            System.out.println("操作完成!");
+            File file = new File("src\\main\\resources\\template\\outpdf\\"+yyyyMMdd+"report"+id+".pdf");
+
+            return file;
+
+        } catch (IOException e) {
+            e.printStackTrace();
+            System.err.println("操作异常...");
+            return null;
+        }
+    }
+
+
+    private static void mapToTable(Map<String,String> map,Table table,Color one,Color two){
+        table.setMargin(5);
+        table.setWidth(270);
+        table.setFontSize(10);
+        table.setFontColor(new DeviceRgb(136, 136, 136));
+        for (Map.Entry<String, String> entry : map.entrySet()) {
+            table.addCell(entry.getKey() + ": ")
+                    .setFontColor(one);
+            String value = entry.getValue();
+            if (StringUtils.isEmpty(value)){
+                value = " ";
+            }
+            table.addCell(new Cell()
+                    .add(new Paragraph(value))
+                    .setFontColor(two));
+        }
+        RemoveBorder(table);
+    }
+
+    private static void RemoveBorder(Table table)
+    {
+        for (IElement iElement : table.getChildren()) {
+            ((Cell)iElement).setBorder(Border.NO_BORDER);
+        }
+    }
+
+    //获取统一字体
+    public static PdfFont getPdfFont() {
+        PdfFont pdfFont = null;
+        try {
+            pdfFont = PdfFontFactory.createFont(ITextPdfUtil.FONT, PdfEncodings.IDENTITY_H, true);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return pdfFont;
+    }
+
+
+
+    //测试
+    public static void main(String[] args) {
+        Map<String,String> baseMap = new HashMap<>();
+        baseMap.put("车架号","01");
+        baseMap.put("里程","52Km");
+        baseMap.put("年款","1000");
+        baseMap.put("报告编号","01240222242360836214099968");
+        baseMap.put("诊断路径","诊断>五菱新能源TEST");
+        baseMap.put("SN","WL01000005");
+
+        Map<String,String> faultCodeMap = new HashMap<>();
+        faultCodeMap.put("B111716","供电电压电量过低");
+        faultCodeMap.put("U007588","CHA CAN网段控制器BuSOff");
+        faultCodeMap.put("P129600","非N或P档无法ready");
+        faultCodeMap.put("P129700","充电连接信号有效无法ready");
+
+        Map<String,String> versionMap = new HashMap<>();
+        versionMap.put("引导软件标识符","BtswV1.00");
+        versionMap.put("零件号","0000000000");
+        versionMap.put("定义的ECU软件编号","G050_1HB20");
+        versionMap.put("定义的ECU硬件编号","G050_1HB20");
+        versionMap.put("供应商代码","S-00009475");
+        versionMap.put("ECU名称","0000000VCU");
+        versionMap.put("供应商硬件版本号","V005.001");
+        versionMap.put("供应商软件版本号","V001.000");
+        versionMap.put("ECU序列编号","HB00009475230425T000000");
+        versionMap.put("车辆识别号","LZWADAGA4LB460541");
+        versionMap.put("SK码","00000000000000000000000000000000");
+
+
+        Map<String,String> companyMap = new HashMap<>();
+        companyMap.put("公司","XXXXXX");
+        companyMap.put("地址","XXXXXXXXXXXX");
+        companyMap.put("电话","18888888888");
+
+        List<ControlListMap> controlListMap = new ArrayList<>();
+        ControlListMap controlListMap1 = new ControlListMap();
+        controlListMap1.setName("G050右舵车/VCU整车控制器");
+        controlListMap1.setVersionMap(versionMap);
+        controlListMap1.setFaultCodeMap(faultCodeMap);
+        controlListMap.add(controlListMap1);
+
+        File file = MapToPDF(1, controlListMap, baseMap, companyMap);
+    }
+}

BIN
src/main/resources/template/outpdf/20240312report1.pdf


+ 10 - 0
src/test/java/com/om/Test.java

@@ -3,6 +3,7 @@ package com.om;
 import com.om.entity.dto.DiaMenuQueryPageDTO;
 import com.om.entity.vo.DiaMenuQueryPageVO;
 import com.om.service.IDiagnosticMenuService;
+import com.om.service.IRepairService;
 import com.om.utils.Result;
 import org.springframework.boot.test.context.SpringBootTest;
 
@@ -14,6 +15,9 @@ public class Test {
     @Resource
     private IDiagnosticMenuService diagnosticMenuService;
 
+    @Resource
+    private IRepairService repairService;
+
 
     @org.junit.jupiter.api.Test
     public void Test1(){
@@ -24,5 +28,11 @@ public class Test {
         System.out.println(pageList);
     }
 
+    @org.junit.jupiter.api.Test
+    public void TestReport(){
+        Result<String> stringResult = repairService.reportPdf(1);
+        System.out.println(stringResult);
+    }
+
 
 }