Kaynağa Gözat

导出类变更,项目报表添加二级单位表格数据,报表中可以通过点击数量下载符合条件的项目信息

yue 5 yıl önce
ebeveyn
işleme
285d55b873

+ 5 - 7
src/main/java/com/jeeplus/modules/sg/audit/information/entity/OutInformation.java

@@ -14,8 +14,6 @@ public class OutInformation {
     private String projectName;
     //	项目类型
     private String projectType;
-    //工作状态(是否关闭)
-    private String outConstruction;
     //	审定日期
     private Date approvalDate;
     //是否完成甲供物资领退料
@@ -53,7 +51,7 @@ public class OutInformation {
     //	实际竣工日期
     private Date projectStop;
     //施工单位
-    private String construction;
+    private String department;
     //	结算审计单位名称
     private String projectFirm;
     //	提交送审日期
@@ -269,12 +267,12 @@ public class OutInformation {
     }
 
     @ExcelField(title="施工单位", align=2, sort=23)
-    public String getConstruction() {
-        return construction;
+    public String getDepartment() {
+        return department;
     }
 
-    public void setConstruction(String construction) {
-        this.construction = construction;
+    public void setDepartment(String department) {
+        this.department = department;
     }
 
     @ExcelField(title="结算审计单位名称", align=2, sort=24)

+ 9 - 0
src/main/java/com/jeeplus/modules/sg/audit/report/entity/SgReport.java

@@ -14,6 +14,15 @@ public class SgReport extends DataEntity<SgReport> {
     private String endDate;
     private Integer finishCount;
     private Integer unfinishCount;
+    private String condition;
+
+    public String getCondition() {
+        return condition;
+    }
+
+    public void setCondition(String condition) {
+        this.condition = condition;
+    }
 
     public String getName() {
         return name;

+ 4 - 0
src/main/java/com/jeeplus/modules/sg/audit/report/mapper/ReportMapper.java

@@ -5,6 +5,7 @@ package com.jeeplus.modules.sg.audit.report.mapper;
 
 import com.jeeplus.core.persistence.BaseMapper;
 import com.jeeplus.core.persistence.annotation.MyBatisMapper;
+import com.jeeplus.modules.sg.audit.information.entity.Information;
 import com.jeeplus.modules.sg.audit.report.entity.SgReport;
 
 import java.util.List;
@@ -16,4 +17,7 @@ public interface ReportMapper extends BaseMapper<SgReport> {
    List<SgReport> findList(SgReport sgReport);
    List<SgReport> findUnitData(SgReport sgReport);
    List<SgReport> findUnitList(SgReport sgReport);
+   List<SgReport> findSecondData(SgReport sgReport);
+   List<SgReport> findSecondList(SgReport sgReport);
+   List<Information> findInformationList(SgReport sgReport);
 }

+ 107 - 10
src/main/java/com/jeeplus/modules/sg/audit/report/mapper/xml/ReportMapper.xml

@@ -1,7 +1,33 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.jeeplus.modules.sg.audit.report.mapper.ReportMapper">
-
+	<sql id="newInformationColumns">
+		a.id,
+		a.project_id,
+		a.project_name,
+		a.project_type,
+		a.project_grade,
+		a.project_year,
+		a.project_total,
+		a.project_start,
+		a.project_stop,
+		a.department,
+		a.project_firm,
+		a.subDate,
+		a.releaseDate,
+		a.endDate,
+		a.resultDate,
+		a.approvalDate,
+		a.second_units,
+		a.first_units,
+		a.firstFinish,
+		a.firstFinishDate,
+		a.secondFinish,
+		a.secondFinishDate,
+		a.finishDate,
+		a.overdue,
+		a.underCentralized
+	</sql>
 	<select id="findData" resultType="SgReport" parameterType="SgReport">
 		SELECT a.department as name ,
 		sum(a.st1) as finishCount,
@@ -111,17 +137,88 @@
 
 	</select>
 
+	<select id="findSecondData" resultType="SgReport" parameterType="SgReport">
+		SELECT a.second_units as name,
+		sum(a.st1) as finishCount,
+		SUM(a.st2) as unfinishCount
+		from
+		(SELECT if(t1.second_units is null,'未知部门',t1.second_units) as second_units,
+		if(t1.firstFinish='否' or t1.secondFinish = '否',0,1) as st1,
+		if(t1.firstFinish='否' or t1.secondFinish = '否',1,0) as st2
+		from sj_project_information t1
+		<where>
+			1=1
+			<if test="dataScope != null and dataScope != ''">
+				${dataScope}
+			</if>
+		</where>
+		) a
+		GROUP BY a.second_units
+	</select>
 
+	<select id="findSecondList" parameterType="SgReport" resultType="SgReport">
+		SELECT b.second_units as name,
+		sum(b.level1) as level1,
+		sum(b.level2) as level2,
+		sum(b.level3) as level3,
+		sum(b.level4) as level4 from
+		(SELECT a.id, a.second_units,
+		if(DATEDIFF(a.da, a.approvalDate)&lt;=7,1,0) as level1,
+		if(DATEDIFF(a.da, a.approvalDate)&lt;= 14 and DATEDIFF(a.da, a.approvalDate)&gt;7,1,0) as level2,
+		if(DATEDIFF(a.da, a.approvalDate)&lt;= 21 and DATEDIFF(a.da, a.approvalDate)&gt;14,1,0) as level3,
+		if(DATEDIFF(a.da, a.approvalDate)&gt;21 or a.approvalDate is null,1,0) as level4,
+		a.status as status
+		from
+		(SELECT id,
+		if(t1.second_units is null,'未知部门',t1.second_units) as second_units,
+		if(t1.firstFinish='否' or t1.secondFinish = '否',NOW(),if(t1.secondFinish = '是',t1.secondFinishDate,t1.firstFinishDate) )as da ,
+		t1.approvalDate ,if(t1.firstFinish='否' or t1.secondFinish = '否','0','1') as status
+		from sj_project_information t1
+		<where>
+			1=1
+			<if test="dataScope != null and dataScope != ''">
+				${dataScope}
+			</if>
+		</where>
+		) a
+		<where>
+			<if test="status != null and status != ''">
+				a.status = #{status} and
+			</if>
+			1=1
+		</where>
+		) b   GROUP BY b.second_units
 
+	</select>
 
 
-
-
-
-
-
-	
-
-
-
+	<select id="findInformationList" resultType="Information">
+		SELECT
+		<include refid="newInformationColumns"/>,b.trial,b.appendStatus,
+		datediff(if(firstFinish='否' or secondFinish = '否',NOW(),if(secondFinish = '是',secondFinishDate,firstFinishDate)),approvalDate) as newdate
+		FROM sj_project_information as a
+		left JOIN sj_project_append as b on a.project_id = b.project_id
+		<where>
+			1=1
+			<if test="type!=null and type!=''">
+				<if test="type==0">
+					and a.department = #{condition}
+				</if>
+				<if test="type==1">
+					and a.underCentralized = #{condition}
+				</if>
+				<if test="type==2">
+					and a.second_units = #{condition}
+				</if>
+			</if>
+			<if test="status!=null and status !=''">
+				<if test="status==0">
+					and a.firstFinish='是' and (a.secondFinish != '否' or a.secondFinish is null)
+				</if>
+				<if test="status==1">
+					and (a.firstFinish='否' or a.secondFinish = '否')
+				</if>
+			</if>
+		</where>
+	</select>
 </mapper>

+ 73 - 0
src/main/java/com/jeeplus/modules/sg/audit/report/service/ReportService.java

@@ -1,11 +1,15 @@
 package com.jeeplus.modules.sg.audit.report.service;
 
 import com.jeeplus.core.service.CrudService;
+import com.jeeplus.modules.sg.audit.information.entity.Information;
+import com.jeeplus.modules.sg.audit.information.mapper.InformationMapper;
 import com.jeeplus.modules.sg.audit.report.entity.SgReport;
 import com.jeeplus.modules.sg.audit.report.mapper.ReportMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 
 @Service
@@ -13,6 +17,9 @@ public class ReportService extends CrudService<ReportMapper, SgReport> {
     @Autowired
     private ReportMapper reportMapper;
 
+    @Autowired
+    private InformationMapper informationMapper;
+
 
     public List<SgReport> findData(SgReport sgReport){
         dataRuleFilter(sgReport);
@@ -33,4 +40,70 @@ public class ReportService extends CrudService<ReportMapper, SgReport> {
         dataRuleFilter(sgReport);
         return reportMapper.findUnitList(sgReport);
     }
+    public List<SgReport> findSecondList(SgReport sgReport){
+        dataRuleFilter(sgReport);
+        return reportMapper.findSecondList(sgReport);
+    }
+
+    public List<SgReport> findSecondData(SgReport sgReport){
+        dataRuleFilter(sgReport);
+        return reportMapper.findSecondData(sgReport);
+    }
+
+    public List<Information> findInformationList(SgReport sgReport) {
+        dataRuleFilter(sgReport);
+        List<Information> list = reportMapper.findInformationList(sgReport);
+        String find = informationMapper.findOverTime("overTime");
+        int overTime = Integer.parseInt(find);
+        Calendar cal = Calendar.getInstance();
+        long between_days = 0;
+        for (Information in : list) {
+            //判断审定日期是否为空
+//			if (in.getApprovalDate() != null) {
+            //格式化审定日期
+            if ("否".equals(in.getFirstFinish()) || "否".equals(in.getSecondFinish())) {
+                in.setComplete("否");
+                if (in.getApprovalDate() != null) {
+                    cal.setTime(in.getApprovalDate());
+                    long appDay = cal.getTimeInMillis();
+                    cal.setTime(new Date());
+                    long nowDate = cal.getTimeInMillis();
+                    between_days = (nowDate - appDay) / (1000 * 3600 * 24);
+                    in.setNoFinishDate(String.valueOf(between_days) + "天");
+                }
+            } else {
+                in.setComplete("是");
+                if (in.getApprovalDate() != null) {
+                    cal.setTime(in.getApprovalDate());
+                    long appDay = cal.getTimeInMillis();
+                    if (in.getFirstFinishDate() != null || in.getSecondFinishDate() != null) {
+                        if (in.getSecondFinishDate() != null) {
+                            cal.setTime(in.getSecondFinishDate());
+                            long secondDate = cal.getTimeInMillis();
+                            between_days = (secondDate - appDay) / (1000 * 3600 * 24);
+                            in.setFinishDate(String.valueOf(between_days) + "天");
+                            if (between_days > overTime) {
+                                in.setOverdue("是");
+                            } else {
+                                in.setOverdue("否");
+                            }
+                        } else {
+                            cal.setTime(in.getFirstFinishDate());
+                            long firstDate = cal.getTimeInMillis();
+                            between_days = (firstDate - appDay) / (1000 * 3600 * 24);
+                            in.setFinishDate(String.valueOf(between_days) + "天");
+                            if (between_days > overTime) {
+                                in.setOverdue("是");
+                            } else {
+                                in.setOverdue("否");
+                            }
+                        }
+                    }
+                }
+            }
+//			}
+        }
+        return list;
+    }
+
 }

+ 118 - 0
src/main/java/com/jeeplus/modules/sg/audit/report/web/ReportController.java

@@ -7,7 +7,13 @@ import com.github.abel533.echarts.code.Trigger;
 import com.github.abel533.echarts.feature.MagicType;
 import com.github.abel533.echarts.json.GsonOption;
 import com.github.abel533.echarts.series.Bar;
+import com.jeeplus.common.json.AjaxJson;
+import com.jeeplus.common.utils.DateUtils;
 import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.utils.excel.ExportExcel;
+import com.jeeplus.modules.sg.audit.information.entity.Information;
+import com.jeeplus.modules.sg.audit.information.entity.OutInformation;
+import com.jeeplus.modules.sg.audit.material.entity.Material;
 import com.jeeplus.modules.sg.audit.report.entity.SgReport;
 import com.jeeplus.modules.sg.audit.report.service.ReportService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -68,6 +74,25 @@ public class ReportController {
     }
 
 
+    /**
+     * 二级单位项目报表
+     */
+    @RequestMapping("/secondlist")
+    public String list2(SgReport sgReport, Model model) {
+        String status = sgReport.getStatus();
+        model.addAttribute("sgReport", sgReport);
+        List<SgReport> list = reportService.findSecondData(sgReport);
+//        List<SgReport> list1 = reportService.findList(sgReport);
+        model.addAttribute("list",list);
+//        model.addAttribute("list1",list1);
+        if(StringUtils.isNotBlank(status)) {
+            model.addAttribute("dataURL", "/sg/report/secondoption?status=" + status);
+        }else {
+            model.addAttribute("dataURL", "/sg/report/secondoption");
+        }
+        return "modules/sg/audit/report/reportList2";
+    }
+
 
 
     /**
@@ -212,4 +237,97 @@ public class ReportController {
         return option;
     }
 
+
+    @ResponseBody
+    @RequestMapping("secondoption")
+    public GsonOption getOption2(HttpServletRequest request){
+        String status = request.getParameter("status");
+        SgReport sgReport = new SgReport();
+        sgReport.setStatus(status);
+        List<SgReport> list = reportService.findSecondList(sgReport);
+        String[] str = new String[list.size()];
+        int[] level1 = new int[list.size()];
+        int[] level2 = new int[list.size()];
+        int[] level3 = new int[list.size()];
+        int[] level4 = new int[list.size()];
+        for(int i=0;i<list.size();i++){
+            str[i] = list.get(i).getName();
+            level1[i] = list.get(i).getLevel1();
+            level2[i] = list.get(i).getLevel2();
+            level3[i] = list.get(i).getLevel3();
+            level4[i] = list.get(i).getLevel4();
+        }
+        GsonOption option = new GsonOption();
+//        option.title("ECharts2 vs ECharts1", "Chrome下测试数据");
+        option.tooltip(Trigger.axis);
+        option.legend(
+                "1-7天", "8-14天", "15-21天",
+                "21天以上");
+        option.toolbox().show(true)
+                .feature(
+                        Tool.mark, Tool.dataView,
+                        new MagicType(Magic.line, Magic.bar),
+                        Tool.restore, Tool.saveAsImage);
+        option.calculable(true);
+        option.grid().y(70).y2(30).x2(60).bottom(120);
+        CategoryAxis categoryAxis = new CategoryAxis();
+        for(int j=0;j<str.length;j++){
+            categoryAxis.data(str[j]);
+        }
+        option.xAxis(
+                categoryAxis.axisLabel(new AxisLabel().rotate(40).interval(0))
+//                new CategoryAxis()
+//                        .axisLine(new AxisLine().show(false))
+//                        .axisTick(new AxisTick().show(false))
+//                        .axisLabel(new AxisLabel().show(false))
+//                        .splitArea(new SplitArea().show(false))
+//                        .axisLine(new AxisLine().show(false))
+//                        .data("Line", "Bar")
+        );
+        option.yAxis(new ValueAxis().axisLabel(new AxisLabel().formatter("{value} 个")));
+        Bar b1 = new Bar("1-7天");
+        b1.itemStyle().normal().color("rgba(193,35,43,0.5)").label().show(true);
+        Bar b2 = new Bar("8-14天");
+        b2.itemStyle().normal().color("rgba(181,195,52,1)").label().show(true).textStyle().color("#27727B");
+        Bar b3 = new Bar("15-21天");
+        b3.itemStyle().normal().color("rgba(252,206,16,1)").label().show(true).textStyle().color("#E87C25");
+        Bar b4 = new Bar("21天以上");
+        b4.itemStyle().normal().color("rgba(193,35,43,1)").label().show(true);
+        for (int k=0;k<list.size();k++){
+            b1.data(level1[k] );
+            b2.data(level2[k] );
+            b3.data(level3[k] );
+            b4.data(level4[k] );
+        }
+        option.series(b1, b2, b3, b4);
+        return option;
+    }
+
+    /**
+     * 导出项目清单
+     * */
+    @ResponseBody
+    @RequestMapping(value = "exportInformation")
+    public AjaxJson exportInformation(SgReport sgReport,HttpServletRequest request, HttpServletResponse response) {
+        AjaxJson j = new AjaxJson();
+        try {
+            String condition =  request.getParameter("condition");
+            condition = new String(condition.getBytes("iso8859-1"), "utf-8");
+            String status =  request.getParameter("status");
+            String type =  request.getParameter("type");
+            sgReport.setStatus(status);
+            sgReport.setType(type);
+            sgReport.setCondition(condition);
+            String fileName = "导出项目信息" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
+            List<Information> informationList = reportService.findInformationList(sgReport);
+            new ExportExcel("导出项目信息", OutInformation.class).setDataList(informationList).write(response, fileName).dispose();
+            j.setSuccess(true);
+            j.setMsg("导出成功!");
+            return j;
+        } catch (Exception e) {
+            j.setSuccess(false);
+            j.setMsg("导出物料清单!失败信息:" + e.getMessage());
+        }
+        return j;
+    }
 }

+ 3 - 2
src/main/webapp/webpage/modules/sg/audit/report/reportList.jsp

@@ -25,6 +25,7 @@
 		<ul class="nav nav-tabs">
 			<li role="presentation" class="active"><a href="">按施工单位</a></li>
 			<li role="presentation"><a href="${ctx}/sg/report/unitlist">按归口部门</a></li>
+			<li role="presentation"><a href="${ctx}/sg/report/secondlist">按二级单位</a> </li>
 		</ul>
 		</div>
 		
@@ -45,13 +46,13 @@
 			<tr>
 				<th>完成</th>
 				<c:forEach items="${list}" var="data" varStatus="index">
-				<th>${data.finishCount}</th>
+					<th><a href="${ctx}/sg/report/exportInformation?condition=${data.name}&status=0&type=0">${data.finishCount}</a></th>
 				</c:forEach>
 			</tr>
 			<tr>
 				<th>未完成</th>
 				<c:forEach items="${list}" var="data" varStatus="index">
-				<th>${data.unfinishCount}</th>
+					<th><a href="${ctx}/sg/report/exportInformation?condition=${data.name}&status=1&type=0">${data.unfinishCount}</a></th>
 				</c:forEach>
 			</tr>
 			</thead>

+ 3 - 2
src/main/webapp/webpage/modules/sg/audit/report/reportList1.jsp

@@ -25,6 +25,7 @@
 		<ul class="nav nav-tabs">
 			<li role="presentation"><a href="${ctx}/sg/report/">按施工单位</a></li>
 			<li role="presentation" class="active"><a href="#">按归口部门</a></li>
+			<li role="presentation"><a href="${ctx}/sg/report/secondlist">按二级单位</a> </li>
 		</ul>
 		</div>
 		
@@ -45,13 +46,13 @@
 			<tr>
 				<th>完成</th>
 				<c:forEach items="${list}" var="data" varStatus="index">
-				<th>${data.finishCount}</th>
+					<th><a href="${ctx}/sg/report/exportInformation?condition=${data.name}&status=0&type=1">${data.finishCount}</a></th>
 				</c:forEach>
 			</tr>
 			<tr>
 				<th>未完成</th>
 				<c:forEach items="${list}" var="data" varStatus="index">
-				<th>${data.unfinishCount}</th>
+					<th><a href="${ctx}/sg/report/exportInformation?condition=${data.name}&status=1&type=1">${data.unfinishCount}</a></th>
 				</c:forEach>
 			</tr>
 			</thead>

+ 130 - 0
src/main/webapp/webpage/modules/sg/audit/report/reportList2.jsp

@@ -0,0 +1,130 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>项目报表</title>
+	<meta http-equiv="Content-type" content="text/html; charset=utf-8">
+	<meta name="decorator" content="ani"/>
+	<%@ include file="/webpage/include/bootstraptable.jsp"%>
+	<%@ include file="/webpage/include/echarts.jsp"%>
+	<%--<%@include file="reportList.js" %>--%>
+	<style type="text/css">
+		#div1{
+			margin-top: 10px;
+		}
+	</style>
+</head>
+<body>
+	<div class="wrapper wrapper-content">
+	<div class="panel panel-primary">
+	<div class="panel-heading">
+		<h3 class="panel-title">项目报表</h3>
+	</div>
+	<div class="panel-body">
+		<div>
+		<ul class="nav nav-tabs">
+			<li role="presentation"><a href="${ctx}/sg/report/">按施工单位</a></li>
+			<li role="presentation"><a href="${ctx}/sg/report/unitlist">按归口部门</a></li>
+			<li role="presentation" class="active"><a href="#">按二级单位</a> </li>
+		</ul>
+		</div>
+		
+	<!-- 表格 -->
+	<%--<table id="reportTable"   data-toolbar="#toolbar"></table>--%>
+
+    <!-- context menu -->
+		<div id="div1">
+		<table class="table table-bordered">
+
+            <thead>
+			<tr>
+				<th> </th>
+				<c:forEach items="${list}" var="data" varStatus="index">
+				<th>${data.name}</th>
+				</c:forEach>
+			</tr>
+			<tr>
+				<th>完成</th>
+				<c:forEach items="${list}" var="data" varStatus="index">
+					<th><a href="${ctx}/sg/report/exportInformation?condition=${data.name}&status=0&type=2">${data.finishCount}</a></th>
+				</c:forEach>
+			</tr>
+			<tr>
+				<th>未完成</th>
+				<c:forEach items="${list}" var="data" varStatus="index">
+					<th><a href="${ctx}/sg/report/exportInformation?condition=${data.name}&status=1&type=2">${data.unfinishCount}</a></th>
+				</c:forEach>
+			</tr>
+			</thead>
+		</table>
+		</div>
+
+		<%--<table class="table table-bordered">--%>
+
+			<%--<thead>--%>
+			<%--<tr>--%>
+				<%--<th> </th>--%>
+				<%--<c:forEach items="${list1}" var="data" varStatus="index">--%>
+					<%--<th>${data.name}</th>--%>
+				<%--</c:forEach>--%>
+			<%--</tr>--%>
+			<%--<tr>--%>
+				<%--<th>1-7天</th>--%>
+				<%--<c:forEach items="${list1}" var="data" varStatus="index">--%>
+					<%--<th>${data.level1}</th>--%>
+				<%--</c:forEach>--%>
+			<%--</tr>--%>
+			<%--<tr>--%>
+				<%--<th>8-14天</th>--%>
+				<%--<c:forEach items="${list1}" var="data" varStatus="index">--%>
+					<%--<th>${data.level2}</th>--%>
+				<%--</c:forEach>--%>
+			<%--</tr>--%>
+			<%--<tr>--%>
+				<%--<th>15-21天</th>--%>
+				<%--<c:forEach items="${list1}" var="data" varStatus="index">--%>
+					<%--<th>${data.level3}</th>--%>
+				<%--</c:forEach>--%>
+			<%--</tr>--%>
+			<%--<tr>--%>
+				<%--<th>21天以上</th>--%>
+				<%--<c:forEach items="${list1}" var="data" varStatus="index">--%>
+					<%--<th>${data.level4}</th>--%>
+				<%--</c:forEach>--%>
+			<%--</tr>--%>
+
+			<%--</thead>--%>
+
+
+		<%--</table>--%>
+		<div class="btn-group" role="group" aria-label="...">
+			<div class="btn-group" role="group">
+				<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+					项目状态
+					<span class="caret"></span>
+				</button>
+				<ul class="dropdown-menu">
+					<li><a href="${ctx}/sg/report/secondlist?status=1">完成</a></li>
+					<li><a href="${ctx}/sg/report/secondlist?status=0">未完成</a></li>
+				</ul>
+			</div>
+		</div>
+		<div id="main" style="width: 100%;height: 400px"></div>
+		<script type="text/javascript">
+			// 基于准备好的dom,初始化echarts实例4
+			var myChart = echarts.init(document.getElementById('main'));
+			window.onresize = myChart.resize;
+
+			$(function () {
+				jp.get("${ctx}${dataURL}", function (option) {
+					// 指定图表的配置项和数据
+					// 使用刚指定的配置项和数据显示图表。
+					myChart.setOption(option);
+				})
+			})
+		</script>
+	</div>
+	</div>
+	</div>
+</body>
+</html>