Commit e68e7c6f authored by 刘林's avatar 刘林

fix(jg):超设计使用年限功能开发

parent a74ad91d
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage">
<pkg:part pkg:name="/_rels/.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml">
<pkg:xmlData>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId4"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
Target="word/document.xml"/>
<Relationship Id="rId2"
Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"
Target="docProps/core.xml"/>
<Relationship Id="rId1"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties"
Target="docProps/app.xml"/>
<Relationship Id="rId3"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties"
Target="docProps/custom.xml"/>
</Relationships>
</pkg:xmlData>
</pkg:part>
<pkg:part pkg:name="/word/_rels/document.xml.rels"
pkg:contentType="application/vnd.openxmlformats-package.relationships+xml">
<pkg:xmlData>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId4"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable"
Target="fontTable.xml"/>
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"
Target="theme/theme1.xml"/>
<Relationship Id="rId2"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings"
Target="settings.xml"/>
<Relationship Id="rId1"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"
Target="styles.xml"/>
</Relationships>
</pkg:xmlData>
</pkg:part>
<pkg:part pkg:name="/word/document.xml"
pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml">
<pkg:xmlData>
<w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math"
xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing"
xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml"
xmlns:w10="urn:schemas-microsoft-com:office:word"
xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml"
xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup"
xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk"
xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml"
xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape"
xmlns:wpsCustomData="http://www.wps.cn/officeDocument/2013/wpsCustomData"
mc:Ignorable="w14 w15 wp14">
<w:body>
<w:p w14:paraId="05B1A808">
<w:pPr>
<w:pStyle w:val="12"/>
<w:tabs>
<w:tab w:val="left" w:pos="6720"/>
</w:tabs>
<w:spacing w:line="600" w:lineRule="exact"/>
<w:ind w:firstLine="880"/>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="宋体" w:hAnsi="宋体" w:eastAsia="宋体"
w:cs="宋体"/>
<w:sz w:val="44"/>
<w:szCs w:val="44"/>
</w:rPr>
</w:pPr>
<w:bookmarkStart w:id="0" w:name="OLE_LINK1"/>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="宋体" w:hAnsi="宋体" w:eastAsia="宋体"
w:cs="宋体"/>
<w:sz w:val="44"/>
<w:szCs w:val="44"/>
</w:rPr>
<w:t>特种设备使用登记证补证申请表</w:t>
</w:r>
</w:p>
<w:bookmarkEnd w:id="0"/>
<w:p w14:paraId="0B87F667">
<w:pPr>
<w:pStyle w:val="12"/>
<w:tabs>
<w:tab w:val="left" w:pos="6720"/>
</w:tabs>
<w:spacing w:line="600" w:lineRule="exact"/>
<w:ind w:firstLine="420"/>
<w:rPr>
<w:rFonts w:ascii="仿宋_GB2312" w:hAnsi="宋体" w:eastAsia="仿宋_GB2312"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:hAnsi="宋体"/>
</w:rPr>
<w:t xml:space="preserve"> </w:t>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="仿宋_GB2312" w:hAnsi="宋体"
w:eastAsia="仿宋_GB2312"/>
</w:rPr>
<w:t>编号:</w:t>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="仿宋_GB2312" w:hAnsi="宋体"
w:eastAsia="仿宋_GB2312"/>
<w:lang w:val="en-US" w:eastAsia="zh-CN"/>
</w:rPr>
<w:t>applyNo</w:t>
</w:r>
</w:p>
<w:tbl>
<w:tblPr>
<w:tblStyle w:val="5"/>
<w:tblW w:w="8892" w:type="dxa"/>
<w:tblInd w:w="-137" w:type="dxa"/>
<w:tblBorders>
<w:top w:val="single" w:color="auto" w:sz="12" w:space="0"/>
<w:left w:val="single" w:color="auto" w:sz="12" w:space="0"/>
<w:bottom w:val="single" w:color="auto" w:sz="12" w:space="0"/>
<w:right w:val="single" w:color="auto" w:sz="12" w:space="0"/>
<w:insideH w:val="single" w:color="auto" w:sz="6" w:space="0"/>
<w:insideV w:val="single" w:color="auto" w:sz="6" w:space="0"/>
</w:tblBorders>
<w:tblLayout w:type="fixed"/>
<w:tblCellMar>
<w:top w:w="0" w:type="dxa"/>
<w:left w:w="108" w:type="dxa"/>
<w:bottom w:w="0" w:type="dxa"/>
<w:right w:w="108" w:type="dxa"/>
</w:tblCellMar>
</w:tblPr>
<w:tblGrid>
<w:gridCol w:w="580"/>
<w:gridCol w:w="1658"/>
<w:gridCol w:w="2573"/>
<w:gridCol w:w="2117"/>
<w:gridCol w:w="1964"/>
</w:tblGrid>
<w:tr w14:paraId="35BCF936">
<w:tblPrEx>
<w:tblBorders>
<w:top w:val="single" w:color="auto" w:sz="12" w:space="0"/>
<w:left w:val="single" w:color="auto" w:sz="12" w:space="0"/>
<w:bottom w:val="single" w:color="auto" w:sz="12" w:space="0"/>
<w:right w:val="single" w:color="auto" w:sz="12" w:space="0"/>
<w:insideH w:val="single" w:color="auto" w:sz="6" w:space="0"/>
<w:insideV w:val="single" w:color="auto" w:sz="6" w:space="0"/>
</w:tblBorders>
<w:tblCellMar>
<w:top w:w="0" w:type="dxa"/>
<w:left w:w="108" w:type="dxa"/>
<w:bottom w:w="0" w:type="dxa"/>
<w:right w:w="108" w:type="dxa"/>
</w:tblCellMar>
</w:tblPrEx>
<w:tc>
<w:tcPr>
<w:tcW w:w="2238" w:type="dxa"/>
<w:gridSpan w:val="2"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p w14:paraId="7A04896F">
<w:pPr>
<w:spacing w:line="520" w:lineRule="exact"/>
<w:ind w:firstLine="140" w:firstLineChars="50"/>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="仿宋_GB2312" w:eastAsia="仿宋_GB2312"/>
<w:sz w:val="28"/>
<w:szCs w:val="28"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="仿宋_GB2312" w:eastAsia="仿宋_GB2312"/>
<w:sz w:val="28"/>
<w:szCs w:val="28"/>
</w:rPr>
<w:t>使用单位名称</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="6654" w:type="dxa"/>
<w:gridSpan w:val="3"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p w14:paraId="1B19541F">
<w:pPr>
<w:spacing w:line="520" w:lineRule="exact"/>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:hint="default" w:ascii="仿宋_GB2312" w:eastAsia="仿宋_GB2312"/>
<w:sz w:val="28"/>
<w:szCs w:val="28"/>
<w:lang w:val="en-US" w:eastAsia="zh-CN"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="仿宋_GB2312" w:eastAsia="仿宋_GB2312"/>
<w:sz w:val="28"/>
<w:szCs w:val="28"/>
<w:lang w:val="en-US" w:eastAsia="zh-CN"/>
</w:rPr>
<w:t>useUnitName</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr w14:paraId="205F4058">
<w:tblPrEx>
<w:tblBorders>
<w:top w:val="single" w:color="auto" w:sz="12" w:space="0"/>
<w:left w:val="single" w:color="auto" w:sz="12" w:space="0"/>
<w:bottom w:val="single" w:color="auto" w:sz="12" w:space="0"/>
<w:right w:val="single" w:color="auto" w:sz="12" w:space="0"/>
<w:insideH w:val="single" w:color="auto" w:sz="6" w:space="0"/>
<w:insideV w:val="single" w:color="auto" w:sz="6" w:space="0"/>
</w:tblBorders>
<w:tblCellMar>
<w:top w:w="0" w:type="dxa"/>
<w:left w:w="108" w:type="dxa"/>
<w:bottom w:w="0" w:type="dxa"/>
<w:right w:w="108" w:type="dxa"/>
</w:tblCellMar>
</w:tblPrEx>
<w:tc>
<w:tcPr>
<w:tcW w:w="2238" w:type="dxa"/>
<w:gridSpan w:val="2"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p w14:paraId="2DB15F31">
<w:pPr>
<w:spacing w:line="520" w:lineRule="exact"/>
<w:ind w:firstLine="140" w:firstLineChars="50"/>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="仿宋_GB2312" w:eastAsia="仿宋_GB2312"/>
<w:sz w:val="28"/>
<w:szCs w:val="28"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="仿宋_GB2312" w:eastAsia="仿宋_GB2312"/>
<w:sz w:val="28"/>
<w:szCs w:val="28"/>
</w:rPr>
<w:t>设备使用地址</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="6654" w:type="dxa"/>
<w:gridSpan w:val="3"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p w14:paraId="089D94B9">
<w:pPr>
<w:spacing w:line="520" w:lineRule="exact"/>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="仿宋_GB2312" w:eastAsia="仿宋_GB2312"/>
<w:sz w:val="28"/>
<w:szCs w:val="28"/>
<w:lang w:val="en-US" w:eastAsia="zh-CN"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="仿宋_GB2312" w:eastAsia="仿宋_GB2312"/>
<w:sz w:val="28"/>
<w:szCs w:val="28"/>
<w:lang w:val="en-US" w:eastAsia="zh-CN"/>
</w:rPr>
<w:t>useUnitAddress</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr w14:paraId="5B9C6165">
<w:tblPrEx>
<w:tblBorders>
<w:top w:val="single" w:color="auto" w:sz="12" w:space="0"/>
<w:left w:val="single" w:color="auto" w:sz="12" w:space="0"/>
<w:bottom w:val="single" w:color="auto" w:sz="12" w:space="0"/>
<w:right w:val="single" w:color="auto" w:sz="12" w:space="0"/>
<w:insideH w:val="single" w:color="auto" w:sz="6" w:space="0"/>
<w:insideV w:val="single" w:color="auto" w:sz="6" w:space="0"/>
</w:tblBorders>
<w:tblCellMar>
<w:top w:w="0" w:type="dxa"/>
<w:left w:w="108" w:type="dxa"/>
<w:bottom w:w="0" w:type="dxa"/>
<w:right w:w="108" w:type="dxa"/>
</w:tblCellMar>
</w:tblPrEx>
<w:tc>
<w:tcPr>
<w:tcW w:w="2238" w:type="dxa"/>
<w:gridSpan w:val="2"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p w14:paraId="01344039">
<w:pPr>
<w:spacing w:line="520" w:lineRule="exact"/>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="仿宋_GB2312" w:eastAsia="仿宋_GB2312"/>
<w:sz w:val="28"/>
<w:szCs w:val="28"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="仿宋_GB2312" w:eastAsia="仿宋_GB2312"/>
<w:sz w:val="28"/>
<w:szCs w:val="28"/>
</w:rPr>
<w:t>补领原因</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="6654" w:type="dxa"/>
<w:gridSpan w:val="3"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p w14:paraId="4C906C6D">
<w:pPr>
<w:spacing w:line="520" w:lineRule="exact"/>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="仿宋_GB2312" w:eastAsia="仿宋_GB2312"/>
<w:sz w:val="28"/>
<w:szCs w:val="28"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="仿宋_GB2312" w:eastAsia="仿宋_GB2312"/>
<w:sz w:val="28"/>
<w:szCs w:val="28"/>
<w:lang w:eastAsia="zh-CN"/>
</w:rPr>
FreeMarker template error (DEBUG mode; use RETHROW in production!):
Can't compare values of these types. Allowed comparisons are between two numbers, two strings, two dates, or two booleans.
Left hand operand is a string (wrapper: f.t.SimpleScalar).
Right hand operand is a number (wrapper: f.t.SimpleNumber).
The blamed expression:
==> applicationReason == 0 [in template "CertificateReplenish.ftl" at line 363, column 46]
----
FTL stack trace ("~" means nesting-related):
- Failed at: #if applicationReason == 0 [in template "CertificateReplenish.ftl" at line 363, column 41]
----
Java stack trace (for programmers):
----
freemarker.core._MiscTemplateException: [... Exception message was already printed; see it above ...]
at freemarker.core.EvalUtil.compare(EvalUtil.java:303)
at freemarker.core.EvalUtil.compare(EvalUtil.java:115)
at freemarker.core.ComparisonExpression.evalToBoolean(ComparisonExpression.java:78)
at freemarker.core.IfBlock.accept(IfBlock.java:49)
at freemarker.core.Environment.visit(Environment.java:347)
at freemarker.core.Environment.visit(Environment.java:353)
at freemarker.core.Environment.process(Environment.java:326)
at freemarker.template.Template.process(Template.java:383)
at com.yeejoin.amos.boot.module.jg.biz.utils.WordTemplateUtils.createDoc(WordTemplateUtils.java:64)
at com.yeejoin.amos.boot.module.jg.biz.utils.WordTemplateUtils.fillAndConvertDocFile(WordTemplateUtils.java:75)
at com.yeejoin.amos.boot.module.jg.biz.service.impl.CommonServiceImpl.wordToPdf(CommonServiceImpl.java:1208)
at com.yeejoin.amos.boot.module.jg.biz.service.impl.CommonServiceImpl$$FastClassBySpringCGLIB$$14f039f5.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
at com.yeejoin.amos.boot.module.jg.biz.service.impl.CommonServiceImpl$$EnhancerBySpringCGLIB$$4a1bedb6.wordToPdf(<generated>)
at com.yeejoin.amos.boot.module.jg.biz.service.impl.JgCertificateReplenishServiceImpl.getCertReplenishFormStream(JgCertificateReplenishServiceImpl.java:89)
at com.yeejoin.amos.boot.module.jg.biz.service.impl.JgCertificateReplenishServiceImpl$$FastClassBySpringCGLIB$$748ce114.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
at com.yeejoin.amos.boot.module.jg.biz.service.impl.JgCertificateReplenishServiceImpl$$EnhancerBySpringCGLIB$$e067ce73.getCertReplenishFormStream(<generated>)
at com.yeejoin.amos.boot.module.jg.biz.controller.CommonController.getCertReplenishFormStream(CommonController.java:820)
at com.yeejoin.amos.boot.module.jg.biz.controller.CommonController$$FastClassBySpringCGLIB$$8e8b1099.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)
at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:55)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)
at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:56)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)
at com.yeejoin.amos.boot.module.jg.biz.controller.CommonController$$EnhancerBySpringCGLIB$$f87fbb8.getCertReplenishFormStream(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:665)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at com.github.xiaoymin.knife4j.spring.filter.SecurityBasicAuthFilter.doFilter(SecurityBasicAuthFilter.java:87)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:118)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:158)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:155)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:92)
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:77)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:97)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
......@@ -92,4 +92,18 @@ public class JgOverDesignServiceLifeDto extends BaseDto {
@ApiModelProperty(value = "创建时间")
private Date createDate;
@ApiModelProperty(value = "设备种类")
private String equList;
@ApiModelProperty(value = "设备类别")
private String equCategory;
@ApiModelProperty(value = "设备品种")
private String equDefine;
@ApiModelProperty(value = "设备代码")
private String equCode;
@ApiModelProperty(value = "使用登记编号")
private String useRegistrationCode;
}
......@@ -44,21 +44,9 @@ public class JgOverDesignServiceLifeEqDto extends BaseDto {
@ApiModelProperty(value = "安全评估报告")
private String safetyAssessmentReport;
@ApiModelProperty(value = "安全评估结果")
@ApiModelProperty(value = "安全措施")
private String safetyAssessmentResult;
@ApiModelProperty(value = "安全评估日期")
private Date safetyAssessmentDate;
@ApiModelProperty(value = "使用登记编号")
private String useRegistrationCode;
@ApiModelProperty(value = "设备种类")
private String equList;
@ApiModelProperty(value = "设备类别")
private String equCategory;
@ApiModelProperty(value = "设备品种")
private String equDefine;
}
......@@ -83,7 +83,7 @@ public class JgOverDesignServiceLifeEq extends BaseEntity {
private String safetyAssessmentReport;
/**
* 安全评估结果
* 安全措施
*/
@TableField("safety_assessment_result")
private String safetyAssessmentResult;
......
......@@ -27,7 +27,7 @@
ovds.promoter,
DATE_FORMAT(ovds.rec_date,'%Y-%m-%d') as recDate,
ovds.instance_id as instanceId,
GROUP_CONCAT(ovdseq.use_registration_code) as useRegistrationCode,
ovds.use_registration_code as useRegistrationCode,
ovds.next_execute_user_ids as nextExecuteUserIds,
ovds.create_user_id as createUserId,
ovds.next_task_id as nextTaskId,
......@@ -77,25 +77,19 @@
<if test="dto.useRegistrationCode != null and dto.useRegistrationCode != ''">
AND ovds.use_registration_code like concat('%',#{dto.useRegistrationCode},'%')
</if>
<if test="dto.supervisoryCode != null and dto.supervisoryCode != ''">
AND oi.SUPERVISORY_CODE like concat('%',#{dto.supervisoryCode},'%')
</if>
<if test="dto.receiveOrgCode != null and dto.receiveOrgCode != ''">
and (ovds.receive_company_code = #{dto.receiveOrgCode} or ovds.transfer_to_user_ids like concat('%',#{currentUserId},'%'))
</if>
<if test="type == 'supervision'">
AND (ovds.receive_company_code = #{dto.unitCode} or ovds.transfer_to_user_ids like concat('%',#{currentUserId},'%'))
AND (ovds.receive_company_code = #{dto.useUnitCreditCode} or ovds.transfer_to_user_ids like concat('%',#{currentUserId},'%'))
AND ovds.instance_id <![CDATA[<>]]> ''
</if>
<if test="type == 'company'">
AND ovds.use_unit_credit_code = #{dto.unitCode}
AND ovds.use_unit_credit_code = #{dto.useUnitCreditCode}
</if>
<if test="dto.applyNo != null and dto.applyNo != ''">
and ovds.apply_no like concat('%',#{dto.applyNo},'%')
</if>
<if test="dto.productName != null and dto.productName != ''">
and jri.PRODUCT_NAME like concat('%',#{dto.productName},'%')
</if>
</where>
order by
<if test="sort != null">
......
......@@ -27,7 +27,6 @@ import java.util.Map;
import java.util.Optional;
/**
*
* @author system_generator
* @date 2025-03-06
*/
......@@ -48,6 +47,7 @@ public class JgOverDesignServiceLifeController extends BaseController {
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/save")
@RestEventTrigger(value = "operateLogRestEventHandler")
@ApiOperation(httpMethod = "POST", value = "新增", notes = "新增")
public ResponseModel<Object> save(@RequestBody JSONObject map) {
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
......@@ -55,51 +55,40 @@ public class JgOverDesignServiceLifeController extends BaseController {
}
/**
* 根据sequenceNbr更新
* 根据sequenceNbr删除
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PutMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "PUT", value = "根据sequenceNbr更新", notes = "根据sequenceNbr更新")
public ResponseModel<JgOverDesignServiceLife> updateBySequenceNbrJgOverDesignServiceLife(@RequestBody JgOverDesignServiceLife entity,@PathVariable(value = "sequenceNbr") Long sequenceNbr) {
entity.setSequenceNbr(sequenceNbr);
return ResponseHelper.buildResponse(jgOverDesignServiceLifeServiceImpl.updateWithModel(entity));
@DeleteMapping(value = "/delete")
@RestEventTrigger(value = "operateLogRestEventHandler")
@ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除", notes = "根据sequenceNbr删除")
public ResponseModel<Boolean> delete(@RequestParam("sequenceNbr") Long sequenceNbr) {
return ResponseHelper.buildResponse(jgOverDesignServiceLifeServiceImpl.delete(sequenceNbr));
}
/**
* 根据sequenceNbr删除
* 根据sequenceNbr查询详情
*
* @param sequenceNbr 主键
* @return
* @return ResponseModel
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@DeleteMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除", notes = "根据sequenceNbr删除")
public ResponseModel<Boolean> deleteBySequenceNbr(@PathVariable(value = "sequenceNbr") Long sequenceNbr){
return ResponseHelper.buildResponse(jgOverDesignServiceLifeServiceImpl.deleteBatchBySequenceNbrs(Collections.singletonList(sequenceNbr)));
@GetMapping(value = "/getDetail")
@ApiOperation(httpMethod = "GET", value = "根据sequenceNbr查询使用年限详情", notes = "根据sequenceNbr查询使用年限详情")
public ResponseModel<Map<String, Object>> selectOne(@RequestParam("sequenceNbr") Long sequenceNbr) {
return ResponseHelper.buildResponse(jgOverDesignServiceLifeServiceImpl.getDetail(sequenceNbr));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/deleteBatch")
@RestEventTrigger(value = "operateLogRestEventHandler")
@ApiOperation(httpMethod = "POST", value = "批量删除", notes = "批量删除")
public ResponseModel<Boolean> deleteBySequenceNbr(@RequestBody JSONObject map){
public ResponseModel<Boolean> deleteBySequenceNbr(@RequestBody JSONObject map) {
List<Long> ids = (List<Long>) map.get("ids");
return ResponseHelper.buildResponse(jgOverDesignServiceLifeServiceImpl.deleteBatchBySequenceNbrs(ids));
}
/**
* 根据sequenceNbr查询
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "GET",value = "根据sequenceNbr查询单个", notes = "根据sequenceNbr查询单个")
public ResponseModel<JgOverDesignServiceLife> selectOne(@PathVariable Long sequenceNbr) {
return ResponseHelper.buildResponse(jgOverDesignServiceLifeServiceImpl.detail(sequenceNbr));
}
/**
* 列表分页查询
......@@ -111,7 +100,7 @@ public class JgOverDesignServiceLifeController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping("/getPageList")
@ApiOperation(httpMethod = "GET", value = "分页查询", notes = "分页查询")
public ResponseModel<Page<Map<String, Object>>> queryForPage(@RequestParam("current") int current,
public ResponseModel<Page<Map<String, Object>>> getPageList(@RequestParam("current") int current,
@RequestParam("size") int size,
@RequestParam(value = "sort", required = false) String sort,
JgOverDesignServiceLifeDto dto) {
......@@ -124,6 +113,7 @@ public class JgOverDesignServiceLifeController extends BaseController {
/**
* 撤回操作
*
* @param map map
* @return
*/
......
......@@ -2489,11 +2489,11 @@ public class CommonServiceImpl implements ICommonService {
formData.put("auditPassDate", new SimpleDateFormat("yyyy-MM-dd").format( manage.getAuditPassDate()));
formData.put("receiveCompanyOrgName", manage.getReceiveOrgName());
formData.put("applyNo", manage.getApplyNo());
formData.put("cruDate", DateUtils.convertDateToString(new Date(), DateUtils.CHN_DATE_PATTERN));
formDataList.add(formData);
});
}
}
formData.put("cruDate", DateUtils.convertDateToString(new Date(), DateUtils.CHN_DATE_PATTERN));
formDataList.add(formData);
return formDataList;
}
......
......@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.yeejoin.amos.boot.biz.common.bo.CompanyBo;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.biz.common.entity.TzsBaseEntity;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
......@@ -20,12 +21,14 @@ import com.yeejoin.amos.boot.module.jg.api.enums.CompanyTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.enums.WorkFlowStatusEnum;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgOverDesignServiceLifeEqMapper;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgOverDesignServiceLifeMapper;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgRegistrationHistoryMapper;
import com.yeejoin.amos.boot.module.jg.api.service.IJgOverDesignServiceLifeService;
import com.yeejoin.amos.boot.module.jg.biz.config.LocalBadRequest;
import com.yeejoin.amos.boot.module.jg.biz.context.EquipUsedCheckStrategyContext;
import com.yeejoin.amos.boot.module.jg.biz.context.FlowingEquipRedisContext;
import com.yeejoin.amos.boot.module.jg.biz.feign.TzsServiceFeignClient;
import com.yeejoin.amos.boot.module.jg.biz.service.ICmWorkflowService;
import com.yeejoin.amos.boot.module.jg.biz.service.ICompensateFlowDataOfRedis;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgDesignInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgInspectionDetectionInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgRegisterInfo;
......@@ -49,6 +52,8 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -66,11 +71,12 @@ import static java.util.stream.Collectors.toList;
* @date 2025-03-06
*/
@Service
public class JgOverDesignServiceLifeServiceImpl extends BaseService<JgOverDesignServiceLife,JgOverDesignServiceLife,JgOverDesignServiceLifeMapper> implements IJgOverDesignServiceLifeService {
public class JgOverDesignServiceLifeServiceImpl extends BaseService<JgOverDesignServiceLife,JgOverDesignServiceLife,JgOverDesignServiceLifeMapper> implements IJgOverDesignServiceLifeService, ICompensateFlowDataOfRedis<JgOverDesignServiceLife> {
private static final String DEFINITION_KEY = "overDesignServiceLife";
public static final String SUBMIT_TYPE_FLOW = "1";
public static final String SUBMIT_DATA = "0";
private static final String TABLE_PAGE_ID = "overDesignServiceLife";
private final List<String> NOT_FLOWING_STATE = Arrays.asList("使用单位待提交", "一级受理已驳回", "使用单位已撤回", "已作废");
@Autowired
private CommonServiceImpl commonService;
......@@ -98,6 +104,10 @@ public class JgOverDesignServiceLifeServiceImpl extends BaseService<JgOverDesign
private ICmWorkflowService workflowService;
@Autowired
private IdxBizJgDesignInfoServiceImpl idxBizJgDesignInfoServiceImpl;
@Autowired
private JgRegistrationHistoryMapper jgRegistrationHistoryMapper;
@Autowired
private JgUseRegistrationManageServiceImpl useRegistrationManageService;
/**
* 分页查询
......@@ -163,7 +173,7 @@ public class JgOverDesignServiceLifeServiceImpl extends BaseService<JgOverDesign
overDesignDto.setPromoter(reginParams.getUserModel().getUserId());
List<String> registrationNoList = equipmentLists.stream()
.map(objectMap -> objectMap.get("useRegistrationCode"))
.map(objectMap -> objectMap.get("USE_ORG_CODE"))
.filter(Objects::nonNull)
.map(Object::toString)
.collect(Collectors.toList());
......@@ -685,4 +695,64 @@ public class JgOverDesignServiceLifeServiceImpl extends BaseService<JgOverDesign
.delDataForCheckEquipRepeatUsed(records, data.getUseUnitCreditCode());
}
}
public Map<String, Object> getDetail(Long sequenceNbr) {
Map<String, Object> resultDataMap = new HashMap<>();
JgOverDesignServiceLife overDesignServiceLife = this.getById(sequenceNbr);
this.doCompensate(overDesignServiceLife);
JSONArray historyData = commonService.queryHistoryDataObj(sequenceNbr);
if (ValidationUtil.equals(FlowStatusEnum.TO_BE_FINISHED.getName(), overDesignServiceLife.getStatus())) {
if (!ValidationUtil.isEmpty(historyData)) {
if (!ValidationUtil.isEmpty(overDesignServiceLife)) {
Map<String, Object> transferToMap = Bean.BeantoMap(overDesignServiceLife);
transferToMap.put("equipmentLists", JSONArray.parseArray(String.valueOf(historyData)));
transferToMap.put("receiveCompanyCode", overDesignServiceLife.getReceiveCompanyCode() + "_" + overDesignServiceLife.getReceiveOrgName());
transferToMap.put("receiveOrgCode", overDesignServiceLife.getReceiveCompanyCode() + "_" + overDesignServiceLife.getReceiveOrgName());
resultDataMap.putAll(transferToMap);
}
}
} else {
if (!ValidationUtil.isEmpty(overDesignServiceLife)) {
List<String> useRegistrationCodes = historyData.stream()
.map(obj -> ((JSONObject) obj).getString("USE_ORG_CODE"))
.collect(Collectors.toList());
List<JgUseRegistrationManage> registrationList = useRegistrationManageService.lambdaQuery()
.in(JgUseRegistrationManage::getUseRegistrationCode, useRegistrationCodes)
.list();
resultDataMap.putAll(Bean.BeantoMap(overDesignServiceLife));
resultDataMap.put("receiveCompanyCode", overDesignServiceLife.getReceiveCompanyCode() + "_" + overDesignServiceLife.getReceiveOrgName());
resultDataMap.put("receiveOrgCode", overDesignServiceLife.getReceiveCompanyCode() + "_" + overDesignServiceLife.getReceiveOrgName());
resultDataMap.put("sequenceNbrs", registrationList.stream()
.map(BaseEntity::getSequenceNbr)
.collect(Collectors.toList()));
resultDataMap.put("equipmentLists", JSONArray.parseArray(String.valueOf(historyData)));
}
}
commonService.convertStringToJsonobject(resultDataMap, new String[]{"otherAccessories"});
return resultDataMap;
}
@Override
public boolean beforeCheck(JgOverDesignServiceLife overDesignServiceLife) {
return overDesignServiceLife.getInstanceId() != null && !overDesignServiceLife.getStatus().equals(FlowStatusEnum.TO_BE_FINISHED.getName()) &&!overDesignServiceLife.getStatus().equals(FlowStatusEnum.TO_BE_DISCARD.getName());
}
@Override
public void compensate(JgOverDesignServiceLife overDesignServiceLife) {
commonService.saveExecuteFlowData2Redis(overDesignServiceLife.getInstanceId(), this.buildInstanceRuntimeData(overDesignServiceLife));
}
@Transactional(rollbackFor = Exception.class)
public Boolean delete(Long sequenceNbr) {
JgOverDesignServiceLife overDesignServiceLife = this.baseMapper.selectById(sequenceNbr);
commonServiceImpl.deleteTaskModel(String.valueOf(sequenceNbr), overDesignServiceLife.getInstanceId());
this.baseMapper.deleteById(sequenceNbr);
jgOverDesignServiceLifeEqService.remove(new LambdaQueryWrapper<JgOverDesignServiceLifeEq>()
.eq(JgOverDesignServiceLifeEq::getOverDesignId, sequenceNbr));
jgRegistrationHistoryService.remove(new LambdaQueryWrapper<JgRegistrationHistory>()
.eq(JgRegistrationHistory::getCurrentDocumentId, sequenceNbr));
return Boolean.TRUE;
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment