diff --git a/Test/src/com/renchao/ZipWithNIOExample.java b/Test/src/com/renchao/ZipWithNIOExample.java new file mode 100644 index 00000000..fdf17590 --- /dev/null +++ b/Test/src/com/renchao/ZipWithNIOExample.java @@ -0,0 +1,69 @@ +package com.renchao; + +import java.io.*; +import java.nio.ByteBuffer; +import java.nio.channels.*; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.util.zip.*; + +public class ZipWithNIOExample { + public static void main(String[] args) { + // String sourceDir = "C:\\Users\\RENCHAO\\Desktop\\aa.pdf"; + File file = new File("C:\\Users\\RENCHAO\\Desktop\\aa.pdf"); + String zipFile = "C:\\Users\\RENCHAO\\Desktop\\temp-sss\\aa\\output2.zip"; + + try (FileOutputStream fos = new FileOutputStream(zipFile); + ZipOutputStream zos = new ZipOutputStream(fos)) { + + // addFilesToZip(sourceDir, "", zos); + addFileToZip(file, "", zos); + + System.out.println("Directory successfully compressed."); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private static void addFilesToZip(String sourceDir, String basePath, ZipOutputStream zos) throws IOException { + Path sourcePath = Paths.get(sourceDir); + try (DirectoryStream directoryStream = Files.newDirectoryStream(sourcePath)) { + for (Path path : directoryStream) { + if (Files.isDirectory(path)) { + addFilesToZip(path.toString(), basePath + path.getFileName() + "/", zos); + } else { + addFileToZip(path.toFile(), basePath, zos); + } + } + } + } + + private static void addFileToZip(File file, String basePath, ZipOutputStream zos) throws IOException { + String entryName = basePath + file.getName(); + ZipEntry entry = new ZipEntry(entryName); + entry.setMethod(ZipEntry.STORED); + // entry.setSize(file.length()); + zos.putNextEntry(entry); + entry.setSize(file.length()); + entry.setCompressedSize(file.length()); + + try (FileChannel fileChannel = FileChannel.open(file.toPath(), StandardOpenOption.READ)) { + ByteBuffer buffer = ByteBuffer.allocate(1024); + CRC32 crc32 = new CRC32(); + while (fileChannel.read(buffer) != -1) { + buffer.flip(); + byte[] bytes = new byte[buffer.remaining()]; + buffer.get(bytes); + zos.write(bytes); + crc32.update(bytes); + buffer.clear(); + } + entry.setCrc(crc32.getValue()); + } + + zos.closeEntry(); + } +} diff --git a/agile-portal/agile-portal-gateway/src/main/resources/view/static/css/455.53097460.css b/agile-portal/agile-portal-gateway/src/main/resources/view/static/css/455.53097460.css new file mode 100644 index 00000000..f3d7b6fc --- /dev/null +++ b/agile-portal/agile-portal-gateway/src/main/resources/view/static/css/455.53097460.css @@ -0,0 +1 @@ +.lab-apply .top-filter[data-v-0d318eb8]{margin-top:24px}.lab-apply .tale-list[data-v-0d318eb8] .el-table th.el-table__cell{color:#333;background:#fafafa;padding:5px 0;font-size:16px}.lab-apply .tale-list[data-v-0d318eb8] .el-table .cell.el-tooltip{font-size:16px}.lab-apply .tale-list .review-status[data-v-0d318eb8]{display:flex;align-items:center}.lab-apply .tale-list .review-status .icon-circle[data-v-0d318eb8]{width:6px;height:6px;border-radius:3px;margin-right:8px;background:#52c41a}.lab-apply .tale-list .review-status .icon-circle.grey[data-v-0d318eb8]{background:#d9d9d9}.lab-apply .tale-list .review-status .icon-circle.orange[data-v-0d318eb8]{background:#ffd859}.lab-apply .tale-list .review-status .icon-circle.green[data-v-0d318eb8]{background:#52c41a}.lab-apply .tale-list .review-status .icon-circle.red[data-v-0d318eb8]{background:#ff4d4f}.lab-apply[data-v-0d318eb8] .el-pagination{text-align:right} \ No newline at end of file diff --git a/agile-portal/agile-portal-gateway/src/main/resources/view/static/css/573.69d588f0.css b/agile-portal/agile-portal-gateway/src/main/resources/view/static/css/573.69d588f0.css new file mode 100644 index 00000000..89dc1f9c --- /dev/null +++ b/agile-portal/agile-portal-gateway/src/main/resources/view/static/css/573.69d588f0.css @@ -0,0 +1 @@ +.el-table--scrollable-x .el-table__body-wrapper{height:355px}.lab-apply .top-filter[data-v-34b17d1d]{margin-top:24px}.lab-apply .tale-list[data-v-34b17d1d] .el-table th.el-table__cell{color:#333;background:#fafafa;padding:5px 0;font-size:16px}.lab-apply .tale-list[data-v-34b17d1d] .el-table .cell.el-tooltip{font-size:16px}.lab-apply .tale-list .review-status[data-v-34b17d1d]{display:flex;align-items:center}.lab-apply .tale-list .review-status .icon-circle[data-v-34b17d1d]{width:6px;height:6px;border-radius:3px;margin-right:8px;background:#52c41a}.lab-apply .tale-list .review-status .icon-circle.grey[data-v-34b17d1d]{background:#d9d9d9}.lab-apply .tale-list .review-status .icon-circle.orange[data-v-34b17d1d]{background:#ffd859}.lab-apply .tale-list .review-status .icon-circle.green[data-v-34b17d1d]{background:#52c41a}.lab-apply .tale-list .review-status .icon-circle.red[data-v-34b17d1d]{background:#ff4d4f}.lab-apply[data-v-34b17d1d] .el-pagination,[data-v-34b17d1d] .el-pagination{text-align:right}[data-v-34b17d1d] .el-dialog__body{padding:10px}::-webkit-scrollbar{width:7px;height:7px}::-webkit-scrollbar-thumb{border-radius:7px;background-color:rgba(0,0,0,.25)}::-webkit-scrollbar-track{background-color:#f6f6f6}::-webkit-scrollbar-thumb,::-webkit-scrollbar-track{border:0} \ No newline at end of file diff --git a/agile-portal/agile-portal-gateway/src/main/resources/view/static/css/649.99cfe83b.css b/agile-portal/agile-portal-gateway/src/main/resources/view/static/css/649.99cfe83b.css new file mode 100644 index 00000000..157bdff2 --- /dev/null +++ b/agile-portal/agile-portal-gateway/src/main/resources/view/static/css/649.99cfe83b.css @@ -0,0 +1 @@ +.personal-info .el-form-item__label{text-align:left!important;font-size:16px!important}.personal-info .el-form-item__content{font-size:16px!important}.personal-info .el-form-item{margin-bottom:0}.personal-info[data-v-54eff09a]{padding-top:20px;font-size:16px}.personal-info .el-icon-success[data-v-54eff09a]{margin-right:6px;color:#6cbd7f}.personal-info .change-pwd-link[data-v-54eff09a]{margin-left:15px;color:#3165db} \ No newline at end of file diff --git a/agile-portal/agile-portal-gateway/src/main/resources/view/static/css/713.9ae160f8.css b/agile-portal/agile-portal-gateway/src/main/resources/view/static/css/713.9ae160f8.css new file mode 100644 index 00000000..a107f685 --- /dev/null +++ b/agile-portal/agile-portal-gateway/src/main/resources/view/static/css/713.9ae160f8.css @@ -0,0 +1 @@ +.find-password[data-v-d37bfed6]{width:100%;min-height:500px;background:#fff}.find-password[data-v-d37bfed6] .el-step__title{text-align:center}.find-password .title[data-v-d37bfed6]{padding:40px 20px;text-align:center;font-size:26px;line-height:40px;font-weight:400}.find-password .el-form[data-v-d37bfed6]{width:382px;margin:60px auto 20px auto}.find-password .procees-contaner[data-v-d37bfed6]{width:700px;padding:60px 200px;margin:0 auto 50px auto;background:#fff}.divClass[data-v-d37bfed6]{width:100%;height:10px;margin:5px 0}.divClass span[data-v-d37bfed6]{float:left;background:#ccc;height:10px;width:31%;margin:0 1%}.divClass .weak[data-v-d37bfed6]{background-color:#f56c6c}.divClass .medium[data-v-d37bfed6]{background-color:#e6a23c}.divClass .strong[data-v-d37bfed6]{background-color:#67c23a} \ No newline at end of file diff --git a/agile-portal/agile-portal-gateway/src/main/resources/view/static/css/9.078f0fee.css b/agile-portal/agile-portal-gateway/src/main/resources/view/static/css/9.078f0fee.css new file mode 100644 index 00000000..6ce0893f --- /dev/null +++ b/agile-portal/agile-portal-gateway/src/main/resources/view/static/css/9.078f0fee.css @@ -0,0 +1 @@ +.inner-container[data-v-d9b82c00]{margin:20px auto;background:#fff}.routerList[data-v-d9b82c00]{background:#ecf5ff;height:100vh;border-radius:10px 10px 0 0}.routerList h2[data-v-d9b82c00]{text-align:center;font-size:24px;background:#e6171e;color:#fff;line-height:45px;border-radius:10px 10px 0 0}.routerList ul[data-v-d9b82c00]{line-height:45px;padding:20px 0}.routerList ul li[data-v-d9b82c00]{font-size:18px;font-weight:600;padding:0 20px}.routerList ul li.on[data-v-d9b82c00]{background:#fff;border-left:5px solid #e6171e}.routerList ul li.on a[data-v-d9b82c00]{color:#e6171e}.api-list-container[data-v-d9b82c00]{background:#f9f9f9}.api-list-container .guide-pic[data-v-d9b82c00]{background:url(../../static/img/data-service.82b45c45.jpg) no-repeat top;background-size:100%}.api-list-container .api-list ul[data-v-d9b82c00]{width:100%;align-items:flex-start;flex-wrap:wrap;justify-content:space-between;padding-top:30px;overflow:hidden}.api-list-container .api-list ul li[data-v-d9b82c00]{padding:15px;margin-bottom:50px;box-sizing:border-box;width:32%;height:296px;background:#fff;box-shadow:0 0 6px 0 rgba(217,225,238,.47);border-radius:2px;transition-property:box-shadow transform;transition-duration:.25s,1s;float:left;margin-left:1%;cursor:pointer;border:2px solid #409eff}.api-list-container .api-list ul li[data-v-d9b82c00]:hover{transform:translateY(-10px);box-shadow:0 0 16px 0 rgba(217,225,238,.47);background:linear-gradient(180deg,#2980b9,#87ceeb);border:2px solid #adb5bd}.api-list-container .api-list ul li:hover .aip-intro[data-v-d9b82c00],.api-list-container .api-list ul li:hover .api-info .others b[data-v-d9b82c00],.api-list-container .api-list ul li:hover .api-info[data-v-d9b82c00],.api-list-container .api-list ul li:hover .api-name[data-v-d9b82c00]{color:#fff}.api-list-container .api-list ul li .api-name[data-v-d9b82c00]{font-size:18px;color:#181818;font-weight:700;line-height:18px;height:18px;margin-bottom:15px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.api-list-container .api-list ul li .aip-intro[data-v-d9b82c00]{height:120px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;color:#666;line-height:24px;margin-bottom:20px;font-size:14px}.api-list-container .api-list ul li .api-info[data-v-d9b82c00]{padding:20px 0;color:#ababab;font-size:14px;border-top:1px solid #d8d8d8}.api-list-container .api-list ul li .api-info .others[data-v-d9b82c00]{display:flex;justify-content:space-between}.api-list-container .api-list ul li .api-info .others b[data-v-d9b82c00]{font-weight:400;font-size:12px;color:#5274ca;line-height:1;padding:4px 5px;border-radius:2px;border:1px solid #5274ca}.api-list-container .api-list ul li .api-info .data-from[data-v-d9b82c00]{padding-bottom:15px}.api-list-container .api-list .pagination-container[data-v-d9b82c00]{background:transparent}.api-list-container .api-list[data-v-d9b82c00] .el-pagination{text-align:center} \ No newline at end of file diff --git a/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/455.10597f7b.js b/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/455.10597f7b.js new file mode 100644 index 00000000..653af59b --- /dev/null +++ b/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/455.10597f7b.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkagile_portal_front"]=self["webpackChunkagile_portal_front"]||[]).push([[455],{42455:(e,t,a)=>{a.r(t),a.d(t,{default:()=>p});var l=function(){var e=this,t=e._self._c;return t("div",{staticClass:"lab-apply"},[t("div",{staticClass:"btn-group",staticStyle:{"text-align":"right","margin-bottom":"10px"}},[t("el-button",{attrs:{type:"primary",size:"mini"},on:{click:e.handleImport}},[e._v("新增")])],1),t("div",{staticClass:"tale-list"},[t("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{"min-height":"355px","max-height":"500px"},attrs:{stripe:"",data:e.myLablyList,"max-height":"500px"}},[t("div",{staticStyle:{"text-align":"left"},attrs:{slot:"empty"},slot:"empty"},[t("el-empty",{attrs:{description:"暂无数据"}})],1),t("el-table-column",{attrs:{align:"center",label:"文件名称",prop:"fileName","show-overflow-tooltip":!0}}),t("el-table-column",{attrs:{align:"center",label:"上传时间",prop:"createTime","show-overflow-tooltip":!0}}),t("el-table-column",{attrs:{align:"center",label:"文件大小",prop:"fileSize","show-overflow-tooltip":!0},scopedSlots:e._u([{key:"default",fn:function(a){return[t("span",[e._v(e._s(e.convertFileSize(a.row.fileSize)))])]}}])}),t("el-table-column",{attrs:{align:"center",label:"文件说明",prop:"remarks","show-overflow-tooltip":!0}}),t("el-table-column",{attrs:{align:"center",label:"文件类型",prop:"fileType","show-overflow-tooltip":!0},scopedSlots:e._u([{key:"default",fn:function(a){return[t("span",[e._v(e._s("data"==a.row.fileType?"数据文件":"python组件"))])]}}])}),t("el-table-column",{attrs:{align:"center",label:"操作"},scopedSlots:e._u([{key:"default",fn:function(a){return["01"!=a.row.reviewStatus?t("el-button",{attrs:{size:"small",type:"text"},on:{click:function(t){return e.handleDelete(a.row)}}},[e._v("删除")]):e._e()]}}])})],1)],1),t("pagination",{directives:[{name:"show",rawName:"v-show",value:e.total>0,expression:"total > 0"}],attrs:{total:e.total,page:e.queryParams.pageNum,limit:e.queryParams.pageSize},on:{"update:page":function(t){return e.$set(e.queryParams,"pageNum",t)},"update:limit":function(t){return e.$set(e.queryParams,"pageSize",t)},pagination:e.getList}}),t("el-dialog",{attrs:{title:e.upload.title,visible:e.upload.open,width:"500px","append-to-body":"","close-on-click-modal":!1,"close-on-press-escape":!1},on:{"update:visible":function(t){return e.$set(e.upload,"open",t)}}},[t("el-form",{ref:"uploadform",attrs:{model:e.upload,rules:e.uploadrules,"label-width":"80px"}},[t("el-row",[t("el-col",{attrs:{span:24}},[t("el-form-item",{attrs:{label:"组件类型",prop:"upData.fileType"}},[t("el-select",{attrs:{placeholder:"请选择组件类型"},on:{change:e.fileTypefn},model:{value:e.upload.upData.fileType,callback:function(t){e.$set(e.upload.upData,"fileType",t)},expression:"upload.upData.fileType"}},e._l(e.fileTypeList,(function(e){return t("el-option",{key:e.value,attrs:{label:e.label,value:e.value}})})),1)],1)],1),t("el-col",{attrs:{span:24}},[t("el-form-item",{attrs:{label:"内容说明",prop:"upData.remarks"}},[t("el-input",{attrs:{type:"textarea",placeholder:"请输入内容说明"},model:{value:e.upload.upData.remarks,callback:function(t){e.$set(e.upload.upData,"remarks",t)},expression:"upload.upData.remarks"}})],1)],1)],1)],1),t("el-upload",{ref:"upload",staticStyle:{"text-align":"center"},attrs:{limit:1,accept:e.upload.accept,headers:e.upload.headers,action:"",disabled:e.upload.isUploading,"on-change":e.beforeUpload,"on-success":e.handleFileSuccess,"auto-upload":!1,"http-request":e.uploadSectionFile,"on-remove":e.removeFile,drag:""}},[t("i",{staticClass:"el-icon-upload"}),t("div",{staticClass:"el-upload__text"},[e._v("将文件拖到此处,或"),t("em",[e._v("点击上传")])])]),t("div",{staticClass:"dialog-footer",staticStyle:{"text-align":"right"},attrs:{slot:"footer"},slot:"footer"},[t("el-button",{attrs:{type:"primary"},on:{click:e.submitFileForm}},[e._v("确 定")]),t("el-button",{on:{click:function(t){e.upload.open=!1}}},[e._v("取 消")])],1)],1)],1)},o=[],r=(a(9653),a(56977),a(68309),a(94986),a(82772),a(32900));const i={name:"MyData",data:function(){return{loading:!0,total:0,myLablyList:[],fileTypeList:[{value:"python",label:"python组件"},{value:"data",label:"数据文件"}],upload:{open:!1,title:"",isUploading:!1,updateSupport:0,accept:".zip,.tar,.gz,.bz2",upData:{fileType:"python",fileSourceType:"dockerlib"}},queryParams:{pageNum:1,pageSize:10},formdata:null,uploadrules:{upData:{fileType:[{required:!0,message:"不能为空",trigger:"blur"}],remarks:[{required:!0,message:"不能为空",trigger:"blur"}]}}}},created:function(){this.getList()},methods:{getList:function(){var e=this;(0,r.Hc)(this.queryParams).then((function(t){e.myLablyList=t.rows,e.total=t.total,e.loading=!1}))},handleImport:function(){this.upload.title="用户导入",this.upload.open=!0},fileTypefn:function(e){"python"==e?this.upload.accept=".zip,.tar,.gz,.bz2":"data"==e&&(this.upload.accept=".zip,.tar,.gz,.csv,.txt,.xls,.xlsx")},convertFileSize:function(e){if(void 0!=e){var t=Number(e)/1024,a=t/1024,l=a/1024;return l>=1?l.toFixed(2)+" GB":a>=1?a.toFixed(2)+" MB":t>=1?t.toFixed(2)+" KB":Number(e).toFixed(2)+" B"}},removeFile:function(e,t){this.$refs.upload.clearFiles()},beforeUpload:function(e){var t=104857600;if(e&&e.size>t)return alert("文件大小超过限制,请选择小于100MB的文件。"),void this.$refs.upload.clearFiles();var a,l=e.name.substring(e.name.lastIndexOf(".")+1);return"python"==this.upload.upData.fileType?a=["zip","tar","gz","bz2"]:"data"==this.upload.upData.fileType&&(a=["zip","tar","gz","csv","txt","xls","xlsx"]),-1===a.indexOf(l)?(this.$modal.msgWarning("上传文件只能是"+this.upload.accept+"格式"),!1):void 0},uploadSectionFile:function(e){var t=e.file,a=new FormData;a.append("file",t),a.append("fileType",this.upload.upData.fileType),a.append("fileSourceType",this.upload.upData.fileSourceType),a.append("remarks",this.upload.upData.remarks),this.formdata=a,(0,r.cT)(this.formdata).then((function(t){e.onSuccess(t)}))["catch"]((function(e){e.err}))},handleFileSuccess:function(e,t,a){200==e.code&&(this.upload.open=!1,this.$refs.upload.clearFiles(),this.getList())},submitFileForm:function(){var e=this;this.$refs["uploadform"].validate((function(t){t&&e.$refs.upload.submit()}))},handleDelete:function(e){var t=this,a=e.fileId;this.$confirm("确认要删除这条信息吗?").then((function(){return(0,r._I)(a)})).then((function(){t.$message({type:"success",message:"删除成功!"}),t.getList()}))["catch"]((function(){}))}}},n=i;var s=a(1001),u=(0,s.Z)(n,l,o,!1,null,"0d318eb8",null);const p=u.exports},32900:(e,t,a)=>{a.d(t,{Cp:()=>Z,F7:()=>k,Hc:()=>v,Ht:()=>s,JE:()=>g,W1:()=>m,WG:()=>i,_I:()=>w,aX:()=>o,bL:()=>_,c0:()=>L,cT:()=>x,d5:()=>r,e_:()=>h,en:()=>u,fR:()=>n,in:()=>S,jr:()=>b,oK:()=>f,qS:()=>d,rK:()=>y,uN:()=>c,ur:()=>p});var l=a(73821);function o(e){return(0,l.Z)({url:"/myApply/laboratoryList",method:"get",params:e})}function r(e){return(0,l.Z)({url:"/myApply/laboratoryDetail?reviewId="+e,method:"get"})}function i(e){return(0,l.Z)({url:"/myApply/exportList",method:"get",params:e})}function n(e){return(0,l.Z)({url:"/myApply/download",method:"get",params:e})}function s(e){return(0,l.Z)({url:"/myLab/list",method:"get",params:e})}function u(e){return(0,l.Z)({url:"/myLab/info?applyId="+e,method:"get"})}function p(e){return(0,l.Z)({url:"/myLab/restart",method:"post",data:e})}function d(e){return(0,l.Z)({url:"/myLab/dataInjection",method:"post",data:e})}function c(e){return(0,l.Z)({url:"/myLab/fileList?applyId="+e,method:"get"})}function m(e){return(0,l.Z)({url:"/myLab/applyDown",method:"post",data:e})}function f(e){return(0,l.Z)({url:"/api/userApiList",method:"get",params:e})}function h(e){return(0,l.Z)({url:"/api/userApiStatisticsList",method:"get",params:e})}function y(e){return(0,l.Z)({url:"/myMessage/page",method:"get",params:e})}function g(e){return(0,l.Z)({url:"/myMessage/detail?msgId="+e,method:"post"})}function b(e){return(0,l.Z)({url:"myMessage/markRead",method:"post",data:e})}function v(e){return(0,l.Z)({url:"/myResources/list",method:"get",params:e})}function x(e){return(0,l.Z)({url:"/myResources/uploadFile",method:"post",data:e,headers:{"Content-Type":"multipart/form-data"}})}function w(e){return(0,l.Z)({url:"/myResources/delete?fileId="+e,method:"delete"})}function S(e){return(0,l.Z)({url:"/rePwd/getPhoneByUser?username="+e,method:"get"})}function _(){return(0,l.Z)({url:"/rePwd/sendPhoneCode",method:"get"})}function k(e){return(0,l.Z)({url:"/rePwd/verifyPhoneCode?phoneCode="+e,method:"get"})}function L(e){return(0,l.Z)({url:"/rePwd/reset",method:"post",data:e})}function Z(e){return(0,l.Z)({url:"/changePassword",method:"post",data:e})}}}]); \ No newline at end of file diff --git a/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/573.addb276f.js b/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/573.addb276f.js new file mode 100644 index 00000000..a6ba4bfb --- /dev/null +++ b/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/573.addb276f.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkagile_portal_front"]=self["webpackChunkagile_portal_front"]||[]).push([[573],{36573:(e,t,a)=>{a.r(t),a.d(t,{default:()=>p});a(82772),a(73210);var l=function(){var e=this,t=e._self._c;return t("div",{staticClass:"lab-apply"},[t("div",{staticClass:"top-filter"},[t("el-form",{ref:"queryForm",attrs:{model:e.queryParams,size:"small","label-width":"82px",inline:!0}},[t("el-form-item",{attrs:{label:"实验室名称",prop:"labTitle"}},[t("el-input",{attrs:{clearable:""},nativeOn:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.handleQuery.apply(null,arguments)}},model:{value:e.queryParams.labTitle,callback:function(t){e.$set(e.queryParams,"labTitle",t)},expression:"queryParams.labTitle"}})],1),t("el-form-item",{attrs:{label:"实验室编号",prop:"applyId"}},[t("el-input",{attrs:{clearable:""},nativeOn:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.handleQuery.apply(null,arguments)}},model:{value:e.queryParams.applyId,callback:function(t){e.$set(e.queryParams,"applyId",t)},expression:"queryParams.applyId"}})],1),t("el-form-item",{attrs:{label:"实验室状态",prop:"busStatus"}},[t("el-select",{attrs:{placeholder:"请选择",clearable:""},model:{value:e.queryParams.busStatus,callback:function(t){e.$set(e.queryParams,"busStatus","string"===typeof t?t.trim():t)},expression:"queryParams.busStatus"}},e._l(e.busStatusList,(function(e){return t("el-option",{key:e.value,attrs:{label:e.label,value:e.value}})})),1)],1),t("el-form-item",[t("el-button",{attrs:{type:"primary",size:"mini"},on:{click:e.handleQuery}},[e._v("搜索")]),t("el-button",{attrs:{size:"mini"},on:{click:e.resetQuery}},[e._v("重置")])],1)],1)],1),t("div",{staticClass:"tale-list"},[t("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{"min-height":"355px","max-height":"500px"},attrs:{data:e.myLablyList,"max-height":"500px"}},[t("div",{staticStyle:{"text-align":"left"},attrs:{slot:" empty"},slot:" empty"},[t("el-empty",{attrs:{description:"暂无数据"}})],1),t("el-table-column",{attrs:{align:"center",label:"实验室编号",prop:"applyId","show-overflow-tooltip":!0,width:"180"}}),t("el-table-column",{attrs:{align:"center",label:"实验室名称",prop:"labTitle","show-overflow-tooltip":!0}}),t("el-table-column",{attrs:{align:"center",label:"状态","show-overflow-tooltip":!0},scopedSlots:e._u([{key:"default",fn:function(a){return["01"===a.row.busStatus?t("span",{staticClass:"review-status"},[t("i",{staticClass:"icon-circle green"}),e._v(e._s(e.busStatusspan(a.row.busStatus))+" ")]):t("span",{staticClass:"review-status"},[t("i",{staticClass:"icon-circle red"}),e._v(e._s(e.busStatusspan(a.row.busStatus))+" ")])]}}])}),t("el-table-column",{attrs:{align:"center",label:"生效时间",prop:"startDate","show-overflow-tooltip":!0},scopedSlots:e._u([{key:"default",fn:function(a){return[t("span",[e._v(e._s(e.parseTime(a.row.startDate,"{y}-{m}-{d}")))])]}}])}),t("el-table-column",{attrs:{align:"center",label:"到期时间",prop:"endDate","show-overflow-tooltip":!0},scopedSlots:e._u([{key:"default",fn:function(a){return[t("span",[e._v(e._s(e.parseTime(a.row.endDate,"{y}-{m}-{d}")))])]}}])}),t("el-table-column",{attrs:{align:"center",label:"硬件资源",prop:"dockerImageName","show-overflow-tooltip":!0},scopedSlots:e._u([{key:"default",fn:function(a){return[t("span",[e._v(" "+e._s("CPU:"+a.row.cpuLimits+";内存:"+a.row.memoryLimits+"G;硬盘:"+a.row.discLimits+"G")+" ")])]}}])}),t("el-table-column",{attrs:{align:"center",label:"操作"},scopedSlots:e._u([{key:"default",fn:function(a){return[t("el-button",{attrs:{size:"small",type:"text"},on:{click:function(t){return e.goLabDetail(a.row.applyId)}}},[e._v("详情")]),"01"===a.row.busStatus?t("el-dropdown",{attrs:{size:"mini"},on:{command:function(t){return e.handleCommands(t,a.row)}}},[t("span",{staticClass:"el-dropdown-link",staticStyle:{color:"#409EFF",cursor:"pointer"}},[t("i",{staticClass:"el-icon-d-arrow-right el-icon--right"}),e._v("更多 ")]),t("el-dropdown-menu",{attrs:{slot:"dropdown"},slot:"dropdown"},[t("el-dropdown-item",{attrs:{command:"myResourcesList"}},[e._v(" 数据注入 ")]),t("el-dropdown-item",{attrs:{command:"myfileList"}},[e._v(" 申请下载 ")]),t("el-dropdown-item",{attrs:{command:"restart"}},[e._v(" 重启 ")])],1)],1):e._e()]}}])})],1)],1),t("pagination",{directives:[{name:"show",rawName:"v-show",value:e.total>0,expression:"total > 0"}],attrs:{total:e.total,page:e.queryParams.pageNum,limit:e.queryParams.pageSize},on:{"update:page":function(t){return e.$set(e.queryParams,"pageNum",t)},"update:limit":function(t){return e.$set(e.queryParams,"pageSize",t)},pagination:e.getList}}),t("el-dialog",{attrs:{title:"选中资源",visible:e.visible,width:"800px",top:"5vh","append-to-body":"","close-on-click-modal":!1,"close-on-press-escape":!1},on:{"update:visible":function(t){e.visible=t}}},[t("el-form",{ref:"queryForm",attrs:{model:e.queryParamss,size:"small",inline:!0}},[t("el-form-item",{attrs:{label:"文件类型",prop:"fileType"}},[t("el-select",{attrs:{placeholder:"请选择组件类型"},on:{change:e.myResourcesLists},model:{value:e.queryParamss.fileType,callback:function(t){e.$set(e.queryParamss,"fileType",t)},expression:"queryParamss.fileType"}},e._l(e.fileTypeList,(function(e){return t("el-option",{key:e.value,attrs:{label:e.label,value:e.value}})})),1)],1),t("el-form-item",[t("el-button",{attrs:{type:"primary",icon:"el-icon-search",size:"mini"},on:{click:e.handleQuerys}},[e._v("查询")])],1)],1),t("el-row",[t("el-table",{ref:"table",attrs:{data:e.resourcesList,height:"260px"},on:{"row-click":e.clickRow,"selection-change":e.handleSelectionChange}},[t("div",{staticStyle:{"text-align":"center"},attrs:{slot:"empty"},slot:"empty"},[e._v("暂无数据 ")]),t("el-table-column",{attrs:{align:"center",type:"selection",width:"55"}}),t("el-table-column",{attrs:{align:"center",label:"文件名称",prop:"fileName","show-overflow-tooltip":!0}}),t("el-table-column",{attrs:{align:"center",label:"上传时间",prop:"createTime","show-overflow-tooltip":!0}}),t("el-table-column",{attrs:{align:"center",label:"文件说明",prop:"remarks","show-overflow-tooltip":!0}}),t("el-table-column",{attrs:{align:"center",label:"文件类型",prop:"fileType","show-overflow-tooltip":!0},scopedSlots:e._u([{key:"default",fn:function(a){return[t("span",[e._v(e._s("data"==a.row.fileType?"数据文件":"python组件"))])]}}])})],1),t("pagination",{directives:[{name:"show",rawName:"v-show",value:e.totals>0,expression:"totals > 0"}],attrs:{total:e.totals,page:e.queryParamss.pageNum,limit:e.queryParamss.pageSize},on:{"update:page":function(t){return e.$set(e.queryParamss,"pageNum",t)},"update:limit":function(t){return e.$set(e.queryParamss,"pageSize",t)},pagination:e.myResourcesLists}})],1),t("el-form",{ref:"applyform",attrs:{"label-width":"80px",model:e.resourcesForm,rules:e.rules}},[t("el-row",[t("el-col",{attrs:{span:24}},[t("el-form-item",{attrs:{label:"申请说明",prop:"applyDesc"}},[t("el-input",{attrs:{maxlength:200,type:"textarea",placeholder:"请输入内容"},model:{value:e.resourcesForm.applyDesc,callback:function(t){e.$set(e.resourcesForm,"applyDesc",t)},expression:"resourcesForm.applyDesc"}})],1)],1)],1)],1),t("div",{staticClass:"dialog-footer",staticStyle:{"text-align":"right"},attrs:{slot:"footer"},slot:"footer"},[t("el-button",{attrs:{type:"primary"},on:{click:e.handleSelectUser}},[e._v("确 定")]),t("el-button",{on:{click:function(t){e.visible=!1}}},[e._v("取 消")])],1)],1),t("el-dialog",{attrs:{title:"申请下载",visible:e.open,width:"800px",top:"5vh","append-to-body":"","close-on-click-modal":!1,"close-on-press-escape":!1},on:{"update:visible":function(t){e.open=t}}},[t("el-row",[t("el-col",{attrs:{span:24}},[t("el-table",{ref:"filetable",attrs:{data:e.filetableList,height:"260px"}},[t("div",{staticStyle:{"text-align":"center"},attrs:{slot:"empty"},slot:"empty"},[e._v("暂无数据 ")]),t("el-table-column",{attrs:{align:"center",label:"文件名称",prop:"fileName","show-overflow-tooltip":!0}}),t("el-table-column",{attrs:{align:"center",label:"操作"},scopedSlots:e._u([{key:"default",fn:function(a){return[t("el-button",{attrs:{size:"small",type:"text"},on:{click:function(t){return e.fileCk(a.row)}}},[e._v("申请")])]}}])})],1)],1)],1),t("el-dialog",{attrs:{width:"30%",title:"申请说明",visible:e.opens,"append-to-body":"","close-on-click-modal":!1,"close-on-press-escape":!1},on:{"update:visible":function(t){e.opens=t}}},[t("el-form",{ref:"fileForm",attrs:{"label-width":"80px",model:e.fileForm}},[t("el-row",[t("el-col",{attrs:{span:24}},[t("el-form-item",{attrs:{label:"申请说明",prop:"applyDesc"}},[t("el-input",{attrs:{maxlength:200,type:"textarea",placeholder:"请输入内容"},model:{value:e.fileForm.applyDesc,callback:function(t){e.$set(e.fileForm,"applyDesc",t)},expression:"fileForm.applyDesc"}})],1)],1)],1)],1),t("div",{staticClass:"dialog-footer",staticStyle:{"text-align":"right"},attrs:{slot:"footer"},slot:"footer"},[t("el-button",{attrs:{type:"primary"},on:{click:e.handlefile}},[e._v("确 定")]),t("el-button",{on:{click:function(t){e.opens=!1}}},[e._v("取 消")])],1)],1)],1)],1)},s=[],r=(a(69826),a(41539),a(21249),a(32900));const o={name:"myLab",data:function(){return{loading:!0,total:0,myLablyList:[],queryParams:{pageNum:1,pageSize:10},busStatusList:[{label:"运行中",value:"01"},{label:"到期结束",value:"02"},{label:"强制结束",value:"03"},{label:"已禁用",value:"04"},{label:"已销毁",value:"05"},{label:"销毁处理中",value:"06"},{label:"重新初始化中",value:"07"},{label:"错误",value:"08"}],visible:!1,open:!1,opens:!1,filetotal:0,filetableList:[],fileForm:{applyDesc:""},fileTypeList:[{value:"python",label:"python组件"},{value:"data",label:"数据文件"}],totals:0,resourcesList:[],resourcesForm:{applyDesc:""},fileQueryParams:{pageNum:1,pageSize:10},queryParamss:{pageNum:1,pageSize:10},rules:{applyDesc:[{required:!0,message:"不能为空",trigger:"blur"}]}}},created:function(){this.getList()},methods:{busStatusspan:function(e){var t=this.busStatusList,a=t.find((function(t){return t.value==e}));return a?a.label:null},getList:function(){var e=this;this.loading=!0,(0,r.Ht)(this.queryParams).then((function(t){e.myLablyList=t.rows,e.total=t.total,e.loading=!1}))},handleQuery:function(){this.queryParams.pageNum=1,this.getList()},resetQuery:function(){this.resetForm("queryForm"),this.handleQuery()},loginUrl:function(e){window.open(e,"_blank")},goLabDetail:function(e){this.$router.push("/user/myapply/myLabDetail/"+e)},clickRow:function(e){this.$refs.table.toggleRowSelection(e)},handleQuerys:function(){this.queryParamss.pageNum=1,this.myResourcesLists()},handleCommands:function(e,t){switch(e){case"myResourcesList":this.myResourcesList(t);break;case"myfileList":this.myfileList(t);break;case"restart":this.restart(t);break;default:break}},myResourcesLists:function(){var e=this;(0,r.Hc)(this.queryParamss).then((function(t){e.resourcesList=t.rows,e.totals=t.total,e.loading=!1}))},myResourcesList:function(e){this.visible=!0,this.resourcesForm.applyDesc="",this.resourcesForm.applyId=e.applyId,this.resourcesForm.recToken=e.recToken,this.myResourcesLists()},handleSelectionChange:function(e){this.resourcesForm.fileIds=e.map((function(e){return e.fileId}))},handleSelectUser:function(){var e=this;console.log(this.resourcesForm),this.$refs["applyform"].validate((function(t){t&&(0,r.qS)(e.resourcesForm).then((function(t){e.visible=!1,e.$message({type:"success",message:"数据注入成功!"}),e.getList()}))}))},myfileList:function(e){var t=this;this.open=!0,this.fileForm.applyId=e.applyId,this.fileForm.recToken=e.recToken,(0,r.uN)(e.applyId).then((function(e){t.filetableList=e.data,t.loading=!1}))},fileCk:function(e){this.fileForm.fileName=e.fileName,this.fileForm.applyDesc="",this.opens=!0},handlefile:function(){var e=this;(0,r.W1)(this.fileForm).then((function(t){e.$message({type:"success",message:"申请成功,等待审核!"}),e.open=!1,e.opens=!1,e.getList()}))},restart:function(e){var t=this,a={applyId:e.applyId,recToken:e.recToken};this.loading=!0,(0,r.ur)(a).then((function(e){t.loading=!1,t.$message({type:"success",message:"重启成功!"}),t.getList()}))["catch"]((function(e){e.err;t.loading=!1}))}}},i=o;var n=a(1001),u=(0,n.Z)(i,l,s,!1,null,"34b17d1d",null);const p=u.exports},32900:(e,t,a)=>{a.d(t,{Cp:()=>x,F7:()=>S,Hc:()=>v,Ht:()=>n,JE:()=>b,W1:()=>d,WG:()=>o,_I:()=>k,aX:()=>s,bL:()=>_,c0:()=>P,cT:()=>w,d5:()=>r,e_:()=>y,en:()=>u,fR:()=>i,in:()=>L,jr:()=>g,oK:()=>f,qS:()=>c,rK:()=>h,uN:()=>m,ur:()=>p});var l=a(73821);function s(e){return(0,l.Z)({url:"/myApply/laboratoryList",method:"get",params:e})}function r(e){return(0,l.Z)({url:"/myApply/laboratoryDetail?reviewId="+e,method:"get"})}function o(e){return(0,l.Z)({url:"/myApply/exportList",method:"get",params:e})}function i(e){return(0,l.Z)({url:"/myApply/download",method:"get",params:e})}function n(e){return(0,l.Z)({url:"/myLab/list",method:"get",params:e})}function u(e){return(0,l.Z)({url:"/myLab/info?applyId="+e,method:"get"})}function p(e){return(0,l.Z)({url:"/myLab/restart",method:"post",data:e})}function c(e){return(0,l.Z)({url:"/myLab/dataInjection",method:"post",data:e})}function m(e){return(0,l.Z)({url:"/myLab/fileList?applyId="+e,method:"get"})}function d(e){return(0,l.Z)({url:"/myLab/applyDown",method:"post",data:e})}function f(e){return(0,l.Z)({url:"/api/userApiList",method:"get",params:e})}function y(e){return(0,l.Z)({url:"/api/userApiStatisticsList",method:"get",params:e})}function h(e){return(0,l.Z)({url:"/myMessage/page",method:"get",params:e})}function b(e){return(0,l.Z)({url:"/myMessage/detail?msgId="+e,method:"post"})}function g(e){return(0,l.Z)({url:"myMessage/markRead",method:"post",data:e})}function v(e){return(0,l.Z)({url:"/myResources/list",method:"get",params:e})}function w(e){return(0,l.Z)({url:"/myResources/uploadFile",method:"post",data:e,headers:{"Content-Type":"multipart/form-data"}})}function k(e){return(0,l.Z)({url:"/myResources/delete?fileId="+e,method:"delete"})}function L(e){return(0,l.Z)({url:"/rePwd/getPhoneByUser?username="+e,method:"get"})}function _(){return(0,l.Z)({url:"/rePwd/sendPhoneCode",method:"get"})}function S(e){return(0,l.Z)({url:"/rePwd/verifyPhoneCode?phoneCode="+e,method:"get"})}function P(e){return(0,l.Z)({url:"/rePwd/reset",method:"post",data:e})}function x(e){return(0,l.Z)({url:"/changePassword",method:"post",data:e})}}}]); \ No newline at end of file diff --git a/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/649.239f54d6.js b/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/649.239f54d6.js new file mode 100644 index 00000000..69a3784d --- /dev/null +++ b/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/649.239f54d6.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkagile_portal_front"]=self["webpackChunkagile_portal_front"]||[]).push([[649],{39649:(t,e,s)=>{s.r(e),s.d(e,{default:()=>c});var a=function(){var t=this,e=t._self._c;return e("div",{staticClass:"personal-info"},[e("el-form",{ref:"form1",attrs:{model:t.form,"label-width":"140px",align:"left"}},[e("el-row",[e("el-col",{attrs:{span:24}},[e("el-form-item",{attrs:{align:"left",label:"用户名"}},[e("span",[t._v(t._s(t.form.userName))])])],1),e("el-col",{attrs:{span:24}},[e("el-form-item",{attrs:{label:"手机号"}},[e("span",[t._v(t._s(t.form.phonenumber))])])],1),e("el-col",{attrs:{span:24}},[e("el-form-item",{attrs:{label:"状态"}},["0"==t.form.status?e("span",{staticStyle:{color:"#6cbd7f"}},[t._v("正常")]):e("span",{staticStyle:{color:"red"}},[t._v("停用")])])],1),e("el-col",{attrs:{span:24}},[e("el-form-item",{attrs:{label:"企业名"}},[e("span",[t._v(t._s(t.form.enterpriseName))])])],1),e("el-col",{attrs:{span:24}},[e("el-form-item",{attrs:{label:"社会统一信用代码"}},[e("span",[t._v(t._s(t.form.socialCreditCode))])])],1),e("el-col",{attrs:{span:24}},[e("el-form-item",{attrs:{label:"行业类型"}},[e("span",[t._v(t._s(t.form.industryCategory))])])],1),e("el-col",{attrs:{span:24}},[e("el-form-item",{attrs:{label:"地址"}},[e("span",[t._v(t._s(t.form.enterpriseAddress))])])],1),e("el-col",{attrs:{span:24}},[e("el-form-item",{attrs:{label:"登录密码"}},[e("i",{staticClass:"icon el-icon-success"}),e("span",[t._v("已设置")]),e("router-link",{staticClass:"change-pwd-link",attrs:{to:"/resetpwd"}},[t._v("更改密码")])],1)],1)],1)],1),e("el-dialog",{attrs:{width:"400px",title:"密码到期提示",visible:t.opens,"append-to-body":"","close-on-click-modal":!1,"close-on-press-escape":!1},on:{"update:visible":function(e){t.opens=e}}},[e("div",{staticStyle:{"text-align":"center","font-size":"18px"}},[t._v(" 登录密码还有"),e("span",{staticStyle:{color:"red","font-size":"25px","font-weight":"bold"}},[t._v(t._s(t.form.pwdRemainderDate))]),t._v("天到期,请尽快修改密码! ")]),e("div",{staticClass:"dialog-footer",staticStyle:{"text-align":"right"},attrs:{slot:"footer"},slot:"footer"},[e("el-button",{on:{click:function(e){t.opens=!1}}},[t._v("关闭")]),e("el-button",{attrs:{type:"primary"},on:{click:t.handlefile}},[t._v("去修改")])],1)])],1)},r=[],o=s(12223);const l={name:"UserInfo",data:function(){return{opens:!1,form:{}}},created:function(){this.getUserInfo()},methods:{getUserInfo:function(){var t=this;(0,o.C5)().then((function(e){t.form=e.data,"0"==t.form.firstFlag&&t.$router.push("/resetpwd")["catch"]((function(){})),t.form.pwdRemainderDate>=0&&null!=t.form.pwdRemainderDate&&(t.opens=!0),t.form.pwdRemainderDate<0&&null!=t.form.pwdRemainderDate&&(t.$message({type:"error",message:"登陆密码到期,请修改密码!"}),t.$router.push("/resetpwd")["catch"]((function(){})))}))},handlefile:function(){this.$router.push("/resetpwd")["catch"]((function(){}))}}},n=l;var i=s(1001),f=(0,i.Z)(n,a,r,!1,null,"54eff09a",null);const c=f.exports}}]); \ No newline at end of file diff --git a/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/713.67adc377.js b/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/713.67adc377.js new file mode 100644 index 00000000..030d3bdb --- /dev/null +++ b/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/713.67adc377.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkagile_portal_front"]=self["webpackChunkagile_portal_front"]||[]).push([[713],{74713:(t,e,s)=>{s.r(e),s.d(e,{default:()=>c});var r=function(){var t=this,e=t._self._c;return e("div",{staticClass:"find-password container"},[e("h3",{staticClass:"title"},[t._v(" 修改密码"),"0"==t.firstFlag?e("span",{staticStyle:{"text-align":"center",padding:"10px",color:"red"}},[t._v("(初次登陆需修改初始密码)")]):t._e(),t.pwdRemainderDate<=15&&null!=t.pwdRemainderDate?e("span",{staticStyle:{"text-align":"center",padding:"10px",color:"red"}},[t._v("(密码失效修改密码)")]):t._e()]),e("el-card",{staticClass:"procees-contaner"},[e("el-steps",{attrs:{active:t.processActive,"align-center":""}},[e("el-step",{attrs:{title:"设置新密码",description:""}}),e("el-step",{attrs:{title:"完成",description:""}})],1),1==t.processActive?e("el-form",{ref:"form",attrs:{rules:t.rules,model:t.form,"label-width":"100px"}},[e("el-form-item",{attrs:{label:"原密码",prop:"oldPassword"}},[e("el-input",{attrs:{type:"password"},model:{value:t.form.oldPassword,callback:function(e){t.$set(t.form,"oldPassword",e)},expression:"form.oldPassword"}})],1),e("el-form-item",{attrs:{label:"新密码",prop:"password"}},[e("el-input",{attrs:{type:t.flagType,"auto-complete":"off",placeholder:""},on:{input:t.strengthColor},model:{value:t.form.password,callback:function(e){t.$set(t.form,"password",e)},expression:"form.password"}},[e("i",{staticClass:"el-input__icon el-icon-view",staticStyle:{cursor:"pointer"},attrs:{slot:"suffix"},on:{click:function(e){return t.getFlageye()}},slot:"suffix"})]),e("div",{staticClass:"divClass"},[e("span",{class:"1"==t.passwords?"weak":"2"==t.passwords?"medium":"3"==t.passwords?"strong":""}),e("span",{class:"2"==t.passwords?"medium":"3"==t.passwords?"strong":""}),e("span",{class:"3"==t.passwords?"strong":""})])],1),e("el-form-item",{attrs:{label:"确认密码",prop:"passwords"}},[e("el-input",{attrs:{type:"password"},model:{value:t.form.passwords,callback:function(e){t.$set(t.form,"passwords",e)},expression:"form.passwords"}})],1),e("el-form-item",{attrs:{label:""}},[e("el-button",{attrs:{type:"primary"},on:{click:t.handleAuthon}},[t._v(" 提交")])],1)],1):t._e(),2==t.processActive?e("el-form",{ref:"form",attrs:{model:t.form,"label-width":"0px"}},[e("el-form-item",{attrs:{label:""}},[e("div",{staticClass:"success-tips",staticStyle:{color:"#1ae51ad1","font-size":"24px","font-weight":"600","text-align":"center"}},[e("i",{staticClass:"icon el-icon-success"}),t._v(" 修改成功 ")]),e("div",{staticClass:"go-back",staticStyle:{"text-align":"center"}},[e("span",{staticStyle:{color:"red","font-size":"18px","font-weight":"bold"}},[t._v(t._s(t.remainingTime))]),t._v("秒后 "),e("span",[t._v("自动返回登录页")])]),e("div",{staticClass:"btn-back",staticStyle:{"text-align":"center"}},[e("el-button",{attrs:{type:"primary"},on:{click:t.logout}},[t._v("重新登录")])],1)])],1):t._e()],1)],1)},o=[],a=(s(47941),s(83710),s(32564),s(32900)),n=s(12223),i=s(41051);const l={name:"ResetPwd",data:function(){return{isShowMenu:!1,passwords:"1",flagType:"password",processActive:1,form:{oldPassword:"",password:"",passwords:""},firstFlag:"",pwdRemainderDate:"",remainingTime:5,keyiv:"",countDown:10,rules:{oldPassword:[{required:!0,message:"原密码不能为空",trigger:"blur"}],password:[{required:!0,message:"密码不能为空",trigger:"blur"},{pattern:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{8,16}$/,message:"密码须包含数字、大小写字母且长度在8-16之间",trigger:"blur"}],passwords:[{required:!0,message:"密码不能为空",trigger:"blur"},{pattern:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{8,16}$/,message:"密码须包含数字、大小写字母且长度在8-16之间",trigger:"blur"}]}}},created:function(){var t=localStorage.getItem("myData");if(t){var e=JSON.parse(t);this.firstFlag=e.firstFlag,this.pwdRemainderDate=e.pwdRemainderDate}this.getKeyiv()},methods:{getFlageye:function(){this.flagType="password"==this.flagType?"text":"password"},strengthColor:function(){this.form.password.length<=6?this.passwords="1":this.form.password.length<=10?this.passwords="2":this.passwords="3"},getKeyiv:function(){var t=this;(0,n.Z6)().then((function(e){t.keyiv=e.data}))},logout:function(){var t=this;this.$store.dispatch("LogOut").then((function(){t.$router.push("/login")}))},handleAuthon:function(){var t=this;this.form.password==this.form.passwords?this.$refs["form"].validate((function(e){e&&(t.form.passwords="",t.form.oldPassword=(0,i.H)(t.keyiv,t.form.oldPassword+","+(new Date).getTime()),t.form.password=(0,i.H)(t.keyiv,t.form.password+","+(new Date).getTime()),(0,a.Cp)(t.form).then((function(e){200==e.code?(t.processActive++,t.countdownInterval=setInterval((function(){console.log("倒计时结束"),t.remainingTime>0?t.remainingTime--:clearInterval(t.countdownInterval),t.$store.dispatch("LogOut").then((function(){t.$router.push("/login")}))}),1e3)):(t.form.oldPassword="",t.form.password="",t.strengthColor())})))})):this.$message({type:"warning",message:"新密码与确认密码不一致!"})}},beforeDestroy:function(){clearTimeout(this.countdownInterval)}},d=l;var u=s(1001),p=(0,u.Z)(d,r,o,!1,null,"d37bfed6",null);const c=p.exports},32900:(t,e,s)=>{s.d(e,{Cp:()=>P,F7:()=>x,Hc:()=>v,Ht:()=>l,JE:()=>w,W1:()=>m,WG:()=>n,_I:()=>Z,aX:()=>o,bL:()=>C,c0:()=>k,cT:()=>b,d5:()=>a,e_:()=>g,en:()=>d,fR:()=>i,in:()=>_,jr:()=>y,oK:()=>f,qS:()=>p,rK:()=>h,uN:()=>c,ur:()=>u});var r=s(73821);function o(t){return(0,r.Z)({url:"/myApply/laboratoryList",method:"get",params:t})}function a(t){return(0,r.Z)({url:"/myApply/laboratoryDetail?reviewId="+t,method:"get"})}function n(t){return(0,r.Z)({url:"/myApply/exportList",method:"get",params:t})}function i(t){return(0,r.Z)({url:"/myApply/download",method:"get",params:t})}function l(t){return(0,r.Z)({url:"/myLab/list",method:"get",params:t})}function d(t){return(0,r.Z)({url:"/myLab/info?applyId="+t,method:"get"})}function u(t){return(0,r.Z)({url:"/myLab/restart",method:"post",data:t})}function p(t){return(0,r.Z)({url:"/myLab/dataInjection",method:"post",data:t})}function c(t){return(0,r.Z)({url:"/myLab/fileList?applyId="+t,method:"get"})}function m(t){return(0,r.Z)({url:"/myLab/applyDown",method:"post",data:t})}function f(t){return(0,r.Z)({url:"/api/userApiList",method:"get",params:t})}function g(t){return(0,r.Z)({url:"/api/userApiStatisticsList",method:"get",params:t})}function h(t){return(0,r.Z)({url:"/myMessage/page",method:"get",params:t})}function w(t){return(0,r.Z)({url:"/myMessage/detail?msgId="+t,method:"post"})}function y(t){return(0,r.Z)({url:"myMessage/markRead",method:"post",data:t})}function v(t){return(0,r.Z)({url:"/myResources/list",method:"get",params:t})}function b(t){return(0,r.Z)({url:"/myResources/uploadFile",method:"post",data:t,headers:{"Content-Type":"multipart/form-data"}})}function Z(t){return(0,r.Z)({url:"/myResources/delete?fileId="+t,method:"delete"})}function _(t){return(0,r.Z)({url:"/rePwd/getPhoneByUser?username="+t,method:"get"})}function C(){return(0,r.Z)({url:"/rePwd/sendPhoneCode",method:"get"})}function x(t){return(0,r.Z)({url:"/rePwd/verifyPhoneCode?phoneCode="+t,method:"get"})}function k(t){return(0,r.Z)({url:"/rePwd/reset",method:"post",data:t})}function P(t){return(0,r.Z)({url:"/changePassword",method:"post",data:t})}}}]); \ No newline at end of file diff --git a/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/9.4a0c2397.js b/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/9.4a0c2397.js new file mode 100644 index 00000000..9be1dbb1 --- /dev/null +++ b/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/9.4a0c2397.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkagile_portal_front"]=self["webpackChunkagile_portal_front"]||[]).push([[9],{89009:(t,a,s)=>{s.r(a),s.d(a,{default:()=>u});var i=function(){var t=this,a=t._self._c;return a("div",{staticClass:"api-list-container container"},[t._m(0),a("div",{staticClass:"inner-container"},[a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:4,xs:24}},[a("div",{staticClass:"routerList"},[a("h2",[t._v("数据服务")]),a("ul",[a("li",[a("router-link",{attrs:{to:"/service/introduce"}},[t._v("服务介绍")])],1),a("li",[a("router-link",{attrs:{to:"/service/guide"}},[t._v("服务指南")])],1),a("li",{staticClass:"on"},[a("router-link",{attrs:{to:"/service/api"}},[t._v("API列表")])],1)])])]),a("el-col",{attrs:{span:20,xs:24}},[a("div",{staticClass:"api-list",staticStyle:{overflow:"auto"}},[a("ul",{staticClass:"list"},t._l(t.apiList,(function(s){return a("li",{key:s.id},[a("div",{staticClass:"api-name"},[t._v(t._s(s.apiName))]),a("div",{staticClass:"aip-intro"},[t._v(" "+t._s(s.remark)+" ")]),a("div",{staticClass:"api-info"},[a("div",{staticClass:"data-from"},[t._v("数据提供方:上海公共交通卡有限公司")]),a("div",{staticClass:"others"},[a("span",[t._v("更新时间:"+t._s(s.createTime))])])])])})),0),a("pagination",{directives:[{name:"show",rawName:"v-show",value:t.total>0,expression:"total > 0"}],attrs:{total:t.total,page:t.queryParams.pageNum,limit:t.queryParams.pageSize},on:{"update:page":function(a){return t.$set(t.queryParams,"pageNum",a)},"update:limit":function(a){return t.$set(t.queryParams,"pageSize",a)},pagination:t.getList}})],1)])],1)],1)])},e=[function(){var t=this,a=t._self._c;return a("div",{staticClass:"top-banner guide-pic"},[a("div",{staticClass:"slogan"},[a("h3",{staticClass:"title"},[t._v("API列表 ")]),a("div",{staticClass:"summary"},[t._v("旨在优化数据对外服务方式,提高开发效率,为用户提供规范化数据服务")])])])}],r=s(47121);const n={name:"ApiList",data:function(){return{total:0,apiList:[],queryParams:{pageNum:1,pageSize:9}}},computed:{},mounted:function(){this.backToTop(),this.$parent.$parent.$parent.$refs.topnav.topbg=""},created:function(){this.getList()},methods:{backToTop:function(){window.scrollTo({top:0,behavior:"smooth"})},getList:function(){var t=this;(0,r.ZF)(this.queryParams).then((function(a){t.apiList=a.rows,t.total=a.total}))}}},o=n;var l=s(1001),c=(0,l.Z)(o,i,e,!1,null,"d9b82c00",null);const u=c.exports}}]); \ No newline at end of file diff --git a/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/app.ad9f929b.js b/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/app.ad9f929b.js new file mode 100644 index 00000000..46dcefe5 --- /dev/null +++ b/agile-portal/agile-portal-gateway/src/main/resources/view/static/js/app.ad9f929b.js @@ -0,0 +1 @@ +(()=>{"use strict";var t={47121:(t,e,n)=>{n.d(e,{Ci:()=>o,Cm:()=>s,R1:()=>r,Yz:()=>a,ZF:()=>c,fu:()=>l,iA:()=>u});var i=n(73821);function o(t){return(0,i.Z)({url:"/content/banner",method:"get"})}function r(t){return(0,i.Z)({url:"/content/scenesList",method:"get"})}function a(t){return(0,i.Z)({url:"/content/list",method:"get"})}function s(t){return(0,i.Z)({url:"/content/contentInfo?contentId="+t,method:"get"})}function c(t){return(0,i.Z)({url:"/api/list",method:"get",params:t})}function u(){return(0,i.Z)({url:"/content/dataProduct",method:"get"})}function l(){return(0,i.Z)({url:"/content/sdkDownload",method:"get",responseType:"blob"})}},12223:(t,e,n)=>{n.d(e,{A9:()=>o,C5:()=>s,Z6:()=>u,bL:()=>a,kS:()=>c,x4:()=>r});var i=n(73821);function o(t){return(0,i.Z)({url:"/verifyUser",method:"post",data:t})}function r(t){return(0,i.Z)({url:"/login",method:"post",data:t})}function a(t){return(0,i.Z)({url:"/sendPhoneCode",method:"get"})}function s(){return(0,i.Z)({url:"/getInfo",method:"get"})}function c(){return(0,i.Z)({url:"/logout",method:"post"})}function u(){return(0,i.Z)({url:"/getPublicKey",method:"get"})}},33300:(t,e,n)=>{n(66992),n(88674),n(19601),n(17727);var i=n(36369),o=function(){var t=this,e=t._self._c;return e("div",{attrs:{id:"app"}},[e("router-view")],1)},r=[],a=n(1001),s={},c=(0,a.Z)(s,o,r,!1,null,null,null);const u=c.exports;var l=n(92268),d=n(9983),p=n(50680),f=n(8499),h=n.n(f),m=n(50124),v=n(48534),g=(n(82772),n(68309),n(40530)),b=n.n(g),y=n(73821);b().configure({showSpinner:!1});var A=["Index","productsList","ProductsDetail","DataServiceGuide","ApiList","DataLaboratory","SuccessCase","Login","ResetPwd","FindPwd","NewsCenter","NewsDetail","introduce","AccountIssues","LegalNotice","privacyStatement","CompanyProfile"];l.Z.beforeEach(function(){var t=(0,v.Z)((0,m.Z)().mark((function t(e,n,i){var o;return(0,m.Z)().wrap((function(t){while(1)switch(t.prev=t.next){case 0:b().start(),o=localStorage.getItem("myData"),o?(y.h.show=!0,d.Z.dispatch("GetInfo").then((function(){y.h.show=!1,i(),b().done()}))["catch"]((function(t){d.Z.dispatch("LogOut").then((function(){-1===A.indexOf(e.name)?(f.Message.error(t),i({path:"/login"})):i()}))}))):-1===A.indexOf(e.name)?(y.h.show=!0,d.Z.dispatch("GetInfo").then((function(){y.h.show=!1,i(),b().done()}))["catch"]((function(t){d.Z.dispatch("LogOut").then((function(){f.Message.error(t),i({path:"/login"})}))}))):(i(),b().done());case 3:case"end":return t.stop()}}),t)})));return function(e,n,i){return t.apply(this,arguments)}}()),l.Z.afterEach((function(){b().done()}));var w=n(3336);n(69826),n(41539),n(74916),n(77601),n(91058),n(15306),n(24603),n(28450),n(88386),n(39714),n(83710);function C(t){this.$refs[t]&&this.$refs[t].resetFields()}function k(t,e){var n=e,i=n.find((function(e){return e.value==t}));return i?i.label:null}function S(t,e){if(0===arguments.length||!t)return null;var n,i=e||"{y}-{m}-{d} {h}:{i}:{s}";"object"===(0,w.Z)(t)?n=t:("string"===typeof t&&/^[0-9]+$/.test(t)?t=parseInt(t):"string"===typeof t&&(t=t.replace(new RegExp(/-/gm),"/").replace("T"," ").replace(new RegExp(/\.[\d]{3}/gm),"")),"number"===typeof t&&10===t.toString().length&&(t*=1e3),n=new Date(t));var o={y:n.getFullYear(),m:n.getMonth()+1,d:n.getDate(),h:n.getHours(),i:n.getMinutes(),s:n.getSeconds(),a:n.getDay()},r=i.replace(/{(y|m|d|h|i|s|a)+}/g,(function(t,e){var n=o[e];return"a"===e?["日","一","二","三","四","五","六"][n]:(t.length>0&&n<10&&(n="0"+n),n||0)}));return r}var N=function(){var t=this,e=t._self._c;return e("div",{staticClass:"pagination-container",class:{hidden:t.hidden}},[e("el-pagination",t._b({attrs:{background:t.background,"current-page":t.currentPage,"page-size":t.pageSize,layout:t.layout,total:t.total},on:{"update:currentPage":function(e){t.currentPage=e},"update:current-page":function(e){t.currentPage=e},"update:pageSize":function(e){t.pageSize=e},"update:page-size":function(e){t.pageSize=e},"size-change":t.handleSizeChange,"current-change":t.handleCurrentChange}},"el-pagination",t.$attrs,!1))],1)},P=[];n(9653),n(32564);Math.easeInOutQuad=function(t,e,n,i){return t/=i/2,t<1?n/2*t*t+e:(t--,-n/2*(t*(t-2)-1)+e)};var T=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}();function Z(t){document.documentElement.scrollTop=t,document.body.parentNode.scrollTop=t,document.body.scrollTop=t}function I(){return document.documentElement.scrollTop||document.body.parentNode.scrollTop||document.body.scrollTop}function x(t,e,n){var i=I(),o=t-i,r=20,a=0;e="undefined"===typeof e?500:e;var s=function t(){a+=r;var s=Math.easeInOutQuad(a,i,o,e);Z(s),athis.total&&(this.currentPage=1),this.$emit("pagination",{page:this.currentPage,limit:t}),this.autoScroll&&x(0,800)},handleCurrentChange:function(t){this.$emit("pagination",{page:t,limit:this.pageSize}),this.autoScroll&&x(0,800)}}},_=E;var L=(0,a.Z)(_,N,P,!1,null,"368c4af0",null);const O=L.exports;i["default"].use(h(),{size:p.Z.get("size")||"medium"}),i["default"].component("Pagination",O),i["default"].prototype.resetForm=C,i["default"].prototype.parseTime=S,i["default"].prototype.arrList=k,i["default"].config.productionTip=!1,new i["default"]({router:l.Z,store:d.Z,render:function(t){return t(u)}}).$mount("#app")},92268:(t,e,n)=>{n.d(e,{Z:()=>Nt,_:()=>wt});n(41539),n(78783),n(33948);var i=n(36369),o=n(72631),r=function(){var t=this,e=t._self._c;return e("router-view")},a=[],s=n(1001),c={},u=(0,s.Z)(c,r,a,!1,null,null,null);const l=u.exports;var d=function(){var t=this,e=t._self._c;return e("div",{attrs:{id:"home"}},[e("div",{staticClass:"home-banner"},[e("div",{staticClass:"swiper"},[e("div",{staticClass:"swiper-wrapper"},[e("el-carousel",{attrs:{arrow:"never"}},t._l(t.listBanner,(function(n){return e("el-carousel-item",{key:n.index,staticClass:"swiper-slide"},[e("img",{attrs:{src:n.imgUrl,alt:""}}),e("div",{staticClass:"slogan"},[e("div",{staticClass:"wrapper"},[e("h3",{staticClass:"title"},[t._v(t._s(n.contentTitle))]),e("div",{staticClass:"text"},[t._v(t._s(n.subtitle))])])])])})),1)],1)]),e("news-swiper",{attrs:{"list-news":t.listNews}})],1),e("div",{staticClass:"home-content"},[e("h2",{staticClass:"title"},[t._v("久事大数据开放平台为您提供")]),e("div",{staticClass:"products-intr"},[e("ul",[e("li",[e("router-link",{attrs:{to:"/products/productsList"}},[e("img",{attrs:{src:n(96621),alt:""}}),e("div",{staticClass:"text"},[e("h3",[t._v("数据产品")]),e("div",{staticClass:"summary"},[t._v("已形成“久事客流宝”“久事乘车宝”等系列产品,并上海数据交易所成功挂牌,地面公交刷卡(码)客流、到站预报等数据可直接进行交易。")])])])],1),e("li",[e("router-link",{attrs:{to:"/service/guide"}},[e("img",{attrs:{src:n(99242),alt:""}}),e("div",{staticClass:"text"},[e("h3",[t._v("数据服务")]),e("div",{staticClass:"summary"},[t._v("提供数据分析、指标加工、报告撰写等服务。"),e("br"),t._v("提供API接口列表及接入指引。")])])])],1),e("li",[e("router-link",{attrs:{to:"/laboratory"}},[e("img",{attrs:{src:n(1831),alt:""}}),e("div",{staticClass:"text"},[e("h3",[t._v("数据实验室")]),e("div",{staticClass:"summary"},[t._v(" 为有交通卡细颗粒度数据(如交易数据)使用需求的用户,提供一个安全、独立、便捷的环境,用户可以在该环境中进行数据分析、数据建模,并导出分析成果数据,进而解决明细数据不能出去但可以使用的问题。")])])])],1)])])]),e("div",{staticClass:"case-content"},[e("h2",{staticClass:"title"},[t._v("应用场景")]),e("div",{staticClass:"case-list"},[e("div",{staticClass:"tab-title"},[e("ul",t._l(t.sceneTitle,(function(n,i){return e("li",{key:i,class:{active:t.isActive===i},on:{click:function(e){return t.showScene(i)}}},[t._v(t._s(n)+" ")])})),0)]),e("div",{staticClass:"content-detail"},t._l(t.sceneContent,(function(n,i){return e("dl",{key:i,class:{active:t.isActive===i}},[e("dt",[t._v(t._s(n.contentTitle))]),e("dd",{staticStyle:{"text-align":"justify"}},[t._v(t._s(n.contentText))])])})),0)])])])},p=[],f=(n(47042),n(47121)),h=function(){var t=this,e=t._self._c;return e("div",{staticClass:"home-news"},[e("div",{staticClass:"wrapper"},[e("div",{staticClass:"news-title"},[t._v("最新动态")]),e("div",{staticClass:"news-item"},[e("el-carousel",{attrs:{height:"35px",direction:"vertical",autoplay:!0}},t._l(t.listNews,(function(n){return e("el-carousel-item",{key:n.contentId},[e("router-link",{staticClass:"news-link",attrs:{to:{name:"NewsDetail",params:{contentId:n.contentId}}}},[e("span",[t._v(t._s(n.contentTitle)+" ")]),e("b",[t._v(t._s(n.updateTime.slice(0,10)))])])],1)})),1)],1),e("div",{staticClass:"btn-more"},[e("router-link",{attrs:{to:"/news/list"}},[t._v("查看全部>")])],1)])])},m=[];const v={name:"news-swiper",props:{listNews:Array}},g=v;var b=(0,s.Z)(g,h,m,!1,null,"25d0dc89",null);const y=b.exports,A={name:"HomeView",data:function(){return{isActive:0,sceneTitle:["场景一","场景二","场景三"],sceneContent:[],listBanner:null,listNews:[]}},components:{NewsSwiper:y},created:function(){this.getBanner(),this.getNewsList(),this.getscenesList()},methods:{backToTop:function(){window.scrollTo({top:0,behavior:"smooth"})},getBanner:function(){var t=this;this.listBanner=null,(0,f.Ci)().then((function(e){t.listBanner=e.data}))},getNewsList:function(){var t=this;(0,f.Yz)().then((function(e){t.listNews=e.rows.slice(0,5)}))},getscenesList:function(){var t=this;(0,f.R1)().then((function(e){t.sceneContent=e.data.slice(0,3)}))},showScene:function(t){this.isActive=t},handleScroll:function(){window.pageYOffset>50?this.$parent.$parent.$refs.topnav.topbg="":this.$parent.$parent.$refs.topnav.topbg="1"}},mounted:function(){this.$parent.$parent.$refs.topnav.topbg="1",this.backToTop(),window.addEventListener("scroll",this.handleScroll)},beforeDestroy:function(){window.removeEventListener("scroll",this.handleScroll)}},w=A;var C=(0,s.Z)(w,d,p,!1,null,"1648f46c",null);const k=C.exports;var S=function(){var t=this,e=t._self._c;return e("div",[e("TopNav",{ref:"topnav"}),e("AppContainer"),e("Footer")],1)},N=[],P=function(){var t=this,e=t._self._c;return e("section",{staticClass:"app-container"},[e("transition",{attrs:{name:"fade-transform",mode:"out-in"}},[e("router-view",{key:t.key})],1)],1)},T=[];const Z={name:"AppContainer",computed:{key:function(){return this.$route.path}}},I=Z;var x=(0,s.Z)(I,P,T,!1,null,"77fe0ecc",null);const E=x.exports;var _=function(){var t=this,e=t._self._c;return e("div",{staticClass:"top-nav",class:"1"==t.topbg?"topbg":"",attrs:{id:"container"}},[e("div",{staticClass:"containers"},[e("div",{staticClass:"logo"},[e("router-link",{attrs:{to:"/"}},[e("img",{attrs:{src:n(55800),alt:"久事logo"}}),e("span",{staticClass:"title"},[t._v("久事大数据开放平台")])])],1),t.isShowMenu?e("div",{staticClass:"left-box"},[e("div",{staticClass:"router-list"},[e("div",{on:{click:function(e){return t.topNavbg("1")}}},[e("router-link",{attrs:{to:"/"}},[t._v("首页")])],1),e("div",{staticClass:"minNav",on:{click:function(e){return t.topNavbg("")}}},[e("router-link",{attrs:{to:"/products/productsList"}},[t._v("数据产品")]),e("ul",{staticClass:"navUl"},t._l(t.carouselItems,(function(n){return e("li",{key:n.index,on:{click:function(e){return t.topNavbg("")}}},[e("router-link",{attrs:{to:{name:"ProductsDetail",params:{contentId:n.contentId}}}},[t._v(t._s(n.contentTitle))])],1)})),0)],1),e("div",{staticClass:"minNav",on:{click:function(e){return t.topNavbg("")}}},[e("router-link",{attrs:{to:"/service/introduce"}},[t._v("数据服务")]),e("ul",{staticClass:"navUl"},[e("li",{on:{click:function(e){return t.topNavbg("")}}},[e("router-link",{attrs:{to:"/service/introduce"}},[t._v("服务介绍")])],1),e("li",{on:{click:function(e){return t.topNavbg("")}}},[e("router-link",{attrs:{to:"/service/guide"}},[t._v("服务指南")])],1),e("li",{on:{click:function(e){return t.topNavbg("")}}},[e("router-link",{attrs:{to:"/service/api"}},[t._v("API列表")])],1)])],1),e("div",{on:{click:function(e){return t.topNavbg("")}}},[e("router-link",{attrs:{to:"/laboratory"}},[t._v("数据实验室")])],1)]),t.nickName?[e("div",{staticClass:"userimg",on:{click:function(e){return t.topNavbg("")}}},[e("router-link",{attrs:{to:"/user/index"}},[e("span",{staticClass:"user-avatar"}),e("span",{staticClass:"user-name"},[t._v(t._s(t.nickName))])]),e("span",{staticClass:"outbtn",on:{click:t.logout}})],1)]:[e("div",{staticClass:"login-button"},[e("router-link",{attrs:{to:"/login"}},[t._v("登录")])],1)]],2):t._e()])])},L=[];n(47941);const O={props:{isShowMenu:{type:Boolean,default:!0}},data:function(){return{topbg:"",nickName:null,carouselItems:null,contentId:null}},created:function(){this.getBanner()},methods:{getBanner:function(){var t=this;this.carouselItems=null,(0,f.iA)().then((function(e){t.carouselItems=e.data.slice(0,5)}))},topNavbg:function(t){this.topbg=t},logout:function(){var t=this;this.$confirm("确定注销并退出系统吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((function(){t.$store.dispatch("LogOut").then((function(){location.href=location.href.split("#")[0]}))}))["catch"]((function(){}))}},mounted:function(){var t=localStorage.getItem("myData");if(t){var e=JSON.parse(t);this.nickName=e.nickName}var n=document.getElementById("home");this.topbg=null!=n&&void 0!=n?"1":""}},B=O;var M=(0,s.Z)(B,_,L,!1,null,"4c954c68",null);const R=M.exports;n(68309);var Q=function(){var t=this,e=t._self._c;return e("div",{staticClass:"footer"},[e("div",{staticClass:"wrapper"},[e("div",{staticClass:"left-box"},[t._m(0),e("div",{staticClass:"links"},[e("el-select",{staticStyle:{"padding-left":"50px"},attrs:{placeholder:"友情链接"},on:{change:t.goToLink},model:{value:t.selectedLink,callback:function(e){t.selectedLink=e},expression:"selectedLink"}},t._l(t.links,(function(t){return e("el-option",{key:t.url,attrs:{label:t.name,value:t.url}})})),1)],1)]),e("div",{staticClass:"right-info"},[e("dl",[e("dt",[t._v("服务与支持")]),e("dd",[e("router-link",{attrs:{to:"/products/productsList"}},[t._v("数据产品")])],1),e("dd",[e("router-link",{attrs:{to:"/service/api"}},[t._v("数据服务")])],1),e("dd",[e("router-link",{attrs:{to:"/laboratory"}},[t._v("数据实验室")])],1)]),e("dl",[e("dt",[t._v("常见问题")]),e("dd",[e("router-link",{attrs:{to:"/AccountIssues"}},[t._v("账户问题")])],1)]),e("dl",[e("dt",[t._v("关于我们")]),e("dd",[e("router-link",{attrs:{to:"/CompanyProfile"}},[t._v("公司简介")])],1),e("dd",[t._v("电话(021-60825678)")]),e("dd",[t._v("地址: 上海市长顺路11号荣广大厦10F")])])])]),t._m(1)])},j=[function(){var t=this,e=t._self._c;return e("div",{staticClass:"logo-link"},[e("img",{attrs:{src:n(55800),alt:"久事logo"}}),e("span",{staticClass:"title"},[t._v("久事大数据开放平台")])])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"copyrights"},[t._v(" © 2023 chinadata.com All Rights Reserved 上海久事(集团)有限公司版权所有 "),e("span",[t._v(" 沪ICP备13037966号-13")])])}];const D={name:"Footer",data:function(){return{selectedLink:"",links:[{name:"久事集团",url:"https://www.jiushi.com.cn"},{name:"交通卡",url:"https://www.sptcc.com"}]}},methods:{goToLink:function(){this.selectedLink&&window.open(this.selectedLink,"_blank")}}},z=D;var F=(0,s.Z)(z,Q,j,!1,null,"0e7a067b",null);const U=F.exports,K={name:"Layout",components:{TopNav:R,Footer:U,AppContainer:E},data:function(){return{showButton:!1}},methods:{backToTop:function(){window.scrollTo({top:0,behavior:"smooth"})},handleScroll:function(){window.pageYOffset>200?this.showButton=!0:this.showButton=!1}},mounted:function(){window.addEventListener("scroll",this.handleScroll)},beforeDestroy:function(){window.removeEventListener("scroll",this.handleScroll)}},H=K;var J=(0,s.Z)(H,S,N,!1,null,"4d4e77b4",null);const V=J.exports;var G=function(){return n.e(443).then(n.bind(n,443))},W=function(){return n.e(292).then(n.bind(n,2292))},q=function(){return n.e(500).then(n.bind(n,23500))},Y=function(){return n.e(850).then(n.bind(n,94850))},X=function(){return n.e(376).then(n.bind(n,76376))},$=function(){return n.e(107).then(n.bind(n,8107))},tt=function(){return n.e(9).then(n.bind(n,89009))},et=function(){return Promise.all([n.e(51),n.e(430)]).then(n.bind(n,54430))},nt=function(){return n.e(392).then(n.bind(n,34392))},it=function(){return n.e(59).then(n.bind(n,52059))},ot=function(){return n.e(552).then(n.bind(n,51552))},rt=function(){return n.e(425).then(n.bind(n,97425))},at=function(){return n.e(607).then(n.bind(n,75607))},st=function(){return n.e(519).then(n.bind(n,95519))},ct=function(){return n.e(441).then(n.bind(n,46441))},ut=function(){return n.e(649).then(n.bind(n,39649))},lt=function(){return n.e(494).then(n.bind(n,58494))},dt=function(){return n.e(686).then(n.bind(n,15686))},pt=function(){return n.e(573).then(n.bind(n,36573))},ft=function(){return n.e(646).then(n.bind(n,82646))},ht=function(){return n.e(64).then(n.bind(n,51064))},mt=function(){return n.e(982).then(n.bind(n,62982))},vt=function(){return n.e(455).then(n.bind(n,42455))},gt=function(){return n.e(276).then(n.bind(n,48276))},bt=function(){return Promise.all([n.e(51),n.e(713)]).then(n.bind(n,74713))},yt=function(){return Promise.all([n.e(51),n.e(541)]).then(n.bind(n,51541))},At=function(){return n.e(767).then(n.bind(n,37767))};i["default"].use(o.ZP);var wt=[{path:"index",component:ut,name:"UserInfo",hidden:!1,meta:{title:"个人信息"}},{path:"myapply",component:l,name:"myapply",hidden:!1,isOpen:!1,meta:{title:"我的申请"},children:[{path:"labapply",component:lt,name:"LabApply",hidden:!1,meta:{title:"数据注入申请"}},{path:"labdetail/:applyId",component:At,hidden:!0,name:"LabDetail",meta:{title:"实验室数据详情"}},{path:"myLabDetail/:applyId",component:ft,hidden:!0,name:"MyLabDetail",meta:{title:"实验室数据详情"}},{path:"dataapply",component:dt,name:"DataApply",hidden:!1,meta:{title:"数据导出申请"}}]},{path:"mylab",component:pt,name:"MyLab",hidden:!1,meta:{title:"我的实验室"}},{path:"myapp",component:l,name:"MyApp",hidden:!1,isOpen:!1,meta:{title:"我的应用"},children:[{path:"list",component:ht,name:"myAppList",hidden:!1,meta:{title:"API列表"}},{path:"apicall",component:mt,name:"ApiCall",hidden:!1,meta:{title:"接口调用统计"}}]},{path:"mydata",component:vt,name:"MyData",hidden:!1,meta:{title:"我的资源"}},{path:"mymsg",component:gt,name:"MyMsg",hidden:!1,meta:{title:"我的消息"}}],Ct=[{path:"",component:V,redirect:"/",children:[{path:"/",component:k,name:"Index",hidden:!1,meta:{title:"首页"}},{path:"products",component:l,name:"DataProducts",hidden:!1,meta:{title:"数据产品"},children:[{path:"productsList",component:G,name:"productsList",hidden:!1,meta:{title:"数据产品"}},{path:"detail/:contentId(\\d+)",component:W,name:"ProductsDetail",hidden:!1,meta:{title:"产品详情"}}]},{path:"news",component:l,redirect:"news/list",hidden:!0,meta:{title:"NewsCenter"},children:[{path:"list",component:nt,name:"NewsCenter",hidden:!1,meta:{title:"新闻中心"}},{path:"detail/:contentId(\\d+)",component:it,name:"NewsDetail",hidden:!1,meta:{title:"新闻详情"}}]},{path:"service",component:l,name:"DataService",hidden:!1,meta:{title:"数据服务"},children:[{path:"introduce",component:Y,name:"introduce",hidden:!1,meta:{title:"服务介绍"}},{path:"guide",component:q,name:"DataServiceGuide",hidden:!1,meta:{title:"接入指引"}},{path:"api",component:tt,name:"ApiList",hidden:!1,meta:{title:"API列表"}}]},{path:"laboratory",component:X,name:"DataLaboratory",meta:{title:"数据实验室"}},{path:"case",component:$,name:"SuccessCase",hidden:!1,meta:{title:"成功案例"}},{path:"user",component:ct,redirect:"user/index",name:"UserIndex",hidden:!1,meta:{title:"用户中心"},children:wt},{path:"/resetpwd",name:"ResetPwd",component:bt,hidden:!1,meta:{title:"修改密码"}},{path:"/findpwd",name:"FindPwd",hidden:!1,component:yt,meta:{title:"忘记密码"}},{path:"AccountIssues",component:ot,name:"AccountIssues",hidden:!1,meta:{title:"账户问题"}},{path:"LegalNotice",component:rt,name:"LegalNotice",hidden:!1,meta:{title:"法律声明"}},{path:"privacyStatement",component:at,name:"privacyStatement",hidden:!1,meta:{title:"隐私声明"}},{path:"CompanyProfile",component:st,name:"CompanyProfile",hidden:!1,meta:{title:"公司简介"}}]},{path:"/login",name:"Login",hidden:!0,component:et}],kt=o.ZP.prototype.push;o.ZP.prototype.push=function(t){return kt.call(this,t)["catch"]((function(t){return t}))};var St=new o.ZP({routes:Ct});const Nt=St},9983:(t,e,n)=>{n.d(e,{Z:()=>y});var i=n(36369),o=n(63822),r=n(95082),a=(n(41539),n(38862),n(12223));n(50680);var s={state:{userName:"",avatar:"",topbg:localStorage.getItem("topBg"),topNav:!1},mutations:{UPDATE_STATE:function(t,e){var n=(0,r.Z)((0,r.Z)({},t),e);for(var i in n)t[i]=n[i]},SET_ROLES:function(t,e){t.roles=e}},actions:{GetInfo:function(t){var e=t.commit;t.state;return new Promise((function(t,n){(0,a.C5)().then((function(n){var i=n.data;localStorage.setItem("myData",JSON.stringify(i)),e("UPDATE_STATE",i),t(n)}))["catch"]((function(t){n(t)}))}))},LogOut:function(t){t.commit,t.state;return new Promise((function(t,e){(0,a.kS)().then((function(){localStorage.setItem("myData",""),t()}))["catch"]((function(t){e(t)}))}))}}};const c=s;var u={state:{},mutations:{},actions:{}};const l=u;var d={isChildShow:!1},p={CHANGE_SETTING:function(t){t.isChildShow=!t.isChildShow},HIDE_SUB_MENU:function(t){t.isChildShow=!1}},f={changeSetting:function(t){var e=t.commit;e("CHANGE_SETTING")},hideSubMenu:function(t){var e=t.commit;e("HIDE_SUB_MENU")}};const h={namespaced:!0,state:d,mutations:p,actions:f};var m=n(82482),v=(0,m.Z)({showChild:function(t){return t.settings.showChild},avatar:function(t){return t.user.avatar},userName:function(t){return t.user.userName},status:function(t){return t.user.status},phonenumber:function(t){return t.user.phonenumber},roles:function(t){return t.user.roles},nickName:function(t){return t.user.nickName},industryCategory:function(t){return t.user.industryCategory},enterpriseName:function(t){return t.user.enterpriseName},socialCreditCode:function(t){return t.user.socialCreditCode},enterpriseAddress:function(t){return t.user.enterpriseAddress}},"industryCategory",(function(t){return t.user.industryCategory}));const g=v;i["default"].use(o.ZP);var b=new o.ZP.Store({modules:{user:c,permission:l,settings:h},getters:g});const y=b},73821:(t,e,n)=>{n.d(e,{Z:()=>u,h:()=>s});n(41539),n(26699),n(32023),n(83650);var i=n(15742),o=n(8499),r=n(9983);const a={401:"认证失败,无法访问系统资源",403:"当前操作没有权限",404:"访问资源不存在",default:"系统未知错误,请反馈给管理员"};var s={show:!1};i.Z.defaults.headers["Content-Type"]="application/json;charset=utf-8";var c=i.Z.create({baseURL:"/public",timeout:2e4,withCredentials:!0});c.interceptors.request.use((function(t){return t}),(function(t){Promise.reject(t)})),c.interceptors.response.use((function(t){var e=t.headers["content-disposition"];void 0!=e&&(r.Z.filename=e);var n=t.data.code||200,i=a[n]||t.data.msg||a["default"];return 401===n?(s.show||(s.show=!0,o.MessageBox.confirm("登录状态已过期,您可以继续留在该页面,或者重新登录","系统提示",{confirmButtonText:"重新登录",cancelButtonText:"取消",type:"warning"}).then((function(){s.show=!1,r.Z.dispatch("LogOut").then((function(){location.href=location.href.split("#")[0]}))}))["catch"]((function(){s.show=!1}))),Promise.reject("无效的会话,或者会话已过期,请重新登录。")):500===n?((0,o.Message)({message:i,type:"error"}),t.data):200!==n?(o.Notification.error({title:i}),Promise.reject("error")):t.data}),(function(t){var e=t.message;if("Network Error"==e)e="后端接口连接异常";else if(e.includes("timeout"))e="系统接口请求超时";else if(e.includes("Request failed with status code")){if(e="系统接口"+e.substr(e.length-3)+"异常",403===t.response.status)return s.show=!0,o.MessageBox.confirm("登录状态已过期,您可以继续留在该页面,或者重新登录","系统提示",{confirmButtonText:"重新登录",cancelButtonText:"取消",type:"warning"}).then((function(){s.show=!1,r.Z.dispatch("LogOut").then((function(){location.href=location.href.split("#")[0]}))}))["catch"]((function(){s.show=!1})),Promise.reject("无效的会话,或者会话已过期,请重新登录。");301===t.response.status&&(e="没有权限,请联系管理员授权")}return(0,o.Message)({message:e,type:"error",duration:5e3}),Promise.reject(t)}));const u=c},96621:(t,e,n)=>{t.exports=n.p+"static/img/index-product-pic1.062b43d1.jpg"},99242:(t,e,n)=>{t.exports=n.p+"static/img/index-product-pic2.deb683c3.jpg"},1831:(t,e,n)=>{t.exports=n.p+"static/img/index-product-pic3.520aae04.jpg"},55800:t=>{t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFIAAABICAYAAABlYaJmAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAUqADAAQAAAABAAAASAAAAAC1TADLAAAKnElEQVR4Ae1cDYwbRxWe2fVfnCbYPl8usX30RBOSpqWNCFQKhRCkpBSElJK2FIRQQJUoUNFUjS6NmtJemqaQtEB7rVSooBI/QkCEQEhQJEoboOJXUAoU0iTAVWf7Lsnd2cnd+fyzu8M3vnNiOzO+3fXYvou6upN337z35r3Pb3bfzJs1IW8cShCgSrQoVpIJ9YWmJ89tI5StKatm9IQWDLwYm0yPKe5KmboFBeSZaHRZIWsdYIzdQQgL1HpJ87j+pt6zZE8snc7VtnX+asEAyfr6Aqnk2ecB4vUNYaH0nwGf/v7u3Fi6IV+bG7U29yfsjg0MaMlk9nvzgsilGbu6UDR/yLZs8QiVdYi4ICJy2BvaRSzyuCMMKN3ba2QOOZJpIXPHgUwvi0XNXO4EfAw58ZMSOun362sxxEecyLWKt+ND28rNHHQKIgeDEbasUDC/1CpgnOrtaEQmvd0biFX6CyPE1RcK4xnT9E29pfE/OnVcNb8rB1QZwZgx6BZEbgNkKWHmIB5SHQ0IbkvHgEz5wh9FPL2HG9HUwch1KV90Z1M6FAh35JtMx2JB69TMMdznehX4ABV0NBDW39o9NjapRp9zLR2JSOt0fq86ELnTbGUxa97n3H11Em0HciSwsg/3tH51Lsxqwl1ySLVOJ/raDqRp5B9DBNXNo52YLOCl9NX4TVu/IWhpG6mt98ikJ/o+PKlfUO2dTrUPxIyJX6jW60Rf2yKS3Xqrzoj5hBPj7PBSSn7ZaRC5nW2LyJQ3fKdlsafsgGOXB8ZbHp1uWFnM/MOuTKv42hKRZ5cnIgDxIdVOICF/diGAyP1qC5CT09MH0FdEJZBYtJjyB7xfkOlM+7qulLW1gt5yIEd94bfhKY0Vb8UHZYdXTJ8ZFWkdj0SWW6b5YtobfYeovRW0lgNpWIzPp3WVxiMak9qK4JdlOnPn2D702WO1cR7eUiCTeuQWxsgWmcOu6RrbJ6vbpAOhyzGH38V1I/HflPRHPu66HweCLQOSJRJL4AqSb7UH0p2/xouZ78i0WiXK1yj959tNcmi0p2fp+esWnbQMyPToVD/m05ertpsRz25KKUbuxceIt+s6fHm31bawmDFe3FdLU3/VkjwytSTSy4qMr+4EVZoMAH+aMDLbZTqTnvBLkgJawef1r+/Jn/qvTLZZeksiEiA+qhxEQgyi69LFjmE9crMERI6Rv2gUv9IsWI3klQOZ9oQ2A8S64dXIBHttjNCnE4Wx4yJudtVVPkxyGlcUGdue8kS2ieRV0JQCyevTFiHK59NwNEuDwf0yh1PHR+5E2xWy9grdIuzxVtXDld4jk97wHcxiX6sYrupTo1p/3JgQZgB8+nlueuok+grb6k8jd/eWssq/bGURyTc+EYs9bMsZZ0z/i/VFnpSJTOam+DTRHohciUUGeC1dps8tXRmQualz+5GTKDeQEu1eevJkQeTgaX/3aiT8fFg7OUJztXQnMvPyKhnaI77IetO0XgGQSvfjIN35PdKdd8m8SHpCPwKQO2TtMjqctojm3ZgonfmbjMcpXUlEmpb1hGoQy45Qeo/MobQn/G43IHJ9sFXjNXWZbjf0poFM6103waGtbjpvJIOFiR8kShN/EPEgX6QmYc3lhaipl2vrog5c0JoCkq1e7TeJKV2FcWFPRaSge/17Kxf1nyP+yMcQVu+spzu9ZiY5zGvsTuVE/E0BmRoa3w2lbxEpbopG6eCq/OiQSAffkGqZ5BFRm1MaJg695un8vU7lRPyuHzZjS7ri+aL1GoxRurICg8aCy+nqSCZzVmTwsCe8F+tjXxS1uaPRvO5l62L57Ovu5GelXEfkTNE6pBpEbhLV6IAMRB6NAFFJBF0AjQUsgwiT/Qs885+5AhJzVqQkTPmCKdYaj8euv/brMrPp0FAeeeWn0V6U8bih42F5C6+5u5GtyDgGks+nGbGUpg7njdHofnr0qFG5Fn0mzIkjVNMURyV6YuZnRf3ZpTkGMn1w8FP4Bjfa7cAuH9/KvOq+Xd+3wx/fd9cgKvJ/tsNrlwfJv7M97HWKHT1sJsLhN6GwdBwJ7Yo6PU1fYli/nDCyb7erKOWN3G5ZlpL9PvgSjyTMzEfs9i3icxSRuUn2QCtAnDWMzogMlNF8Xu3nsjaH9KLX65PmrHZ12QYSBfd1GNKft6vYMR9ja53IRFHTxnBqeD+1ow8j4UkVJQjbQGI+/VUY5rVjnBseRHoXCvq2hzZZswar4k3vXZpYellIydKfLSCTevhDyN9udAOQExnLMvfY5U+9fvZKgN/cxgON7A9nh7KiPmfLF6IWMW1eINnGjV7shuX1kFKr/wHMZj5/F5taR2XmjjqKo0sM6ROJa654WiTEQUy9lnquPAEQMQhojp7aAvmOkMqOHksje3BfN9eJ/uGYOf4TkQNJT2Q3Y9ZjGiUPxo3sQyKeetqiBDLlCfdbjB2ud8b2NaW/wXuM7xXxz9WA/oO2ENKiHPXRdfGZiWERbzVt3qFdzbwQzlP+6FpkD9LtfPPZiMhhOtX5qpXwmMrlHkRDiDci4oO8Ri9krCMuqoic28HxEhx8c50fti8RZd9F8v0JkcCwv3sNMUqvoq0mO9Ep3RwzMr8VyVRoiyIi+fy+vBJfZL9rBkRkS3nNR+T7gMwSv13UgMiBQj18kNtQAU30KYzItCdyA5bylZcPRAY0osFyE2WFHuyyuAEDLd6I104b5tOPoJgmBJLvEDEZ+bVMD5b3PpMoZeQrU/WC/Hcl8hkTW0PYyvq2xXyNiDntD3tWi16z4zUgbG74E26K0h2+kB9buiy0RpZ3XhSu+ax5/6UGYjkANPqACETeVt6M2gBEzoMcN8pr9/xcdNQAWb7ZMna3iHFR0yj9l+zNMJ50oyR50I5/yC0/x2v4It4aIKlp8BInn8NeWgcj/fTIEVPkFH7Z5R67DzBEpYfX8EV6MPRnDzxgbjSZ9Vzl+lL5xFTweaxzbhP5M3pZzwpjpngSQC4TtctoollROSL56214xPPVnUvqQJRYTKPS5BsgYr+SMxA5QLyWz9cgqsEqR2RKD23HvkbhvLOaeRGeP9trZm8X2T23X+nvGK6uVpCoRnYmStlvV3TPRiQlwky/wrQYPzGDmQ74PchAxIdp8e3Z7kAsa2T0tmrNs0AS6mh1ulrBQj3Hiw+Pyn4TKOXp2orc8YPN2I75/oZq+TKQSJIi1cTFf07TdEVQuNgwV05WsF+p9uX9WSApSy1+8C54oGn0fumbYQcHP4lovOYCt7szTDdrltbKQGqEvuBO3cKTgoOvxPbd9S2RZfwNMLzurKRGgwWQo9V9lIH0eHzPgMhLCZfAoe2mAwNIQi4+SuMlvKfDVl3c4oyCVMdA1NcsYJSB5OVIJK4HnKlbeNyIxp8ljPFfiSw7E4zGqKJfd2FUOxgrjv+7up/ZeyQo8VIGIU+fqm5cTOeIElPTNOmbYYWC8TCS72AzPqEP5Pd0T68xMVCv5zyQ+Dax6zKDDQD6zQST/HrGhX9Nn6mPkorNSW/oWpzvrFy7+cSIfVkj+o64kRFmAwBZfPCfMjBNth4/1hABk5RPLN2YikQYf2oPPRD4sezHjFEV3ISS8tWiHhv5xu3ULOsU1fXj+JKOieTfoClG4P8vOqxeKxyoDAAAAABJRU5ErkJggg=="}},e={};function n(i){var o=e[i];if(void 0!==o)return o.exports;var r=e[i]={id:i,loaded:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.loaded=!0,r.exports}n.m=t,(()=>{n.amdO={}})(),(()=>{var t=[];n.O=(e,i,o,r)=>{if(!i){var a=1/0;for(l=0;l=r)&&Object.keys(n.O).every((t=>n.O[t](i[c])))?i.splice(c--,1):(s=!1,r0&&t[l-1][2]>r;l--)t[l]=t[l-1];t[l]=[i,o,r]}})(),(()=>{n.n=t=>{var e=t&&t.__esModule?()=>t["default"]:()=>t;return n.d(e,{a:e}),e}})(),(()=>{n.d=(t,e)=>{for(var i in e)n.o(e,i)&&!n.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})}})(),(()=>{n.f={},n.e=t=>Promise.all(Object.keys(n.f).reduce(((e,i)=>(n.f[i](t,e),e)),[]))})(),(()=>{n.u=t=>"static/js/"+t+"."+{9:"4a0c2397",51:"93916629",59:"bfb9c9a4",64:"bc225023",107:"76ef883a",276:"f49954b7",292:"913b72dc",376:"ad767c79",392:"adae3178",425:"f45cd5ba",430:"c38b6b4f",441:"626eee61",443:"e3683be5",455:"10597f7b",494:"644475c4",500:"be136ce0",519:"c9a7dd0d",541:"61f341ef",552:"1fd42a6e",573:"addb276f",607:"0c076ed6",646:"b458ba65",649:"239f54d6",686:"6d7105e0",713:"67adc377",767:"f6686431",850:"7d4265c6",982:"7be8267b"}[t]+".js"})(),(()=>{n.miniCssF=t=>"static/css/"+t+"."+{9:"078f0fee",59:"1659749b",64:"53fbed00",107:"c36f949d",276:"09e19b31",292:"a6a69de4",376:"00dac405",392:"b8f9e429",425:"258c547c",430:"ec8b496e",441:"3db1a508",443:"7033f181",455:"53097460",494:"464dd9ea",500:"34bd6c07",519:"a6e3d139",541:"5c611f99",552:"bf0c7844",573:"69d588f0",607:"47400a44",646:"9a987327",649:"99cfe83b",686:"766559a5",713:"9ae160f8",767:"42f5de3c",850:"0adc7870",982:"bf01fcb8"}[t]+".css"})(),(()=>{n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"===typeof window)return window}}()})(),(()=>{n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e)})(),(()=>{var t={},e="agile-portal-front:";n.l=(i,o,r,a)=>{if(t[i])t[i].push(o);else{var s,c;if(void 0!==r)for(var u=document.getElementsByTagName("script"),l=0;l{s.onerror=s.onload=null,clearTimeout(f);var o=t[i];if(delete t[i],s.parentNode&&s.parentNode.removeChild(s),o&&o.forEach((t=>t(n))),e)return e(n)},f=setTimeout(p.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=p.bind(null,s.onerror),s.onload=p.bind(null,s.onload),c&&document.head.appendChild(s)}}})(),(()=>{n.r=t=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}})(),(()=>{n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t)})(),(()=>{n.p=""})(),(()=>{if("undefined"!==typeof document){var t=(t,e,n,i,o)=>{var r=document.createElement("link");r.rel="stylesheet",r.type="text/css";var a=n=>{if(r.onerror=r.onload=null,"load"===n.type)i();else{var a=n&&("load"===n.type?"missing":n.type),s=n&&n.target&&n.target.href||e,c=new Error("Loading CSS chunk "+t+" failed.\n("+s+")");c.code="CSS_CHUNK_LOAD_FAILED",c.type=a,c.request=s,r.parentNode&&r.parentNode.removeChild(r),o(c)}};return r.onerror=r.onload=a,r.href=e,n?n.parentNode.insertBefore(r,n.nextSibling):document.head.appendChild(r),r},e=(t,e)=>{for(var n=document.getElementsByTagName("link"),i=0;inew Promise(((o,r)=>{var a=n.miniCssF(i),s=n.p+a;if(e(a,s))return o();t(i,s,null,o,r)})),o={143:0};n.f.miniCss=(t,e)=>{var n={9:1,59:1,64:1,107:1,276:1,292:1,376:1,392:1,425:1,430:1,441:1,443:1,455:1,494:1,500:1,519:1,541:1,552:1,573:1,607:1,646:1,649:1,686:1,713:1,767:1,850:1,982:1};o[t]?e.push(o[t]):0!==o[t]&&n[t]&&e.push(o[t]=i(t).then((()=>{o[t]=0}),(e=>{throw delete o[t],e})))}}})(),(()=>{var t={143:0};n.f.j=(e,i)=>{var o=n.o(t,e)?t[e]:void 0;if(0!==o)if(o)i.push(o[2]);else{var r=new Promise(((n,i)=>o=t[e]=[n,i]));i.push(o[2]=r);var a=n.p+n.u(e),s=new Error,c=i=>{if(n.o(t,e)&&(o=t[e],0!==o&&(t[e]=void 0),o)){var r=i&&("load"===i.type?"missing":i.type),a=i&&i.target&&i.target.src;s.message="Loading chunk "+e+" failed.\n("+r+": "+a+")",s.name="ChunkLoadError",s.type=r,s.request=a,o[1](s)}};n.l(a,c,"chunk-"+e,e)}},n.O.j=e=>0===t[e];var e=(e,i)=>{var o,r,[a,s,c]=i,u=0;if(a.some((e=>0!==t[e]))){for(o in s)n.o(s,o)&&(n.m[o]=s[o]);if(c)var l=c(n)}for(e&&e(i);un(33300)));i=n.O(i)})(); \ No newline at end of file diff --git a/agile-portal/agile-portal-ui/dist/static/css/455.53097460.css b/agile-portal/agile-portal-ui/dist/static/css/455.53097460.css new file mode 100644 index 00000000..f3d7b6fc --- /dev/null +++ b/agile-portal/agile-portal-ui/dist/static/css/455.53097460.css @@ -0,0 +1 @@ +.lab-apply .top-filter[data-v-0d318eb8]{margin-top:24px}.lab-apply .tale-list[data-v-0d318eb8] .el-table th.el-table__cell{color:#333;background:#fafafa;padding:5px 0;font-size:16px}.lab-apply .tale-list[data-v-0d318eb8] .el-table .cell.el-tooltip{font-size:16px}.lab-apply .tale-list .review-status[data-v-0d318eb8]{display:flex;align-items:center}.lab-apply .tale-list .review-status .icon-circle[data-v-0d318eb8]{width:6px;height:6px;border-radius:3px;margin-right:8px;background:#52c41a}.lab-apply .tale-list .review-status .icon-circle.grey[data-v-0d318eb8]{background:#d9d9d9}.lab-apply .tale-list .review-status .icon-circle.orange[data-v-0d318eb8]{background:#ffd859}.lab-apply .tale-list .review-status .icon-circle.green[data-v-0d318eb8]{background:#52c41a}.lab-apply .tale-list .review-status .icon-circle.red[data-v-0d318eb8]{background:#ff4d4f}.lab-apply[data-v-0d318eb8] .el-pagination{text-align:right} \ No newline at end of file diff --git a/agile-portal/agile-portal-ui/dist/static/css/573.69d588f0.css b/agile-portal/agile-portal-ui/dist/static/css/573.69d588f0.css new file mode 100644 index 00000000..89dc1f9c --- /dev/null +++ b/agile-portal/agile-portal-ui/dist/static/css/573.69d588f0.css @@ -0,0 +1 @@ +.el-table--scrollable-x .el-table__body-wrapper{height:355px}.lab-apply .top-filter[data-v-34b17d1d]{margin-top:24px}.lab-apply .tale-list[data-v-34b17d1d] .el-table th.el-table__cell{color:#333;background:#fafafa;padding:5px 0;font-size:16px}.lab-apply .tale-list[data-v-34b17d1d] .el-table .cell.el-tooltip{font-size:16px}.lab-apply .tale-list .review-status[data-v-34b17d1d]{display:flex;align-items:center}.lab-apply .tale-list .review-status .icon-circle[data-v-34b17d1d]{width:6px;height:6px;border-radius:3px;margin-right:8px;background:#52c41a}.lab-apply .tale-list .review-status .icon-circle.grey[data-v-34b17d1d]{background:#d9d9d9}.lab-apply .tale-list .review-status .icon-circle.orange[data-v-34b17d1d]{background:#ffd859}.lab-apply .tale-list .review-status .icon-circle.green[data-v-34b17d1d]{background:#52c41a}.lab-apply .tale-list .review-status .icon-circle.red[data-v-34b17d1d]{background:#ff4d4f}.lab-apply[data-v-34b17d1d] .el-pagination,[data-v-34b17d1d] .el-pagination{text-align:right}[data-v-34b17d1d] .el-dialog__body{padding:10px}::-webkit-scrollbar{width:7px;height:7px}::-webkit-scrollbar-thumb{border-radius:7px;background-color:rgba(0,0,0,.25)}::-webkit-scrollbar-track{background-color:#f6f6f6}::-webkit-scrollbar-thumb,::-webkit-scrollbar-track{border:0} \ No newline at end of file diff --git a/agile-portal/agile-portal-ui/dist/static/css/649.99cfe83b.css b/agile-portal/agile-portal-ui/dist/static/css/649.99cfe83b.css new file mode 100644 index 00000000..157bdff2 --- /dev/null +++ b/agile-portal/agile-portal-ui/dist/static/css/649.99cfe83b.css @@ -0,0 +1 @@ +.personal-info .el-form-item__label{text-align:left!important;font-size:16px!important}.personal-info .el-form-item__content{font-size:16px!important}.personal-info .el-form-item{margin-bottom:0}.personal-info[data-v-54eff09a]{padding-top:20px;font-size:16px}.personal-info .el-icon-success[data-v-54eff09a]{margin-right:6px;color:#6cbd7f}.personal-info .change-pwd-link[data-v-54eff09a]{margin-left:15px;color:#3165db} \ No newline at end of file diff --git a/agile-portal/agile-portal-ui/dist/static/css/713.9ae160f8.css b/agile-portal/agile-portal-ui/dist/static/css/713.9ae160f8.css new file mode 100644 index 00000000..a107f685 --- /dev/null +++ b/agile-portal/agile-portal-ui/dist/static/css/713.9ae160f8.css @@ -0,0 +1 @@ +.find-password[data-v-d37bfed6]{width:100%;min-height:500px;background:#fff}.find-password[data-v-d37bfed6] .el-step__title{text-align:center}.find-password .title[data-v-d37bfed6]{padding:40px 20px;text-align:center;font-size:26px;line-height:40px;font-weight:400}.find-password .el-form[data-v-d37bfed6]{width:382px;margin:60px auto 20px auto}.find-password .procees-contaner[data-v-d37bfed6]{width:700px;padding:60px 200px;margin:0 auto 50px auto;background:#fff}.divClass[data-v-d37bfed6]{width:100%;height:10px;margin:5px 0}.divClass span[data-v-d37bfed6]{float:left;background:#ccc;height:10px;width:31%;margin:0 1%}.divClass .weak[data-v-d37bfed6]{background-color:#f56c6c}.divClass .medium[data-v-d37bfed6]{background-color:#e6a23c}.divClass .strong[data-v-d37bfed6]{background-color:#67c23a} \ No newline at end of file diff --git a/agile-portal/agile-portal-ui/dist/static/css/9.078f0fee.css b/agile-portal/agile-portal-ui/dist/static/css/9.078f0fee.css new file mode 100644 index 00000000..6ce0893f --- /dev/null +++ b/agile-portal/agile-portal-ui/dist/static/css/9.078f0fee.css @@ -0,0 +1 @@ +.inner-container[data-v-d9b82c00]{margin:20px auto;background:#fff}.routerList[data-v-d9b82c00]{background:#ecf5ff;height:100vh;border-radius:10px 10px 0 0}.routerList h2[data-v-d9b82c00]{text-align:center;font-size:24px;background:#e6171e;color:#fff;line-height:45px;border-radius:10px 10px 0 0}.routerList ul[data-v-d9b82c00]{line-height:45px;padding:20px 0}.routerList ul li[data-v-d9b82c00]{font-size:18px;font-weight:600;padding:0 20px}.routerList ul li.on[data-v-d9b82c00]{background:#fff;border-left:5px solid #e6171e}.routerList ul li.on a[data-v-d9b82c00]{color:#e6171e}.api-list-container[data-v-d9b82c00]{background:#f9f9f9}.api-list-container .guide-pic[data-v-d9b82c00]{background:url(../../static/img/data-service.82b45c45.jpg) no-repeat top;background-size:100%}.api-list-container .api-list ul[data-v-d9b82c00]{width:100%;align-items:flex-start;flex-wrap:wrap;justify-content:space-between;padding-top:30px;overflow:hidden}.api-list-container .api-list ul li[data-v-d9b82c00]{padding:15px;margin-bottom:50px;box-sizing:border-box;width:32%;height:296px;background:#fff;box-shadow:0 0 6px 0 rgba(217,225,238,.47);border-radius:2px;transition-property:box-shadow transform;transition-duration:.25s,1s;float:left;margin-left:1%;cursor:pointer;border:2px solid #409eff}.api-list-container .api-list ul li[data-v-d9b82c00]:hover{transform:translateY(-10px);box-shadow:0 0 16px 0 rgba(217,225,238,.47);background:linear-gradient(180deg,#2980b9,#87ceeb);border:2px solid #adb5bd}.api-list-container .api-list ul li:hover .aip-intro[data-v-d9b82c00],.api-list-container .api-list ul li:hover .api-info .others b[data-v-d9b82c00],.api-list-container .api-list ul li:hover .api-info[data-v-d9b82c00],.api-list-container .api-list ul li:hover .api-name[data-v-d9b82c00]{color:#fff}.api-list-container .api-list ul li .api-name[data-v-d9b82c00]{font-size:18px;color:#181818;font-weight:700;line-height:18px;height:18px;margin-bottom:15px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.api-list-container .api-list ul li .aip-intro[data-v-d9b82c00]{height:120px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;color:#666;line-height:24px;margin-bottom:20px;font-size:14px}.api-list-container .api-list ul li .api-info[data-v-d9b82c00]{padding:20px 0;color:#ababab;font-size:14px;border-top:1px solid #d8d8d8}.api-list-container .api-list ul li .api-info .others[data-v-d9b82c00]{display:flex;justify-content:space-between}.api-list-container .api-list ul li .api-info .others b[data-v-d9b82c00]{font-weight:400;font-size:12px;color:#5274ca;line-height:1;padding:4px 5px;border-radius:2px;border:1px solid #5274ca}.api-list-container .api-list ul li .api-info .data-from[data-v-d9b82c00]{padding-bottom:15px}.api-list-container .api-list .pagination-container[data-v-d9b82c00]{background:transparent}.api-list-container .api-list[data-v-d9b82c00] .el-pagination{text-align:center} \ No newline at end of file diff --git a/agile-portal/agile-portal-ui/dist/static/js/455.10597f7b.js b/agile-portal/agile-portal-ui/dist/static/js/455.10597f7b.js new file mode 100644 index 00000000..653af59b --- /dev/null +++ b/agile-portal/agile-portal-ui/dist/static/js/455.10597f7b.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkagile_portal_front"]=self["webpackChunkagile_portal_front"]||[]).push([[455],{42455:(e,t,a)=>{a.r(t),a.d(t,{default:()=>p});var l=function(){var e=this,t=e._self._c;return t("div",{staticClass:"lab-apply"},[t("div",{staticClass:"btn-group",staticStyle:{"text-align":"right","margin-bottom":"10px"}},[t("el-button",{attrs:{type:"primary",size:"mini"},on:{click:e.handleImport}},[e._v("新增")])],1),t("div",{staticClass:"tale-list"},[t("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{"min-height":"355px","max-height":"500px"},attrs:{stripe:"",data:e.myLablyList,"max-height":"500px"}},[t("div",{staticStyle:{"text-align":"left"},attrs:{slot:"empty"},slot:"empty"},[t("el-empty",{attrs:{description:"暂无数据"}})],1),t("el-table-column",{attrs:{align:"center",label:"文件名称",prop:"fileName","show-overflow-tooltip":!0}}),t("el-table-column",{attrs:{align:"center",label:"上传时间",prop:"createTime","show-overflow-tooltip":!0}}),t("el-table-column",{attrs:{align:"center",label:"文件大小",prop:"fileSize","show-overflow-tooltip":!0},scopedSlots:e._u([{key:"default",fn:function(a){return[t("span",[e._v(e._s(e.convertFileSize(a.row.fileSize)))])]}}])}),t("el-table-column",{attrs:{align:"center",label:"文件说明",prop:"remarks","show-overflow-tooltip":!0}}),t("el-table-column",{attrs:{align:"center",label:"文件类型",prop:"fileType","show-overflow-tooltip":!0},scopedSlots:e._u([{key:"default",fn:function(a){return[t("span",[e._v(e._s("data"==a.row.fileType?"数据文件":"python组件"))])]}}])}),t("el-table-column",{attrs:{align:"center",label:"操作"},scopedSlots:e._u([{key:"default",fn:function(a){return["01"!=a.row.reviewStatus?t("el-button",{attrs:{size:"small",type:"text"},on:{click:function(t){return e.handleDelete(a.row)}}},[e._v("删除")]):e._e()]}}])})],1)],1),t("pagination",{directives:[{name:"show",rawName:"v-show",value:e.total>0,expression:"total > 0"}],attrs:{total:e.total,page:e.queryParams.pageNum,limit:e.queryParams.pageSize},on:{"update:page":function(t){return e.$set(e.queryParams,"pageNum",t)},"update:limit":function(t){return e.$set(e.queryParams,"pageSize",t)},pagination:e.getList}}),t("el-dialog",{attrs:{title:e.upload.title,visible:e.upload.open,width:"500px","append-to-body":"","close-on-click-modal":!1,"close-on-press-escape":!1},on:{"update:visible":function(t){return e.$set(e.upload,"open",t)}}},[t("el-form",{ref:"uploadform",attrs:{model:e.upload,rules:e.uploadrules,"label-width":"80px"}},[t("el-row",[t("el-col",{attrs:{span:24}},[t("el-form-item",{attrs:{label:"组件类型",prop:"upData.fileType"}},[t("el-select",{attrs:{placeholder:"请选择组件类型"},on:{change:e.fileTypefn},model:{value:e.upload.upData.fileType,callback:function(t){e.$set(e.upload.upData,"fileType",t)},expression:"upload.upData.fileType"}},e._l(e.fileTypeList,(function(e){return t("el-option",{key:e.value,attrs:{label:e.label,value:e.value}})})),1)],1)],1),t("el-col",{attrs:{span:24}},[t("el-form-item",{attrs:{label:"内容说明",prop:"upData.remarks"}},[t("el-input",{attrs:{type:"textarea",placeholder:"请输入内容说明"},model:{value:e.upload.upData.remarks,callback:function(t){e.$set(e.upload.upData,"remarks",t)},expression:"upload.upData.remarks"}})],1)],1)],1)],1),t("el-upload",{ref:"upload",staticStyle:{"text-align":"center"},attrs:{limit:1,accept:e.upload.accept,headers:e.upload.headers,action:"",disabled:e.upload.isUploading,"on-change":e.beforeUpload,"on-success":e.handleFileSuccess,"auto-upload":!1,"http-request":e.uploadSectionFile,"on-remove":e.removeFile,drag:""}},[t("i",{staticClass:"el-icon-upload"}),t("div",{staticClass:"el-upload__text"},[e._v("将文件拖到此处,或"),t("em",[e._v("点击上传")])])]),t("div",{staticClass:"dialog-footer",staticStyle:{"text-align":"right"},attrs:{slot:"footer"},slot:"footer"},[t("el-button",{attrs:{type:"primary"},on:{click:e.submitFileForm}},[e._v("确 定")]),t("el-button",{on:{click:function(t){e.upload.open=!1}}},[e._v("取 消")])],1)],1)],1)},o=[],r=(a(9653),a(56977),a(68309),a(94986),a(82772),a(32900));const i={name:"MyData",data:function(){return{loading:!0,total:0,myLablyList:[],fileTypeList:[{value:"python",label:"python组件"},{value:"data",label:"数据文件"}],upload:{open:!1,title:"",isUploading:!1,updateSupport:0,accept:".zip,.tar,.gz,.bz2",upData:{fileType:"python",fileSourceType:"dockerlib"}},queryParams:{pageNum:1,pageSize:10},formdata:null,uploadrules:{upData:{fileType:[{required:!0,message:"不能为空",trigger:"blur"}],remarks:[{required:!0,message:"不能为空",trigger:"blur"}]}}}},created:function(){this.getList()},methods:{getList:function(){var e=this;(0,r.Hc)(this.queryParams).then((function(t){e.myLablyList=t.rows,e.total=t.total,e.loading=!1}))},handleImport:function(){this.upload.title="用户导入",this.upload.open=!0},fileTypefn:function(e){"python"==e?this.upload.accept=".zip,.tar,.gz,.bz2":"data"==e&&(this.upload.accept=".zip,.tar,.gz,.csv,.txt,.xls,.xlsx")},convertFileSize:function(e){if(void 0!=e){var t=Number(e)/1024,a=t/1024,l=a/1024;return l>=1?l.toFixed(2)+" GB":a>=1?a.toFixed(2)+" MB":t>=1?t.toFixed(2)+" KB":Number(e).toFixed(2)+" B"}},removeFile:function(e,t){this.$refs.upload.clearFiles()},beforeUpload:function(e){var t=104857600;if(e&&e.size>t)return alert("文件大小超过限制,请选择小于100MB的文件。"),void this.$refs.upload.clearFiles();var a,l=e.name.substring(e.name.lastIndexOf(".")+1);return"python"==this.upload.upData.fileType?a=["zip","tar","gz","bz2"]:"data"==this.upload.upData.fileType&&(a=["zip","tar","gz","csv","txt","xls","xlsx"]),-1===a.indexOf(l)?(this.$modal.msgWarning("上传文件只能是"+this.upload.accept+"格式"),!1):void 0},uploadSectionFile:function(e){var t=e.file,a=new FormData;a.append("file",t),a.append("fileType",this.upload.upData.fileType),a.append("fileSourceType",this.upload.upData.fileSourceType),a.append("remarks",this.upload.upData.remarks),this.formdata=a,(0,r.cT)(this.formdata).then((function(t){e.onSuccess(t)}))["catch"]((function(e){e.err}))},handleFileSuccess:function(e,t,a){200==e.code&&(this.upload.open=!1,this.$refs.upload.clearFiles(),this.getList())},submitFileForm:function(){var e=this;this.$refs["uploadform"].validate((function(t){t&&e.$refs.upload.submit()}))},handleDelete:function(e){var t=this,a=e.fileId;this.$confirm("确认要删除这条信息吗?").then((function(){return(0,r._I)(a)})).then((function(){t.$message({type:"success",message:"删除成功!"}),t.getList()}))["catch"]((function(){}))}}},n=i;var s=a(1001),u=(0,s.Z)(n,l,o,!1,null,"0d318eb8",null);const p=u.exports},32900:(e,t,a)=>{a.d(t,{Cp:()=>Z,F7:()=>k,Hc:()=>v,Ht:()=>s,JE:()=>g,W1:()=>m,WG:()=>i,_I:()=>w,aX:()=>o,bL:()=>_,c0:()=>L,cT:()=>x,d5:()=>r,e_:()=>h,en:()=>u,fR:()=>n,in:()=>S,jr:()=>b,oK:()=>f,qS:()=>d,rK:()=>y,uN:()=>c,ur:()=>p});var l=a(73821);function o(e){return(0,l.Z)({url:"/myApply/laboratoryList",method:"get",params:e})}function r(e){return(0,l.Z)({url:"/myApply/laboratoryDetail?reviewId="+e,method:"get"})}function i(e){return(0,l.Z)({url:"/myApply/exportList",method:"get",params:e})}function n(e){return(0,l.Z)({url:"/myApply/download",method:"get",params:e})}function s(e){return(0,l.Z)({url:"/myLab/list",method:"get",params:e})}function u(e){return(0,l.Z)({url:"/myLab/info?applyId="+e,method:"get"})}function p(e){return(0,l.Z)({url:"/myLab/restart",method:"post",data:e})}function d(e){return(0,l.Z)({url:"/myLab/dataInjection",method:"post",data:e})}function c(e){return(0,l.Z)({url:"/myLab/fileList?applyId="+e,method:"get"})}function m(e){return(0,l.Z)({url:"/myLab/applyDown",method:"post",data:e})}function f(e){return(0,l.Z)({url:"/api/userApiList",method:"get",params:e})}function h(e){return(0,l.Z)({url:"/api/userApiStatisticsList",method:"get",params:e})}function y(e){return(0,l.Z)({url:"/myMessage/page",method:"get",params:e})}function g(e){return(0,l.Z)({url:"/myMessage/detail?msgId="+e,method:"post"})}function b(e){return(0,l.Z)({url:"myMessage/markRead",method:"post",data:e})}function v(e){return(0,l.Z)({url:"/myResources/list",method:"get",params:e})}function x(e){return(0,l.Z)({url:"/myResources/uploadFile",method:"post",data:e,headers:{"Content-Type":"multipart/form-data"}})}function w(e){return(0,l.Z)({url:"/myResources/delete?fileId="+e,method:"delete"})}function S(e){return(0,l.Z)({url:"/rePwd/getPhoneByUser?username="+e,method:"get"})}function _(){return(0,l.Z)({url:"/rePwd/sendPhoneCode",method:"get"})}function k(e){return(0,l.Z)({url:"/rePwd/verifyPhoneCode?phoneCode="+e,method:"get"})}function L(e){return(0,l.Z)({url:"/rePwd/reset",method:"post",data:e})}function Z(e){return(0,l.Z)({url:"/changePassword",method:"post",data:e})}}}]); \ No newline at end of file diff --git a/agile-portal/agile-portal-ui/dist/static/js/573.addb276f.js b/agile-portal/agile-portal-ui/dist/static/js/573.addb276f.js new file mode 100644 index 00000000..a6ba4bfb --- /dev/null +++ b/agile-portal/agile-portal-ui/dist/static/js/573.addb276f.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkagile_portal_front"]=self["webpackChunkagile_portal_front"]||[]).push([[573],{36573:(e,t,a)=>{a.r(t),a.d(t,{default:()=>p});a(82772),a(73210);var l=function(){var e=this,t=e._self._c;return t("div",{staticClass:"lab-apply"},[t("div",{staticClass:"top-filter"},[t("el-form",{ref:"queryForm",attrs:{model:e.queryParams,size:"small","label-width":"82px",inline:!0}},[t("el-form-item",{attrs:{label:"实验室名称",prop:"labTitle"}},[t("el-input",{attrs:{clearable:""},nativeOn:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.handleQuery.apply(null,arguments)}},model:{value:e.queryParams.labTitle,callback:function(t){e.$set(e.queryParams,"labTitle",t)},expression:"queryParams.labTitle"}})],1),t("el-form-item",{attrs:{label:"实验室编号",prop:"applyId"}},[t("el-input",{attrs:{clearable:""},nativeOn:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.handleQuery.apply(null,arguments)}},model:{value:e.queryParams.applyId,callback:function(t){e.$set(e.queryParams,"applyId",t)},expression:"queryParams.applyId"}})],1),t("el-form-item",{attrs:{label:"实验室状态",prop:"busStatus"}},[t("el-select",{attrs:{placeholder:"请选择",clearable:""},model:{value:e.queryParams.busStatus,callback:function(t){e.$set(e.queryParams,"busStatus","string"===typeof t?t.trim():t)},expression:"queryParams.busStatus"}},e._l(e.busStatusList,(function(e){return t("el-option",{key:e.value,attrs:{label:e.label,value:e.value}})})),1)],1),t("el-form-item",[t("el-button",{attrs:{type:"primary",size:"mini"},on:{click:e.handleQuery}},[e._v("搜索")]),t("el-button",{attrs:{size:"mini"},on:{click:e.resetQuery}},[e._v("重置")])],1)],1)],1),t("div",{staticClass:"tale-list"},[t("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{"min-height":"355px","max-height":"500px"},attrs:{data:e.myLablyList,"max-height":"500px"}},[t("div",{staticStyle:{"text-align":"left"},attrs:{slot:" empty"},slot:" empty"},[t("el-empty",{attrs:{description:"暂无数据"}})],1),t("el-table-column",{attrs:{align:"center",label:"实验室编号",prop:"applyId","show-overflow-tooltip":!0,width:"180"}}),t("el-table-column",{attrs:{align:"center",label:"实验室名称",prop:"labTitle","show-overflow-tooltip":!0}}),t("el-table-column",{attrs:{align:"center",label:"状态","show-overflow-tooltip":!0},scopedSlots:e._u([{key:"default",fn:function(a){return["01"===a.row.busStatus?t("span",{staticClass:"review-status"},[t("i",{staticClass:"icon-circle green"}),e._v(e._s(e.busStatusspan(a.row.busStatus))+" ")]):t("span",{staticClass:"review-status"},[t("i",{staticClass:"icon-circle red"}),e._v(e._s(e.busStatusspan(a.row.busStatus))+" ")])]}}])}),t("el-table-column",{attrs:{align:"center",label:"生效时间",prop:"startDate","show-overflow-tooltip":!0},scopedSlots:e._u([{key:"default",fn:function(a){return[t("span",[e._v(e._s(e.parseTime(a.row.startDate,"{y}-{m}-{d}")))])]}}])}),t("el-table-column",{attrs:{align:"center",label:"到期时间",prop:"endDate","show-overflow-tooltip":!0},scopedSlots:e._u([{key:"default",fn:function(a){return[t("span",[e._v(e._s(e.parseTime(a.row.endDate,"{y}-{m}-{d}")))])]}}])}),t("el-table-column",{attrs:{align:"center",label:"硬件资源",prop:"dockerImageName","show-overflow-tooltip":!0},scopedSlots:e._u([{key:"default",fn:function(a){return[t("span",[e._v(" "+e._s("CPU:"+a.row.cpuLimits+";内存:"+a.row.memoryLimits+"G;硬盘:"+a.row.discLimits+"G")+" ")])]}}])}),t("el-table-column",{attrs:{align:"center",label:"操作"},scopedSlots:e._u([{key:"default",fn:function(a){return[t("el-button",{attrs:{size:"small",type:"text"},on:{click:function(t){return e.goLabDetail(a.row.applyId)}}},[e._v("详情")]),"01"===a.row.busStatus?t("el-dropdown",{attrs:{size:"mini"},on:{command:function(t){return e.handleCommands(t,a.row)}}},[t("span",{staticClass:"el-dropdown-link",staticStyle:{color:"#409EFF",cursor:"pointer"}},[t("i",{staticClass:"el-icon-d-arrow-right el-icon--right"}),e._v("更多 ")]),t("el-dropdown-menu",{attrs:{slot:"dropdown"},slot:"dropdown"},[t("el-dropdown-item",{attrs:{command:"myResourcesList"}},[e._v(" 数据注入 ")]),t("el-dropdown-item",{attrs:{command:"myfileList"}},[e._v(" 申请下载 ")]),t("el-dropdown-item",{attrs:{command:"restart"}},[e._v(" 重启 ")])],1)],1):e._e()]}}])})],1)],1),t("pagination",{directives:[{name:"show",rawName:"v-show",value:e.total>0,expression:"total > 0"}],attrs:{total:e.total,page:e.queryParams.pageNum,limit:e.queryParams.pageSize},on:{"update:page":function(t){return e.$set(e.queryParams,"pageNum",t)},"update:limit":function(t){return e.$set(e.queryParams,"pageSize",t)},pagination:e.getList}}),t("el-dialog",{attrs:{title:"选中资源",visible:e.visible,width:"800px",top:"5vh","append-to-body":"","close-on-click-modal":!1,"close-on-press-escape":!1},on:{"update:visible":function(t){e.visible=t}}},[t("el-form",{ref:"queryForm",attrs:{model:e.queryParamss,size:"small",inline:!0}},[t("el-form-item",{attrs:{label:"文件类型",prop:"fileType"}},[t("el-select",{attrs:{placeholder:"请选择组件类型"},on:{change:e.myResourcesLists},model:{value:e.queryParamss.fileType,callback:function(t){e.$set(e.queryParamss,"fileType",t)},expression:"queryParamss.fileType"}},e._l(e.fileTypeList,(function(e){return t("el-option",{key:e.value,attrs:{label:e.label,value:e.value}})})),1)],1),t("el-form-item",[t("el-button",{attrs:{type:"primary",icon:"el-icon-search",size:"mini"},on:{click:e.handleQuerys}},[e._v("查询")])],1)],1),t("el-row",[t("el-table",{ref:"table",attrs:{data:e.resourcesList,height:"260px"},on:{"row-click":e.clickRow,"selection-change":e.handleSelectionChange}},[t("div",{staticStyle:{"text-align":"center"},attrs:{slot:"empty"},slot:"empty"},[e._v("暂无数据 ")]),t("el-table-column",{attrs:{align:"center",type:"selection",width:"55"}}),t("el-table-column",{attrs:{align:"center",label:"文件名称",prop:"fileName","show-overflow-tooltip":!0}}),t("el-table-column",{attrs:{align:"center",label:"上传时间",prop:"createTime","show-overflow-tooltip":!0}}),t("el-table-column",{attrs:{align:"center",label:"文件说明",prop:"remarks","show-overflow-tooltip":!0}}),t("el-table-column",{attrs:{align:"center",label:"文件类型",prop:"fileType","show-overflow-tooltip":!0},scopedSlots:e._u([{key:"default",fn:function(a){return[t("span",[e._v(e._s("data"==a.row.fileType?"数据文件":"python组件"))])]}}])})],1),t("pagination",{directives:[{name:"show",rawName:"v-show",value:e.totals>0,expression:"totals > 0"}],attrs:{total:e.totals,page:e.queryParamss.pageNum,limit:e.queryParamss.pageSize},on:{"update:page":function(t){return e.$set(e.queryParamss,"pageNum",t)},"update:limit":function(t){return e.$set(e.queryParamss,"pageSize",t)},pagination:e.myResourcesLists}})],1),t("el-form",{ref:"applyform",attrs:{"label-width":"80px",model:e.resourcesForm,rules:e.rules}},[t("el-row",[t("el-col",{attrs:{span:24}},[t("el-form-item",{attrs:{label:"申请说明",prop:"applyDesc"}},[t("el-input",{attrs:{maxlength:200,type:"textarea",placeholder:"请输入内容"},model:{value:e.resourcesForm.applyDesc,callback:function(t){e.$set(e.resourcesForm,"applyDesc",t)},expression:"resourcesForm.applyDesc"}})],1)],1)],1)],1),t("div",{staticClass:"dialog-footer",staticStyle:{"text-align":"right"},attrs:{slot:"footer"},slot:"footer"},[t("el-button",{attrs:{type:"primary"},on:{click:e.handleSelectUser}},[e._v("确 定")]),t("el-button",{on:{click:function(t){e.visible=!1}}},[e._v("取 消")])],1)],1),t("el-dialog",{attrs:{title:"申请下载",visible:e.open,width:"800px",top:"5vh","append-to-body":"","close-on-click-modal":!1,"close-on-press-escape":!1},on:{"update:visible":function(t){e.open=t}}},[t("el-row",[t("el-col",{attrs:{span:24}},[t("el-table",{ref:"filetable",attrs:{data:e.filetableList,height:"260px"}},[t("div",{staticStyle:{"text-align":"center"},attrs:{slot:"empty"},slot:"empty"},[e._v("暂无数据 ")]),t("el-table-column",{attrs:{align:"center",label:"文件名称",prop:"fileName","show-overflow-tooltip":!0}}),t("el-table-column",{attrs:{align:"center",label:"操作"},scopedSlots:e._u([{key:"default",fn:function(a){return[t("el-button",{attrs:{size:"small",type:"text"},on:{click:function(t){return e.fileCk(a.row)}}},[e._v("申请")])]}}])})],1)],1)],1),t("el-dialog",{attrs:{width:"30%",title:"申请说明",visible:e.opens,"append-to-body":"","close-on-click-modal":!1,"close-on-press-escape":!1},on:{"update:visible":function(t){e.opens=t}}},[t("el-form",{ref:"fileForm",attrs:{"label-width":"80px",model:e.fileForm}},[t("el-row",[t("el-col",{attrs:{span:24}},[t("el-form-item",{attrs:{label:"申请说明",prop:"applyDesc"}},[t("el-input",{attrs:{maxlength:200,type:"textarea",placeholder:"请输入内容"},model:{value:e.fileForm.applyDesc,callback:function(t){e.$set(e.fileForm,"applyDesc",t)},expression:"fileForm.applyDesc"}})],1)],1)],1)],1),t("div",{staticClass:"dialog-footer",staticStyle:{"text-align":"right"},attrs:{slot:"footer"},slot:"footer"},[t("el-button",{attrs:{type:"primary"},on:{click:e.handlefile}},[e._v("确 定")]),t("el-button",{on:{click:function(t){e.opens=!1}}},[e._v("取 消")])],1)],1)],1)],1)},s=[],r=(a(69826),a(41539),a(21249),a(32900));const o={name:"myLab",data:function(){return{loading:!0,total:0,myLablyList:[],queryParams:{pageNum:1,pageSize:10},busStatusList:[{label:"运行中",value:"01"},{label:"到期结束",value:"02"},{label:"强制结束",value:"03"},{label:"已禁用",value:"04"},{label:"已销毁",value:"05"},{label:"销毁处理中",value:"06"},{label:"重新初始化中",value:"07"},{label:"错误",value:"08"}],visible:!1,open:!1,opens:!1,filetotal:0,filetableList:[],fileForm:{applyDesc:""},fileTypeList:[{value:"python",label:"python组件"},{value:"data",label:"数据文件"}],totals:0,resourcesList:[],resourcesForm:{applyDesc:""},fileQueryParams:{pageNum:1,pageSize:10},queryParamss:{pageNum:1,pageSize:10},rules:{applyDesc:[{required:!0,message:"不能为空",trigger:"blur"}]}}},created:function(){this.getList()},methods:{busStatusspan:function(e){var t=this.busStatusList,a=t.find((function(t){return t.value==e}));return a?a.label:null},getList:function(){var e=this;this.loading=!0,(0,r.Ht)(this.queryParams).then((function(t){e.myLablyList=t.rows,e.total=t.total,e.loading=!1}))},handleQuery:function(){this.queryParams.pageNum=1,this.getList()},resetQuery:function(){this.resetForm("queryForm"),this.handleQuery()},loginUrl:function(e){window.open(e,"_blank")},goLabDetail:function(e){this.$router.push("/user/myapply/myLabDetail/"+e)},clickRow:function(e){this.$refs.table.toggleRowSelection(e)},handleQuerys:function(){this.queryParamss.pageNum=1,this.myResourcesLists()},handleCommands:function(e,t){switch(e){case"myResourcesList":this.myResourcesList(t);break;case"myfileList":this.myfileList(t);break;case"restart":this.restart(t);break;default:break}},myResourcesLists:function(){var e=this;(0,r.Hc)(this.queryParamss).then((function(t){e.resourcesList=t.rows,e.totals=t.total,e.loading=!1}))},myResourcesList:function(e){this.visible=!0,this.resourcesForm.applyDesc="",this.resourcesForm.applyId=e.applyId,this.resourcesForm.recToken=e.recToken,this.myResourcesLists()},handleSelectionChange:function(e){this.resourcesForm.fileIds=e.map((function(e){return e.fileId}))},handleSelectUser:function(){var e=this;console.log(this.resourcesForm),this.$refs["applyform"].validate((function(t){t&&(0,r.qS)(e.resourcesForm).then((function(t){e.visible=!1,e.$message({type:"success",message:"数据注入成功!"}),e.getList()}))}))},myfileList:function(e){var t=this;this.open=!0,this.fileForm.applyId=e.applyId,this.fileForm.recToken=e.recToken,(0,r.uN)(e.applyId).then((function(e){t.filetableList=e.data,t.loading=!1}))},fileCk:function(e){this.fileForm.fileName=e.fileName,this.fileForm.applyDesc="",this.opens=!0},handlefile:function(){var e=this;(0,r.W1)(this.fileForm).then((function(t){e.$message({type:"success",message:"申请成功,等待审核!"}),e.open=!1,e.opens=!1,e.getList()}))},restart:function(e){var t=this,a={applyId:e.applyId,recToken:e.recToken};this.loading=!0,(0,r.ur)(a).then((function(e){t.loading=!1,t.$message({type:"success",message:"重启成功!"}),t.getList()}))["catch"]((function(e){e.err;t.loading=!1}))}}},i=o;var n=a(1001),u=(0,n.Z)(i,l,s,!1,null,"34b17d1d",null);const p=u.exports},32900:(e,t,a)=>{a.d(t,{Cp:()=>x,F7:()=>S,Hc:()=>v,Ht:()=>n,JE:()=>b,W1:()=>d,WG:()=>o,_I:()=>k,aX:()=>s,bL:()=>_,c0:()=>P,cT:()=>w,d5:()=>r,e_:()=>y,en:()=>u,fR:()=>i,in:()=>L,jr:()=>g,oK:()=>f,qS:()=>c,rK:()=>h,uN:()=>m,ur:()=>p});var l=a(73821);function s(e){return(0,l.Z)({url:"/myApply/laboratoryList",method:"get",params:e})}function r(e){return(0,l.Z)({url:"/myApply/laboratoryDetail?reviewId="+e,method:"get"})}function o(e){return(0,l.Z)({url:"/myApply/exportList",method:"get",params:e})}function i(e){return(0,l.Z)({url:"/myApply/download",method:"get",params:e})}function n(e){return(0,l.Z)({url:"/myLab/list",method:"get",params:e})}function u(e){return(0,l.Z)({url:"/myLab/info?applyId="+e,method:"get"})}function p(e){return(0,l.Z)({url:"/myLab/restart",method:"post",data:e})}function c(e){return(0,l.Z)({url:"/myLab/dataInjection",method:"post",data:e})}function m(e){return(0,l.Z)({url:"/myLab/fileList?applyId="+e,method:"get"})}function d(e){return(0,l.Z)({url:"/myLab/applyDown",method:"post",data:e})}function f(e){return(0,l.Z)({url:"/api/userApiList",method:"get",params:e})}function y(e){return(0,l.Z)({url:"/api/userApiStatisticsList",method:"get",params:e})}function h(e){return(0,l.Z)({url:"/myMessage/page",method:"get",params:e})}function b(e){return(0,l.Z)({url:"/myMessage/detail?msgId="+e,method:"post"})}function g(e){return(0,l.Z)({url:"myMessage/markRead",method:"post",data:e})}function v(e){return(0,l.Z)({url:"/myResources/list",method:"get",params:e})}function w(e){return(0,l.Z)({url:"/myResources/uploadFile",method:"post",data:e,headers:{"Content-Type":"multipart/form-data"}})}function k(e){return(0,l.Z)({url:"/myResources/delete?fileId="+e,method:"delete"})}function L(e){return(0,l.Z)({url:"/rePwd/getPhoneByUser?username="+e,method:"get"})}function _(){return(0,l.Z)({url:"/rePwd/sendPhoneCode",method:"get"})}function S(e){return(0,l.Z)({url:"/rePwd/verifyPhoneCode?phoneCode="+e,method:"get"})}function P(e){return(0,l.Z)({url:"/rePwd/reset",method:"post",data:e})}function x(e){return(0,l.Z)({url:"/changePassword",method:"post",data:e})}}}]); \ No newline at end of file diff --git a/agile-portal/agile-portal-ui/dist/static/js/649.239f54d6.js b/agile-portal/agile-portal-ui/dist/static/js/649.239f54d6.js new file mode 100644 index 00000000..69a3784d --- /dev/null +++ b/agile-portal/agile-portal-ui/dist/static/js/649.239f54d6.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkagile_portal_front"]=self["webpackChunkagile_portal_front"]||[]).push([[649],{39649:(t,e,s)=>{s.r(e),s.d(e,{default:()=>c});var a=function(){var t=this,e=t._self._c;return e("div",{staticClass:"personal-info"},[e("el-form",{ref:"form1",attrs:{model:t.form,"label-width":"140px",align:"left"}},[e("el-row",[e("el-col",{attrs:{span:24}},[e("el-form-item",{attrs:{align:"left",label:"用户名"}},[e("span",[t._v(t._s(t.form.userName))])])],1),e("el-col",{attrs:{span:24}},[e("el-form-item",{attrs:{label:"手机号"}},[e("span",[t._v(t._s(t.form.phonenumber))])])],1),e("el-col",{attrs:{span:24}},[e("el-form-item",{attrs:{label:"状态"}},["0"==t.form.status?e("span",{staticStyle:{color:"#6cbd7f"}},[t._v("正常")]):e("span",{staticStyle:{color:"red"}},[t._v("停用")])])],1),e("el-col",{attrs:{span:24}},[e("el-form-item",{attrs:{label:"企业名"}},[e("span",[t._v(t._s(t.form.enterpriseName))])])],1),e("el-col",{attrs:{span:24}},[e("el-form-item",{attrs:{label:"社会统一信用代码"}},[e("span",[t._v(t._s(t.form.socialCreditCode))])])],1),e("el-col",{attrs:{span:24}},[e("el-form-item",{attrs:{label:"行业类型"}},[e("span",[t._v(t._s(t.form.industryCategory))])])],1),e("el-col",{attrs:{span:24}},[e("el-form-item",{attrs:{label:"地址"}},[e("span",[t._v(t._s(t.form.enterpriseAddress))])])],1),e("el-col",{attrs:{span:24}},[e("el-form-item",{attrs:{label:"登录密码"}},[e("i",{staticClass:"icon el-icon-success"}),e("span",[t._v("已设置")]),e("router-link",{staticClass:"change-pwd-link",attrs:{to:"/resetpwd"}},[t._v("更改密码")])],1)],1)],1)],1),e("el-dialog",{attrs:{width:"400px",title:"密码到期提示",visible:t.opens,"append-to-body":"","close-on-click-modal":!1,"close-on-press-escape":!1},on:{"update:visible":function(e){t.opens=e}}},[e("div",{staticStyle:{"text-align":"center","font-size":"18px"}},[t._v(" 登录密码还有"),e("span",{staticStyle:{color:"red","font-size":"25px","font-weight":"bold"}},[t._v(t._s(t.form.pwdRemainderDate))]),t._v("天到期,请尽快修改密码! ")]),e("div",{staticClass:"dialog-footer",staticStyle:{"text-align":"right"},attrs:{slot:"footer"},slot:"footer"},[e("el-button",{on:{click:function(e){t.opens=!1}}},[t._v("关闭")]),e("el-button",{attrs:{type:"primary"},on:{click:t.handlefile}},[t._v("去修改")])],1)])],1)},r=[],o=s(12223);const l={name:"UserInfo",data:function(){return{opens:!1,form:{}}},created:function(){this.getUserInfo()},methods:{getUserInfo:function(){var t=this;(0,o.C5)().then((function(e){t.form=e.data,"0"==t.form.firstFlag&&t.$router.push("/resetpwd")["catch"]((function(){})),t.form.pwdRemainderDate>=0&&null!=t.form.pwdRemainderDate&&(t.opens=!0),t.form.pwdRemainderDate<0&&null!=t.form.pwdRemainderDate&&(t.$message({type:"error",message:"登陆密码到期,请修改密码!"}),t.$router.push("/resetpwd")["catch"]((function(){})))}))},handlefile:function(){this.$router.push("/resetpwd")["catch"]((function(){}))}}},n=l;var i=s(1001),f=(0,i.Z)(n,a,r,!1,null,"54eff09a",null);const c=f.exports}}]); \ No newline at end of file diff --git a/agile-portal/agile-portal-ui/dist/static/js/713.67adc377.js b/agile-portal/agile-portal-ui/dist/static/js/713.67adc377.js new file mode 100644 index 00000000..030d3bdb --- /dev/null +++ b/agile-portal/agile-portal-ui/dist/static/js/713.67adc377.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkagile_portal_front"]=self["webpackChunkagile_portal_front"]||[]).push([[713],{74713:(t,e,s)=>{s.r(e),s.d(e,{default:()=>c});var r=function(){var t=this,e=t._self._c;return e("div",{staticClass:"find-password container"},[e("h3",{staticClass:"title"},[t._v(" 修改密码"),"0"==t.firstFlag?e("span",{staticStyle:{"text-align":"center",padding:"10px",color:"red"}},[t._v("(初次登陆需修改初始密码)")]):t._e(),t.pwdRemainderDate<=15&&null!=t.pwdRemainderDate?e("span",{staticStyle:{"text-align":"center",padding:"10px",color:"red"}},[t._v("(密码失效修改密码)")]):t._e()]),e("el-card",{staticClass:"procees-contaner"},[e("el-steps",{attrs:{active:t.processActive,"align-center":""}},[e("el-step",{attrs:{title:"设置新密码",description:""}}),e("el-step",{attrs:{title:"完成",description:""}})],1),1==t.processActive?e("el-form",{ref:"form",attrs:{rules:t.rules,model:t.form,"label-width":"100px"}},[e("el-form-item",{attrs:{label:"原密码",prop:"oldPassword"}},[e("el-input",{attrs:{type:"password"},model:{value:t.form.oldPassword,callback:function(e){t.$set(t.form,"oldPassword",e)},expression:"form.oldPassword"}})],1),e("el-form-item",{attrs:{label:"新密码",prop:"password"}},[e("el-input",{attrs:{type:t.flagType,"auto-complete":"off",placeholder:""},on:{input:t.strengthColor},model:{value:t.form.password,callback:function(e){t.$set(t.form,"password",e)},expression:"form.password"}},[e("i",{staticClass:"el-input__icon el-icon-view",staticStyle:{cursor:"pointer"},attrs:{slot:"suffix"},on:{click:function(e){return t.getFlageye()}},slot:"suffix"})]),e("div",{staticClass:"divClass"},[e("span",{class:"1"==t.passwords?"weak":"2"==t.passwords?"medium":"3"==t.passwords?"strong":""}),e("span",{class:"2"==t.passwords?"medium":"3"==t.passwords?"strong":""}),e("span",{class:"3"==t.passwords?"strong":""})])],1),e("el-form-item",{attrs:{label:"确认密码",prop:"passwords"}},[e("el-input",{attrs:{type:"password"},model:{value:t.form.passwords,callback:function(e){t.$set(t.form,"passwords",e)},expression:"form.passwords"}})],1),e("el-form-item",{attrs:{label:""}},[e("el-button",{attrs:{type:"primary"},on:{click:t.handleAuthon}},[t._v(" 提交")])],1)],1):t._e(),2==t.processActive?e("el-form",{ref:"form",attrs:{model:t.form,"label-width":"0px"}},[e("el-form-item",{attrs:{label:""}},[e("div",{staticClass:"success-tips",staticStyle:{color:"#1ae51ad1","font-size":"24px","font-weight":"600","text-align":"center"}},[e("i",{staticClass:"icon el-icon-success"}),t._v(" 修改成功 ")]),e("div",{staticClass:"go-back",staticStyle:{"text-align":"center"}},[e("span",{staticStyle:{color:"red","font-size":"18px","font-weight":"bold"}},[t._v(t._s(t.remainingTime))]),t._v("秒后 "),e("span",[t._v("自动返回登录页")])]),e("div",{staticClass:"btn-back",staticStyle:{"text-align":"center"}},[e("el-button",{attrs:{type:"primary"},on:{click:t.logout}},[t._v("重新登录")])],1)])],1):t._e()],1)],1)},o=[],a=(s(47941),s(83710),s(32564),s(32900)),n=s(12223),i=s(41051);const l={name:"ResetPwd",data:function(){return{isShowMenu:!1,passwords:"1",flagType:"password",processActive:1,form:{oldPassword:"",password:"",passwords:""},firstFlag:"",pwdRemainderDate:"",remainingTime:5,keyiv:"",countDown:10,rules:{oldPassword:[{required:!0,message:"原密码不能为空",trigger:"blur"}],password:[{required:!0,message:"密码不能为空",trigger:"blur"},{pattern:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{8,16}$/,message:"密码须包含数字、大小写字母且长度在8-16之间",trigger:"blur"}],passwords:[{required:!0,message:"密码不能为空",trigger:"blur"},{pattern:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{8,16}$/,message:"密码须包含数字、大小写字母且长度在8-16之间",trigger:"blur"}]}}},created:function(){var t=localStorage.getItem("myData");if(t){var e=JSON.parse(t);this.firstFlag=e.firstFlag,this.pwdRemainderDate=e.pwdRemainderDate}this.getKeyiv()},methods:{getFlageye:function(){this.flagType="password"==this.flagType?"text":"password"},strengthColor:function(){this.form.password.length<=6?this.passwords="1":this.form.password.length<=10?this.passwords="2":this.passwords="3"},getKeyiv:function(){var t=this;(0,n.Z6)().then((function(e){t.keyiv=e.data}))},logout:function(){var t=this;this.$store.dispatch("LogOut").then((function(){t.$router.push("/login")}))},handleAuthon:function(){var t=this;this.form.password==this.form.passwords?this.$refs["form"].validate((function(e){e&&(t.form.passwords="",t.form.oldPassword=(0,i.H)(t.keyiv,t.form.oldPassword+","+(new Date).getTime()),t.form.password=(0,i.H)(t.keyiv,t.form.password+","+(new Date).getTime()),(0,a.Cp)(t.form).then((function(e){200==e.code?(t.processActive++,t.countdownInterval=setInterval((function(){console.log("倒计时结束"),t.remainingTime>0?t.remainingTime--:clearInterval(t.countdownInterval),t.$store.dispatch("LogOut").then((function(){t.$router.push("/login")}))}),1e3)):(t.form.oldPassword="",t.form.password="",t.strengthColor())})))})):this.$message({type:"warning",message:"新密码与确认密码不一致!"})}},beforeDestroy:function(){clearTimeout(this.countdownInterval)}},d=l;var u=s(1001),p=(0,u.Z)(d,r,o,!1,null,"d37bfed6",null);const c=p.exports},32900:(t,e,s)=>{s.d(e,{Cp:()=>P,F7:()=>x,Hc:()=>v,Ht:()=>l,JE:()=>w,W1:()=>m,WG:()=>n,_I:()=>Z,aX:()=>o,bL:()=>C,c0:()=>k,cT:()=>b,d5:()=>a,e_:()=>g,en:()=>d,fR:()=>i,in:()=>_,jr:()=>y,oK:()=>f,qS:()=>p,rK:()=>h,uN:()=>c,ur:()=>u});var r=s(73821);function o(t){return(0,r.Z)({url:"/myApply/laboratoryList",method:"get",params:t})}function a(t){return(0,r.Z)({url:"/myApply/laboratoryDetail?reviewId="+t,method:"get"})}function n(t){return(0,r.Z)({url:"/myApply/exportList",method:"get",params:t})}function i(t){return(0,r.Z)({url:"/myApply/download",method:"get",params:t})}function l(t){return(0,r.Z)({url:"/myLab/list",method:"get",params:t})}function d(t){return(0,r.Z)({url:"/myLab/info?applyId="+t,method:"get"})}function u(t){return(0,r.Z)({url:"/myLab/restart",method:"post",data:t})}function p(t){return(0,r.Z)({url:"/myLab/dataInjection",method:"post",data:t})}function c(t){return(0,r.Z)({url:"/myLab/fileList?applyId="+t,method:"get"})}function m(t){return(0,r.Z)({url:"/myLab/applyDown",method:"post",data:t})}function f(t){return(0,r.Z)({url:"/api/userApiList",method:"get",params:t})}function g(t){return(0,r.Z)({url:"/api/userApiStatisticsList",method:"get",params:t})}function h(t){return(0,r.Z)({url:"/myMessage/page",method:"get",params:t})}function w(t){return(0,r.Z)({url:"/myMessage/detail?msgId="+t,method:"post"})}function y(t){return(0,r.Z)({url:"myMessage/markRead",method:"post",data:t})}function v(t){return(0,r.Z)({url:"/myResources/list",method:"get",params:t})}function b(t){return(0,r.Z)({url:"/myResources/uploadFile",method:"post",data:t,headers:{"Content-Type":"multipart/form-data"}})}function Z(t){return(0,r.Z)({url:"/myResources/delete?fileId="+t,method:"delete"})}function _(t){return(0,r.Z)({url:"/rePwd/getPhoneByUser?username="+t,method:"get"})}function C(){return(0,r.Z)({url:"/rePwd/sendPhoneCode",method:"get"})}function x(t){return(0,r.Z)({url:"/rePwd/verifyPhoneCode?phoneCode="+t,method:"get"})}function k(t){return(0,r.Z)({url:"/rePwd/reset",method:"post",data:t})}function P(t){return(0,r.Z)({url:"/changePassword",method:"post",data:t})}}}]); \ No newline at end of file diff --git a/agile-portal/agile-portal-ui/dist/static/js/9.4a0c2397.js b/agile-portal/agile-portal-ui/dist/static/js/9.4a0c2397.js new file mode 100644 index 00000000..9be1dbb1 --- /dev/null +++ b/agile-portal/agile-portal-ui/dist/static/js/9.4a0c2397.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkagile_portal_front"]=self["webpackChunkagile_portal_front"]||[]).push([[9],{89009:(t,a,s)=>{s.r(a),s.d(a,{default:()=>u});var i=function(){var t=this,a=t._self._c;return a("div",{staticClass:"api-list-container container"},[t._m(0),a("div",{staticClass:"inner-container"},[a("el-row",{attrs:{gutter:20}},[a("el-col",{attrs:{span:4,xs:24}},[a("div",{staticClass:"routerList"},[a("h2",[t._v("数据服务")]),a("ul",[a("li",[a("router-link",{attrs:{to:"/service/introduce"}},[t._v("服务介绍")])],1),a("li",[a("router-link",{attrs:{to:"/service/guide"}},[t._v("服务指南")])],1),a("li",{staticClass:"on"},[a("router-link",{attrs:{to:"/service/api"}},[t._v("API列表")])],1)])])]),a("el-col",{attrs:{span:20,xs:24}},[a("div",{staticClass:"api-list",staticStyle:{overflow:"auto"}},[a("ul",{staticClass:"list"},t._l(t.apiList,(function(s){return a("li",{key:s.id},[a("div",{staticClass:"api-name"},[t._v(t._s(s.apiName))]),a("div",{staticClass:"aip-intro"},[t._v(" "+t._s(s.remark)+" ")]),a("div",{staticClass:"api-info"},[a("div",{staticClass:"data-from"},[t._v("数据提供方:上海公共交通卡有限公司")]),a("div",{staticClass:"others"},[a("span",[t._v("更新时间:"+t._s(s.createTime))])])])])})),0),a("pagination",{directives:[{name:"show",rawName:"v-show",value:t.total>0,expression:"total > 0"}],attrs:{total:t.total,page:t.queryParams.pageNum,limit:t.queryParams.pageSize},on:{"update:page":function(a){return t.$set(t.queryParams,"pageNum",a)},"update:limit":function(a){return t.$set(t.queryParams,"pageSize",a)},pagination:t.getList}})],1)])],1)],1)])},e=[function(){var t=this,a=t._self._c;return a("div",{staticClass:"top-banner guide-pic"},[a("div",{staticClass:"slogan"},[a("h3",{staticClass:"title"},[t._v("API列表 ")]),a("div",{staticClass:"summary"},[t._v("旨在优化数据对外服务方式,提高开发效率,为用户提供规范化数据服务")])])])}],r=s(47121);const n={name:"ApiList",data:function(){return{total:0,apiList:[],queryParams:{pageNum:1,pageSize:9}}},computed:{},mounted:function(){this.backToTop(),this.$parent.$parent.$parent.$refs.topnav.topbg=""},created:function(){this.getList()},methods:{backToTop:function(){window.scrollTo({top:0,behavior:"smooth"})},getList:function(){var t=this;(0,r.ZF)(this.queryParams).then((function(a){t.apiList=a.rows,t.total=a.total}))}}},o=n;var l=s(1001),c=(0,l.Z)(o,i,e,!1,null,"d9b82c00",null);const u=c.exports}}]); \ No newline at end of file diff --git a/agile-portal/agile-portal-ui/dist/static/js/app.ad9f929b.js b/agile-portal/agile-portal-ui/dist/static/js/app.ad9f929b.js new file mode 100644 index 00000000..46dcefe5 --- /dev/null +++ b/agile-portal/agile-portal-ui/dist/static/js/app.ad9f929b.js @@ -0,0 +1 @@ +(()=>{"use strict";var t={47121:(t,e,n)=>{n.d(e,{Ci:()=>o,Cm:()=>s,R1:()=>r,Yz:()=>a,ZF:()=>c,fu:()=>l,iA:()=>u});var i=n(73821);function o(t){return(0,i.Z)({url:"/content/banner",method:"get"})}function r(t){return(0,i.Z)({url:"/content/scenesList",method:"get"})}function a(t){return(0,i.Z)({url:"/content/list",method:"get"})}function s(t){return(0,i.Z)({url:"/content/contentInfo?contentId="+t,method:"get"})}function c(t){return(0,i.Z)({url:"/api/list",method:"get",params:t})}function u(){return(0,i.Z)({url:"/content/dataProduct",method:"get"})}function l(){return(0,i.Z)({url:"/content/sdkDownload",method:"get",responseType:"blob"})}},12223:(t,e,n)=>{n.d(e,{A9:()=>o,C5:()=>s,Z6:()=>u,bL:()=>a,kS:()=>c,x4:()=>r});var i=n(73821);function o(t){return(0,i.Z)({url:"/verifyUser",method:"post",data:t})}function r(t){return(0,i.Z)({url:"/login",method:"post",data:t})}function a(t){return(0,i.Z)({url:"/sendPhoneCode",method:"get"})}function s(){return(0,i.Z)({url:"/getInfo",method:"get"})}function c(){return(0,i.Z)({url:"/logout",method:"post"})}function u(){return(0,i.Z)({url:"/getPublicKey",method:"get"})}},33300:(t,e,n)=>{n(66992),n(88674),n(19601),n(17727);var i=n(36369),o=function(){var t=this,e=t._self._c;return e("div",{attrs:{id:"app"}},[e("router-view")],1)},r=[],a=n(1001),s={},c=(0,a.Z)(s,o,r,!1,null,null,null);const u=c.exports;var l=n(92268),d=n(9983),p=n(50680),f=n(8499),h=n.n(f),m=n(50124),v=n(48534),g=(n(82772),n(68309),n(40530)),b=n.n(g),y=n(73821);b().configure({showSpinner:!1});var A=["Index","productsList","ProductsDetail","DataServiceGuide","ApiList","DataLaboratory","SuccessCase","Login","ResetPwd","FindPwd","NewsCenter","NewsDetail","introduce","AccountIssues","LegalNotice","privacyStatement","CompanyProfile"];l.Z.beforeEach(function(){var t=(0,v.Z)((0,m.Z)().mark((function t(e,n,i){var o;return(0,m.Z)().wrap((function(t){while(1)switch(t.prev=t.next){case 0:b().start(),o=localStorage.getItem("myData"),o?(y.h.show=!0,d.Z.dispatch("GetInfo").then((function(){y.h.show=!1,i(),b().done()}))["catch"]((function(t){d.Z.dispatch("LogOut").then((function(){-1===A.indexOf(e.name)?(f.Message.error(t),i({path:"/login"})):i()}))}))):-1===A.indexOf(e.name)?(y.h.show=!0,d.Z.dispatch("GetInfo").then((function(){y.h.show=!1,i(),b().done()}))["catch"]((function(t){d.Z.dispatch("LogOut").then((function(){f.Message.error(t),i({path:"/login"})}))}))):(i(),b().done());case 3:case"end":return t.stop()}}),t)})));return function(e,n,i){return t.apply(this,arguments)}}()),l.Z.afterEach((function(){b().done()}));var w=n(3336);n(69826),n(41539),n(74916),n(77601),n(91058),n(15306),n(24603),n(28450),n(88386),n(39714),n(83710);function C(t){this.$refs[t]&&this.$refs[t].resetFields()}function k(t,e){var n=e,i=n.find((function(e){return e.value==t}));return i?i.label:null}function S(t,e){if(0===arguments.length||!t)return null;var n,i=e||"{y}-{m}-{d} {h}:{i}:{s}";"object"===(0,w.Z)(t)?n=t:("string"===typeof t&&/^[0-9]+$/.test(t)?t=parseInt(t):"string"===typeof t&&(t=t.replace(new RegExp(/-/gm),"/").replace("T"," ").replace(new RegExp(/\.[\d]{3}/gm),"")),"number"===typeof t&&10===t.toString().length&&(t*=1e3),n=new Date(t));var o={y:n.getFullYear(),m:n.getMonth()+1,d:n.getDate(),h:n.getHours(),i:n.getMinutes(),s:n.getSeconds(),a:n.getDay()},r=i.replace(/{(y|m|d|h|i|s|a)+}/g,(function(t,e){var n=o[e];return"a"===e?["日","一","二","三","四","五","六"][n]:(t.length>0&&n<10&&(n="0"+n),n||0)}));return r}var N=function(){var t=this,e=t._self._c;return e("div",{staticClass:"pagination-container",class:{hidden:t.hidden}},[e("el-pagination",t._b({attrs:{background:t.background,"current-page":t.currentPage,"page-size":t.pageSize,layout:t.layout,total:t.total},on:{"update:currentPage":function(e){t.currentPage=e},"update:current-page":function(e){t.currentPage=e},"update:pageSize":function(e){t.pageSize=e},"update:page-size":function(e){t.pageSize=e},"size-change":t.handleSizeChange,"current-change":t.handleCurrentChange}},"el-pagination",t.$attrs,!1))],1)},P=[];n(9653),n(32564);Math.easeInOutQuad=function(t,e,n,i){return t/=i/2,t<1?n/2*t*t+e:(t--,-n/2*(t*(t-2)-1)+e)};var T=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}();function Z(t){document.documentElement.scrollTop=t,document.body.parentNode.scrollTop=t,document.body.scrollTop=t}function I(){return document.documentElement.scrollTop||document.body.parentNode.scrollTop||document.body.scrollTop}function x(t,e,n){var i=I(),o=t-i,r=20,a=0;e="undefined"===typeof e?500:e;var s=function t(){a+=r;var s=Math.easeInOutQuad(a,i,o,e);Z(s),athis.total&&(this.currentPage=1),this.$emit("pagination",{page:this.currentPage,limit:t}),this.autoScroll&&x(0,800)},handleCurrentChange:function(t){this.$emit("pagination",{page:t,limit:this.pageSize}),this.autoScroll&&x(0,800)}}},_=E;var L=(0,a.Z)(_,N,P,!1,null,"368c4af0",null);const O=L.exports;i["default"].use(h(),{size:p.Z.get("size")||"medium"}),i["default"].component("Pagination",O),i["default"].prototype.resetForm=C,i["default"].prototype.parseTime=S,i["default"].prototype.arrList=k,i["default"].config.productionTip=!1,new i["default"]({router:l.Z,store:d.Z,render:function(t){return t(u)}}).$mount("#app")},92268:(t,e,n)=>{n.d(e,{Z:()=>Nt,_:()=>wt});n(41539),n(78783),n(33948);var i=n(36369),o=n(72631),r=function(){var t=this,e=t._self._c;return e("router-view")},a=[],s=n(1001),c={},u=(0,s.Z)(c,r,a,!1,null,null,null);const l=u.exports;var d=function(){var t=this,e=t._self._c;return e("div",{attrs:{id:"home"}},[e("div",{staticClass:"home-banner"},[e("div",{staticClass:"swiper"},[e("div",{staticClass:"swiper-wrapper"},[e("el-carousel",{attrs:{arrow:"never"}},t._l(t.listBanner,(function(n){return e("el-carousel-item",{key:n.index,staticClass:"swiper-slide"},[e("img",{attrs:{src:n.imgUrl,alt:""}}),e("div",{staticClass:"slogan"},[e("div",{staticClass:"wrapper"},[e("h3",{staticClass:"title"},[t._v(t._s(n.contentTitle))]),e("div",{staticClass:"text"},[t._v(t._s(n.subtitle))])])])])})),1)],1)]),e("news-swiper",{attrs:{"list-news":t.listNews}})],1),e("div",{staticClass:"home-content"},[e("h2",{staticClass:"title"},[t._v("久事大数据开放平台为您提供")]),e("div",{staticClass:"products-intr"},[e("ul",[e("li",[e("router-link",{attrs:{to:"/products/productsList"}},[e("img",{attrs:{src:n(96621),alt:""}}),e("div",{staticClass:"text"},[e("h3",[t._v("数据产品")]),e("div",{staticClass:"summary"},[t._v("已形成“久事客流宝”“久事乘车宝”等系列产品,并上海数据交易所成功挂牌,地面公交刷卡(码)客流、到站预报等数据可直接进行交易。")])])])],1),e("li",[e("router-link",{attrs:{to:"/service/guide"}},[e("img",{attrs:{src:n(99242),alt:""}}),e("div",{staticClass:"text"},[e("h3",[t._v("数据服务")]),e("div",{staticClass:"summary"},[t._v("提供数据分析、指标加工、报告撰写等服务。"),e("br"),t._v("提供API接口列表及接入指引。")])])])],1),e("li",[e("router-link",{attrs:{to:"/laboratory"}},[e("img",{attrs:{src:n(1831),alt:""}}),e("div",{staticClass:"text"},[e("h3",[t._v("数据实验室")]),e("div",{staticClass:"summary"},[t._v(" 为有交通卡细颗粒度数据(如交易数据)使用需求的用户,提供一个安全、独立、便捷的环境,用户可以在该环境中进行数据分析、数据建模,并导出分析成果数据,进而解决明细数据不能出去但可以使用的问题。")])])])],1)])])]),e("div",{staticClass:"case-content"},[e("h2",{staticClass:"title"},[t._v("应用场景")]),e("div",{staticClass:"case-list"},[e("div",{staticClass:"tab-title"},[e("ul",t._l(t.sceneTitle,(function(n,i){return e("li",{key:i,class:{active:t.isActive===i},on:{click:function(e){return t.showScene(i)}}},[t._v(t._s(n)+" ")])})),0)]),e("div",{staticClass:"content-detail"},t._l(t.sceneContent,(function(n,i){return e("dl",{key:i,class:{active:t.isActive===i}},[e("dt",[t._v(t._s(n.contentTitle))]),e("dd",{staticStyle:{"text-align":"justify"}},[t._v(t._s(n.contentText))])])})),0)])])])},p=[],f=(n(47042),n(47121)),h=function(){var t=this,e=t._self._c;return e("div",{staticClass:"home-news"},[e("div",{staticClass:"wrapper"},[e("div",{staticClass:"news-title"},[t._v("最新动态")]),e("div",{staticClass:"news-item"},[e("el-carousel",{attrs:{height:"35px",direction:"vertical",autoplay:!0}},t._l(t.listNews,(function(n){return e("el-carousel-item",{key:n.contentId},[e("router-link",{staticClass:"news-link",attrs:{to:{name:"NewsDetail",params:{contentId:n.contentId}}}},[e("span",[t._v(t._s(n.contentTitle)+" ")]),e("b",[t._v(t._s(n.updateTime.slice(0,10)))])])],1)})),1)],1),e("div",{staticClass:"btn-more"},[e("router-link",{attrs:{to:"/news/list"}},[t._v("查看全部>")])],1)])])},m=[];const v={name:"news-swiper",props:{listNews:Array}},g=v;var b=(0,s.Z)(g,h,m,!1,null,"25d0dc89",null);const y=b.exports,A={name:"HomeView",data:function(){return{isActive:0,sceneTitle:["场景一","场景二","场景三"],sceneContent:[],listBanner:null,listNews:[]}},components:{NewsSwiper:y},created:function(){this.getBanner(),this.getNewsList(),this.getscenesList()},methods:{backToTop:function(){window.scrollTo({top:0,behavior:"smooth"})},getBanner:function(){var t=this;this.listBanner=null,(0,f.Ci)().then((function(e){t.listBanner=e.data}))},getNewsList:function(){var t=this;(0,f.Yz)().then((function(e){t.listNews=e.rows.slice(0,5)}))},getscenesList:function(){var t=this;(0,f.R1)().then((function(e){t.sceneContent=e.data.slice(0,3)}))},showScene:function(t){this.isActive=t},handleScroll:function(){window.pageYOffset>50?this.$parent.$parent.$refs.topnav.topbg="":this.$parent.$parent.$refs.topnav.topbg="1"}},mounted:function(){this.$parent.$parent.$refs.topnav.topbg="1",this.backToTop(),window.addEventListener("scroll",this.handleScroll)},beforeDestroy:function(){window.removeEventListener("scroll",this.handleScroll)}},w=A;var C=(0,s.Z)(w,d,p,!1,null,"1648f46c",null);const k=C.exports;var S=function(){var t=this,e=t._self._c;return e("div",[e("TopNav",{ref:"topnav"}),e("AppContainer"),e("Footer")],1)},N=[],P=function(){var t=this,e=t._self._c;return e("section",{staticClass:"app-container"},[e("transition",{attrs:{name:"fade-transform",mode:"out-in"}},[e("router-view",{key:t.key})],1)],1)},T=[];const Z={name:"AppContainer",computed:{key:function(){return this.$route.path}}},I=Z;var x=(0,s.Z)(I,P,T,!1,null,"77fe0ecc",null);const E=x.exports;var _=function(){var t=this,e=t._self._c;return e("div",{staticClass:"top-nav",class:"1"==t.topbg?"topbg":"",attrs:{id:"container"}},[e("div",{staticClass:"containers"},[e("div",{staticClass:"logo"},[e("router-link",{attrs:{to:"/"}},[e("img",{attrs:{src:n(55800),alt:"久事logo"}}),e("span",{staticClass:"title"},[t._v("久事大数据开放平台")])])],1),t.isShowMenu?e("div",{staticClass:"left-box"},[e("div",{staticClass:"router-list"},[e("div",{on:{click:function(e){return t.topNavbg("1")}}},[e("router-link",{attrs:{to:"/"}},[t._v("首页")])],1),e("div",{staticClass:"minNav",on:{click:function(e){return t.topNavbg("")}}},[e("router-link",{attrs:{to:"/products/productsList"}},[t._v("数据产品")]),e("ul",{staticClass:"navUl"},t._l(t.carouselItems,(function(n){return e("li",{key:n.index,on:{click:function(e){return t.topNavbg("")}}},[e("router-link",{attrs:{to:{name:"ProductsDetail",params:{contentId:n.contentId}}}},[t._v(t._s(n.contentTitle))])],1)})),0)],1),e("div",{staticClass:"minNav",on:{click:function(e){return t.topNavbg("")}}},[e("router-link",{attrs:{to:"/service/introduce"}},[t._v("数据服务")]),e("ul",{staticClass:"navUl"},[e("li",{on:{click:function(e){return t.topNavbg("")}}},[e("router-link",{attrs:{to:"/service/introduce"}},[t._v("服务介绍")])],1),e("li",{on:{click:function(e){return t.topNavbg("")}}},[e("router-link",{attrs:{to:"/service/guide"}},[t._v("服务指南")])],1),e("li",{on:{click:function(e){return t.topNavbg("")}}},[e("router-link",{attrs:{to:"/service/api"}},[t._v("API列表")])],1)])],1),e("div",{on:{click:function(e){return t.topNavbg("")}}},[e("router-link",{attrs:{to:"/laboratory"}},[t._v("数据实验室")])],1)]),t.nickName?[e("div",{staticClass:"userimg",on:{click:function(e){return t.topNavbg("")}}},[e("router-link",{attrs:{to:"/user/index"}},[e("span",{staticClass:"user-avatar"}),e("span",{staticClass:"user-name"},[t._v(t._s(t.nickName))])]),e("span",{staticClass:"outbtn",on:{click:t.logout}})],1)]:[e("div",{staticClass:"login-button"},[e("router-link",{attrs:{to:"/login"}},[t._v("登录")])],1)]],2):t._e()])])},L=[];n(47941);const O={props:{isShowMenu:{type:Boolean,default:!0}},data:function(){return{topbg:"",nickName:null,carouselItems:null,contentId:null}},created:function(){this.getBanner()},methods:{getBanner:function(){var t=this;this.carouselItems=null,(0,f.iA)().then((function(e){t.carouselItems=e.data.slice(0,5)}))},topNavbg:function(t){this.topbg=t},logout:function(){var t=this;this.$confirm("确定注销并退出系统吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((function(){t.$store.dispatch("LogOut").then((function(){location.href=location.href.split("#")[0]}))}))["catch"]((function(){}))}},mounted:function(){var t=localStorage.getItem("myData");if(t){var e=JSON.parse(t);this.nickName=e.nickName}var n=document.getElementById("home");this.topbg=null!=n&&void 0!=n?"1":""}},B=O;var M=(0,s.Z)(B,_,L,!1,null,"4c954c68",null);const R=M.exports;n(68309);var Q=function(){var t=this,e=t._self._c;return e("div",{staticClass:"footer"},[e("div",{staticClass:"wrapper"},[e("div",{staticClass:"left-box"},[t._m(0),e("div",{staticClass:"links"},[e("el-select",{staticStyle:{"padding-left":"50px"},attrs:{placeholder:"友情链接"},on:{change:t.goToLink},model:{value:t.selectedLink,callback:function(e){t.selectedLink=e},expression:"selectedLink"}},t._l(t.links,(function(t){return e("el-option",{key:t.url,attrs:{label:t.name,value:t.url}})})),1)],1)]),e("div",{staticClass:"right-info"},[e("dl",[e("dt",[t._v("服务与支持")]),e("dd",[e("router-link",{attrs:{to:"/products/productsList"}},[t._v("数据产品")])],1),e("dd",[e("router-link",{attrs:{to:"/service/api"}},[t._v("数据服务")])],1),e("dd",[e("router-link",{attrs:{to:"/laboratory"}},[t._v("数据实验室")])],1)]),e("dl",[e("dt",[t._v("常见问题")]),e("dd",[e("router-link",{attrs:{to:"/AccountIssues"}},[t._v("账户问题")])],1)]),e("dl",[e("dt",[t._v("关于我们")]),e("dd",[e("router-link",{attrs:{to:"/CompanyProfile"}},[t._v("公司简介")])],1),e("dd",[t._v("电话(021-60825678)")]),e("dd",[t._v("地址: 上海市长顺路11号荣广大厦10F")])])])]),t._m(1)])},j=[function(){var t=this,e=t._self._c;return e("div",{staticClass:"logo-link"},[e("img",{attrs:{src:n(55800),alt:"久事logo"}}),e("span",{staticClass:"title"},[t._v("久事大数据开放平台")])])},function(){var t=this,e=t._self._c;return e("div",{staticClass:"copyrights"},[t._v(" © 2023 chinadata.com All Rights Reserved 上海久事(集团)有限公司版权所有 "),e("span",[t._v(" 沪ICP备13037966号-13")])])}];const D={name:"Footer",data:function(){return{selectedLink:"",links:[{name:"久事集团",url:"https://www.jiushi.com.cn"},{name:"交通卡",url:"https://www.sptcc.com"}]}},methods:{goToLink:function(){this.selectedLink&&window.open(this.selectedLink,"_blank")}}},z=D;var F=(0,s.Z)(z,Q,j,!1,null,"0e7a067b",null);const U=F.exports,K={name:"Layout",components:{TopNav:R,Footer:U,AppContainer:E},data:function(){return{showButton:!1}},methods:{backToTop:function(){window.scrollTo({top:0,behavior:"smooth"})},handleScroll:function(){window.pageYOffset>200?this.showButton=!0:this.showButton=!1}},mounted:function(){window.addEventListener("scroll",this.handleScroll)},beforeDestroy:function(){window.removeEventListener("scroll",this.handleScroll)}},H=K;var J=(0,s.Z)(H,S,N,!1,null,"4d4e77b4",null);const V=J.exports;var G=function(){return n.e(443).then(n.bind(n,443))},W=function(){return n.e(292).then(n.bind(n,2292))},q=function(){return n.e(500).then(n.bind(n,23500))},Y=function(){return n.e(850).then(n.bind(n,94850))},X=function(){return n.e(376).then(n.bind(n,76376))},$=function(){return n.e(107).then(n.bind(n,8107))},tt=function(){return n.e(9).then(n.bind(n,89009))},et=function(){return Promise.all([n.e(51),n.e(430)]).then(n.bind(n,54430))},nt=function(){return n.e(392).then(n.bind(n,34392))},it=function(){return n.e(59).then(n.bind(n,52059))},ot=function(){return n.e(552).then(n.bind(n,51552))},rt=function(){return n.e(425).then(n.bind(n,97425))},at=function(){return n.e(607).then(n.bind(n,75607))},st=function(){return n.e(519).then(n.bind(n,95519))},ct=function(){return n.e(441).then(n.bind(n,46441))},ut=function(){return n.e(649).then(n.bind(n,39649))},lt=function(){return n.e(494).then(n.bind(n,58494))},dt=function(){return n.e(686).then(n.bind(n,15686))},pt=function(){return n.e(573).then(n.bind(n,36573))},ft=function(){return n.e(646).then(n.bind(n,82646))},ht=function(){return n.e(64).then(n.bind(n,51064))},mt=function(){return n.e(982).then(n.bind(n,62982))},vt=function(){return n.e(455).then(n.bind(n,42455))},gt=function(){return n.e(276).then(n.bind(n,48276))},bt=function(){return Promise.all([n.e(51),n.e(713)]).then(n.bind(n,74713))},yt=function(){return Promise.all([n.e(51),n.e(541)]).then(n.bind(n,51541))},At=function(){return n.e(767).then(n.bind(n,37767))};i["default"].use(o.ZP);var wt=[{path:"index",component:ut,name:"UserInfo",hidden:!1,meta:{title:"个人信息"}},{path:"myapply",component:l,name:"myapply",hidden:!1,isOpen:!1,meta:{title:"我的申请"},children:[{path:"labapply",component:lt,name:"LabApply",hidden:!1,meta:{title:"数据注入申请"}},{path:"labdetail/:applyId",component:At,hidden:!0,name:"LabDetail",meta:{title:"实验室数据详情"}},{path:"myLabDetail/:applyId",component:ft,hidden:!0,name:"MyLabDetail",meta:{title:"实验室数据详情"}},{path:"dataapply",component:dt,name:"DataApply",hidden:!1,meta:{title:"数据导出申请"}}]},{path:"mylab",component:pt,name:"MyLab",hidden:!1,meta:{title:"我的实验室"}},{path:"myapp",component:l,name:"MyApp",hidden:!1,isOpen:!1,meta:{title:"我的应用"},children:[{path:"list",component:ht,name:"myAppList",hidden:!1,meta:{title:"API列表"}},{path:"apicall",component:mt,name:"ApiCall",hidden:!1,meta:{title:"接口调用统计"}}]},{path:"mydata",component:vt,name:"MyData",hidden:!1,meta:{title:"我的资源"}},{path:"mymsg",component:gt,name:"MyMsg",hidden:!1,meta:{title:"我的消息"}}],Ct=[{path:"",component:V,redirect:"/",children:[{path:"/",component:k,name:"Index",hidden:!1,meta:{title:"首页"}},{path:"products",component:l,name:"DataProducts",hidden:!1,meta:{title:"数据产品"},children:[{path:"productsList",component:G,name:"productsList",hidden:!1,meta:{title:"数据产品"}},{path:"detail/:contentId(\\d+)",component:W,name:"ProductsDetail",hidden:!1,meta:{title:"产品详情"}}]},{path:"news",component:l,redirect:"news/list",hidden:!0,meta:{title:"NewsCenter"},children:[{path:"list",component:nt,name:"NewsCenter",hidden:!1,meta:{title:"新闻中心"}},{path:"detail/:contentId(\\d+)",component:it,name:"NewsDetail",hidden:!1,meta:{title:"新闻详情"}}]},{path:"service",component:l,name:"DataService",hidden:!1,meta:{title:"数据服务"},children:[{path:"introduce",component:Y,name:"introduce",hidden:!1,meta:{title:"服务介绍"}},{path:"guide",component:q,name:"DataServiceGuide",hidden:!1,meta:{title:"接入指引"}},{path:"api",component:tt,name:"ApiList",hidden:!1,meta:{title:"API列表"}}]},{path:"laboratory",component:X,name:"DataLaboratory",meta:{title:"数据实验室"}},{path:"case",component:$,name:"SuccessCase",hidden:!1,meta:{title:"成功案例"}},{path:"user",component:ct,redirect:"user/index",name:"UserIndex",hidden:!1,meta:{title:"用户中心"},children:wt},{path:"/resetpwd",name:"ResetPwd",component:bt,hidden:!1,meta:{title:"修改密码"}},{path:"/findpwd",name:"FindPwd",hidden:!1,component:yt,meta:{title:"忘记密码"}},{path:"AccountIssues",component:ot,name:"AccountIssues",hidden:!1,meta:{title:"账户问题"}},{path:"LegalNotice",component:rt,name:"LegalNotice",hidden:!1,meta:{title:"法律声明"}},{path:"privacyStatement",component:at,name:"privacyStatement",hidden:!1,meta:{title:"隐私声明"}},{path:"CompanyProfile",component:st,name:"CompanyProfile",hidden:!1,meta:{title:"公司简介"}}]},{path:"/login",name:"Login",hidden:!0,component:et}],kt=o.ZP.prototype.push;o.ZP.prototype.push=function(t){return kt.call(this,t)["catch"]((function(t){return t}))};var St=new o.ZP({routes:Ct});const Nt=St},9983:(t,e,n)=>{n.d(e,{Z:()=>y});var i=n(36369),o=n(63822),r=n(95082),a=(n(41539),n(38862),n(12223));n(50680);var s={state:{userName:"",avatar:"",topbg:localStorage.getItem("topBg"),topNav:!1},mutations:{UPDATE_STATE:function(t,e){var n=(0,r.Z)((0,r.Z)({},t),e);for(var i in n)t[i]=n[i]},SET_ROLES:function(t,e){t.roles=e}},actions:{GetInfo:function(t){var e=t.commit;t.state;return new Promise((function(t,n){(0,a.C5)().then((function(n){var i=n.data;localStorage.setItem("myData",JSON.stringify(i)),e("UPDATE_STATE",i),t(n)}))["catch"]((function(t){n(t)}))}))},LogOut:function(t){t.commit,t.state;return new Promise((function(t,e){(0,a.kS)().then((function(){localStorage.setItem("myData",""),t()}))["catch"]((function(t){e(t)}))}))}}};const c=s;var u={state:{},mutations:{},actions:{}};const l=u;var d={isChildShow:!1},p={CHANGE_SETTING:function(t){t.isChildShow=!t.isChildShow},HIDE_SUB_MENU:function(t){t.isChildShow=!1}},f={changeSetting:function(t){var e=t.commit;e("CHANGE_SETTING")},hideSubMenu:function(t){var e=t.commit;e("HIDE_SUB_MENU")}};const h={namespaced:!0,state:d,mutations:p,actions:f};var m=n(82482),v=(0,m.Z)({showChild:function(t){return t.settings.showChild},avatar:function(t){return t.user.avatar},userName:function(t){return t.user.userName},status:function(t){return t.user.status},phonenumber:function(t){return t.user.phonenumber},roles:function(t){return t.user.roles},nickName:function(t){return t.user.nickName},industryCategory:function(t){return t.user.industryCategory},enterpriseName:function(t){return t.user.enterpriseName},socialCreditCode:function(t){return t.user.socialCreditCode},enterpriseAddress:function(t){return t.user.enterpriseAddress}},"industryCategory",(function(t){return t.user.industryCategory}));const g=v;i["default"].use(o.ZP);var b=new o.ZP.Store({modules:{user:c,permission:l,settings:h},getters:g});const y=b},73821:(t,e,n)=>{n.d(e,{Z:()=>u,h:()=>s});n(41539),n(26699),n(32023),n(83650);var i=n(15742),o=n(8499),r=n(9983);const a={401:"认证失败,无法访问系统资源",403:"当前操作没有权限",404:"访问资源不存在",default:"系统未知错误,请反馈给管理员"};var s={show:!1};i.Z.defaults.headers["Content-Type"]="application/json;charset=utf-8";var c=i.Z.create({baseURL:"/public",timeout:2e4,withCredentials:!0});c.interceptors.request.use((function(t){return t}),(function(t){Promise.reject(t)})),c.interceptors.response.use((function(t){var e=t.headers["content-disposition"];void 0!=e&&(r.Z.filename=e);var n=t.data.code||200,i=a[n]||t.data.msg||a["default"];return 401===n?(s.show||(s.show=!0,o.MessageBox.confirm("登录状态已过期,您可以继续留在该页面,或者重新登录","系统提示",{confirmButtonText:"重新登录",cancelButtonText:"取消",type:"warning"}).then((function(){s.show=!1,r.Z.dispatch("LogOut").then((function(){location.href=location.href.split("#")[0]}))}))["catch"]((function(){s.show=!1}))),Promise.reject("无效的会话,或者会话已过期,请重新登录。")):500===n?((0,o.Message)({message:i,type:"error"}),t.data):200!==n?(o.Notification.error({title:i}),Promise.reject("error")):t.data}),(function(t){var e=t.message;if("Network Error"==e)e="后端接口连接异常";else if(e.includes("timeout"))e="系统接口请求超时";else if(e.includes("Request failed with status code")){if(e="系统接口"+e.substr(e.length-3)+"异常",403===t.response.status)return s.show=!0,o.MessageBox.confirm("登录状态已过期,您可以继续留在该页面,或者重新登录","系统提示",{confirmButtonText:"重新登录",cancelButtonText:"取消",type:"warning"}).then((function(){s.show=!1,r.Z.dispatch("LogOut").then((function(){location.href=location.href.split("#")[0]}))}))["catch"]((function(){s.show=!1})),Promise.reject("无效的会话,或者会话已过期,请重新登录。");301===t.response.status&&(e="没有权限,请联系管理员授权")}return(0,o.Message)({message:e,type:"error",duration:5e3}),Promise.reject(t)}));const u=c},96621:(t,e,n)=>{t.exports=n.p+"static/img/index-product-pic1.062b43d1.jpg"},99242:(t,e,n)=>{t.exports=n.p+"static/img/index-product-pic2.deb683c3.jpg"},1831:(t,e,n)=>{t.exports=n.p+"static/img/index-product-pic3.520aae04.jpg"},55800:t=>{t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFIAAABICAYAAABlYaJmAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAUqADAAQAAAABAAAASAAAAAC1TADLAAAKnElEQVR4Ae1cDYwbRxWe2fVfnCbYPl8usX30RBOSpqWNCFQKhRCkpBSElJK2FIRQQJUoUNFUjS6NmtJemqaQtEB7rVSooBI/QkCEQEhQJEoboOJXUAoU0iTAVWf7Lsnd2cnd+fyzu8M3vnNiOzO+3fXYvou6upN337z35r3Pb3bfzJs1IW8cShCgSrQoVpIJ9YWmJ89tI5StKatm9IQWDLwYm0yPKe5KmboFBeSZaHRZIWsdYIzdQQgL1HpJ87j+pt6zZE8snc7VtnX+asEAyfr6Aqnk2ecB4vUNYaH0nwGf/v7u3Fi6IV+bG7U29yfsjg0MaMlk9nvzgsilGbu6UDR/yLZs8QiVdYi4ICJy2BvaRSzyuCMMKN3ba2QOOZJpIXPHgUwvi0XNXO4EfAw58ZMSOun362sxxEecyLWKt+ND28rNHHQKIgeDEbasUDC/1CpgnOrtaEQmvd0biFX6CyPE1RcK4xnT9E29pfE/OnVcNb8rB1QZwZgx6BZEbgNkKWHmIB5SHQ0IbkvHgEz5wh9FPL2HG9HUwch1KV90Z1M6FAh35JtMx2JB69TMMdznehX4ABV0NBDW39o9NjapRp9zLR2JSOt0fq86ELnTbGUxa97n3H11Em0HciSwsg/3tH51Lsxqwl1ySLVOJ/raDqRp5B9DBNXNo52YLOCl9NX4TVu/IWhpG6mt98ikJ/o+PKlfUO2dTrUPxIyJX6jW60Rf2yKS3Xqrzoj5hBPj7PBSSn7ZaRC5nW2LyJQ3fKdlsafsgGOXB8ZbHp1uWFnM/MOuTKv42hKRZ5cnIgDxIdVOICF/diGAyP1qC5CT09MH0FdEJZBYtJjyB7xfkOlM+7qulLW1gt5yIEd94bfhKY0Vb8UHZYdXTJ8ZFWkdj0SWW6b5YtobfYeovRW0lgNpWIzPp3WVxiMak9qK4JdlOnPn2D702WO1cR7eUiCTeuQWxsgWmcOu6RrbJ6vbpAOhyzGH38V1I/HflPRHPu66HweCLQOSJRJL4AqSb7UH0p2/xouZ78i0WiXK1yj959tNcmi0p2fp+esWnbQMyPToVD/m05ertpsRz25KKUbuxceIt+s6fHm31bawmDFe3FdLU3/VkjwytSTSy4qMr+4EVZoMAH+aMDLbZTqTnvBLkgJawef1r+/Jn/qvTLZZeksiEiA+qhxEQgyi69LFjmE9crMERI6Rv2gUv9IsWI3klQOZ9oQ2A8S64dXIBHttjNCnE4Wx4yJudtVVPkxyGlcUGdue8kS2ieRV0JQCyevTFiHK59NwNEuDwf0yh1PHR+5E2xWy9grdIuzxVtXDld4jk97wHcxiX6sYrupTo1p/3JgQZgB8+nlueuok+grb6k8jd/eWssq/bGURyTc+EYs9bMsZZ0z/i/VFnpSJTOam+DTRHohciUUGeC1dps8tXRmQualz+5GTKDeQEu1eevJkQeTgaX/3aiT8fFg7OUJztXQnMvPyKhnaI77IetO0XgGQSvfjIN35PdKdd8m8SHpCPwKQO2TtMjqctojm3ZgonfmbjMcpXUlEmpb1hGoQy45Qeo/MobQn/G43IHJ9sFXjNXWZbjf0poFM6103waGtbjpvJIOFiR8kShN/EPEgX6QmYc3lhaipl2vrog5c0JoCkq1e7TeJKV2FcWFPRaSge/17Kxf1nyP+yMcQVu+spzu9ZiY5zGvsTuVE/E0BmRoa3w2lbxEpbopG6eCq/OiQSAffkGqZ5BFRm1MaJg695un8vU7lRPyuHzZjS7ri+aL1GoxRurICg8aCy+nqSCZzVmTwsCe8F+tjXxS1uaPRvO5l62L57Ovu5GelXEfkTNE6pBpEbhLV6IAMRB6NAFFJBF0AjQUsgwiT/Qs885+5AhJzVqQkTPmCKdYaj8euv/brMrPp0FAeeeWn0V6U8bih42F5C6+5u5GtyDgGks+nGbGUpg7njdHofnr0qFG5Fn0mzIkjVNMURyV6YuZnRf3ZpTkGMn1w8FP4Bjfa7cAuH9/KvOq+Xd+3wx/fd9cgKvJ/tsNrlwfJv7M97HWKHT1sJsLhN6GwdBwJ7Yo6PU1fYli/nDCyb7erKOWN3G5ZlpL9PvgSjyTMzEfs9i3icxSRuUn2QCtAnDWMzogMlNF8Xu3nsjaH9KLX65PmrHZ12QYSBfd1GNKft6vYMR9ja53IRFHTxnBqeD+1ow8j4UkVJQjbQGI+/VUY5rVjnBseRHoXCvq2hzZZswar4k3vXZpYellIydKfLSCTevhDyN9udAOQExnLMvfY5U+9fvZKgN/cxgON7A9nh7KiPmfLF6IWMW1eINnGjV7shuX1kFKr/wHMZj5/F5taR2XmjjqKo0sM6ROJa654WiTEQUy9lnquPAEQMQhojp7aAvmOkMqOHksje3BfN9eJ/uGYOf4TkQNJT2Q3Y9ZjGiUPxo3sQyKeetqiBDLlCfdbjB2ud8b2NaW/wXuM7xXxz9WA/oO2ENKiHPXRdfGZiWERbzVt3qFdzbwQzlP+6FpkD9LtfPPZiMhhOtX5qpXwmMrlHkRDiDci4oO8Ri9krCMuqoic28HxEhx8c50fti8RZd9F8v0JkcCwv3sNMUqvoq0mO9Ep3RwzMr8VyVRoiyIi+fy+vBJfZL9rBkRkS3nNR+T7gMwSv13UgMiBQj18kNtQAU30KYzItCdyA5bylZcPRAY0osFyE2WFHuyyuAEDLd6I104b5tOPoJgmBJLvEDEZ+bVMD5b3PpMoZeQrU/WC/Hcl8hkTW0PYyvq2xXyNiDntD3tWi16z4zUgbG74E26K0h2+kB9buiy0RpZ3XhSu+ax5/6UGYjkANPqACETeVt6M2gBEzoMcN8pr9/xcdNQAWb7ZMna3iHFR0yj9l+zNMJ50oyR50I5/yC0/x2v4It4aIKlp8BInn8NeWgcj/fTIEVPkFH7Z5R67DzBEpYfX8EV6MPRnDzxgbjSZ9Vzl+lL5xFTweaxzbhP5M3pZzwpjpngSQC4TtctoollROSL56214xPPVnUvqQJRYTKPS5BsgYr+SMxA5QLyWz9cgqsEqR2RKD23HvkbhvLOaeRGeP9trZm8X2T23X+nvGK6uVpCoRnYmStlvV3TPRiQlwky/wrQYPzGDmQ74PchAxIdp8e3Z7kAsa2T0tmrNs0AS6mh1ulrBQj3Hiw+Pyn4TKOXp2orc8YPN2I75/oZq+TKQSJIi1cTFf07TdEVQuNgwV05WsF+p9uX9WSApSy1+8C54oGn0fumbYQcHP4lovOYCt7szTDdrltbKQGqEvuBO3cKTgoOvxPbd9S2RZfwNMLzurKRGgwWQo9V9lIH0eHzPgMhLCZfAoe2mAwNIQi4+SuMlvKfDVl3c4oyCVMdA1NcsYJSB5OVIJK4HnKlbeNyIxp8ljPFfiSw7E4zGqKJfd2FUOxgrjv+7up/ZeyQo8VIGIU+fqm5cTOeIElPTNOmbYYWC8TCS72AzPqEP5Pd0T68xMVCv5zyQ+Dax6zKDDQD6zQST/HrGhX9Nn6mPkorNSW/oWpzvrFy7+cSIfVkj+o64kRFmAwBZfPCfMjBNth4/1hABk5RPLN2YikQYf2oPPRD4sezHjFEV3ISS8tWiHhv5xu3ULOsU1fXj+JKOieTfoClG4P8vOqxeKxyoDAAAAABJRU5ErkJggg=="}},e={};function n(i){var o=e[i];if(void 0!==o)return o.exports;var r=e[i]={id:i,loaded:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.loaded=!0,r.exports}n.m=t,(()=>{n.amdO={}})(),(()=>{var t=[];n.O=(e,i,o,r)=>{if(!i){var a=1/0;for(l=0;l=r)&&Object.keys(n.O).every((t=>n.O[t](i[c])))?i.splice(c--,1):(s=!1,r0&&t[l-1][2]>r;l--)t[l]=t[l-1];t[l]=[i,o,r]}})(),(()=>{n.n=t=>{var e=t&&t.__esModule?()=>t["default"]:()=>t;return n.d(e,{a:e}),e}})(),(()=>{n.d=(t,e)=>{for(var i in e)n.o(e,i)&&!n.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})}})(),(()=>{n.f={},n.e=t=>Promise.all(Object.keys(n.f).reduce(((e,i)=>(n.f[i](t,e),e)),[]))})(),(()=>{n.u=t=>"static/js/"+t+"."+{9:"4a0c2397",51:"93916629",59:"bfb9c9a4",64:"bc225023",107:"76ef883a",276:"f49954b7",292:"913b72dc",376:"ad767c79",392:"adae3178",425:"f45cd5ba",430:"c38b6b4f",441:"626eee61",443:"e3683be5",455:"10597f7b",494:"644475c4",500:"be136ce0",519:"c9a7dd0d",541:"61f341ef",552:"1fd42a6e",573:"addb276f",607:"0c076ed6",646:"b458ba65",649:"239f54d6",686:"6d7105e0",713:"67adc377",767:"f6686431",850:"7d4265c6",982:"7be8267b"}[t]+".js"})(),(()=>{n.miniCssF=t=>"static/css/"+t+"."+{9:"078f0fee",59:"1659749b",64:"53fbed00",107:"c36f949d",276:"09e19b31",292:"a6a69de4",376:"00dac405",392:"b8f9e429",425:"258c547c",430:"ec8b496e",441:"3db1a508",443:"7033f181",455:"53097460",494:"464dd9ea",500:"34bd6c07",519:"a6e3d139",541:"5c611f99",552:"bf0c7844",573:"69d588f0",607:"47400a44",646:"9a987327",649:"99cfe83b",686:"766559a5",713:"9ae160f8",767:"42f5de3c",850:"0adc7870",982:"bf01fcb8"}[t]+".css"})(),(()=>{n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"===typeof window)return window}}()})(),(()=>{n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e)})(),(()=>{var t={},e="agile-portal-front:";n.l=(i,o,r,a)=>{if(t[i])t[i].push(o);else{var s,c;if(void 0!==r)for(var u=document.getElementsByTagName("script"),l=0;l{s.onerror=s.onload=null,clearTimeout(f);var o=t[i];if(delete t[i],s.parentNode&&s.parentNode.removeChild(s),o&&o.forEach((t=>t(n))),e)return e(n)},f=setTimeout(p.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=p.bind(null,s.onerror),s.onload=p.bind(null,s.onload),c&&document.head.appendChild(s)}}})(),(()=>{n.r=t=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}})(),(()=>{n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t)})(),(()=>{n.p=""})(),(()=>{if("undefined"!==typeof document){var t=(t,e,n,i,o)=>{var r=document.createElement("link");r.rel="stylesheet",r.type="text/css";var a=n=>{if(r.onerror=r.onload=null,"load"===n.type)i();else{var a=n&&("load"===n.type?"missing":n.type),s=n&&n.target&&n.target.href||e,c=new Error("Loading CSS chunk "+t+" failed.\n("+s+")");c.code="CSS_CHUNK_LOAD_FAILED",c.type=a,c.request=s,r.parentNode&&r.parentNode.removeChild(r),o(c)}};return r.onerror=r.onload=a,r.href=e,n?n.parentNode.insertBefore(r,n.nextSibling):document.head.appendChild(r),r},e=(t,e)=>{for(var n=document.getElementsByTagName("link"),i=0;inew Promise(((o,r)=>{var a=n.miniCssF(i),s=n.p+a;if(e(a,s))return o();t(i,s,null,o,r)})),o={143:0};n.f.miniCss=(t,e)=>{var n={9:1,59:1,64:1,107:1,276:1,292:1,376:1,392:1,425:1,430:1,441:1,443:1,455:1,494:1,500:1,519:1,541:1,552:1,573:1,607:1,646:1,649:1,686:1,713:1,767:1,850:1,982:1};o[t]?e.push(o[t]):0!==o[t]&&n[t]&&e.push(o[t]=i(t).then((()=>{o[t]=0}),(e=>{throw delete o[t],e})))}}})(),(()=>{var t={143:0};n.f.j=(e,i)=>{var o=n.o(t,e)?t[e]:void 0;if(0!==o)if(o)i.push(o[2]);else{var r=new Promise(((n,i)=>o=t[e]=[n,i]));i.push(o[2]=r);var a=n.p+n.u(e),s=new Error,c=i=>{if(n.o(t,e)&&(o=t[e],0!==o&&(t[e]=void 0),o)){var r=i&&("load"===i.type?"missing":i.type),a=i&&i.target&&i.target.src;s.message="Loading chunk "+e+" failed.\n("+r+": "+a+")",s.name="ChunkLoadError",s.type=r,s.request=a,o[1](s)}};n.l(a,c,"chunk-"+e,e)}},n.O.j=e=>0===t[e];var e=(e,i)=>{var o,r,[a,s,c]=i,u=0;if(a.some((e=>0!==t[e]))){for(o in s)n.o(s,o)&&(n.m[o]=s[o]);if(c)var l=c(n)}for(e&&e(i);un(33300)));i=n.O(i)})(); \ No newline at end of file diff --git a/carbon-dataprocess/bloomfilter/BC_TRAVEL_AUTH.zip.bak b/carbon-dataprocess/bloomfilter/BC_TRAVEL_AUTH.zip.bak new file mode 100644 index 00000000..e69de29b diff --git a/carbon-dataprocess/carbon-dataprocess-api/pom.xml b/carbon-dataprocess/carbon-dataprocess-api/pom.xml new file mode 100644 index 00000000..ebe4c152 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/pom.xml @@ -0,0 +1,35 @@ + + 4.0.0 + + com.jiuyv.sptcc + carbon-dataprocess + 0.0.1-SNAPSHOT + + + carbon-dataprocess-api + jar + + carbon-dataprocess-api + http://maven.apache.org + + + UTF-8 + + false + + + + + + org.springframework.boot + spring-boot-starter-web + + + io.github.openfeign + feign-core + 10.10.1 + compile + + + diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/api/IDataProcessBatchConsoleApi.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/api/IDataProcessBatchConsoleApi.java new file mode 100644 index 00000000..95851363 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/api/IDataProcessBatchConsoleApi.java @@ -0,0 +1,43 @@ +package com.jiuyv.sptcc.carbon.dataprocess.api; + +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.*; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +public interface IDataProcessBatchConsoleApi { + + /** + * NFC行程推送分页查询 + * @param req 请求对象 + * @return 返回对象 + */ + @RequestMapping(value = "/marketing-dataProcess-batch/console/nfcTravelNoticePage", method = RequestMethod.POST) + BcTravelNoticePageRespVo bcTravelNoticePage(@RequestBody BcTravelNoticePageReqVo req); + + /** + * 失败消息分页查询 + * @param req 请求对象 + * @return 返回对象 + */ + @RequestMapping(value = "/marketing-dataProcess-batch/console/noticeErrorPage", method = RequestMethod.POST) + NoticeErrorPageRespVo noticeErrorPage(@RequestBody NoticeErrorPageReqVo req); + + /** + * NFC行程推送重新处理 + * @param req 请求对象 + * @return 返回对象 + */ + @RequestMapping(value = "/marketing-dataProcess-batch/console/nfcTravelNoticeReprocess", method = RequestMethod.POST) + BcTravelNoticeReprocessRespVo bcTravelNoticeReprocess(@RequestBody BcTravelNoticeReprocessReqVo req); + + /** + * 失败消息重新处理 + * @param req 请求对象 + * @return 返回对象 + */ + @RequestMapping(value = "/marketing-dataProcess-batch/console/noticeErrorReprocess", method = RequestMethod.POST) + NoticeErrorReprocessRespVo noticeErrorReprocess(@RequestBody NoticeErrorReprocessReqVo req); + + +} diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/api/IPingApi.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/api/IPingApi.java new file mode 100644 index 00000000..290da025 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/api/IPingApi.java @@ -0,0 +1,15 @@ +package com.jiuyv.sptcc.carbon.dataprocess.api; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +public interface IPingApi { + + /** + * 心跳测试请求 + * @return boolean + */ + @RequestMapping(value = "/ping/pingTest", method = RequestMethod.GET) + boolean pingTest(); + +} diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/BaseReqVo.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/BaseReqVo.java new file mode 100644 index 00000000..7f6fc390 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/BaseReqVo.java @@ -0,0 +1,33 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto; + +/** + * 基础返回对象 + * @author jiuyv + * + */ +public class BaseReqVo implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 1853113471412084273L; + + /** 请求流水号 */ + private String reqId; + + /** + * @return the reqId + */ + public String getReqId() { + return reqId; + } + + /** + * @param reqId the reqId to set + */ + public void setReqId(String reqId) { + this.reqId = reqId; + } + +} + diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/BaseRespVo.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/BaseRespVo.java new file mode 100644 index 00000000..2f7d0843 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/BaseRespVo.java @@ -0,0 +1,68 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto; + +/** + * 基础返回对象 + * @author jiuyv + * + */ +public class BaseRespVo implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -3501869099032176570L; + + /** 请求流水号 */ + private String reqId; + + /** 返回码*/ + private String respCode; + + /** 返回说明 */ + private String respDesc; + + + /** + * @return the respCode + */ + public String getRespCode() { + return respCode; + } + + /** + * @param respCode the respCode to set + */ + public void setRespCode(String respCode) { + this.respCode = respCode; + } + + /** + * @return the respDesc + */ + public String getRespDesc() { + return respDesc; + } + + /** + * @param respDesc the respDesc to set + */ + public void setRespDesc(String respDesc) { + this.respDesc = respDesc; + } + + /** + * @return the reqId + */ + public String getReqId() { + return reqId; + } + + /** + * @param reqId the reqId to set + */ + public void setReqId(String reqId) { + this.reqId = reqId; + } + +} + diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/NfcTravelNoticeVo.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/NfcTravelNoticeVo.java new file mode 100644 index 00000000..c08071a7 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/NfcTravelNoticeVo.java @@ -0,0 +1,268 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto; + +// Generated by AutoCode4J + +import java.util.Map; + +/** + * EntityBean: TBL_DC_NFC_TRAVEL_NOTICE NFC卡交易推送表 : TBL_DC_NFC_TRAVEL_NOTICE + * This is a value object(VO). + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +public class NfcTravelNoticeVo implements java.io.Serializable { + + /** default Serial Version UID*/ + private static final long serialVersionUID = 1L; + // -- Fields -- + /** seqNo : 推送序号. SEQ_NO: VARCHAR2(64 CHAR) */ + private String seqNo ; + + /** travelNo : 业务流水号. TRAVEL_NO: VARCHAR2(32 CHAR) */ + private String travelNo ; + + /** transType : 交易类型. TRANS_TYPE: VARCHAR2(32 CHAR) */ + private String transType ; + + /** inTransTime : 进站时间. IN_TRANS_TIME: CHAR(14) */ + private String inTransTime ; + + /** outTransTime : 出站时间. OUT_TRANS_TIME: CHAR(14) */ + private String outTransTime ; + + /** cardNo : 卡号. CARD_NO: VARCHAR2(32 CHAR) */ + private String cardNo ; + + /** userId : 用户号. USER_ID: VARCHAR2(32 CHAR) */ + private String userId ; + + /** inStationId : 进站点ID. IN_STATION_ID: VARCHAR2(32 CHAR) */ + private String inStationId ; + + /** outStationId : 出站点ID. OUT_STATION_ID: VARCHAR2(32 CHAR) */ + private String outStationId ; + + /** mileage : 里程数. MILEAGE: NUMBER(10) */ + private Long mileage ; + + /** + * 渠道和userToken + * key: 二级渠道号 + * value: userToken + */ + Map channels; + + /** stlmDate : 清算日期. STLM_DATE : CHAR(8) */ + private String stlmDate; + + /** orderCompleteTime : 订单完成时间. ORDER_COMPLETE_TIME: CHAR(14) */ + private String orderCompleteTime ; + + /** failedCount : 已失败次数. FAILED_COUNT: NUMBER(10) */ + private Long failedCount ; + + /** maxCount : 最大次数. MAX_COUNT: NUMBER(10) */ + private Long maxCount ; + + // -- Constructor -- + /** + * Constructor + * + */ + public NfcTravelNoticeVo() { + // Default Construtor + } + + public NfcTravelNoticeVo(String seqNo) { + this.seqNo = seqNo; + } + + // -- Setter And Getter + /** + * Set seqNo : 推送序号. SEQ_NO: VARCHAR2(64 CHAR) + */ + public void setSeqNo(String seqNo){ + this.seqNo = seqNo; + } + + /** + * Get seqNo : 推送序号. SEQ_NO: VARCHAR2(64 CHAR) + */ + public String getSeqNo(){ + return this.seqNo; + } + + /** + * Set travelNo : 业务流水号. TRAVEL_NO: VARCHAR2(32 CHAR) + */ + public void setTravelNo(String travelNo){ + this.travelNo = travelNo; + } + + /** + * Get travelNo : 业务流水号. TRAVEL_NO: VARCHAR2(32 CHAR) + */ + public String getTravelNo(){ + return this.travelNo; + } + + /** + * Set transType : 交易类型. TRANS_TYPE: VARCHAR2(32 CHAR) + */ + public void setTransType(String transType){ + this.transType = transType; + } + + /** + * Get transType : 交易类型. TRANS_TYPE: VARCHAR2(32 CHAR) + */ + public String getTransType(){ + return this.transType; + } + + /** + * Set inTransTime : 进站时间. IN_TRANS_TIME: CHAR(14) + */ + public void setInTransTime(String inTransTime){ + this.inTransTime = inTransTime; + } + + /** + * Get inTransTime : 进站时间. IN_TRANS_TIME: CHAR(14) + */ + public String getInTransTime(){ + return this.inTransTime; + } + + /** + * Set outTransTime : 出站时间. OUT_TRANS_TIME: CHAR(14) + */ + public void setOutTransTime(String outTransTime){ + this.outTransTime = outTransTime; + } + + /** + * Get outTransTime : 出站时间. OUT_TRANS_TIME: CHAR(14) + */ + public String getOutTransTime(){ + return this.outTransTime; + } + + /** + * Set cardNo : 卡号. CARD_NO: VARCHAR2(32 CHAR) + */ + public void setCardNo(String cardNo){ + this.cardNo = cardNo; + } + + /** + * Get cardNo : 卡号. CARD_NO: VARCHAR2(32 CHAR) + */ + public String getCardNo(){ + return this.cardNo; + } + + /** + * Set userId : 用户号. USER_ID: VARCHAR2(32 CHAR) + */ + public void setUserId(String userId){ + this.userId = userId; + } + + /** + * Get userId : 用户号. USER_ID: VARCHAR2(32 CHAR) + */ + public String getUserId(){ + return this.userId; + } + + /** + * Set inStationId : 进站点ID. IN_STATION_ID: VARCHAR2(32 CHAR) + */ + public void setInStationId(String inStationId){ + this.inStationId = inStationId; + } + + /** + * Get inStationId : 进站点ID. IN_STATION_ID: VARCHAR2(32 CHAR) + */ + public String getInStationId(){ + return this.inStationId; + } + + /** + * Set outStationId : 出站点ID. OUT_STATION_ID: VARCHAR2(32 CHAR) + */ + public void setOutStationId(String outStationId){ + this.outStationId = outStationId; + } + + /** + * Get outStationId : 出站点ID. OUT_STATION_ID: VARCHAR2(32 CHAR) + */ + public String getOutStationId(){ + return this.outStationId; + } + + /** + * Set mileage : 里程数. MILEAGE: NUMBER(10) + */ + public void setMileage(Long mileage){ + this.mileage = mileage; + } + + /** + * Get mileage : 里程数. MILEAGE: NUMBER(10) + */ + public Long getMileage(){ + return this.mileage; + } + + /** + * Set orderCompleteTime : 订单完成时间. ORDER_COMPLETE_TIME: CHAR(14) + */ + public void setOrderCompleteTime(String orderCompleteTime){ + this.orderCompleteTime = orderCompleteTime; + } + + /** + * Get orderCompleteTime : 订单完成时间. ORDER_COMPLETE_TIME: CHAR(14) + */ + public String getOrderCompleteTime(){ + return this.orderCompleteTime; + } + + public String getStlmDate() { + return stlmDate; + } + + public void setStlmDate(String stlmDate) { + this.stlmDate = stlmDate; + } + + public Map getChannels() { + return channels; + } + + public void setChannels(Map channels) { + this.channels = channels; + } + + public Long getFailedCount() { + return failedCount; + } + + public void setFailedCount(Long failedCount) { + this.failedCount = failedCount; + } + + public Long getMaxCount() { + return maxCount; + } + + public void setMaxCount(Long maxCount) { + this.maxCount = maxCount; + } +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/BcTravelNoticeFilter.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/BcTravelNoticeFilter.java new file mode 100644 index 00000000..641720f7 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/BcTravelNoticeFilter.java @@ -0,0 +1,138 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto.console; + +/** + * NFC推送记录查询对象 + */ +public class BcTravelNoticeFilter { + + /** seqNo : 序号 */ + private String seqNo; + + /** orgCode : 机构号 */ + private String orgCode; + + /** transType : 交易类型. TRANS_TYPE: VARCHAR2(32 CHAR) */ + private String transType ; + + /** travelNo : 行程单号. TRAVEL_NO: VARCHAR2(64 CHAR) */ + private String travelNo ; + + /** userId : 用户号. USER_ID: VARCHAR2(32 CHAR) */ + private String userId ; + + /** sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) */ + private String sendStatus ; + + /** createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) */ + private String createTimeStart ; + + /** createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) */ + private String createTimeEnd ; + + /** startTime : 开始时间 */ + private String stlmStartTime; + + /** endTime : 结束时间 */ + private String stlmEndTime; + + /** status : 状态 */ + private String status; + + private String[] statusList; + + public String getOrgCode() { + return orgCode; + } + + public void setOrgCode(String orgCode) { + this.orgCode = orgCode; + } + + public String getStlmStartTime() { + return stlmStartTime; + } + + public void setStlmStartTime(String stlmStartTime) { + this.stlmStartTime = stlmStartTime; + } + + public String getStlmEndTime() { + return stlmEndTime; + } + + public void setStlmEndTime(String stlmEndTime) { + this.stlmEndTime = stlmEndTime; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String[] getStatusList() { + return statusList; + } + + public void setStatusList(String[] statusList) { + this.statusList = statusList; + } + + public String getTransType() { + return transType; + } + + public void setTransType(String transType) { + this.transType = transType; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getSendStatus() { + return sendStatus; + } + + public void setSendStatus(String sendStatus) { + this.sendStatus = sendStatus; + } + + public String getCreateTimeStart() { + return createTimeStart; + } + + public void setCreateTimeStart(String createTimeStart) { + this.createTimeStart = createTimeStart; + } + + public String getCreateTimeEnd() { + return createTimeEnd; + } + + public void setCreateTimeEnd(String createTimeEnd) { + this.createTimeEnd = createTimeEnd; + } + + public String getSeqNo() { + return seqNo; + } + + public void setSeqNo(String seqNo) { + this.seqNo = seqNo; + } + + public String getTravelNo() { + return travelNo; + } + + public void setTravelNo(String travelNo) { + this.travelNo = travelNo; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/BcTravelNoticePageReqVo.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/BcTravelNoticePageReqVo.java new file mode 100644 index 00000000..55916280 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/BcTravelNoticePageReqVo.java @@ -0,0 +1,30 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto.console; + +import com.jiuyv.sptcc.carbon.dataprocess.dto.BaseReqVo; + +import java.io.Serializable; + +public class BcTravelNoticePageReqVo extends BaseReqVo implements Serializable { + + /** filter : 查询参数 */ + private BcTravelNoticeFilter filter; + + /** pageVo : 分页参数 */ + private PageVo pageVo; + + public BcTravelNoticeFilter getFilter() { + return filter; + } + + public void setFilter(BcTravelNoticeFilter filter) { + this.filter = filter; + } + + public PageVo getPageVo() { + return pageVo; + } + + public void setPageVo(PageVo pageVo) { + this.pageVo = pageVo; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/BcTravelNoticePageRespVo.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/BcTravelNoticePageRespVo.java new file mode 100644 index 00000000..621f5f77 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/BcTravelNoticePageRespVo.java @@ -0,0 +1,34 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto.console; + +import com.jiuyv.sptcc.carbon.dataprocess.dto.BaseRespVo; + +import java.io.Serializable; +import java.util.List; + +/** + * 二维码营销订单查询返回对象 + */ +public class BcTravelNoticePageRespVo extends BaseRespVo implements Serializable { + + /** totalCount : 总条数 */ + private Long totalCount ; + + /** orderList : 订单列表 */ + private List orderList; + + public Long getTotalCount() { + return totalCount; + } + + public void setTotalCount(Long totalCount) { + this.totalCount = totalCount; + } + + public List getOrderList() { + return orderList; + } + + public void setOrderList(List orderList) { + this.orderList = orderList; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/BcTravelNoticeReprocessReqVo.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/BcTravelNoticeReprocessReqVo.java new file mode 100644 index 00000000..1db7351e --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/BcTravelNoticeReprocessReqVo.java @@ -0,0 +1,22 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto.console; + +import com.jiuyv.sptcc.carbon.dataprocess.dto.BaseReqVo; + +import java.io.Serializable; + +/** + * 重新处理NFC行程推送 + */ +public class BcTravelNoticeReprocessReqVo extends BaseReqVo implements Serializable { + + /** seqNo : 序号 */ + private String seqNo; + + public String getSeqNo() { + return seqNo; + } + + public void setSeqNo(String seqNo) { + this.seqNo = seqNo; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/BcTravelNoticeReprocessRespVo.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/BcTravelNoticeReprocessRespVo.java new file mode 100644 index 00000000..15800b5a --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/BcTravelNoticeReprocessRespVo.java @@ -0,0 +1,12 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto.console; + +import com.jiuyv.sptcc.carbon.dataprocess.dto.BaseRespVo; + +import java.io.Serializable; + +/** + * 重新处理NFC行程推送 + */ +public class BcTravelNoticeReprocessRespVo extends BaseRespVo implements Serializable { + +} diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/DcBcTravelNoticeVo.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/DcBcTravelNoticeVo.java new file mode 100644 index 00000000..b45b6dc0 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/DcBcTravelNoticeVo.java @@ -0,0 +1,534 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto.console; + +// Generated by AutoCode4J +/** + * EntityBean: TBL_DC_BC_TRAVEL_NOTICE 二维码交易推送表 : TBL_DC_BC_TRAVEL_NOTICE + * This is a value object(VO). + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +public class DcBcTravelNoticeVo implements java.io.Serializable { + + /** default Serial Version UID*/ + private static final long serialVersionUID = 1L; + // -- Fields -- + /** seqNo : 推送序号. SEQ_NO: VARCHAR2(64 CHAR) */ + private String seqNo ; + + /** txnLock : 锁标志. TXN_LOCK: CHAR(1) */ + private String txnLock ; + + /** txnTime : 锁时间. TXN_TIME: CHAR(14) */ + private String txnTime ; + + /** travelNo : 业务流水号. TRAVEL_NO: VARCHAR2(32 CHAR) */ + private String travelNo ; + + /** transType : 交易类型. TRANS_TYPE: VARCHAR2(32 CHAR) */ + private String transType ; + + /** bcChannel : 拉码渠道. BC_CHANNEL: VARCHAR2(32 CHAR) */ + private String bcChannel ; + + /** inTransTime : 进站时间. IN_TRANS_TIME: CHAR(14) */ + private String inTransTime ; + + /** outTransTime : 出站时间. OUT_TRANS_TIME: CHAR(14) */ + private String outTransTime ; + + /** userId : 用户号. USER_ID: VARCHAR2(32 CHAR) */ + private String userId ; + + /** inStationId : 进站点ID. IN_STATION_ID: VARCHAR2(32 CHAR) */ + private String inStationId ; + + /** outStationId : 出站点ID. OUT_STATION_ID: VARCHAR2(32 CHAR) */ + private String outStationId ; + + /** mileage : 里程数. MILEAGE: NUMBER(10) */ + private Long mileage ; + + /** carMileage : 驾车里程数. CAR_MILEAGE: NUMBER(10) */ + private Long carMileage; + + /** carbonFootprint : 碳排放量. CARBON_FOOTPRINT: VARCHAR2(32 CHAR) */ + private String carbonFootprint ; + + /** calcFactorVersion : 碳排放量因子版本号. CALC_FACTOR_VERSION: VARCHAR2(32 CHAR) */ + private String calcFactorVersion ; + + /** firstChannels : 推送一级机构号. FIRST_CHANNELS: VARCHAR2(512 CHAR) */ + private String firstChannels ; + + /** secondChannels : 推送二级机构号. SECOND_CHANNELS: VARCHAR2(512 CHAR) */ + private String secondChannels ; + + /** userTokens : 机构用户令牌. USER_TOKENS: VARCHAR2(512 CHAR) */ + private String userTokens ; + + /** stlmDate : 清算日期. STLM_DATE: CHAR(8) */ + private String stlmDate ; + + /** travelHash : 行程特征值. TRAVEL_HASH: VARCHAR2(64 CHAR) */ + private String travelHash ; + + /** status : 状态. STATUS: VARCHAR2(32 CHAR) */ + private String status ; + + /** remark : 备注. REMARK: VARCHAR(255 CHAR) */ + private String remark ; + + /** orderCompleteTime : 订单完成时间. ORDER_COMPLETE_TIME: CHAR(14) */ + private String orderCompleteTime ; + + /** nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) */ + private String nextSendTime ; + + /** sendCount : 发送次数. SEND_COUNT: NUMBER(10) */ + private Long sendCount ; + + /** sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) */ + private String sendStatus ; + + /** createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) */ + private String createUser ; + + /** createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) */ + private String createTime ; + + /** lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) */ + private String lstUpdUser ; + + /** lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) */ + private String lstUpdTime ; + + // -- Constructor -- + /** + * Constructor + * + */ + public DcBcTravelNoticeVo() { + // Default Construtor + } + + public DcBcTravelNoticeVo(String seqNo) { + this.seqNo = seqNo; + } + + // -- Setter And Getter + /** + * Set seqNo : 推送序号. SEQ_NO: VARCHAR2(64 CHAR) + */ + public void setSeqNo(String seqNo){ + this.seqNo = seqNo; + } + + /** + * Get seqNo : 推送序号. SEQ_NO: VARCHAR2(64 CHAR) + */ + public String getSeqNo(){ + return this.seqNo; + } + + /** + * Set txnLock : 锁标志. TXN_LOCK: CHAR(1) + */ + public void setTxnLock(String txnLock){ + this.txnLock = txnLock; + } + + /** + * Get txnLock : 锁标志. TXN_LOCK: CHAR(1) + */ + public String getTxnLock(){ + return this.txnLock; + } + + /** + * Set txnTime : 锁时间. TXN_TIME: CHAR(14) + */ + public void setTxnTime(String txnTime){ + this.txnTime = txnTime; + } + + /** + * Get txnTime : 锁时间. TXN_TIME: CHAR(14) + */ + public String getTxnTime(){ + return this.txnTime; + } + + /** + * Set travelNo : 业务流水号. TRAVEL_NO: VARCHAR2(32 CHAR) + */ + public void setTravelNo(String travelNo){ + this.travelNo = travelNo; + } + + /** + * Get travelNo : 业务流水号. TRAVEL_NO: VARCHAR2(32 CHAR) + */ + public String getTravelNo(){ + return this.travelNo; + } + + /** + * Set transType : 交易类型. TRANS_TYPE: VARCHAR2(32 CHAR) + */ + public void setTransType(String transType){ + this.transType = transType; + } + + /** + * Get transType : 交易类型. TRANS_TYPE: VARCHAR2(32 CHAR) + */ + public String getTransType(){ + return this.transType; + } + + /** + * Set bcChannel : 拉码渠道. BC_CHANNEL: VARCHAR2(32 CHAR) + */ + public void setBcChannel(String bcChannel){ + this.bcChannel = bcChannel; + } + + /** + * Get bcChannel : 拉码渠道. BC_CHANNEL: VARCHAR2(32 CHAR) + */ + public String getBcChannel(){ + return this.bcChannel; + } + + /** + * Set inTransTime : 进站时间. IN_TRANS_TIME: CHAR(14) + */ + public void setInTransTime(String inTransTime){ + this.inTransTime = inTransTime; + } + + /** + * Get inTransTime : 进站时间. IN_TRANS_TIME: CHAR(14) + */ + public String getInTransTime(){ + return this.inTransTime; + } + + /** + * Set outTransTime : 出站时间. OUT_TRANS_TIME: CHAR(14) + */ + public void setOutTransTime(String outTransTime){ + this.outTransTime = outTransTime; + } + + /** + * Get outTransTime : 出站时间. OUT_TRANS_TIME: CHAR(14) + */ + public String getOutTransTime(){ + return this.outTransTime; + } + + /** + * Set userId : 用户号. USER_ID: VARCHAR2(32 CHAR) + */ + public void setUserId(String userId){ + this.userId = userId; + } + + /** + * Get userId : 用户号. USER_ID: VARCHAR2(32 CHAR) + */ + public String getUserId(){ + return this.userId; + } + + /** + * Set inStationId : 进站点ID. IN_STATION_ID: VARCHAR2(32 CHAR) + */ + public void setInStationId(String inStationId){ + this.inStationId = inStationId; + } + + /** + * Get inStationId : 进站点ID. IN_STATION_ID: VARCHAR2(32 CHAR) + */ + public String getInStationId(){ + return this.inStationId; + } + + /** + * Set outStationId : 出站点ID. OUT_STATION_ID: VARCHAR2(32 CHAR) + */ + public void setOutStationId(String outStationId){ + this.outStationId = outStationId; + } + + /** + * Get outStationId : 出站点ID. OUT_STATION_ID: VARCHAR2(32 CHAR) + */ + public String getOutStationId(){ + return this.outStationId; + } + + /** + * Set mileage : 里程数. MILEAGE: NUMBER(10) + */ + public void setMileage(Long mileage){ + this.mileage = mileage; + } + + /** + * Get mileage : 里程数. MILEAGE: NUMBER(10) + */ + public Long getMileage(){ + return this.mileage; + } + + /** + * Set carbonFootprint : 碳排放量. CARBON_FOOTPRINT: VARCHAR2(32 CHAR) + */ + public void setCarbonFootprint(String carbonFootprint){ + this.carbonFootprint = carbonFootprint; + } + + /** + * Get carbonFootprint : 碳排放量. CARBON_FOOTPRINT: VARCHAR2(32 CHAR) + */ + public String getCarbonFootprint(){ + return this.carbonFootprint; + } + + /** + * Set calcFactorVersion : 碳排放量因子版本号. CALC_FACTOR_VERSION: VARCHAR2(32 CHAR) + */ + public void setCalcFactorVersion(String calcFactorVersion){ + this.calcFactorVersion = calcFactorVersion; + } + + /** + * Get calcFactorVersion : 碳排放量因子版本号. CALC_FACTOR_VERSION: VARCHAR2(32 CHAR) + */ + public String getCalcFactorVersion(){ + return this.calcFactorVersion; + } + + /** + * Set firstChannels : 推送一级机构号. FIRST_CHANNELS: VARCHAR2(512 CHAR) + */ + public void setFirstChannels(String firstChannels){ + this.firstChannels = firstChannels; + } + + /** + * Get firstChannels : 推送一级机构号. FIRST_CHANNELS: VARCHAR2(512 CHAR) + */ + public String getFirstChannels(){ + return this.firstChannels; + } + + /** + * Set secondChannels : 推送二级机构号. SECOND_CHANNELS: VARCHAR2(512 CHAR) + */ + public void setSecondChannels(String secondChannels){ + this.secondChannels = secondChannels; + } + + /** + * Get secondChannels : 推送二级机构号. SECOND_CHANNELS: VARCHAR2(512 CHAR) + */ + public String getSecondChannels(){ + return this.secondChannels; + } + + /** + * Set userTokens : 机构用户令牌. USER_TOKENS: VARCHAR2(512 CHAR) + */ + public void setUserTokens(String userTokens){ + this.userTokens = userTokens; + } + + /** + * Get userTokens : 机构用户令牌. USER_TOKENS: VARCHAR2(512 CHAR) + */ + public String getUserTokens(){ + return this.userTokens; + } + + /** + * Set stlmDate : 清算日期. STLM_DATE: CHAR(8) + */ + public void setStlmDate(String stlmDate){ + this.stlmDate = stlmDate; + } + + /** + * Get stlmDate : 清算日期. STLM_DATE: CHAR(8) + */ + public String getStlmDate(){ + return this.stlmDate; + } + + /** + * Set travelHash : 行程特征值. TRAVEL_HASH: VARCHAR2(64 CHAR) + */ + public void setTravelHash(String travelHash){ + this.travelHash = travelHash; + } + + /** + * Get travelHash : 行程特征值. TRAVEL_HASH: VARCHAR2(64 CHAR) + */ + public String getTravelHash(){ + return this.travelHash; + } + + /** + * Set status : 状态. STATUS: VARCHAR2(32 CHAR) + */ + public void setStatus(String status){ + this.status = status; + } + + /** + * Get status : 状态. STATUS: VARCHAR2(32 CHAR) + */ + public String getStatus(){ + return this.status; + } + + /** + * Set remark : 备注. REMARK: VARCHAR(255 CHAR) + */ + public void setRemark(String remark){ + this.remark = remark; + } + + /** + * Get remark : 备注. REMARK: VARCHAR(255 CHAR) + */ + public String getRemark(){ + return this.remark; + } + + /** + * Set orderCompleteTime : 订单完成时间. ORDER_COMPLETE_TIME: CHAR(14) + */ + public void setOrderCompleteTime(String orderCompleteTime){ + this.orderCompleteTime = orderCompleteTime; + } + + /** + * Get orderCompleteTime : 订单完成时间. ORDER_COMPLETE_TIME: CHAR(14) + */ + public String getOrderCompleteTime(){ + return this.orderCompleteTime; + } + + /** + * Set nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) + */ + public void setNextSendTime(String nextSendTime){ + this.nextSendTime = nextSendTime; + } + + /** + * Get nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) + */ + public String getNextSendTime(){ + return this.nextSendTime; + } + + /** + * Set sendCount : 发送次数. SEND_COUNT: NUMBER(10) + */ + public void setSendCount(Long sendCount){ + this.sendCount = sendCount; + } + + /** + * Get sendCount : 发送次数. SEND_COUNT: NUMBER(10) + */ + public Long getSendCount(){ + return this.sendCount; + } + + /** + * Set sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) + */ + public void setSendStatus(String sendStatus){ + this.sendStatus = sendStatus; + } + + /** + * Get sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) + */ + public String getSendStatus(){ + return this.sendStatus; + } + + /** + * Set createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) + */ + public void setCreateUser(String createUser){ + this.createUser = createUser; + } + + /** + * Get createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) + */ + public String getCreateUser(){ + return this.createUser; + } + + /** + * Set createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) + */ + public void setCreateTime(String createTime){ + this.createTime = createTime; + } + + /** + * Get createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) + */ + public String getCreateTime(){ + return this.createTime; + } + + /** + * Set lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) + */ + public void setLstUpdUser(String lstUpdUser){ + this.lstUpdUser = lstUpdUser; + } + + /** + * Get lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) + */ + public String getLstUpdUser(){ + return this.lstUpdUser; + } + + /** + * Set lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) + */ + public void setLstUpdTime(String lstUpdTime){ + this.lstUpdTime = lstUpdTime; + } + + /** + * Get lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) + */ + public String getLstUpdTime(){ + return this.lstUpdTime; + } + + public Long getCarMileage() { + return carMileage; + } + + public void setCarMileage(Long carMileage) { + this.carMileage = carMileage; + } +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/DcNfcTravelNoticeVo.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/DcNfcTravelNoticeVo.java new file mode 100644 index 00000000..1c4b7691 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/DcNfcTravelNoticeVo.java @@ -0,0 +1,460 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto.console; + +// Generated by AutoCode4J +/** + * EntityBean: TBL_DC_NFC_TRAVEL_NOTICE NFC卡交易推送表 : TBL_DC_NFC_TRAVEL_NOTICE + * This is a value object(VO). + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +public class DcNfcTravelNoticeVo implements java.io.Serializable { + + /** default Serial Version UID*/ + private static final long serialVersionUID = 1L; + // -- Fields -- + /** seqNo : 推送序号. SEQ_NO: VARCHAR2(64 CHAR) */ + private String seqNo ; + + /** txnLock : 锁标志. TXN_LOCK: CHAR(1) */ + private String txnLock ; + + /** txnTime : 锁时间. TXN_TIME: CHAR(14) */ + private String txnTime ; + + /** travelNo : 业务流水号. TRAVEL_NO: VARCHAR2(32 CHAR) */ + private String travelNo ; + + /** transType : 交易类型. TRANS_TYPE: VARCHAR2(32 CHAR) */ + private String transType ; + + /** inTransTime : 进站时间. IN_TRANS_TIME: CHAR(14) */ + private String inTransTime ; + + /** outTransTime : 出站时间. OUT_TRANS_TIME: CHAR(14) */ + private String outTransTime ; + + /** cardNo : 卡号. CARD_NO: VARCHAR2(32 CHAR) */ + private String cardNo ; + + /** userId : 用户号. USER_ID: VARCHAR2(32 CHAR) */ + private String userId ; + + /** inStationId : 进站点ID. IN_STATION_ID: VARCHAR2(32 CHAR) */ + private String inStationId ; + + /** outStationId : 出站点ID. OUT_STATION_ID: VARCHAR2(32 CHAR) */ + private String outStationId ; + + /** mileage : 里程数. MILEAGE: NUMBER(10) */ + private Long mileage ; + + /** firstChannels : 推送一级机构号. FIRST_CHANNELS: VARCHAR2(512 CHAR) */ + private String firstChannels ; + + /** secondChannels : 推送二级机构号. SECOND_CHANNELS: VARCHAR2(512 CHAR) */ + private String secondChannels ; + + /** userTokens : 机构用户令牌. USER_TOKENS: VARCHAR2(512 CHAR) */ + private String userTokens ; + + /** stlmDate : 清算日期. STLM_DATE : CHAR(8) */ + private String stlmDate; + + /** status : 状态. STATUS: VARCHAR2(32 CHAR) */ + private String status ; + + /** orderCompleteTime : 订单完成时间. ORDER_COMPLETE_TIME: CHAR(14) */ + private String orderCompleteTime ; + + /** nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) */ + private String nextSendTime ; + + /** sendCount : 发送次数. SEND_COUNT: NUMBER(10) */ + private Long sendCount ; + + /** sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) */ + private String sendStatus ; + + /** createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) */ + private String createUser ; + + /** createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) */ + private String createTime ; + + /** lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) */ + private String lstUpdUser ; + + /** lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) */ + private String lstUpdTime ; + + /** remark : 备注. REMARK: VARCHAR2(255 CHAR) */ + private String remark; + + // -- Constructor -- + /** + * Constructor + * + */ + public DcNfcTravelNoticeVo() { + // Default Construtor + } + + public DcNfcTravelNoticeVo(String seqNo) { + this.seqNo = seqNo; + } + + // -- Setter And Getter + /** + * Set seqNo : 推送序号. SEQ_NO: VARCHAR2(64 CHAR) + */ + public void setSeqNo(String seqNo){ + this.seqNo = seqNo; + } + + /** + * Get seqNo : 推送序号. SEQ_NO: VARCHAR2(64 CHAR) + */ + public String getSeqNo(){ + return this.seqNo; + } + + /** + * Set txnLock : 锁标志. TXN_LOCK: CHAR(1) + */ + public void setTxnLock(String txnLock){ + this.txnLock = txnLock; + } + + /** + * Get txnLock : 锁标志. TXN_LOCK: CHAR(1) + */ + public String getTxnLock(){ + return this.txnLock; + } + + /** + * Set txnTime : 锁时间. TXN_TIME: CHAR(14) + */ + public void setTxnTime(String txnTime){ + this.txnTime = txnTime; + } + + /** + * Get txnTime : 锁时间. TXN_TIME: CHAR(14) + */ + public String getTxnTime(){ + return this.txnTime; + } + + /** + * Set travelNo : 业务流水号. TRAVEL_NO: VARCHAR2(32 CHAR) + */ + public void setTravelNo(String travelNo){ + this.travelNo = travelNo; + } + + /** + * Get travelNo : 业务流水号. TRAVEL_NO: VARCHAR2(32 CHAR) + */ + public String getTravelNo(){ + return this.travelNo; + } + + /** + * Set transType : 交易类型. TRANS_TYPE: VARCHAR2(32 CHAR) + */ + public void setTransType(String transType){ + this.transType = transType; + } + + /** + * Get transType : 交易类型. TRANS_TYPE: VARCHAR2(32 CHAR) + */ + public String getTransType(){ + return this.transType; + } + + /** + * Set inTransTime : 进站时间. IN_TRANS_TIME: CHAR(14) + */ + public void setInTransTime(String inTransTime){ + this.inTransTime = inTransTime; + } + + /** + * Get inTransTime : 进站时间. IN_TRANS_TIME: CHAR(14) + */ + public String getInTransTime(){ + return this.inTransTime; + } + + /** + * Set outTransTime : 出站时间. OUT_TRANS_TIME: CHAR(14) + */ + public void setOutTransTime(String outTransTime){ + this.outTransTime = outTransTime; + } + + /** + * Get outTransTime : 出站时间. OUT_TRANS_TIME: CHAR(14) + */ + public String getOutTransTime(){ + return this.outTransTime; + } + + /** + * Set cardNo : 卡号. CARD_NO: VARCHAR2(32 CHAR) + */ + public void setCardNo(String cardNo){ + this.cardNo = cardNo; + } + + /** + * Get cardNo : 卡号. CARD_NO: VARCHAR2(32 CHAR) + */ + public String getCardNo(){ + return this.cardNo; + } + + /** + * Set userId : 用户号. USER_ID: VARCHAR2(32 CHAR) + */ + public void setUserId(String userId){ + this.userId = userId; + } + + /** + * Get userId : 用户号. USER_ID: VARCHAR2(32 CHAR) + */ + public String getUserId(){ + return this.userId; + } + + /** + * Set inStationId : 进站点ID. IN_STATION_ID: VARCHAR2(32 CHAR) + */ + public void setInStationId(String inStationId){ + this.inStationId = inStationId; + } + + /** + * Get inStationId : 进站点ID. IN_STATION_ID: VARCHAR2(32 CHAR) + */ + public String getInStationId(){ + return this.inStationId; + } + + /** + * Set outStationId : 出站点ID. OUT_STATION_ID: VARCHAR2(32 CHAR) + */ + public void setOutStationId(String outStationId){ + this.outStationId = outStationId; + } + + /** + * Get outStationId : 出站点ID. OUT_STATION_ID: VARCHAR2(32 CHAR) + */ + public String getOutStationId(){ + return this.outStationId; + } + + /** + * Set mileage : 里程数. MILEAGE: NUMBER(10) + */ + public void setMileage(Long mileage){ + this.mileage = mileage; + } + + /** + * Get mileage : 里程数. MILEAGE: NUMBER(10) + */ + public Long getMileage(){ + return this.mileage; + } + + /** + * Set firstChannels : 推送一级机构号. FIRST_CHANNELS: VARCHAR2(512 CHAR) + */ + public void setFirstChannels(String firstChannels){ + this.firstChannels = firstChannels; + } + + /** + * Get firstChannels : 推送一级机构号. FIRST_CHANNELS: VARCHAR2(512 CHAR) + */ + public String getFirstChannels(){ + return this.firstChannels; + } + + /** + * Set secondChannels : 推送二级机构号. SECOND_CHANNELS: VARCHAR2(512 CHAR) + */ + public void setSecondChannels(String secondChannels){ + this.secondChannels = secondChannels; + } + + /** + * Get secondChannels : 推送二级机构号. SECOND_CHANNELS: VARCHAR2(512 CHAR) + */ + public String getSecondChannels(){ + return this.secondChannels; + } + + /** + * Set userTokens : 机构用户令牌. USER_TOKENS: VARCHAR2(512 CHAR) + */ + public void setUserTokens(String userTokens){ + this.userTokens = userTokens; + } + + /** + * Get userTokens : 机构用户令牌. USER_TOKENS: VARCHAR2(512 CHAR) + */ + public String getUserTokens(){ + return this.userTokens; + } + + /** + * Set status : 状态. STATUS: VARCHAR2(32 CHAR) + */ + public void setStatus(String status){ + this.status = status; + } + + /** + * Get status : 状态. STATUS: VARCHAR2(32 CHAR) + */ + public String getStatus(){ + return this.status; + } + + /** + * Set orderCompleteTime : 订单完成时间. ORDER_COMPLETE_TIME: CHAR(14) + */ + public void setOrderCompleteTime(String orderCompleteTime){ + this.orderCompleteTime = orderCompleteTime; + } + + /** + * Get orderCompleteTime : 订单完成时间. ORDER_COMPLETE_TIME: CHAR(14) + */ + public String getOrderCompleteTime(){ + return this.orderCompleteTime; + } + + /** + * Set nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) + */ + public void setNextSendTime(String nextSendTime){ + this.nextSendTime = nextSendTime; + } + + /** + * Get nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) + */ + public String getNextSendTime(){ + return this.nextSendTime; + } + + /** + * Set sendCount : 发送次数. SEND_COUNT: NUMBER(10) + */ + public void setSendCount(Long sendCount){ + this.sendCount = sendCount; + } + + /** + * Get sendCount : 发送次数. SEND_COUNT: NUMBER(10) + */ + public Long getSendCount(){ + return this.sendCount; + } + + /** + * Set sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) + */ + public void setSendStatus(String sendStatus){ + this.sendStatus = sendStatus; + } + + /** + * Get sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) + */ + public String getSendStatus(){ + return this.sendStatus; + } + + /** + * Set createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) + */ + public void setCreateUser(String createUser){ + this.createUser = createUser; + } + + /** + * Get createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) + */ + public String getCreateUser(){ + return this.createUser; + } + + /** + * Set createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) + */ + public void setCreateTime(String createTime){ + this.createTime = createTime; + } + + /** + * Get createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) + */ + public String getCreateTime(){ + return this.createTime; + } + + /** + * Set lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) + */ + public void setLstUpdUser(String lstUpdUser){ + this.lstUpdUser = lstUpdUser; + } + + /** + * Get lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) + */ + public String getLstUpdUser(){ + return this.lstUpdUser; + } + + /** + * Set lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) + */ + public void setLstUpdTime(String lstUpdTime){ + this.lstUpdTime = lstUpdTime; + } + + /** + * Get lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) + */ + public String getLstUpdTime(){ + return this.lstUpdTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getStlmDate() { + return stlmDate; + } + + public void setStlmDate(String stlmDate) { + this.stlmDate = stlmDate; + } +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/DcNoticeErrorVo.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/DcNoticeErrorVo.java new file mode 100644 index 00000000..66e1bdef --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/DcNoticeErrorVo.java @@ -0,0 +1,245 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto.console; + +// Generated by AutoCode4J +/** + * EntityBean: TBL_DC_NOTICE_ERROR 推送错误记录表 : TBL_DC_NOTICE_ERROR + * This is a value object(VO). + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +public class DcNoticeErrorVo implements java.io.Serializable { + + /** default Serial Version UID*/ + private static final long serialVersionUID = 1L; + // -- Fields -- + /** seqNo : 序号. SEQ_NO: VARCHAR2(64 CHAR) */ + private String seqNo ; + + /** noticeSeqNo : 推送序号. NOTICE_SEQ_NO: VARCHAR2(64 CHAR) */ + private String noticeSeqNo ; + + /** msgContent : 消息内容. MSG_CONTENT: CLOB */ + private String msgContent ; + + /** noticeType : 推送类型. NOTICE_TYPE: VARCHAR2(32 CHAR) */ + private String noticeType ; + + /** reason : 失败原因. REASON: VARCHAR2(255 CHAR) */ + private String reason ; + + /** status : 状态. STATUS: VARCHAR2(32 CHAR) */ + private String status ; + + /** nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) */ + private String nextSendTime ; + + /** sendCount : 发送次数. SEND_COUNT: NUMBER(10) */ + private Long sendCount ; + + /** sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) */ + private String sendStatus ; + + /** createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) */ + private String createUser ; + + /** createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) */ + private String createTime ; + + /** lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) */ + private String lstUpdUser ; + + /** lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) */ + private String lstUpdTime ; + + // -- Constructor -- + /** + * Constructor + * + */ + public DcNoticeErrorVo() { + // Default Construtor + } + + public DcNoticeErrorVo(String seqNo) { + this.seqNo = seqNo; + } + + // -- Setter And Getter + /** + * Set seqNo : 序号. SEQ_NO: VARCHAR2(64 CHAR) + */ + public void setSeqNo(String seqNo){ + this.seqNo = seqNo; + } + + /** + * Get seqNo : 序号. SEQ_NO: VARCHAR2(64 CHAR) + */ + public String getSeqNo(){ + return this.seqNo; + } + + /** + * Set noticeSeqNo : 推送序号. NOTICE_SEQ_NO: VARCHAR2(64 CHAR) + */ + public void setNoticeSeqNo(String noticeSeqNo){ + this.noticeSeqNo = noticeSeqNo; + } + + /** + * Get noticeSeqNo : 推送序号. NOTICE_SEQ_NO: VARCHAR2(64 CHAR) + */ + public String getNoticeSeqNo(){ + return this.noticeSeqNo; + } + + /** + * Set noticeType : 推送类型. NOTICE_TYPE: VARCHAR2(32 CHAR) + */ + public void setNoticeType(String noticeType){ + this.noticeType = noticeType; + } + + /** + * Get noticeType : 推送类型. NOTICE_TYPE: VARCHAR2(32 CHAR) + */ + public String getNoticeType(){ + return this.noticeType; + } + + /** + * Set reason : 失败原因. REASON: VARCHAR2(255 CHAR) + */ + public void setReason(String reason){ + this.reason = reason; + } + + /** + * Get reason : 失败原因. REASON: VARCHAR2(255 CHAR) + */ + public String getReason(){ + return this.reason; + } + + /** + * Set status : 状态. STATUS: VARCHAR2(32 CHAR) + */ + public void setStatus(String status){ + this.status = status; + } + + /** + * Get status : 状态. STATUS: VARCHAR2(32 CHAR) + */ + public String getStatus(){ + return this.status; + } + + /** + * Set nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) + */ + public void setNextSendTime(String nextSendTime){ + this.nextSendTime = nextSendTime; + } + + /** + * Get nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) + */ + public String getNextSendTime(){ + return this.nextSendTime; + } + + /** + * Set sendCount : 发送次数. SEND_COUNT: NUMBER(10) + */ + public void setSendCount(Long sendCount){ + this.sendCount = sendCount; + } + + /** + * Get sendCount : 发送次数. SEND_COUNT: NUMBER(10) + */ + public Long getSendCount(){ + return this.sendCount; + } + + /** + * Set sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) + */ + public void setSendStatus(String sendStatus){ + this.sendStatus = sendStatus; + } + + /** + * Get sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) + */ + public String getSendStatus(){ + return this.sendStatus; + } + + /** + * Set createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) + */ + public void setCreateUser(String createUser){ + this.createUser = createUser; + } + + /** + * Get createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) + */ + public String getCreateUser(){ + return this.createUser; + } + + /** + * Set createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) + */ + public void setCreateTime(String createTime){ + this.createTime = createTime; + } + + /** + * Get createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) + */ + public String getCreateTime(){ + return this.createTime; + } + + /** + * Set lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) + */ + public void setLstUpdUser(String lstUpdUser){ + this.lstUpdUser = lstUpdUser; + } + + /** + * Get lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) + */ + public String getLstUpdUser(){ + return this.lstUpdUser; + } + + /** + * Set lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) + */ + public void setLstUpdTime(String lstUpdTime){ + this.lstUpdTime = lstUpdTime; + } + + /** + * Get lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) + */ + public String getLstUpdTime(){ + return this.lstUpdTime; + } + + public String getMsgContent() { + return msgContent; + } + + public void setMsgContent(String msgContent) { + this.msgContent = msgContent; + } +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NfcTravelNoticeFilter.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NfcTravelNoticeFilter.java new file mode 100644 index 00000000..30b9a406 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NfcTravelNoticeFilter.java @@ -0,0 +1,138 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto.console; + +/** + * NFC推送记录查询对象 + */ +public class NfcTravelNoticeFilter { + + /** seqNo : 序号 */ + private String seqNo; + + /** orgCode : 机构号 */ + private String orgCode; + + /** transType : 交易类型. TRANS_TYPE: VARCHAR2(32 CHAR) */ + private String transType ; + + /** cardNo : 卡号. CARD_NO: VARCHAR2(32 CHAR) */ + private String cardNo ; + + /** userId : 用户号. USER_ID: VARCHAR2(32 CHAR) */ + private String userId ; + + /** sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) */ + private String sendStatus ; + + /** createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) */ + private String createTimeStart ; + + /** createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) */ + private String createTimeEnd ; + + /** startTime : 开始时间 */ + private String stlmStartTime; + + /** endTime : 结束时间 */ + private String stlmEndTime; + + /** status : 状态 */ + private String status; + + private String[] statusList; + + public String getOrgCode() { + return orgCode; + } + + public void setOrgCode(String orgCode) { + this.orgCode = orgCode; + } + + public String getStlmStartTime() { + return stlmStartTime; + } + + public void setStlmStartTime(String stlmStartTime) { + this.stlmStartTime = stlmStartTime; + } + + public String getStlmEndTime() { + return stlmEndTime; + } + + public void setStlmEndTime(String stlmEndTime) { + this.stlmEndTime = stlmEndTime; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String[] getStatusList() { + return statusList; + } + + public void setStatusList(String[] statusList) { + this.statusList = statusList; + } + + public String getTransType() { + return transType; + } + + public void setTransType(String transType) { + this.transType = transType; + } + + public String getCardNo() { + return cardNo; + } + + public void setCardNo(String cardNo) { + this.cardNo = cardNo; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getSendStatus() { + return sendStatus; + } + + public void setSendStatus(String sendStatus) { + this.sendStatus = sendStatus; + } + + public String getCreateTimeStart() { + return createTimeStart; + } + + public void setCreateTimeStart(String createTimeStart) { + this.createTimeStart = createTimeStart; + } + + public String getCreateTimeEnd() { + return createTimeEnd; + } + + public void setCreateTimeEnd(String createTimeEnd) { + this.createTimeEnd = createTimeEnd; + } + + public String getSeqNo() { + return seqNo; + } + + public void setSeqNo(String seqNo) { + this.seqNo = seqNo; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NoticeErrorFilter.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NoticeErrorFilter.java new file mode 100644 index 00000000..3c103e03 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NoticeErrorFilter.java @@ -0,0 +1,106 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto.console; + +/** + * 推送错误记录查询对象 + */ +public class NoticeErrorFilter { + + /** seqNo : 序号. SEQ_NO: VARCHAR2(64 CHAR) */ + private String seqNo ; + + /** noticeSeqNo : 推送序号. NOTICE_SEQ_NO: VARCHAR2(64 CHAR) */ + private String noticeSeqNo ; + + /** noticeType : 推送类型. NOTICE_TYPE: VARCHAR2(32 CHAR) */ + private String noticeType ; + + /** reason : 失败原因. REASON: VARCHAR2(255 CHAR) */ + private String reason ; + + /** status : 状态. STATUS: VARCHAR2(32 CHAR) */ + private String status ; + + /** sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) */ + private String sendStatus ; + + /** createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) */ + private String createTimeStart ; + + /** createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) */ + private String createTimeEnd ; + + /** statusList : 状态列表 */ + private String[] statusList; + + public String getSeqNo() { + return seqNo; + } + + public void setSeqNo(String seqNo) { + this.seqNo = seqNo; + } + + public String getNoticeSeqNo() { + return noticeSeqNo; + } + + public void setNoticeSeqNo(String noticeSeqNo) { + this.noticeSeqNo = noticeSeqNo; + } + + public String getNoticeType() { + return noticeType; + } + + public void setNoticeType(String noticeType) { + this.noticeType = noticeType; + } + + public String getReason() { + return reason; + } + + public void setReason(String reason) { + this.reason = reason; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getSendStatus() { + return sendStatus; + } + + public void setSendStatus(String sendStatus) { + this.sendStatus = sendStatus; + } + + public String getCreateTimeStart() { + return createTimeStart; + } + + public void setCreateTimeStart(String createTimeStart) { + this.createTimeStart = createTimeStart; + } + + public String getCreateTimeEnd() { + return createTimeEnd; + } + + public void setCreateTimeEnd(String createTimeEnd) { + this.createTimeEnd = createTimeEnd; + } + + public String[] getStatusList() { + return statusList; + } + + public void setStatusList(String[] statusList) { + this.statusList = statusList; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NoticeErrorPageReqVo.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NoticeErrorPageReqVo.java new file mode 100644 index 00000000..5031cb6e --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NoticeErrorPageReqVo.java @@ -0,0 +1,30 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto.console; + +import com.jiuyv.sptcc.carbon.dataprocess.dto.BaseReqVo; + +import java.io.Serializable; + +public class NoticeErrorPageReqVo extends BaseReqVo implements Serializable { + + /** filter : 查询参数 */ + private NoticeErrorFilter filter; + + /** pageVo : 分页参数 */ + private PageVo pageVo; + + public NoticeErrorFilter getFilter() { + return filter; + } + + public void setFilter(NoticeErrorFilter filter) { + this.filter = filter; + } + + public PageVo getPageVo() { + return pageVo; + } + + public void setPageVo(PageVo pageVo) { + this.pageVo = pageVo; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NoticeErrorPageRespVo.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NoticeErrorPageRespVo.java new file mode 100644 index 00000000..5b469eb1 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NoticeErrorPageRespVo.java @@ -0,0 +1,34 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto.console; + +import com.jiuyv.sptcc.carbon.dataprocess.dto.BaseRespVo; + +import java.io.Serializable; +import java.util.List; + +/** + * 失败消息分页查询返回对象 + */ +public class NoticeErrorPageRespVo extends BaseRespVo implements Serializable { + + /** totalCount : 总条数 */ + private Long totalCount ; + + /** orderList : 订单列表 */ + private List orderList; + + public Long getTotalCount() { + return totalCount; + } + + public void setTotalCount(Long totalCount) { + this.totalCount = totalCount; + } + + public List getOrderList() { + return orderList; + } + + public void setOrderList(List orderList) { + this.orderList = orderList; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NoticeErrorReprocessReqVo.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NoticeErrorReprocessReqVo.java new file mode 100644 index 00000000..987d32dd --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NoticeErrorReprocessReqVo.java @@ -0,0 +1,22 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto.console; + +import com.jiuyv.sptcc.carbon.dataprocess.dto.BaseReqVo; + +import java.io.Serializable; + +/** + * 重新处理NFC行程推送 + */ +public class NoticeErrorReprocessReqVo extends BaseReqVo implements Serializable { + + /** seqNo : 序号 */ + private String seqNo; + + public String getSeqNo() { + return seqNo; + } + + public void setSeqNo(String seqNo) { + this.seqNo = seqNo; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NoticeErrorReprocessRespVo.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NoticeErrorReprocessRespVo.java new file mode 100644 index 00000000..ccbed8ef --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/NoticeErrorReprocessRespVo.java @@ -0,0 +1,12 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto.console; + +import com.jiuyv.sptcc.carbon.dataprocess.dto.BaseRespVo; + +import java.io.Serializable; + +/** + * 重新处理NFC行程推送 + */ +public class NoticeErrorReprocessRespVo extends BaseRespVo implements Serializable { + +} diff --git a/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/PageVo.java b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/PageVo.java new file mode 100644 index 00000000..4d74d9f2 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-api/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/console/PageVo.java @@ -0,0 +1,73 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto.console; + +import java.io.Serializable; + +public class PageVo implements Serializable { + + /** sortType : 排序方式. */ + private String sortType; + + /** sortField : 排序字段 */ + private String sortField; + + /** startPage : 开始页码 */ + private Integer startPage; + + /** pageSize : 每页条数 */ + private Integer pageSize; + + // -- Extends -- + /** offset : 偏移量 */ + private Integer offset; + + /** endline : 末尾行数 */ + private Integer endline; + + public Integer getStartPage() { + return startPage; + } + + public void setStartPage(Integer startPage) { + this.startPage = startPage; + } + + public Integer getPageSize() { + return pageSize; + } + + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + public String getSortType() { + return sortType; + } + + public void setSortType(String sortType) { + this.sortType = sortType; + } + + public String getSortField() { + return sortField; + } + + public void setSortField(String sortField) { + this.sortField = sortField; + } + + public Integer getOffset() { + return offset; + } + + public void setOffset(Integer offset) { + this.offset = offset; + } + + public Integer getEndline() { + return endline; + } + + public void setEndline(Integer endline) { + this.endline = endline; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/pom.xml b/carbon-dataprocess/carbon-dataprocess-service/pom.xml new file mode 100644 index 00000000..12b6a23a --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/pom.xml @@ -0,0 +1,473 @@ + + + 4.0.0 + + com.jiuyv.sptcc + carbon-dataprocess + 0.0.1-SNAPSHOT + + + carbon-dataprocess-service + jar + + carbon-dataprocess-service + http://maven.apache.org + + + UTF-8 + 2.0.0 + 0.2.0 + + + + + com.jiuyv.sptcc + carbon-dataprocess-api + ${project.version} + + + com.jiuyv.sptcc + tanph-auth-api + ${auth.version} + + + com.jiuyv + smtools + 1.1.3 + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + io.github.openfeign + feign-okhttp + + + + org.springframework.cloud + spring-cloud-starter-loadbalancer + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-aop + + + + org.springframework.boot + spring-boot-starter-cache + + + com.github.ben-manes.caffeine + caffeine + + + com.github.ulisesbocchio + jasypt-spring-boot-starter + 2.1.1 + + + org.springframework.boot + spring-boot-devtools + true + + + + + com.jiuyv.spring + bloomfilter-starter-v2 + 2.0.18 + + + + com.mashape.unirest + unirest-java + 1.4.9 + + + net.sf.json-lib + json-lib + 2.4 + jdk15 + + + org.springframework.boot + spring-boot-configuration-processor + true + + + commons-io + commons-io + 2.5 + + + org.springframework.boot + spring-boot-starter-freemarker + + + org.bouncycastle + bcprov-jdk15on + 1.58 + + + org.bouncycastle + bcprov-ext-jdk15on + 1.58 + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 1.3.0 + + + + com.oracle + ojdbc8 + 12.2.0.1.0 + + + + + org.apache.mina + mina-core + 2.0.16 + + + org.apache.mina + mina-integration-beans + 2.0.16 + + + + org.apache.mina + mina-core + + + + + net.logstash.logback + logstash-logback-encoder + 6.3 + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + + org.springframework.cloud + spring-cloud-starter-config + + + + org.springframework.cloud + spring-cloud-starter-sleuth + + + + + + + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + + + net.sf.dozer + dozer + 5.4.0 + + + org.slf4j + slf4j-log4j12 + + + + + + com.fasterxml.uuid + java-uuid-generator + 3.1.3 + + + log4j + log4j + + + + + + dom4j + dom4j + 1.4 + + + com.google.code.gson + gson + + + org.springframework.boot + spring-boot-starter-security + + + + com.xuxueli + xxl-job-core + 2.3.1 + + + + com.jcraft + jsch + 0.1.54 + + + net.lingala.zip4j + zip4j + 1.3.1 + + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + com.h2database + h2 + test + + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + + org.jacoco + jacoco-maven-plugin + + + default-prepare-agent + + prepare-agent + + + + default-report + prepare-package + + report + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + maven-compiler-plugin + + 1.8 + 1.8 + UTF-8 + + lib + + + + + + + src/lib + BOOT-INF/lib/ + + **/*.jar + + + + + src/main/resources + + + + + diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/Application.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/Application.java new file mode 100644 index 00000000..64c5122a --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/Application.java @@ -0,0 +1,25 @@ +package com.jiuyv.sptcc.carbon.dataprocess; + +import feign.Retryer; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ImportResource; + +@ImportResource({ "classpath:applicationContext.xml" }) +@EnableDiscoveryClient +@EnableFeignClients +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + @Bean + public Retryer feignRetryer() { + return Retryer.NEVER_RETRY; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/api/IAuthTanphFeign.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/api/IAuthTanphFeign.java new file mode 100644 index 00000000..0975945d --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/api/IAuthTanphFeign.java @@ -0,0 +1,8 @@ +package com.jiuyv.sptcc.carbon.dataprocess.api; + +import com.jiuyv.sptcc.tanph.auth.api.IAuthTanphApi; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient("tanph-auth") +public interface IAuthTanphFeign extends IAuthTanphApi { +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/Constant.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/Constant.java new file mode 100644 index 00000000..ebe07d16 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/Constant.java @@ -0,0 +1,288 @@ +package com.jiuyv.sptcc.carbon.dataprocess.common; + + + + +/** + * The public final class WebDict. + * + * @author jiuyv + * @version 1.0.0 + * @since 2016-1-27 + */ +public final class Constant { + + /** + * The public final class OrgCode. 机构号 + * + * @author zsd + * @version 1.0.0 + * @since 2017-10-26 + */ + public final class OrgCode { + + /** MARKET : 营销系统. */ + public static final String TANPH = "TANPH"; + + } + + /** + * The public final class RespCode. 接口返回码字典 + * + * @author zsd + * @version 1.0.0 + * @since 2017-10-26 + */ + public final class RespCode { + + /** success : 成功. */ + public static final String SUCCESS = "success"; + + /** input_not_valid : 输入不合法. */ + public static final String INPUT_NOT_VALID = "input_not_valid"; + + /** user_not_found : 用户查询失败. */ + public static final String USER_NOT_FOUND = "user_not_found"; + + /** order_not_found : 订单未找到. */ + public static final String ORDER_NOT_FOUND = "order_not_found"; + + /** bussiness_porcessing : 交易处理中. */ + public static final String BUSSINESS_PROCESSING = "bussiness_porcessing"; + + /** bussiness_error : 业务失败. */ + public static final String BUSSINESS_ERROR = "bussiness_error"; + + /** post_faild : 通信失败. */ + public static final String POST_FAILED = "post_faild"; + + /** business_error : 业务错误. */ + public static final String BUSINESS_ERROR = "business_error"; + + /** token_sys_error : 系统异常. */ + public static final String SYS_ERROR = "sys_error"; + } + + /** + * The public final class RespMsg. 返回信息数据字典 + * + * @author zsd + * @version 1.0.0 + * @since 2017-10-26 + */ + public final class RespMsg { + + /** success : 成功. */ + public static final String SUCCESS = "成功"; + + /** input_not_valid : 请求流水号不能为空 */ + public static final String REQ_ID_IS_NULL = "请求流水号不能为空"; + + /** input_not_valid : 卡号不能为空*/ + public static final String CARD_IS_NULL = "卡号不能为空"; + + /** input_not_valid : 用户号不能为空 */ + public static final String USER_IS_NULL = "用户号不能为空"; + + /** input_not_valid : 上车时间不能为空 */ + public static final String INTIME_IS_NULL = "上车时间不能为空"; + + /** input_not_valid : 交易类型不够为空 */ + public static final String TRANSTYPE_IS_NULL = "交易类型不能为空"; + + /** input_not_valid : 交易类型不支持 */ + public static final String TRANSTYPE_NOT_SUPPORT = "交易类型不支持"; + + /** input_not_valid : 未授权 */ + public static final String NOT_AUTH = "未授权"; + + /** input_not_valid : 序号不能为空 */ + public static final String SEQ_NO_NULL = "序号不能为空"; + + /** input_not_valid : 里程计算失败 */ + public static final String MILEAGE_NOT_FOUND = "里程计算失败"; + + /** order_not_found : 订单未找到. */ + public static final String ORDER_NOT_FOUND = "订单未找到"; + + /** input_not_valid : 同站进出 */ + public static final String SAME_STATION = "同站进出"; + + /** input_not_valid : 查询条件不能为空 */ + public static final String FILTER_IS_NULL = "查询条件不能为空"; + + /** input_not_valid : 订单日期不能为空 */ + public static final String TIME_IS_NULL_1 = "订单日期不能为空"; + + /** bussiness_porcessing : 交易处理中. */ + public static final String BUSSINESS_PROCESSING = "交易处理中"; + + /** bussiness_error : 配置未找到. */ + public static final String CONFIG_NOT_FOUND = "配置未找到"; + + /** business_error : 未知错误. */ + public static final String UNKWON_ERROR = "未知错误"; + + /** post_faild : 通信失败. */ + public static final String POST_FAILED = "通信失败"; + + /** rule_sys_error : 系统异常. */ + public static final String SYS_ERROR = "系统异常"; + + /** business_error : 因子未找到. */ + public static final String FACTOR_NOT_FOUND = "因子未找到"; + + } + + /** + * The public final class nfcTravelTransType. NFC行程交易类型 + * + * @author zsd + * @version 1.0.0 + * @since 2017-10-26 + * @company Shanghai JiuYv Software Systems CO.,LTD. + */ + public final class BcTravelTransType { + + /** BUS:公交 */ + public static final String BUS = "BUS"; + + /** SUBWAY : 地铁 */ + public static final String SUBWAY = "SUBWAY"; + + /** RAILWAY : 铁路 */ + public static final String RAILWAY = "RAILWAY"; + + /** MAGLEV : 磁悬浮 */ + public static final String MAGLEV = "MAGLEV"; + } + + /** + * The public final class QrCodeTravelTransType. NFC行程交易类型 + * + * @author zsd + * @version 1.0.0 + * @since 2017-10-26 + * @company Shanghai JiuYv Software Systems CO.,LTD. + */ + public final class QrCodeTravelTransType { + + /** 77:公交 */ + public static final String BUS = "77"; + + /** 21 : 地铁 */ + public static final String SUBWAY = "21"; + + /** 22 : 铁路 */ + public static final String RAILWAY = "22"; + + /** 74 : 磁悬浮 */ + public static final String MAGLEV = "74"; + } + + /** + * The public final class nfcTravelTransType. NFC行程交易类型 + * + * @author zsd + * @version 1.0.0 + * @since 2017-10-26 + * @company Shanghai JiuYv Software Systems CO.,LTD. + */ + public final class NfcTravelStatus { + + /** INIT:初始化 */ + public static final String INIT = "INIT"; + + /** PROCESSING:处理中 */ + public static final String PROCESSING = "PROCESSING"; + + /** WAIT_FOR_SEND:待发送 */ + public static final String WAIT_FOR_SEND = "WAIT_FOR_SEND"; + + /** SUCCESS:成功 */ + public static final String SUCCESS = "SUCCESS"; + + /** FAILED:失败 */ + public static final String FAILED = "FAILED"; + } + + /** + * 交易锁定标识 + */ + public final class TxnLock { + + /** Y : 锁定 */ + public static final String Y = "Y"; + + /** N : 未锁定 */ + public static final String N = "N"; + + } + + /** + * 时间片处理状态 + */ + public final class SendStatus { + + /** NO : 无需处理 */ + public static final String NO = "NO"; + + /** INIT : 初始 */ + public static final String INIT = "INIT"; + + /** PROCESSING : 处理中 */ + public static final String PROCESSING = "PROCESSING"; + + /** SUCCESS : 成功 */ + public static final String SUCCESS = "SUCCESS"; + + /** FAILED : 失败 */ + public static final String FAILED = "FAILED"; + } + + /** + * 时间片类型 + */ + public final class AsynApp { + + /** BC_TRAVEL_SEND : 二维码行程推送重放 */ + public static final String BC_TRAVEL_SEND = "BC_TRAVEL_SEND"; + + /** ERROR_LOG_PROCESS : 错误数据重试 */ + public static final String ERROR_LOG_PROCESS = "ERROR_LOG_PROCESS"; + + } + + /** + * 时间片类型 + */ + public final class NoticeType { + + /** BC_TRAVEL_NOTICE : 二维码行程推送推送 */ + public static final String BC_TRAVEL_NOTICE = "BC_TRAVEL_NOTICE"; + + } + + /** + * 资源号 + */ + public final class ResourceId { + + /** BC_TRAVEL : 二维码行程 */ + public static final String BC_TRAVEL = "QR_CODE"; + + } + + /** + * 排序方式 + */ + public final class SortType { + + /** asc : 正序 */ + public static final String ASC = "asc"; + + /** desc : 倒序 */ + public static final String DESC = "desc"; + + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/FeignOkHttpConfig.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/FeignOkHttpConfig.java new file mode 100644 index 00000000..4c052ba5 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/FeignOkHttpConfig.java @@ -0,0 +1,29 @@ +package com.jiuyv.sptcc.carbon.dataprocess.common; + +import feign.Feign; +import okhttp3.Dispatcher; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.cloud.openfeign.FeignAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 替换spring boot原有的http发送类 + * @author it_Zhongpeng + * + */ +@Configuration +@ConditionalOnClass(Feign.class) +@AutoConfigureBefore(FeignAutoConfiguration.class) +public class FeignOkHttpConfig { + + @Bean + public okhttp3.OkHttpClient okHttpClient() { + Dispatcher pooledispatcher = new Dispatcher(); + pooledispatcher.setMaxRequestsPerHost(10000); + pooledispatcher.setMaxRequests(10000); + return new okhttp3.OkHttpClient.Builder().dispatcher(pooledispatcher).build(); + } + +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/database/ExtData.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/database/ExtData.java new file mode 100644 index 00000000..296c9e3e --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/database/ExtData.java @@ -0,0 +1,63 @@ +package com.jiuyv.sptcc.carbon.dataprocess.common.database; + +import java.util.List; + +public class ExtData { + + private boolean success; + + private Long totalCount; + + private List dataList; + + public ExtData(boolean success, Long totalCount, List dataList) { + this.success = success; + this.totalCount = totalCount; + this.dataList = dataList; + } + + /** + * @return the success + */ + public boolean isSuccess() { + return success; + } + + + /** + * @param success the success to set + */ + public void setSuccess(boolean success) { + this.success = success; + } + + + /** + * @return the totalCount + */ + public Long getTotalCount() { + return totalCount; + } + + /** + * @param totalCount the totalCount to set + */ + public void setTotalCount(Long totalCount) { + this.totalCount = totalCount; + } + + /** + * @return the dataList + */ + public List getDataList() { + return dataList; + } + + /** + * @param dataList the dataList to set + */ + public void setDataList(List dataList) { + this.dataList = dataList; + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/database/exception/BaseException.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/database/exception/BaseException.java new file mode 100644 index 00000000..93684b82 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/database/exception/BaseException.java @@ -0,0 +1,97 @@ +/* + * Created on 2008-11-4 + * + * 基础异常类 + */ +package com.jiuyv.sptcc.carbon.dataprocess.common.database.exception; + +/** + * 基础异常. + * + * @author jiuyv + * @since 2013-12-19 15:36:26 + * @version 1.0.0 + */ +public class BaseException extends Exception { + + /** The Constant serialVersionUID. */ + private static final long serialVersionUID = -2856575469726587413L; + + /** 错误结果代码. */ + private String errorCode; + + /** 错误信息. */ + private String errorMessage; + + /** + * 构造函数. + * + * @param errorCode 错误代码 + * @param throwable Throwable + */ + public BaseException(String errorCode, Throwable throwable) { + super(throwable.getMessage()); + this.errorCode = errorCode; + this.errorMessage = throwable.getMessage(); + } + + /** + * 构造函数. + * + * @param errorCode 错误代码 + * @param errorMessage 错误信息 + */ + public BaseException(String errorCode, String errorMessage) { + super(errorMessage); + this.errorCode = errorCode; + this.errorMessage = errorMessage; + } + + /** + * 构造函数. + * + * @param errorCode 错误代码 + * @param errorMessage 错误信息 + * @param throwable the throwable + */ + public BaseException(String errorCode, String errorMessage, + Throwable throwable) { + super(errorMessage, throwable); + this.errorCode = errorCode; + this.errorMessage = errorMessage; + } + + /** + * @return the errorCode + Get 错误结果代码. + */ + public String getErrorCode() { + return errorCode; + } + + /** + * @param errorCode the errorCode to set + Set 错误结果代码. + */ + public void setErrorCode(String errorCode) { + this.errorCode = errorCode; + } + + /** + * @return the errorMessage + Get 错误信息. + */ + public String getErrorMessage() { + return errorMessage; + } + + /** + * @param errorMessage the errorMessage to set + Set 错误信息. + */ + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/DateUtil.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/DateUtil.java new file mode 100644 index 00000000..6df8d6bc --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/DateUtil.java @@ -0,0 +1,284 @@ +package com.jiuyv.sptcc.carbon.dataprocess.common.util; + +import org.apache.commons.lang.StringUtils; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.Calendar; +import java.util.Date; + +public class DateUtil { + + /** + * 8位时间格式-format + */ + public static final String DATE_8 = "yyyyMMdd"; + + /** + * 14位时间格式-format + */ + public static final String DATE_14 = "yyyyMMddHHmmss"; + + /** + * 月份日期-format + */ + public static final String DATE_MMdd = "MMdd"; + + /** + * 时分秒-format + */ + public static final String DATE_HHmmss = "HHmmss"; + + + /** + * 获取yyyyMMddHHmmss格式的日期字符串 + * + * @return + */ + public static String getTime() { + LocalDateTime time = LocalDateTime.now(); + DateTimeFormatter format = DateTimeFormatter.ofPattern(DATE_14); + return format.format(time); + } + + /** + * 获取yyyyMMdd格式的日期字符串 + * + * @return + */ + public static String getDate() { + long currTime = System.currentTimeMillis(); + Date date = new Date(currTime); + SimpleDateFormat format = new SimpleDateFormat(DATE_8); + return format.format(date); + } + + /** + * 获取当前月yyyyMM + * + * @return + */ + public static String getMonth() { + + return getMonth(0); + } + + /** + * 获取指定月yyyyMM + * + * @param i + * 当前月之后的第几个月,负值表示当前月之前的日期 + * @return + */ + public static String getMonth(int i) { + Date date = new Date(System.currentTimeMillis()); + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.add(Calendar.MONTH, i); + SimpleDateFormat format = new SimpleDateFormat("yyyyMM"); + return format.format(cal.getTime()); + } + + /** + * 返回指定格式的日期字符串 + * + * @param date + * @param pattern + * 例如:yyyyMMddhhmmss + * @return + */ + public static String getFormatDate(Date date, String pattern) { + return new SimpleDateFormat(pattern).format(date); + } + + public static String getDateTime() { + long currTime = System.currentTimeMillis(); + Date date = new Date(currTime); + SimpleDateFormat format = new SimpleDateFormat(DATE_14); + return format.format(date); + } + + public static int compareDate(String startDay, String endDay) { + int n = 0; + DateFormat df = new SimpleDateFormat("yyyyMM"); + Calendar c1 = Calendar.getInstance(); + Calendar c2 = Calendar.getInstance(); + endDay = endDay == null ? df.format(new Date()) : endDay; + try { + c1.setTime(df.parse(startDay)); + c2.setTime(df.parse(endDay)); + } catch (Exception e) { + } + while (!c1.after(c2)) { // 循环对比,直到相等,n 就是所要的结果 + n++; + c1.add(Calendar.MONTH, 1); // 比较月份,月份+1 + } + n--; + return n; + } + + /** + * 判断两个指定时间的大小(接受的日期时间格式为 yyyyMMddHHmmss ) + * + * @param startTm + * @param endTm + * @return + */ + public static int compareTime(String startTm, String endTm) { + LocalDateTime sdt = LocalDateTime.parse(startTm, DateTimeFormatter.ofPattern(DATE_14)); + LocalDateTime edt = LocalDateTime.parse(endTm, DateTimeFormatter.ofPattern(DATE_14)); + if (sdt.isBefore(edt)) { + return -1; + } else if (sdt.isEqual(edt)) { + return 0; + } else { + return 1; + } + } + + /** + * 判断当前日期时间和指定日期时间的大小(接受的日期时间格式为 yyyyMMdd ) + * + * @param dateStr + * 日期 + * @return int 返回1则当前时间在dateStr之后,返回-1则当前时间在dateStr之前,返回0则相同 + */ + public static int compareDateWithNow(String dateStr) { + SimpleDateFormat timeFormator = new SimpleDateFormat(DATE_8); + try { + Date date = timeFormator.parse(dateStr); + Date current = new Date(); + if (current.before(date)) { + return -1; + } + if (current.after(date)) { + return 1; + } else { + return 0; + } + } catch (Exception e) { + throw new RuntimeException("解析日期时间格式出错,期望的字符串格式为[yyyyMMdd]"); + } + + } + + public static int compareDate1WithNow(String dateStr) { + SimpleDateFormat timeFormator = new SimpleDateFormat("yyyyMM"); + try { + Date date = timeFormator.parse(dateStr); + Date current = new Date(); + if (current.before(date)) { + return -1; + } + if (current.after(date)) { + return 1; + } else { + return 0; + } + } catch (Exception e) { + throw new RuntimeException("解析日期时间格式出错,期望的字符串格式为[yyyyMM]"); + } + + } + + public static String getDateByFormat(String format) { + SimpleDateFormat formatter = new SimpleDateFormat(format); + return formatter.format(new Date()); + } + + /** + * 使用预设格式将字符串转为Date + */ + public static Date parse(String strDate) throws ParseException { + return StringUtils.isBlank(strDate) ? null : parse(strDate, DATE_8); + } + + /** + * 使用参数Format将字符串转为Date + */ + public static Date parse(String strDate, String pattern) + throws ParseException { + return StringUtils.isBlank(strDate) ? null : new SimpleDateFormat( + pattern).parse(strDate); + } + + /** + * 获得两天之间相差天数 + */ + public static int getDiffDate(Date date, Date date1) { + return (int) ((date.getTime() - date1.getTime()) / (24 * 3600 * 1000)); + } + + public static String getMonthsFromDate(String begin, String end) { + + int b = Integer.parseInt(begin.substring(0, 4)); + int e = Integer.parseInt(end.substring(0, 4)); + if (e < b) { + return "0"; + } else if (e == b) { + b = Integer.parseInt(begin.substring(4, 6)); + e = Integer.parseInt(end.substring(4, 6)); + if (e < b) { + return "0"; + } else { + return String.valueOf(e - b + 1); + } + } else { + int h = (e - b) * 12; + b = Integer.parseInt(begin.substring(4, 6)); + e = Integer.parseInt(end.substring(4, 6)); + return String.valueOf(h + e - b + 1); + } + } + + public static String getDateAdd(String oldtime, long secs) { + + SimpleDateFormat format = new SimpleDateFormat(DATE_14); + + Date date1; + try { + date1 = format.parse(oldtime); + long Time = (date1.getTime() / 1000) + secs; + + date1.setTime(Time * 1000); + + String mydate1 = format.format(date1); + return mydate1; + } catch (ParseException e) { + return null; + } + + } + + public static long getdiffsecs(String time1, String time2) { + + SimpleDateFormat format = new SimpleDateFormat(DATE_14); + + Date date1; + Date date2; + try { + date1 = format.parse(time1); + date2=format.parse(time2); + long Timediff = (date1.getTime()-date2.getTime()) / 1000; + + + return Timediff; + } catch (ParseException e) { + return 0; + } + + } + + public static String getForwardTime(String srcTime, ChronoUnit timeUnit, Long interval){ + return getForwardTime(srcTime, timeUnit, interval, DATE_14); + } + + public static String getForwardTime(String srcTime, ChronoUnit timeUnit, Long interval, String format){ + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format); + return LocalDateTime.parse(srcTime, dateTimeFormatter).minus(interval, timeUnit).format(dateTimeFormatter); + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/JsonUtil.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/JsonUtil.java new file mode 100644 index 00000000..d926cbda --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/JsonUtil.java @@ -0,0 +1,116 @@ +package com.jiuyv.sptcc.carbon.dataprocess.common.util; + +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + +/** + * The Class JsonUtil. + * + * @author jiuyv + * @version 1.0.0 + * @since 2016-12-6 + */ +public abstract class JsonUtil { + + private static String[] hiddenField = {"idNo", "bindCard", "tAcNo", "bankCardNo", "TAcNo", "BankCardNo", "BindCard", "IdNo", "idPaSideNo", "idPbSideNo", "photoFrontNo", "photoBackNo", "photoHoldNo"}; + + /** The Constant LOGGER. */ + private static final Logger LOGGER = LoggerFactory.getLogger(JsonUtil.class); + + /** The object mapper. */ + private static ObjectMapper objectMapper = new ObjectMapper(); + + static { + objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + objectMapper.setSerializationInclusion(Include.NON_NULL); + } + + /** + * Convert to json. + * + * @param object the object + * @return the string + */ + public static String convertToJson( Object object ) { + try { + return objectMapper.writeValueAsString(object); + } catch (Exception e) { + LOGGER.error("convert failed", e); + return ""; + } + } + + public static T json2Bean(String json, Class T) { + try { + T obj = objectMapper.readValue(json, T); + return obj; + } catch (Exception e) { + LOGGER.error("convert failed", e); + return null; + } + } + + public static List json2List(String json, Class T) { + JavaType javaType = getCollectionType(ArrayList.class, T); + List lst; + try { + lst = objectMapper.readValue(json, javaType); + } catch (Exception e) { + LOGGER.error("convert failed", e); + return null; + } + return lst; + } + + /** + * 获取泛型的Collection Type + * @param collectionClass 泛型的Collection + * @param elementClasses 元素类 + * @return JavaType Java类型 + * @since 1.0 + */ + public static JavaType getCollectionType(Class collectionClass, Class... elementClasses) { + return objectMapper.getTypeFactory().constructParametricType(collectionClass, elementClasses); + } + + /** + * 输出打印日志对象json + * 屏蔽指定域 + * @param obj the object + * @param hiddenField 需隐藏的域 + * @return the string + */ + public static String convertToLogJson(Object obj, String[] hiddenField) { + try { + JSONObject json = new JSONObject(convertToJson(obj)); + for(String hd:hiddenField){ + if(!json.isNull(hd)){//如果不为空才隐藏 + json.put(hd,"************"); + } + } + return json.toString(); + } catch (Exception e) { + LOGGER.error("convert failed", e); + return null; + } + } + + /** + * 输出打印日志对象json + * 屏蔽默认域 + * @param obj the object + * @return the string + */ + public static String convertToLogJson(Object obj) { + return convertToLogJson(obj, hiddenField); + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/LockUtil.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/LockUtil.java new file mode 100644 index 00000000..6ae64110 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/LockUtil.java @@ -0,0 +1,51 @@ +package com.jiuyv.sptcc.carbon.dataprocess.common.util; + +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +/** + * 锁定工具类 + * @author jiuyv + * + */ +public class LockUtil { + + private static final String YYYYMMDDHHMMSSNOMARK = "yyyyMMddHHmmss"; + + /** + * 判断是否上锁以及锁是否过期 + * @param lock 是否上锁 + * @param lockTime 上锁时间 + * @param sysTime 现在时间 + * @param lockLoser 上锁持续时间 + * @return 是否上锁 + */ + public static boolean lockTimeLoser(String lock, String lockTime, String sysTime, long lockLoser) { + // 没上锁就返回false + if (Constant.TxnLock.N.equals(lock)) { + return false; + } + // 或者锁已经过期了也返回false + return !LocalDateTime.parse(sysTime, + DateTimeFormatter.ofPattern(YYYYMMDDHHMMSSNOMARK)).isAfter(LocalDateTime.parse(lockTime, + DateTimeFormatter.ofPattern(YYYYMMDDHHMMSSNOMARK)).plusSeconds(lockLoser)); + } + + /** + * 查询是否持有锁 + * @param lock 锁 + * @param lockTime 锁时间 + * @param threadLockTime 线程锁时间 + * @return 是否持有锁 + */ + public static boolean isOwnedLock(String lock, String lockTime, String threadLockTime) { + // 如果没上锁或者锁时间变了,代表有其他线程在锁过期后进行了处理,本线程返回结果未知 + if (!Constant.TxnLock.Y.equals(lock) || !lockTime.equals(threadLockTime)) { + return false; + } + return true; + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/SFtpUtil.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/SFtpUtil.java new file mode 100644 index 00000000..78e79428 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/SFtpUtil.java @@ -0,0 +1,230 @@ +package com.jiuyv.sptcc.carbon.dataprocess.common.util; + +import com.jcraft.jsch.*; +import com.jiuyv.sptcc.carbon.dataprocess.config.SFtpConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Arrays; + +/** + * @Description: 这是一个sftp的工具类 + * @author shu_k + * @date 2022年3月1日 下午4:18:35 + */ +public class SFtpUtil { + + /** + * 初始化日志对象 + */ + private static final Logger LOGGER = LoggerFactory.getLogger(SFtpUtil.class); + + /** + * 功能描述: 实现文件上传 + * + * @param fileDir 文件所在的路径 + * @param fileName 文件的名称 + * @param inputStream 文件流 + * @param sftpConfig 文件相关的配置信息 + * @return 返回上传结果 + * @throws SftpException + * @throws JSchException + * @throws Exception + */ + public static void uploadFile(String fileDir, String fileName, InputStream inputStream, SFtpConfig sftpConfig) + throws JSchException, SftpException { + ChannelSftp sftp = getSftp(sftpConfig); + LOGGER.info("上传地址地址 {},文件名{}", fileDir, fileName); + try { + if (sftp.ls(fileDir) == null) { + sftp.mkdir(fileDir); + } + sftp.cd(fileDir); + sftp.put(inputStream, fileName, ChannelSftp.OVERWRITE); + } catch (SftpException e) { + // 创建不存在的文件夹,并切换到文件夹 + createDirs(fileDir, sftp); + sftp.cd(fileDir); + sftp.put(inputStream, fileName, ChannelSftp.OVERWRITE); + } finally { + disconnect(sftp); + } + + + } + + public static void downLoadFile(String directory, String fileName, File downLoadFile, SFtpConfig sftpConfig) + throws JSchException { + ChannelSftp sftp = getSftp(sftpConfig); + try (FileOutputStream fs = new FileOutputStream(downLoadFile)) { + directory = directory.concat("/").concat(fileName); + LOGGER.info("下载完成,下载地址地址 {},文件名{}", directory, fileName); + sftp.get(directory, fs); + LOGGER.info("下载完成,下载地址地址 {}", downLoadFile.getAbsolutePath()); + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + disconnect(sftp); + } + + } + + /** + * sftp流转http流 + * @param directory 目标路径 + * @param fileName 目标文件名 + * @param response 输出流response + * @param sftpConfig sftp配置 + * @throws JSchException 异常 + */ + public static void downSftp2Http(String directory, String fileName, HttpServletResponse response, SFtpConfig sftpConfig) throws JSchException { + ChannelSftp sftp = getSftp(sftpConfig); + try (OutputStream fs = response.getOutputStream()) { + directory = directory.concat("/").concat(fileName); + LOGGER.info("下载开始,下载地址地址 {},文件名{}", directory, fileName); + sftp.get(directory, fs); + LOGGER.info("下载完成"); + } catch (Exception e) { + throw new JSchException(e.getLocalizedMessage()); + } finally { + disconnect(sftp); + } + } + + /** + * 功能描述: 创建sftp连接 + * + * @param sftpConfig sftp连接对象 + * @return 返回 sftp通道对象 + * @throws Exception + */ + private static ChannelSftp getSftp(SFtpConfig sftpConfig) throws JSchException { + JSch jsch = new JSch(); + Session session = getSession(jsch, sftpConfig.getHost(), sftpConfig.getUserName(), sftpConfig.getPort()); + session.setPassword(sftpConfig.getPassword()); + session.connect(sftpConfig.getSessionConnectTimeout()); + Channel channel = session.openChannel(sftpConfig.getProtocol()); + channel.connect(sftpConfig.getChannelConnectedTimeout()); + return (ChannelSftp) channel; + } + + /** + * 创建session + * + * @param jsch jsch对象 + * @param host sftpIP地址 + * @param username sftp账号 + * @param port sftp端口 + * @return 返回 session对象 + * @throws Exception + */ + private static Session getSession(JSch jsch, String host, String username, Integer port) throws JSchException { + Session session; + if (port <= 0) { + session = jsch.getSession(username, host); + } else { + session = jsch.getSession(username, host, port); + } + session.setConfig("StrictHostKeyChecking", "no"); + return session; + } + + /** + * 功能描述: 关闭连接 + * + * @param sftp sftp对象 + */ + private static void disconnect(ChannelSftp sftp) { + try { + if (sftp != null) { + if (sftp.isConnected()) { + sftp.disconnect(); + } else if (sftp.isClosed()) { + LOGGER.info("sftp已经关闭"); + } + if (null != sftp.getSession()) { + sftp.getSession().disconnect(); + } + } + } catch (JSchException e) { + e.printStackTrace(); + } + } + + /** + * 功能描述: 创建文件夹 + * + * @param dirPath 需要创建文件夹的路径 + * @param sftp sftp对象 + * @return 返回创建的结果 + */ + private static boolean createDirs(String dirPath, ChannelSftp sftp) { + if (dirPath != null && !dirPath.isEmpty() && sftp != null) { + String[] dirs = Arrays.stream(dirPath.split("/")).filter(a -> a != null && !a.equals("")) + .toArray(String[]::new); + String tempPath = ""; + for (String dir : dirs) { + try { + tempPath+="/"+dir; + sftp.cd(tempPath); + LOGGER.info("进入的目录是 {}", dir); + } catch (Exception e) { + try { + sftp.mkdir(tempPath); + LOGGER.info("创建的目录是 {}", dir); + sftp.cd(dir); + LOGGER.info("进入的目录是 {}", dir); + } catch (SftpException e1) { + LOGGER.error("创建失败的目录是:{}", dir, e1); + e1.printStackTrace(); + } + } + } + return true; + } + return false; + } + + /** + * 递归根据路径创建文件夹 + * + * @param dirs 根据 / 分隔后的数组文件夹名称 + * @param tempPath 拼接路径 + * @param length 文件夹的格式 + * @param index 数组下标 + * @return + */ + public void mkdirDir(String[] dirs, String tempPath, int length, int index, ChannelSftp sftp) { + // 以"/a/b/c/d"为例按"/"分隔后,第0位是"";顾下标从1开始 + index++; + if (index < length) { + // 目录不存在,则创建文件夹 + tempPath += "/" + dirs[index]; + } + try { + LOGGER.info("检测目录[" + tempPath + "]"); + sftp.cd(tempPath); + if (index < length) { + mkdirDir(dirs, tempPath, length, index,sftp); + } + } catch (SftpException ex) { + LOGGER.warn("创建目录[" + tempPath + "]"); + try { + sftp.mkdir(tempPath); + sftp.cd(tempPath); + } catch (SftpException e) { + e.printStackTrace(); + LOGGER.error("创建目录[" + tempPath + "]失败,异常信息[" + e.getMessage() + "]"); + + } + LOGGER.info("进入目录[" + tempPath + "]"); + mkdirDir(dirs, tempPath, length, index,sftp); + } + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/Sm3Util.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/Sm3Util.java new file mode 100644 index 00000000..d64fd9eb --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/Sm3Util.java @@ -0,0 +1,83 @@ +package com.jiuyv.sptcc.carbon.dataprocess.common.util; + +import org.bouncycastle.crypto.digests.SM3Digest; +import org.bouncycastle.crypto.macs.HMac; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.bouncycastle.pqc.math.linearalgebra.ByteUtils; + +import java.io.UnsupportedEncodingException; +import java.security.Security; +import java.util.Arrays; + +/** + * Created with IntelliJ IDEA. + * + * @author Shawffer + * @description: + * @date: 2022-07-19 + * @time: 17:35 + */ +public class Sm3Util { + + static { + Security.addProvider(new BouncyCastleProvider()); + } + + private static final String ENCODING = "UTF-8"; + + /** + * 无密钥加密 + * @param text + * @return + */ + public static String encrypt(String text) throws UnsupportedEncodingException { + String resultHexStr = ""; + byte[] srcData = text.getBytes(ENCODING); + byte[] resultHash = hash(srcData); + resultHexStr = ByteUtils.toHexString(resultHash); + return resultHexStr; + } + + public static byte[] hash(byte[] srcData){ + SM3Digest digest = new SM3Digest(); + digest.update(srcData, 0, srcData.length); + byte[] hash = new byte[digest.getDigestSize()]; + digest.doFinal(hash, 0); + return hash; + } + + /** + * 有密钥加密 + * @param key + * @param srcData + * @return + */ + public static byte[] hmac(byte[] key, byte[] srcData){ + KeyParameter keyParameter = new KeyParameter(key); + SM3Digest digest = new SM3Digest(); + HMac mac = new HMac(digest); + mac.init(keyParameter); + mac.update(srcData, 0, srcData.length); + byte[] result = new byte[mac.getMacSize()]; + mac.doFinal(result, 0); + return result; + } + + /** + * 校验 + * @param srcStr + * @param sm3HexString + * @return + * @throws UnsupportedEncodingException + */ + public static boolean verify(String srcStr, String sm3HexString) throws UnsupportedEncodingException { + boolean flag; + byte[] srcData = srcStr.getBytes(ENCODING); + byte[] sm3Hash = ByteUtils.fromHexString(sm3HexString); + byte[] newHash = hash(srcData); + flag = Arrays.equals(sm3Hash, newHash); + return flag; + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/UUIDUtil.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/UUIDUtil.java new file mode 100644 index 00000000..3b5efb0c --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/util/UUIDUtil.java @@ -0,0 +1,22 @@ +package com.jiuyv.sptcc.carbon.dataprocess.common.util; + +import com.fasterxml.uuid.EthernetAddress; +import com.fasterxml.uuid.Generators; +import com.fasterxml.uuid.impl.TimeBasedGenerator; + +import java.util.UUID; + +public class UUIDUtil { + //修改成constructMulticastAddress ,防止jmv多个实例在一台服务器上 + private static TimeBasedGenerator uuidGenerator = Generators.timeBasedGenerator(EthernetAddress.constructMulticastAddress()); + // need to pass Ethernet address; can either use real one (shown here) + public static UUID getTimebaseUUID(){ + // or bogus which would be gotten with: EthernetAddress.constructMulticastAddress() + + // also: we don't specify synchronizer, getting an intra-JVM syncer; there is + // also external file-locking-based synchronizer if multiple JVMs run JUG + return uuidGenerator.generate(); + } + + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/validate/BizCheck.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/validate/BizCheck.java new file mode 100644 index 00000000..654dff50 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/common/validate/BizCheck.java @@ -0,0 +1,130 @@ +package com.jiuyv.sptcc.carbon.dataprocess.common.validate; + +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import org.apache.commons.lang.StringUtils; + +import java.util.Collection; + +/** + * The Class BizCheck. + * + * @author cowyk + * @since 2014-2-17 15:41:44 + * @version 1.0.0 + */ +public abstract class BizCheck { + + /** + * 验证为非空对象. + * + * @param toChk the to chk + * @param errorCode 错误代码 + * @param errorMsg 错误信息 + * @throws BaseException the base exception + */ + public static void notNull(Object toChk, String errorCode, String errorMsg) throws BaseException { + if ( toChk == null ) { + throw new BaseException(errorCode, errorMsg); + } + } + + /** + * 验证集合对象非空. + * + * @param toChk the to chk + * @param errorCode 错误代码 + * @param errorMsg 错误信息 + * @throws BaseException the base exception + */ + @SuppressWarnings("rawtypes") + public static void notEmpty(Collection toChk, String errorCode, String errorMsg) throws BaseException { + if ( toChk == null || toChk.isEmpty() ) { + throw new BaseException(errorCode, errorMsg); + } + } + + /** + * 验证字符串为非空串. + * + * @param toChk the to chk + * @param errorCode 错误代码 + * @param errorMsg 错误信息 + * @throws BaseException the base exception + */ + public static void notBlank(String toChk, String errorCode, String errorMsg) throws BaseException { + if ( StringUtils.isBlank(toChk) ) { + throw new BaseException(errorCode, errorMsg); + } + } + + /** + * 验证对象相等 调用equals方法,为null时也报错. + * + * @param toChk the to chk + * @param target the target + * @param errorCode 错误代码 + * @param errorMsg 错误信息 + * @throws BaseException the base exception + */ + public static void same(Object toChk, Object target, String errorCode, String errorMsg) throws BaseException { + if ( toChk == null || target == null ) { + throw new BaseException(errorCode, errorMsg); + } + if ( !toChk.equals(target) ) { + throw new BaseException(errorCode, errorMsg); + } + } + + /** + * 验证对象不相等 调用equals方法,比较对象相同时报错, + * 为null时也报错. + * + * @param toChk the to chk + * @param target the target + * @param errorCode the error code + * @param errorMsg the error msg + * @throws BaseException the base exception + */ + public static void notSame(Object toChk, Object target, String errorCode, String errorMsg) throws BaseException { + if ( toChk == null || target == null ) { + throw new BaseException(errorCode, errorMsg); + } + if ( toChk.equals(target) ) { + throw new BaseException(errorCode, errorMsg); + } + } + + /** + * 验证结果为True, false时抛出异常. + * + * @param toChk the to chk + * @param errorCode the error code + * @param errorMsg the error msg + * @throws BaseException the base exception + */ + public static void isTrue(boolean toChk, String errorCode, + String errorMsg) throws BaseException { + if ( !toChk ) { + throw new BaseException(errorCode, errorMsg); + } + } + + /** + * 验证字符串长度是否在规定返回内 + * 空也返回错误. + * + * @param toChk the to chk + * @param min min num + * @param max max num + * @param errorCode the error code + * @param errorMsg the error msg + * @throws BaseException the base exception + */ + public static void lengthValidate(String toChk, int min, int max, String errorCode, + String errorMsg) throws BaseException { + if (StringUtils.isBlank(toChk) || toChk.length() < min ||toChk.length() > max ) { + throw new BaseException(errorCode, errorMsg); + } + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/AcctSftpConfig.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/AcctSftpConfig.java new file mode 100644 index 00000000..61fa06af --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/AcctSftpConfig.java @@ -0,0 +1,16 @@ +package com.jiuyv.sptcc.carbon.dataprocess.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Description: ftp配置类 + * @author shu_k + * @date 2021年9月3日 下午2:45:46 + */ + +@Component +@ConfigurationProperties(prefix = "bc-travel.acct.sftp") +public class AcctSftpConfig extends SFtpConfig { + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/ActuatorSecurityConfig.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/ActuatorSecurityConfig.java new file mode 100644 index 00000000..b93706ed --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/ActuatorSecurityConfig.java @@ -0,0 +1,37 @@ +package com.jiuyv.sptcc.carbon.dataprocess.config; + + +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; + +@Configuration +@EnableWebSecurity +public class ActuatorSecurityConfig extends WebSecurityConfigurerAdapter { + + @Autowired + Environment env; + + @Override + protected void configure(HttpSecurity security) throws Exception { + + String contextPath = env.getProperty("management.endpoints.web.base-path"); + if(StringUtils.isEmpty(contextPath)) { + contextPath = "/actuator"; + } + security.csrf().disable(); + security.authorizeRequests() + .antMatchers("/**"+contextPath+"/serviceregistry","/**"+contextPath+"/refresh") + .access("hasIpAddress(\"127.0.0.1\")") + .antMatchers("/**"+contextPath+"/**") + .authenticated() + .anyRequest() + .permitAll() + .and() + .httpBasic(); + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/BcTravelAuthFilterConfig.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/BcTravelAuthFilterConfig.java new file mode 100644 index 00000000..5c92184f --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/BcTravelAuthFilterConfig.java @@ -0,0 +1,150 @@ +package com.jiuyv.sptcc.carbon.dataprocess.config; + +import com.google.common.base.Charsets; +import com.google.common.hash.BloomFilter; +import com.google.common.hash.Funnels; +import com.jiuyv.spring.starter.bloomfilter.v2.filter.FilterInstance; +import com.jiuyv.spring.starter.bloomfilter.v2.filter.IFilterConfig; +import com.jiuyv.sptcc.tanph.auth.entity.CommonRequestVO; +import com.jiuyv.sptcc.tanph.auth.entity.auth.api.tanph.AuthSearchForQRFilterRequestVo; +import com.jiuyv.sptcc.tanph.auth.entity.auth.api.tanph.AuthSearchForQRFilterResponseVo; +import com.jiuyv.sptcc.carbon.dataprocess.api.IAuthTanphFeign; +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.DateUtil; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.JsonUtil; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.UUIDUtil; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.AuthInfo; +import com.jiuyv.sptcc.carbon.dataprocess.service.ISysCommonService; +import feign.Response; +import org.apache.http.HttpStatus; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.time.temporal.ChronoUnit; +import java.util.List; + +/** + * Created with IntelliJ IDEA. + * + * @author zsd + * @description: + * @date: 2022-09-09 + * @time: 15:46 + */ +@Component +public class BcTravelAuthFilterConfig implements IFilterConfig { + + public static final String FILTER_NAME = "BC_TRAVEL_AUTH"; + + private static final Logger LOGGER = LoggerFactory.getLogger(BcTravelAuthFilterConfig.class); + + private static final Long DEFAULT_EXPECTED = 100000000L; + + private Long expectedInsertions = DEFAULT_EXPECTED; + + @Autowired + private IAuthTanphFeign authService; + + @Autowired + private ISysCommonService sysCommonService; + + public BcTravelAuthFilterConfig() { + } + + public BcTravelAuthFilterConfig(Long expectedInsertions) { + if (expectedInsertions != null) { + this.expectedInsertions = expectedInsertions; + } else { + this.expectedInsertions = DEFAULT_EXPECTED; + } + } + +// /** +// * 每日00:01 a.m. 触发 +// * 每日重建filter用 重建频率 +// * +// * @return +// */ +// @Override +// public String cronForRebuild() { +// return "*/30 * * * * ?"; +// } + + @Override + public Long expectedInsertions() { + return this.expectedInsertions; + } + + @Override + public String filterName() { + return FILTER_NAME; + } + + @Override + public void fetchAllDate(FilterInstance instance) { + try { + CommonRequestVO commonRequestVO = new CommonRequestVO(); + commonRequestVO.setOrgCode(Constant.OrgCode.TANPH); + commonRequestVO.setReqId(UUIDUtil.getTimebaseUUID().toString()); + commonRequestVO.setReqTime(DateUtil.getDateTime()); + LOGGER.info("bloomfilter 全量更新调用接口"); + Response response = authService.syncListSearchForFullQRFilter(commonRequestVO); + if (response.status() == HttpStatus.SC_OK) { + instance.putAll(FilterInstance.buildInstanceWithData(this, BloomFilter.readFrom(response.body().asInputStream(), Funnels.stringFunnel(Charsets.UTF_8)))); + } else { + LOGGER.error("get response status error, status:{}", response.status()); + throw new Exception("bloomfilter 获取远端调用返回失败"); + } + } catch (Exception e) { + LOGGER.info("获取全量更新数据失败", e); + } + } + + @Override + public void fetchIncrementData(FilterInstance instance, ChronoUnit timeUnit, Long interval) { + String nowTime = sysCommonService.selectSysCurrentTime(); + String startTime = DateUtil.getForwardTime(nowTime, timeUnit, interval); + AuthSearchForQRFilterRequestVo authSearchForQRFilterRequestVo = new AuthSearchForQRFilterRequestVo(); + authSearchForQRFilterRequestVo.setResourceId(Constant.ResourceId.BC_TRAVEL); + authSearchForQRFilterRequestVo.setSyncEndTime(nowTime); + authSearchForQRFilterRequestVo.setSyncStartTime(startTime); + authSearchForQRFilterRequestVo.setOrgCode(Constant.OrgCode.TANPH); + authSearchForQRFilterRequestVo.setReqId(UUIDUtil.getTimebaseUUID().toString()); + authSearchForQRFilterRequestVo.setReqTime(nowTime); + LOGGER.info("bloomfilter 增量更新调用接口"); + AuthSearchForQRFilterResponseVo respVo = authService.authListSearchForQRFilter(authSearchForQRFilterRequestVo); + List list = respVo.getUserIdList(); + LOGGER.info("bloomfilter 增量数据获取成功"+ JsonUtil.convertToJson(respVo)); + for (String s : list) { + instance.put(s); + } + } + + @Override + public Object filterNotPassDefaultReturn(Object firstReqParams) { + return new AuthInfo(); + } + +// @Override +// public String cronForRefresh() { +// return "*/10 * * * * ?"; +// } + + @Override + public String cronForRefresh() { + return "0 0/5 * * * *"; + } + + @Override + public ChronoUnit fetchIncrementIntervalTimeUnit() { + return ChronoUnit.MINUTES; + } + + @Override + public long fetchIncrementIntervalInterval() { + return 20; + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/DataCenterSftpConfig.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/DataCenterSftpConfig.java new file mode 100644 index 00000000..c4dee762 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/DataCenterSftpConfig.java @@ -0,0 +1,16 @@ +package com.jiuyv.sptcc.carbon.dataprocess.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Description: ftp配置类 + * @author shu_k + * @date 2021年9月3日 下午2:45:46 + */ + +@Component +@ConfigurationProperties(prefix = "bc-travel.data-center.sftp") +public class DataCenterSftpConfig extends SFtpConfig { + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/SFtpConfig.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/SFtpConfig.java new file mode 100644 index 00000000..ca73c0f6 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/SFtpConfig.java @@ -0,0 +1,126 @@ +package com.jiuyv.sptcc.carbon.dataprocess.config; + +/** + * @Description: sftp配置类 + * @author shu_k + * @date 2021年9月3日 下午2:45:46 + */ + +public class SFtpConfig { + + /** + * IP + */ + private String host; + /** + * 端口 + */ + private Integer port; + + /** + * 账号 + */ + private String userName; + + /** + * 密码 + */ + private String password; + + /** + * 远端路径 + */ + private String remoteDir; + + /** + * 本地路径 + */ + private String localDir; + + /** + * 协议 + */ + private String protocol; + + /** + * session连接超时时间 + */ + private Integer sessionConnectTimeout; + + /** + * channel连接超时时间 + */ + private Integer channelConnectedTimeout; + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public Integer getPort() { + return port; + } + + public void setPort(Integer port) { + this.port = port; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getProtocol() { + return protocol; + } + + public void setProtocol(String protocol) { + this.protocol = protocol; + } + + public Integer getSessionConnectTimeout() { + return sessionConnectTimeout; + } + + public void setSessionConnectTimeout(Integer sessionConnectTimeout) { + this.sessionConnectTimeout = sessionConnectTimeout; + } + + public Integer getChannelConnectedTimeout() { + return channelConnectedTimeout; + } + + public void setChannelConnectedTimeout(Integer channelConnectedTimeout) { + this.channelConnectedTimeout = channelConnectedTimeout; + } + + public String getRemoteDir() { + return remoteDir; + } + + public void setRemoteDir(String remoteDir) { + this.remoteDir = remoteDir; + } + + public String getLocalDir() { + return localDir; + } + + public void setLocalDir(String localDir) { + this.localDir = localDir; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/XxlJobConfig.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/XxlJobConfig.java new file mode 100644 index 00000000..5137d905 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/config/XxlJobConfig.java @@ -0,0 +1,56 @@ +package com.jiuyv.sptcc.carbon.dataprocess.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * xxl-job config + * + */ +@Configuration +@ConditionalOnProperty(prefix="xxl", name="enable", havingValue = "true") +public class XxlJobConfig { + private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class); + + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.executor.appname}") + private String appName; + + @Value("${xxl.job.executor.ip}") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + @Value("${xxl.job.accessToken}") + private String accessToken; + + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("${xxl.job.executor.logretentiondays}") + private int logRetentionDays; + + + @Bean(initMethod = "start", destroyMethod = "destroy") + public XxlJobSpringExecutor xxlJobExecutor() { + logger.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appName); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + return xxlJobSpringExecutor; + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/controller/DataProcessBatchConsoleController.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/controller/DataProcessBatchConsoleController.java new file mode 100644 index 00000000..92730376 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/controller/DataProcessBatchConsoleController.java @@ -0,0 +1,95 @@ +package com.jiuyv.sptcc.carbon.dataprocess.controller; + +import com.jiuyv.sptcc.carbon.dataprocess.api.IDataProcessBatchConsoleApi; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.JsonUtil; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.*; +import com.jiuyv.sptcc.carbon.dataprocess.plugin.IProcess; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class DataProcessBatchConsoleController implements IDataProcessBatchConsoleApi { + + /** The Constant LOGGER. */ + private static final Logger LOGGER = LoggerFactory + .getLogger(DataProcessBatchConsoleController.class); + + /** 二维码行程通知分页查询process */ + @Autowired + private IProcess bcTravelNoticePageProcess; + + /** 失败消息分页查询process */ + @Autowired + private IProcess noticeErrorPageProcess; + + /** 二维码行程推送重新处理process */ + @Autowired + private IProcess bcTravelNoticeReprocess; + + /** 失败消息重新处理process */ + @Autowired + private IProcess noticeErrorReprocess; + + /** + * 二维码行程推送分页查询 + * @param req 请求对象 + * @return 返回对象 + */ + @Override + public BcTravelNoticePageRespVo bcTravelNoticePage(@RequestBody BcTravelNoticePageReqVo req) { + LOGGER.info("BcTravelNoticePage start..."); + LOGGER.info("BcTravelNoticePage req:[{}]" , JsonUtil.convertToLogJson(req)); + BcTravelNoticePageRespVo resp = bcTravelNoticePageProcess.process(req); + LOGGER.info("BcTravelNoticePage resp code:[{}], totalCount [{}]" , resp.getRespCode(), resp.getTotalCount()); + LOGGER.info("BcTravelNoticePage end..."); + return resp; + } + + /** + * 失败消息分页查询 + * @param req 请求对象 + * @return 返回对象 + */ + @Override + public NoticeErrorPageRespVo noticeErrorPage(@RequestBody NoticeErrorPageReqVo req) { + LOGGER.info("noticeErrorPage start..."); + LOGGER.info("noticeErrorPage req:[{}]" , JsonUtil.convertToLogJson(req)); + NoticeErrorPageRespVo resp = noticeErrorPageProcess.process(req); + LOGGER.info("noticeErrorPage resp code:[{}], totalCount [{}]" , resp.getRespCode(), resp.getTotalCount()); + LOGGER.info("noticeErrorPage end..."); + return resp; + } + + /** + * 二维码行程推送重新处理 + * @param req 请求对象 + * @return 返回对象 + */ + @Override + public BcTravelNoticeReprocessRespVo bcTravelNoticeReprocess(@RequestBody BcTravelNoticeReprocessReqVo req) { + LOGGER.info("BcTravelNoticeReprocess start..."); + LOGGER.info("BcTravelNoticeReprocess req:[{}]" , JsonUtil.convertToLogJson(req)); + BcTravelNoticeReprocessRespVo resp = bcTravelNoticeReprocess.process(req); + LOGGER.info("BcTravelNoticeReprocess resp:[{}]" ,JsonUtil.convertToLogJson(resp)); + LOGGER.info("BcTravelNoticeReprocess end..."); + return resp; + } + + /** + * 失败消息重新处理 + * @param req 请求对象 + * @return 返回对象 + */ + @Override + public NoticeErrorReprocessRespVo noticeErrorReprocess(@RequestBody NoticeErrorReprocessReqVo req) { + LOGGER.info("noticeErrorReprocess start..."); + LOGGER.info("noticeErrorReprocess req:[{}]" , JsonUtil.convertToLogJson(req)); + NoticeErrorReprocessRespVo resp = noticeErrorReprocess.process(req); + LOGGER.info("noticeErrorReprocess resp:[{}]" ,JsonUtil.convertToLogJson(resp)); + LOGGER.info("noticeErrorReprocess end..."); + return resp; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/controller/DataProcessController.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/controller/DataProcessController.java new file mode 100644 index 00000000..fa27a381 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/controller/DataProcessController.java @@ -0,0 +1,176 @@ +package com.jiuyv.sptcc.carbon.dataprocess.controller; + +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.DateUtil; +import com.jiuyv.sptcc.carbon.dataprocess.common.validate.BizCheck; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.AuthInfo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcBcTravelNoticeVo; +import com.jiuyv.sptcc.carbon.dataprocess.service.IBloomFilterService; +import com.jiuyv.sptcc.carbon.dataprocess.service.IDcBcTravelNoticeService; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.Map; + +@Component +public class DataProcessController { + + /** + * LOGGER + */ + private static final Logger LOGGER = LoggerFactory.getLogger(DataProcessController.class); + + private static final Map BUSINESS_CODE_MAP = new HashMap<>(); + + static { + BUSINESS_CODE_MAP.put(Constant.QrCodeTravelTransType.BUS, Constant.BcTravelTransType.BUS); + BUSINESS_CODE_MAP.put(Constant.QrCodeTravelTransType.SUBWAY, Constant.BcTravelTransType.SUBWAY); + BUSINESS_CODE_MAP.put(Constant.QrCodeTravelTransType.RAILWAY, Constant.BcTravelTransType.RAILWAY); + BUSINESS_CODE_MAP.put(Constant.QrCodeTravelTransType.MAGLEV, Constant.BcTravelTransType.MAGLEV); + } + + private static final DateTimeFormatter sdf = DateTimeFormatter.ofPattern(DateUtil.DATE_14); + + private static final DateTimeFormatter sdf_c = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + /** 错误数据service */ + @Autowired + private IDcBcTravelNoticeService service; + + @Autowired + private IBloomFilterService bloomFilterService; + + /** + * 处理消息体 + * @param oriMsg 消息体内容 + * @throws BaseException 异常 + */ + public void processMsg(String oriMsg) throws BaseException { + // LOGGER.info("recevie msg: [{}]", oriMsg); + if (StringUtils.isEmpty(oriMsg)) { + return; + } + // 消息转推送对象 + DcBcTravelNoticeVo travel = convert2Notice(oriMsg); + try { + // 数据完整性校验 + checkData(travel); + } catch (BaseException e) { + LOGGER.info("bcTravel checkData error: [{}], [{}]", e.getErrorCode(), e.getErrorMessage()); + return; + } + // 获取授权机构号userToken + AuthInfo authInfo = bloomFilterService.getBcAuthByUser(travel.getUserId(), travel.getInTransTime()); + // 未授权 + if (authInfo == null || MapUtils.isEmpty(authInfo.getUserTokens())) { + // LOGGER.info("not authed..."); + // 无需重试,记录日志即可,不记录失败表 + return; + } + travel = setUserTokens(travel, authInfo); + // 新增记录 + service.doInsert(travel); + // 处理数据 + // ResultBean rb = bcTravelNoticeProcess.process(travel); + // LOGGER.info("travel process result: [{}], respCode:[{}], respMessage:[{}]", rb.isSuccess(), rb.getRespCode(), rb.getRespMessage()); + } + + /** + * 文件内容转换为推送记录 + * @param msg 文本内容 + * @return 推送对象 + */ + private DcBcTravelNoticeVo convert2Notice(String msg) { + String[] dataFields = msg.split(","); + DcBcTravelNoticeVo notice = new DcBcTravelNoticeVo(); + // 行程单号,中台自己生成的 + notice.setTravelNo(getFieldValue(dataFields[0])); + // 行业类型转换 + notice.setTransType(BUSINESS_CODE_MAP.getOrDefault(getFieldValue(dataFields[1]), getFieldValue(dataFields[1]))); + // 交通卡用户号 + notice.setUserId(getFieldValue(dataFields[2])); + // 进战站点号 + notice.setInStationId(getFieldValue(dataFields[3])); + // 出战站点号 + notice.setOutStationId(getFieldValue(dataFields[4])); + // 拉码渠道 + notice.setBcChannel(getFieldValue(dataFields[5])); + // 交易时间 格式转换 数据中台是 + if (StringUtils.isNotBlank(getFieldValue(dataFields[6]))) { + notice.setInTransTime(LocalDateTime.parse(getFieldValue(dataFields[6]), sdf_c).format(sdf)); + } + return notice; + } + + /** + * 数据完整性校验 + * @param req 行程对象 + */ + private void checkData(DcBcTravelNoticeVo req) throws BaseException { + // 卡号、时间、交易类型 + BizCheck.notBlank(req.getUserId(), Constant.RespCode.INPUT_NOT_VALID, Constant.RespMsg.USER_IS_NULL); + BizCheck.notBlank(req.getInTransTime(), Constant.RespCode.INPUT_NOT_VALID, Constant.RespMsg.INTIME_IS_NULL); + BizCheck.notBlank(req.getTransType(), Constant.RespCode.INPUT_NOT_VALID, Constant.RespMsg.TRANSTYPE_IS_NULL); + // 业务类型过滤 + if (!Constant.BcTravelTransType.BUS.equals(req.getTransType()) + && !Constant.BcTravelTransType.SUBWAY.equals(req.getTransType())) { + throw new BaseException(Constant.RespCode.INPUT_NOT_VALID, Constant.RespMsg.TRANSTYPE_NOT_SUPPORT); + } + // 地铁需要判断出入站信息是否完整 + if (Constant.BcTravelTransType.SUBWAY.equals(req.getTransType())) { + BizCheck.notBlank(req.getInStationId(), Constant.RespCode.INPUT_NOT_VALID, Constant.RespMsg.CARD_IS_NULL); + BizCheck.notBlank(req.getOutStationId(), Constant.RespCode.INPUT_NOT_VALID, Constant.RespMsg.INTIME_IS_NULL); + if (req.getInStationId().equals(req.getOutStationId())) { + throw new BaseException(Constant.RespCode.INPUT_NOT_VALID, Constant.RespMsg.SAME_STATION); + } + } + } + + /** + * 设置授权信息和其他信息 + * @param vo 行程 + * @param auth 卡授权信息 + * @return 行程 + */ + private DcBcTravelNoticeVo setUserTokens(DcBcTravelNoticeVo vo, AuthInfo auth) { + Map userTokenMap = auth.getUserTokens(); + StringBuffer firstChannels = new StringBuffer(); + StringBuffer secondChannels = new StringBuffer(); + StringBuffer userTokens = new StringBuffer(); + for (Map.Entry entry : userTokenMap.entrySet()) { + String key = entry.getKey(); + String[] channels = key.split("_"); + String value = entry.getValue(); + firstChannels.append(channels[0]).append(","); + secondChannels.append(channels[1]).append(","); + userTokens.append(value).append(","); + } + vo.setFirstChannels(firstChannels.substring(0, firstChannels.length() - 1)); + vo.setSecondChannels(secondChannels.substring(0, secondChannels.length() - 1)); + vo.setUserTokens(userTokens.substring(0, userTokens.length() - 1)); + vo.setUserId(auth.getUserId()); + return vo; + } + + /** + * 获取CSV文件的值 + * \N是空值 + * @param value 原始值 + * @return 值 + */ + private String getFieldValue(String value) { + if (StringUtils.isBlank(value) || "\\N".equals(value)) { + return ""; + } + return value.trim(); + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/controller/PingController.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/controller/PingController.java new file mode 100644 index 00000000..7513e364 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/controller/PingController.java @@ -0,0 +1,44 @@ +package com.jiuyv.sptcc.carbon.dataprocess.controller; + +import com.jiuyv.sptcc.carbon.dataprocess.api.IPingApi; +import com.jiuyv.sptcc.carbon.dataprocess.service.ICalculateReductionService; +import com.jiuyv.sptcc.carbon.dataprocess.service.IPingTestService; +import com.jiuyv.sptcc.carbon.dataprocess.service.IReadFileService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class PingController implements IPingApi { + private static final Logger LOGGER = LoggerFactory.getLogger(PingController.class); + @Autowired + private IPingTestService pingTestService; + + @Autowired + private IReadFileService readFileService; + + @Autowired + private ICalculateReductionService calculateReductionService; + + @Override + public boolean pingTest() { + LOGGER.info("receive ping"); + + boolean pingresult = pingTestService.ping(); + LOGGER.info("ping result [{}]", pingresult); + return pingresult; + } + + @GetMapping("test00") + public void test00() { + readFileService.readFileAndInsertDatabase(); + } + + @GetMapping("test11") + public void test11() { + calculateReductionService.calculate(); + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BcSubwayMileage.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BcSubwayMileage.java new file mode 100644 index 00000000..0ede7fc5 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BcSubwayMileage.java @@ -0,0 +1,61 @@ +package com.jiuyv.sptcc.carbon.dataprocess.domain; + +import java.io.Serializable; + +/** + * + * @TableName TBL_BC_SUBWAY_MILEAGE + */ +public class BcSubwayMileage implements Serializable { + private static final long serialVersionUID = 1L; + + private String inStationId; + + private String outStationId; + + private Integer mileage; + + private String inStationName; + + private String outStationName; + + public String getInStationId() { + return inStationId; + } + + public void setInStationId(String inStationId) { + this.inStationId = inStationId; + } + + public String getOutStationId() { + return outStationId; + } + + public void setOutStationId(String outStationId) { + this.outStationId = outStationId; + } + + public Integer getMileage() { + return mileage; + } + + public void setMileage(Integer mileage) { + this.mileage = mileage; + } + + public String getInStationName() { + return inStationName; + } + + public void setInStationName(String inStationName) { + this.inStationName = inStationName; + } + + public String getOutStationName() { + return outStationName; + } + + public void setOutStationName(String outStationName) { + this.outStationName = outStationName; + } +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BcTravelNotice.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BcTravelNotice.java new file mode 100644 index 00000000..2d395d56 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/domain/BcTravelNotice.java @@ -0,0 +1,415 @@ +package com.jiuyv.sptcc.carbon.dataprocess.domain; + +import java.io.Serializable; +import java.util.Date; + +/** + * + * @TableName TBL_DC_BC_TRAVEL_NOTICE + */ +public class BcTravelNotice implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 推送序号 + */ + private String seqNo; + + /** + * 锁标志 + */ + private String txnLock; + + /** + * 锁时间 + */ + private String txnTime; + + /** + * 业务流水号 + */ + private String travelNo; + + /** + * 交易类型 + */ + private String industryCode; + + /** + * 拉码渠道 + */ + private String openChannel; + + /** + * 进站时间 + */ + private Date intoTransTime; + + /** + * 出站时间 + */ + private Date outTransTime; + + /** + * 交通卡用户号 + */ + private String userId; + + /** + * 碳普惠子场景账户号 + */ + private String ccid; + + /** + * 进站编码 + */ + private String inStationId; + + /** + * 出站编码 + */ + private String outStationId; + + /** + * 里程数 + */ + private Integer mileage; + + /** + * 驾车里程数 + */ + private Integer carMileage; + + /** + * 碳排放量 + */ + private String carbonFootprint; + + /** + * 碳排放量因子版本号 + */ + private String calcFactorVersion; + + /** + * 推送一级机构号 + */ + private String firstChannels; + + /** + * 推送二级机构号 + */ + private String secondChannels; + + /** + * 机构用户令牌 + */ + private String userTokens; + + /** + * 清算日期 + */ + private String stlmDate; + + /** + * 行程特征值 + */ + private String travelHash; + + /** + * 状态 + */ + private String status; + + /** + * 备注 + */ + private String remark; + + /** + * 订单完成时间 + */ + private String orderCompleteTime; + + /** + * 下次发送时间 + */ + private String nextSendTime; + + /** + * 发送次数 + */ + private Integer sendCount; + + /** + * 发送状态 + */ + private String sendStatus; + + /** + * 创建用户 + */ + private String createUser; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 最后更新用户 + */ + private String lstUpdUser; + + /** + * 最后更新时间 + */ + private Date lstUpdTime; + + public String getSeqNo() { + return seqNo; + } + + public void setSeqNo(String seqNo) { + this.seqNo = seqNo; + } + + public String getTxnLock() { + return txnLock; + } + + public void setTxnLock(String txnLock) { + this.txnLock = txnLock; + } + + public String getTxnTime() { + return txnTime; + } + + public void setTxnTime(String txnTime) { + this.txnTime = txnTime; + } + + public String getTravelNo() { + return travelNo; + } + + public void setTravelNo(String travelNo) { + this.travelNo = travelNo; + } + + public String getIndustryCode() { + return industryCode; + } + + public void setIndustryCode(String industryCode) { + this.industryCode = industryCode; + } + + public String getOpenChannel() { + return openChannel; + } + + public void setOpenChannel(String openChannel) { + this.openChannel = openChannel; + } + + public Date getIntoTransTime() { + return intoTransTime; + } + + public void setIntoTransTime(Date intoTransTime) { + this.intoTransTime = intoTransTime; + } + + public Date getOutTransTime() { + return outTransTime; + } + + public void setOutTransTime(Date outTransTime) { + this.outTransTime = outTransTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getCcid() { + return ccid; + } + + public void setCcid(String ccid) { + this.ccid = ccid; + } + + public String getInStationId() { + return inStationId; + } + + public void setInStationId(String inStationId) { + this.inStationId = inStationId; + } + + public String getOutStationId() { + return outStationId; + } + + public void setOutStationId(String outStationId) { + this.outStationId = outStationId; + } + + public Integer getMileage() { + return mileage; + } + + public void setMileage(Integer mileage) { + this.mileage = mileage; + } + + public Integer getCarMileage() { + return carMileage; + } + + public void setCarMileage(Integer carMileage) { + this.carMileage = carMileage; + } + + public String getCarbonFootprint() { + return carbonFootprint; + } + + public void setCarbonFootprint(String carbonFootprint) { + this.carbonFootprint = carbonFootprint; + } + + public String getCalcFactorVersion() { + return calcFactorVersion; + } + + public void setCalcFactorVersion(String calcFactorVersion) { + this.calcFactorVersion = calcFactorVersion; + } + + public String getFirstChannels() { + return firstChannels; + } + + public void setFirstChannels(String firstChannels) { + this.firstChannels = firstChannels; + } + + public String getSecondChannels() { + return secondChannels; + } + + public void setSecondChannels(String secondChannels) { + this.secondChannels = secondChannels; + } + + public String getUserTokens() { + return userTokens; + } + + public void setUserTokens(String userTokens) { + this.userTokens = userTokens; + } + + public String getStlmDate() { + return stlmDate; + } + + public void setStlmDate(String stlmDate) { + this.stlmDate = stlmDate; + } + + public String getTravelHash() { + return travelHash; + } + + public void setTravelHash(String travelHash) { + this.travelHash = travelHash; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getOrderCompleteTime() { + return orderCompleteTime; + } + + public void setOrderCompleteTime(String orderCompleteTime) { + this.orderCompleteTime = orderCompleteTime; + } + + public String getNextSendTime() { + return nextSendTime; + } + + public void setNextSendTime(String nextSendTime) { + this.nextSendTime = nextSendTime; + } + + public Integer getSendCount() { + return sendCount; + } + + public void setSendCount(Integer sendCount) { + this.sendCount = sendCount; + } + + public String getSendStatus() { + return sendStatus; + } + + public void setSendStatus(String sendStatus) { + this.sendStatus = sendStatus; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getLstUpdUser() { + return lstUpdUser; + } + + public void setLstUpdUser(String lstUpdUser) { + this.lstUpdUser = lstUpdUser; + } + + public Date getLstUpdTime() { + return lstUpdTime; + } + + public void setLstUpdTime(Date lstUpdTime) { + this.lstUpdTime = lstUpdTime; + } +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/ReqCarbonBatchComputationDTO.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/ReqCarbonBatchComputationDTO.java new file mode 100644 index 00000000..66fc266f --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/ReqCarbonBatchComputationDTO.java @@ -0,0 +1,41 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto; + +import java.io.Serializable; +import java.util.List; + +/** + * 减排量批量计算DTO + * + * @author ren_chao + */ +public class ReqCarbonBatchComputationDTO implements Serializable { + private static final long serialVersionUID = 1L; + private int count; + private String methodId; + private List rawDatas; + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public String getMethodId() { + return methodId; + } + + public void setMethodId(String methodId) { + this.methodId = methodId; + } + + public List getRawDatas() { + return rawDatas; + } + + public void setRawDatas(List rawDatas) { + this.rawDatas = rawDatas; + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/ReqCarbonComputeDataDTO.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/ReqCarbonComputeDataDTO.java new file mode 100644 index 00000000..9d4a08bc --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/ReqCarbonComputeDataDTO.java @@ -0,0 +1,51 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto; + +import java.io.Serializable; + +/** + * 减排量计算 数据DTO + * @author ren_chao + */ +public class ReqCarbonComputeDataDTO implements Serializable { + private static final long serialVersionUID = 1L; + + private String dataId; + private String baseFactor; + private String factor; + private String tripDistance; + + + + public String getDataId() { + return dataId; + } + + public void setDataId(String dataId) { + this.dataId = dataId; + } + + public String getBaseFactor() { + return baseFactor; + } + + public void setBaseFactor(String baseFactor) { + this.baseFactor = baseFactor; + } + + public String getFactor() { + return factor; + } + + public void setFactor(String factor) { + this.factor = factor; + } + + public String getTripDistance() { + return tripDistance; + } + + public void setTripDistance(String tripDistance) { + this.tripDistance = tripDistance; + } +} + diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/ResEmissionReductionDTO.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/ResEmissionReductionDTO.java new file mode 100644 index 00000000..db445a5a --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/ResEmissionReductionDTO.java @@ -0,0 +1,31 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto; + +import java.io.Serializable; + +/** + * 碳减排量DTO + * + * @author ren_chao + */ +public class ResEmissionReductionDTO implements Serializable { + private static final long serialVersionUID = 1L; + + private String dataId; + private String emissionReduction; + + public String getDataId() { + return dataId; + } + + public void setDataId(String dataId) { + this.dataId = dataId; + } + + public String getEmissionReduction() { + return emissionReduction; + } + + public void setEmissionReduction(String emissionReduction) { + this.emissionReduction = emissionReduction; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/ResultDTO.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/ResultDTO.java new file mode 100644 index 00000000..bd8863dd --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/dto/ResultDTO.java @@ -0,0 +1,40 @@ +package com.jiuyv.sptcc.carbon.dataprocess.dto; + +import java.io.Serializable; + +/** + * 接收平台返回的数据 + * + * @author ren_chao + */ +public class ResultDTO implements Serializable { + private static final long serialVersionUID = 1L; + + private int code; + private String msg; + private T content; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public T getContent() { + return content; + } + + public void setContent(T content) { + this.content = content; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/exception/ServiceException.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/exception/ServiceException.java new file mode 100644 index 00000000..2ac160f0 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/exception/ServiceException.java @@ -0,0 +1,27 @@ +package com.jiuyv.sptcc.carbon.dataprocess.exception; + +/** + * 业务异常 + * + */ +public final class ServiceException extends RuntimeException { + private static final long serialVersionUID = 1L; + + private Integer code; + + public ServiceException() { + } + + public ServiceException(String message) { + super(message); + } + + public ServiceException(String message, Integer code) { + super(message); + this.code = code; + } + + public Integer getCode() { + return code; + } +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/feign/CarbonDataProcessFeign.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/feign/CarbonDataProcessFeign.java new file mode 100644 index 00000000..e8b06c89 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/feign/CarbonDataProcessFeign.java @@ -0,0 +1,24 @@ +package com.jiuyv.sptcc.carbon.dataprocess.feign; + +import com.jiuyv.sptcc.carbon.dataprocess.dto.ReqCarbonBatchComputationDTO; +import com.jiuyv.sptcc.carbon.dataprocess.dto.ResEmissionReductionDTO; +import com.jiuyv.sptcc.carbon.dataprocess.dto.ResultDTO; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; +import java.util.Map; + +/** + * 碳减排量处理接口调用 + * + * @author ren_chao + */ +@FeignClient(name = "carbonDataProcessFeign", url = "http://carbon-dev.natappvip.cc") +public interface CarbonDataProcessFeign { + + @PostMapping("/carbon-inclusion/apis/v1/reduction/batchComputation") + ResultDTO>> batchComputation(@RequestBody ReqCarbonBatchComputationDTO carbonBatchComputation); + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/mapper/BcSubwayMileageMapper.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/mapper/BcSubwayMileageMapper.java new file mode 100644 index 00000000..a711f584 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/mapper/BcSubwayMileageMapper.java @@ -0,0 +1,19 @@ +package com.jiuyv.sptcc.carbon.dataprocess.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** +* @author RENCHAO +* @description 针对表【TBL_BC_SUBWAY_MILEAGE】的数据库操作Mapper +* @createDate 2024-04-19 10:36:32 +* @Entity com.jiuyv.sptcc.carbon.dataprocess.domain.BcSubwayMileage +*/ +@Mapper +public interface BcSubwayMileageMapper { + + /** + * 查询里程 + */ + Integer selectMileage(@Param("inStationId") String inStationId, @Param("outStationId") String outStationId); +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/mapper/BcTravelNoticeMapper.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/mapper/BcTravelNoticeMapper.java new file mode 100644 index 00000000..05c1a56a --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/mapper/BcTravelNoticeMapper.java @@ -0,0 +1,23 @@ +package com.jiuyv.sptcc.carbon.dataprocess.mapper; + +import com.jiuyv.sptcc.carbon.dataprocess.domain.BcTravelNotice; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** +* 针对表【TBL_BC_TRAVEL_NOTICE】的数据库操作Mapper +* 2024-04-17 15:51:32 +* +*/ +@Mapper +public interface BcTravelNoticeMapper { + + int insertSelective(BcTravelNotice record); + + BcTravelNotice selectByPrimaryKey(Long id); + + int updateByPrimaryKeySelective(BcTravelNotice record); + + List selectByPage(Integer start, Integer count); +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/MsgInfo.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/MsgInfo.java new file mode 100644 index 00000000..605fd5ce --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/MsgInfo.java @@ -0,0 +1,92 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model; + +/** + * 短信对象 + * @author jiuyv + * + */ +public class MsgInfo { + + /** title : 短信标题 */ + private String title; + + /** content : 短信内容 */ + private String content; + + /** receiver : 短信收件人 */ + private String receiver; + + /** + * 空参数构造方法 + */ + public MsgInfo() { + + } + + /** + * 全参数构造方法 + * @param title 标题 + * @param content 内容 + */ + public MsgInfo(String title, String content) { + super(); + this.title = title; + this.content = content; + } + + /** + * 全参数构造方法 + * @param title 标题 + * @param content 内容 + * @param receiver 收件人 + */ + public MsgInfo(String title, String content, String receiver) { + super(); + this.title = title; + this.content = content; + this.receiver = receiver; + } + + /** + * @return the title + */ + public String getTitle() { + return title; + } + + /** + * @param title the title to set + */ + public void setTitle(String title) { + this.title = title; + } + + /** + * @return the content + */ + public String getContent() { + return content; + } + + /** + * @param content the content to set + */ + public void setContent(String content) { + this.content = content; + } + + /** + * @return the receiver + */ + public String getReceiver() { + return receiver; + } + + /** + * @param receiver the receiver to set + */ + public void setReceiver(String receiver) { + this.receiver = receiver; + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/ResultBean.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/ResultBean.java new file mode 100644 index 00000000..958d2f9c --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/ResultBean.java @@ -0,0 +1,110 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model; + +/** + * 返回错误信息 + * @author jiuyv + * + */ +public class ResultBean { + + private boolean success = false; + + /** 返回码 */ + private String respCode; + + /** 返回信息 */ + private String respMessage; + + /** 数据对象 */ + private T data; + + /** + * 构造方法 + * @param respCode + * @param respMessage + */ + public ResultBean(boolean success, T obj, String respCode, String respMessage) { + this.respCode = respCode; + this.respMessage = respMessage; + this.success = success; + this.data = obj; + } + + /** + * 构造方法 + * @param respCode + * @param respMessage + */ + public ResultBean(String respCode, String respMessage) { + this.respCode = respCode; + this.respMessage = respMessage; + } + + /** + * 构造方法 + * @param respCode + * @param respMessage + */ + public ResultBean(T obj, String respCode, String respMessage) { + this.data = obj; + this.respCode = respCode; + this.respMessage = respMessage; + } + + /** + * @return the respCode + */ + public String getRespCode() { + return respCode; + } + + /** + * @param respCode the respCode to set + */ + public void setRespCode(String respCode) { + this.respCode = respCode; + } + + /** + * @return the respMessage + */ + public String getRespMessage() { + return respMessage; + } + + /** + * @param respMessage the respMessage to set + */ + public void setRespMessage(String respMessage) { + this.respMessage = respMessage; + } + + /** + * @return the data + */ + public T getData() { + return data; + } + + /** + * @param data the data to set + */ + public void setData(T data) { + this.data = data; + } + + /** + * @return the success + */ + public boolean isSuccess() { + return success; + } + + /** + * @param success the success to set + */ + public void setSuccess(boolean success) { + this.success = success; + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/common/PageDomin.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/common/PageDomin.java new file mode 100644 index 00000000..24745973 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/common/PageDomin.java @@ -0,0 +1,84 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.common; + +import java.io.Serializable; + +public class PageDomin implements Serializable { + + /** sortType : 排序方式. */ + private String sortType; + + /** sortField : 排序字段 */ + private String sortField; + + /** startPage : 开始页码 */ + private Integer startPage; + + /** pageSize : 每页条数 */ + private Integer pageSize; + + // -- Extends -- + /** offset : 偏移量 */ + private Integer offset; + + /** endline : 末尾行数 */ + private Integer endline; + + /** sortReg : 排序表达式 */ + private String sortReg; + + public Integer getStartPage() { + return startPage; + } + + public void setStartPage(Integer startPage) { + this.startPage = startPage; + } + + public Integer getPageSize() { + return pageSize; + } + + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + public String getSortType() { + return sortType; + } + + public void setSortType(String sortType) { + this.sortType = sortType; + } + + public String getSortField() { + return sortField; + } + + public void setSortField(String sortField) { + this.sortField = sortField; + } + + public Integer getOffset() { + return offset; + } + + public void setOffset(Integer offset) { + this.offset = offset; + } + + public Integer getEndline() { + return endline; + } + + public void setEndline(Integer endline) { + this.endline = endline; + } + + public String getSortReg() { + return sortReg; + } + + public void setSortReg(String sortReg) { + this.sortReg = sortReg; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/common/SysParamVo.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/common/SysParamVo.java new file mode 100644 index 00000000..badb769d --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/common/SysParamVo.java @@ -0,0 +1,199 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.common; + +// Generated by AutoCode4J +/** + * EntityBean: 系统参数表 TBL_SYS_PARAM : TBL_SYS_PARAM + * This is a value object(VO). + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +public class SysParamVo implements java.io.Serializable { + + /** default Serial Version UID*/ + private static final long serialVersionUID = 1L; + // -- Fields -- + /** paramCode : 参数名称. PARAM_CODE: VARCHAR2(40) */ + private String paramCode ; + + /** version : VERSION. VERSION: NUMBER(10) */ + private Long version ; + + /** paramValue : 参数值. PARAM_VALUE: VARCHAR2(100) */ + private String paramValue ; + + /** paramCheck : 检查方式. PARAM_CHECK: CHAR(1) */ + private String paramCheck ; + + /** paramRule : 检查规则. PARAM_RULE: VARCHAR2(100) */ + private String paramRule ; + + /** paramModifyFlag : 可修改标志. PARAM_MODIFY_FLAG: CHAR(1) */ + private String paramModifyFlag ; + + /** paramDesc : 描述. PARAM_DESC: VARCHAR2(120) */ + private String paramDesc ; + + /** paramRemark : 注释. PARAM_REMARK: VARCHAR2(100) */ + private String paramRemark ; + + /** lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) */ + private String lstUpdUser ; + + /** lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) */ + private String lstUpdTime ; + + // -- Constructor -- + /** + * Constructor + * + */ + public SysParamVo() { + // Default Construtor + } + + public SysParamVo(String paramCode) { + this.paramCode = paramCode; + } + + /** + * @return the paramCode + */ + public String getParamCode() { + return paramCode; + } + + /** + * @param paramCode the paramCode to set + */ + public void setParamCode(String paramCode) { + this.paramCode = paramCode; + } + + /** + * @return the version + */ + public Long getVersion() { + return version; + } + + /** + * @param version the version to set + */ + public void setVersion(Long version) { + this.version = version; + } + + /** + * @return the paramValue + */ + public String getParamValue() { + return paramValue; + } + + /** + * @param paramValue the paramValue to set + */ + public void setParamValue(String paramValue) { + this.paramValue = paramValue; + } + + /** + * @return the paramCheck + */ + public String getParamCheck() { + return paramCheck; + } + + /** + * @param paramCheck the paramCheck to set + */ + public void setParamCheck(String paramCheck) { + this.paramCheck = paramCheck; + } + + /** + * @return the paramRule + */ + public String getParamRule() { + return paramRule; + } + + /** + * @param paramRule the paramRule to set + */ + public void setParamRule(String paramRule) { + this.paramRule = paramRule; + } + + /** + * @return the paramModifyFlag + */ + public String getParamModifyFlag() { + return paramModifyFlag; + } + + /** + * @param paramModifyFlag the paramModifyFlag to set + */ + public void setParamModifyFlag(String paramModifyFlag) { + this.paramModifyFlag = paramModifyFlag; + } + + /** + * @return the paramDesc + */ + public String getParamDesc() { + return paramDesc; + } + + /** + * @param paramDesc the paramDesc to set + */ + public void setParamDesc(String paramDesc) { + this.paramDesc = paramDesc; + } + + /** + * @return the paramRemark + */ + public String getParamRemark() { + return paramRemark; + } + + /** + * @param paramRemark the paramRemark to set + */ + public void setParamRemark(String paramRemark) { + this.paramRemark = paramRemark; + } + + /** + * @return the lstUpdUser + */ + public String getLstUpdUser() { + return lstUpdUser; + } + + /** + * @param lstUpdUser the lstUpdUser to set + */ + public void setLstUpdUser(String lstUpdUser) { + this.lstUpdUser = lstUpdUser; + } + + /** + * @return the lstUpdTime + */ + public String getLstUpdTime() { + return lstUpdTime; + } + + /** + * @param lstUpdTime the lstUpdTime to set + */ + public void setLstUpdTime(String lstUpdTime) { + this.lstUpdTime = lstUpdTime; + } +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/common/dao/SysBaseInfoDao.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/common/dao/SysBaseInfoDao.java new file mode 100644 index 00000000..1e11658b --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/common/dao/SysBaseInfoDao.java @@ -0,0 +1,16 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.common.dao; + +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SysBaseInfoDao { + + /** + * 获取系统当前时间-yyyyMMddHHmmss + * @return + */ + String selectSysCurrentTime(); + + + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/AuthInfo.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/AuthInfo.java new file mode 100644 index 00000000..1c3058bb --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/AuthInfo.java @@ -0,0 +1,42 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess; + +import java.util.Map; + +/** + * 卡授权信息 + */ +public class AuthInfo { + + /** 用户号 */ + private String userId; + + /** 资源ID */ + private String resourceId; + + /** 用户令牌 */ + private Map userTokens; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public Map getUserTokens() { + return userTokens; + } + + public void setUserTokens(Map userTokens) { + this.userTokens = userTokens; + } + + public String getResourceId() { + return resourceId; + } + + public void setResourceId(String resourceId) { + this.resourceId = resourceId; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/BcTravelAcctSumVo.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/BcTravelAcctSumVo.java new file mode 100644 index 00000000..28e7a2f5 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/BcTravelAcctSumVo.java @@ -0,0 +1,34 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess; + +/** + * 对账文件对象 + */ +public class BcTravelAcctSumVo { + + /** stlmDate : 清算日期 */ + private String stlmDate; + + /** totalCount : 总行数 */ + private Long totalCount; + + public BcTravelAcctSumVo(String stlmDate) { + this.stlmDate = stlmDate; + this.totalCount = 0L; + } + + public String getStlmDate() { + return stlmDate; + } + + public void setStlmDate(String stlmDate) { + this.stlmDate = stlmDate; + } + + public Long getTotalCount() { + return totalCount; + } + + public void setTotalCount(Long totalCount) { + this.totalCount = totalCount; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/BcTravelAcctVo.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/BcTravelAcctVo.java new file mode 100644 index 00000000..27798be1 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/BcTravelAcctVo.java @@ -0,0 +1,117 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess; + +/** + * 对账文件对象 + */ +public class BcTravelAcctVo { + + /** travelNo : 行程单号 */ + private String travelNo; + + /** transType : 交易类型 */ + private String transType; + + /** userId : 用户号 */ + private String userId; + + /** firstChannels : 推送一级机构号. FIRST_CHANNELS: VARCHAR2(512 CHAR) */ + private String firstChannels ; + + /** secondChannels : 推送二级机构号. SECOND_CHANNELS: VARCHAR2(512 CHAR) */ + private String secondChannels ; + + /** userToken : 用户令牌 */ + private String userToken; + + /** bcChannel : 拉码渠道 */ + private String bcChannel ; + + /** intoTransTime : 进站时间 */ + private String intoTransTime; + + /** travelHash : 行程特征值. */ + private String travelHash ; + + /** carbonFootprint : 碳排放量. */ + private String carbonFootprint ; + + public String getTravelNo() { + return travelNo; + } + + public void setTravelNo(String travelNo) { + this.travelNo = travelNo; + } + + public String getTransType() { + return transType; + } + + public void setTransType(String transType) { + this.transType = transType; + } + + public String getIntoTransTime() { + return intoTransTime; + } + + public void setIntoTransTime(String intoTransTime) { + this.intoTransTime = intoTransTime; + } + + public String getUserToken() { + return userToken; + } + + public void setUserToken(String userToken) { + this.userToken = userToken; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getFirstChannels() { + return firstChannels; + } + + public void setFirstChannels(String firstChannels) { + this.firstChannels = firstChannels; + } + + public String getSecondChannels() { + return secondChannels; + } + + public void setSecondChannels(String secondChannels) { + this.secondChannels = secondChannels; + } + + public String getBcChannel() { + return bcChannel; + } + + public void setBcChannel(String bcChannel) { + this.bcChannel = bcChannel; + } + + public String getTravelHash() { + return travelHash; + } + + public void setTravelHash(String travelHash) { + this.travelHash = travelHash; + } + + public String getCarbonFootprint() { + return carbonFootprint; + } + + public void setCarbonFootprint(String carbonFootprint) { + this.carbonFootprint = carbonFootprint; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcAsynCtrlVo.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcAsynCtrlVo.java new file mode 100644 index 00000000..a5533ef6 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcAsynCtrlVo.java @@ -0,0 +1,99 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess; + +// Generated by AutoCode4J +/** + * EntityBean: TBL_DC_ASYN_CTRL 系统时间片控制表 : TBL_DC_ASYN_CTRL + * This is a value object(VO). + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +public class DcAsynCtrlVo implements java.io.Serializable { + + /** default Serial Version UID*/ + private static final long serialVersionUID = 1L; + // -- Fields -- + /** appId : 应用id. APP_ID: VARCHAR2(32 CHAR) */ + private String appId ; + + /** cycleStat : 轮循状态. CYCLE_STAT: NUMBER(1) */ + private Long cycleStat ; + + /** currDateTime : 当前处理时间. CURR_DATE_TIME: CHAR(14) */ + private String currDateTime ; + + /** updatetime : 最后更新时间. UPDATETIME: VARCHAR2(14) */ + private String updatetime ; + + // -- Constructor -- + /** + * Constructor + * + */ + public DcAsynCtrlVo() { + // Default Construtor + } + + public DcAsynCtrlVo(String appId) { + this.appId = appId; + } + + // -- Setter And Getter + /** + * Set appId : 应用id. APP_ID: VARCHAR2(32 CHAR) + */ + public void setAppId(String appId){ + this.appId = appId; + } + + /** + * Get appId : 应用id. APP_ID: VARCHAR2(32 CHAR) + */ + public String getAppId(){ + return this.appId; + } + + /** + * Set cycleStat : 轮循状态. CYCLE_STAT: NUMBER(1) + */ + public void setCycleStat(Long cycleStat){ + this.cycleStat = cycleStat; + } + + /** + * Get cycleStat : 轮循状态. CYCLE_STAT: NUMBER(1) + */ + public Long getCycleStat(){ + return this.cycleStat; + } + + /** + * Set currDateTime : 当前处理时间. CURR_DATE_TIME: CHAR(14) + */ + public void setCurrDateTime(String currDateTime){ + this.currDateTime = currDateTime; + } + + /** + * Get currDateTime : 当前处理时间. CURR_DATE_TIME: CHAR(14) + */ + public String getCurrDateTime(){ + return this.currDateTime; + } + + /** + * Set updatetime : 最后更新时间. UPDATETIME: VARCHAR2(14) + */ + public void setUpdatetime(String updatetime){ + this.updatetime = updatetime; + } + + /** + * Get updatetime : 最后更新时间. UPDATETIME: VARCHAR2(14) + */ + public String getUpdatetime(){ + return this.updatetime; + } + +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcBcTravelNoticeVo.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcBcTravelNoticeVo.java new file mode 100644 index 00000000..bbfbf5fc --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcBcTravelNoticeVo.java @@ -0,0 +1,534 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess; + +// Generated by AutoCode4J +/** + * EntityBean: TBL_DC_BC_TRAVEL_NOTICE 二维码交易推送表 : TBL_DC_BC_TRAVEL_NOTICE + * This is a value object(VO). + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +public class DcBcTravelNoticeVo implements java.io.Serializable { + + /** default Serial Version UID*/ + private static final long serialVersionUID = 1L; + // -- Fields -- + /** seqNo : 推送序号. SEQ_NO: VARCHAR2(64 CHAR) */ + private String seqNo ; + + /** txnLock : 锁标志. TXN_LOCK: CHAR(1) */ + private String txnLock ; + + /** txnTime : 锁时间. TXN_TIME: CHAR(14) */ + private String txnTime ; + + /** travelNo : 业务流水号. TRAVEL_NO: VARCHAR2(32 CHAR) */ + private String travelNo ; + + /** transType : 交易类型. TRANS_TYPE: VARCHAR2(32 CHAR) */ + private String transType ; + + /** bcChannel : 拉码渠道. BC_CHANNEL: VARCHAR2(32 CHAR) */ + private String bcChannel ; + + /** inTransTime : 进站时间. IN_TRANS_TIME: CHAR(14) */ + private String inTransTime ; + + /** outTransTime : 出站时间. OUT_TRANS_TIME: CHAR(14) */ + private String outTransTime ; + + /** userId : 用户号. USER_ID: VARCHAR2(32 CHAR) */ + private String userId ; + + /** inStationId : 进站点ID. IN_STATION_ID: VARCHAR2(32 CHAR) */ + private String inStationId ; + + /** outStationId : 出站点ID. OUT_STATION_ID: VARCHAR2(32 CHAR) */ + private String outStationId ; + + /** mileage : 里程数. MILEAGE: NUMBER(10) */ + private Long mileage ; + + /** carMileage : 驾车里程数. CAR_MILEAGE: NUMBER(10) */ + private Long carMileage; + + /** carbonFootprint : 碳排放量. CARBON_FOOTPRINT: VARCHAR2(32 CHAR) */ + private String carbonFootprint ; + + /** calcFactorVersion : 碳排放量因子版本号. CALC_FACTOR_VERSION: VARCHAR2(32 CHAR) */ + private String calcFactorVersion ; + + /** firstChannels : 推送一级机构号. FIRST_CHANNELS: VARCHAR2(512 CHAR) */ + private String firstChannels ; + + /** secondChannels : 推送二级机构号. SECOND_CHANNELS: VARCHAR2(512 CHAR) */ + private String secondChannels ; + + /** userTokens : 机构用户令牌. USER_TOKENS: VARCHAR2(512 CHAR) */ + private String userTokens ; + + /** stlmDate : 清算日期. STLM_DATE: CHAR(8) */ + private String stlmDate ; + + /** travelHash : 行程特征值. TRAVEL_HASH: VARCHAR2(64 CHAR) */ + private String travelHash ; + + /** status : 状态. STATUS: VARCHAR2(32 CHAR) */ + private String status ; + + /** remark : 备注. REMARK: VARCHAR(255 CHAR) */ + private String remark ; + + /** orderCompleteTime : 订单完成时间. ORDER_COMPLETE_TIME: CHAR(14) */ + private String orderCompleteTime ; + + /** nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) */ + private String nextSendTime ; + + /** sendCount : 发送次数. SEND_COUNT: NUMBER(10) */ + private Long sendCount ; + + /** sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) */ + private String sendStatus ; + + /** createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) */ + private String createUser ; + + /** createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) */ + private String createTime ; + + /** lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) */ + private String lstUpdUser ; + + /** lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) */ + private String lstUpdTime ; + + // -- Constructor -- + /** + * Constructor + * + */ + public DcBcTravelNoticeVo() { + // Default Construtor + } + + public DcBcTravelNoticeVo(String seqNo) { + this.seqNo = seqNo; + } + + // -- Setter And Getter + /** + * Set seqNo : 推送序号. SEQ_NO: VARCHAR2(64 CHAR) + */ + public void setSeqNo(String seqNo){ + this.seqNo = seqNo; + } + + /** + * Get seqNo : 推送序号. SEQ_NO: VARCHAR2(64 CHAR) + */ + public String getSeqNo(){ + return this.seqNo; + } + + /** + * Set txnLock : 锁标志. TXN_LOCK: CHAR(1) + */ + public void setTxnLock(String txnLock){ + this.txnLock = txnLock; + } + + /** + * Get txnLock : 锁标志. TXN_LOCK: CHAR(1) + */ + public String getTxnLock(){ + return this.txnLock; + } + + /** + * Set txnTime : 锁时间. TXN_TIME: CHAR(14) + */ + public void setTxnTime(String txnTime){ + this.txnTime = txnTime; + } + + /** + * Get txnTime : 锁时间. TXN_TIME: CHAR(14) + */ + public String getTxnTime(){ + return this.txnTime; + } + + /** + * Set travelNo : 业务流水号. TRAVEL_NO: VARCHAR2(32 CHAR) + */ + public void setTravelNo(String travelNo){ + this.travelNo = travelNo; + } + + /** + * Get travelNo : 业务流水号. TRAVEL_NO: VARCHAR2(32 CHAR) + */ + public String getTravelNo(){ + return this.travelNo; + } + + /** + * Set transType : 交易类型. TRANS_TYPE: VARCHAR2(32 CHAR) + */ + public void setTransType(String transType){ + this.transType = transType; + } + + /** + * Get transType : 交易类型. TRANS_TYPE: VARCHAR2(32 CHAR) + */ + public String getTransType(){ + return this.transType; + } + + /** + * Set bcChannel : 拉码渠道. BC_CHANNEL: VARCHAR2(32 CHAR) + */ + public void setBcChannel(String bcChannel){ + this.bcChannel = bcChannel; + } + + /** + * Get bcChannel : 拉码渠道. BC_CHANNEL: VARCHAR2(32 CHAR) + */ + public String getBcChannel(){ + return this.bcChannel; + } + + /** + * Set inTransTime : 进站时间. IN_TRANS_TIME: CHAR(14) + */ + public void setInTransTime(String inTransTime){ + this.inTransTime = inTransTime; + } + + /** + * Get inTransTime : 进站时间. IN_TRANS_TIME: CHAR(14) + */ + public String getInTransTime(){ + return this.inTransTime; + } + + /** + * Set outTransTime : 出站时间. OUT_TRANS_TIME: CHAR(14) + */ + public void setOutTransTime(String outTransTime){ + this.outTransTime = outTransTime; + } + + /** + * Get outTransTime : 出站时间. OUT_TRANS_TIME: CHAR(14) + */ + public String getOutTransTime(){ + return this.outTransTime; + } + + /** + * Set userId : 用户号. USER_ID: VARCHAR2(32 CHAR) + */ + public void setUserId(String userId){ + this.userId = userId; + } + + /** + * Get userId : 用户号. USER_ID: VARCHAR2(32 CHAR) + */ + public String getUserId(){ + return this.userId; + } + + /** + * Set inStationId : 进站点ID. IN_STATION_ID: VARCHAR2(32 CHAR) + */ + public void setInStationId(String inStationId){ + this.inStationId = inStationId; + } + + /** + * Get inStationId : 进站点ID. IN_STATION_ID: VARCHAR2(32 CHAR) + */ + public String getInStationId(){ + return this.inStationId; + } + + /** + * Set outStationId : 出站点ID. OUT_STATION_ID: VARCHAR2(32 CHAR) + */ + public void setOutStationId(String outStationId){ + this.outStationId = outStationId; + } + + /** + * Get outStationId : 出站点ID. OUT_STATION_ID: VARCHAR2(32 CHAR) + */ + public String getOutStationId(){ + return this.outStationId; + } + + /** + * Set mileage : 里程数. MILEAGE: NUMBER(10) + */ + public void setMileage(Long mileage){ + this.mileage = mileage; + } + + /** + * Get mileage : 里程数. MILEAGE: NUMBER(10) + */ + public Long getMileage(){ + return this.mileage; + } + + /** + * Set carbonFootprint : 碳排放量. CARBON_FOOTPRINT: VARCHAR2(32 CHAR) + */ + public void setCarbonFootprint(String carbonFootprint){ + this.carbonFootprint = carbonFootprint; + } + + /** + * Get carbonFootprint : 碳排放量. CARBON_FOOTPRINT: VARCHAR2(32 CHAR) + */ + public String getCarbonFootprint(){ + return this.carbonFootprint; + } + + /** + * Set calcFactorVersion : 碳排放量因子版本号. CALC_FACTOR_VERSION: VARCHAR2(32 CHAR) + */ + public void setCalcFactorVersion(String calcFactorVersion){ + this.calcFactorVersion = calcFactorVersion; + } + + /** + * Get calcFactorVersion : 碳排放量因子版本号. CALC_FACTOR_VERSION: VARCHAR2(32 CHAR) + */ + public String getCalcFactorVersion(){ + return this.calcFactorVersion; + } + + /** + * Set firstChannels : 推送一级机构号. FIRST_CHANNELS: VARCHAR2(512 CHAR) + */ + public void setFirstChannels(String firstChannels){ + this.firstChannels = firstChannels; + } + + /** + * Get firstChannels : 推送一级机构号. FIRST_CHANNELS: VARCHAR2(512 CHAR) + */ + public String getFirstChannels(){ + return this.firstChannels; + } + + /** + * Set secondChannels : 推送二级机构号. SECOND_CHANNELS: VARCHAR2(512 CHAR) + */ + public void setSecondChannels(String secondChannels){ + this.secondChannels = secondChannels; + } + + /** + * Get secondChannels : 推送二级机构号. SECOND_CHANNELS: VARCHAR2(512 CHAR) + */ + public String getSecondChannels(){ + return this.secondChannels; + } + + /** + * Set userTokens : 机构用户令牌. USER_TOKENS: VARCHAR2(512 CHAR) + */ + public void setUserTokens(String userTokens){ + this.userTokens = userTokens; + } + + /** + * Get userTokens : 机构用户令牌. USER_TOKENS: VARCHAR2(512 CHAR) + */ + public String getUserTokens(){ + return this.userTokens; + } + + /** + * Set stlmDate : 清算日期. STLM_DATE: CHAR(8) + */ + public void setStlmDate(String stlmDate){ + this.stlmDate = stlmDate; + } + + /** + * Get stlmDate : 清算日期. STLM_DATE: CHAR(8) + */ + public String getStlmDate(){ + return this.stlmDate; + } + + /** + * Set travelHash : 行程特征值. TRAVEL_HASH: VARCHAR2(64 CHAR) + */ + public void setTravelHash(String travelHash){ + this.travelHash = travelHash; + } + + /** + * Get travelHash : 行程特征值. TRAVEL_HASH: VARCHAR2(64 CHAR) + */ + public String getTravelHash(){ + return this.travelHash; + } + + /** + * Set status : 状态. STATUS: VARCHAR2(32 CHAR) + */ + public void setStatus(String status){ + this.status = status; + } + + /** + * Get status : 状态. STATUS: VARCHAR2(32 CHAR) + */ + public String getStatus(){ + return this.status; + } + + /** + * Set remark : 备注. REMARK: VARCHAR(255 CHAR) + */ + public void setRemark(String remark){ + this.remark = remark; + } + + /** + * Get remark : 备注. REMARK: VARCHAR(255 CHAR) + */ + public String getRemark(){ + return this.remark; + } + + /** + * Set orderCompleteTime : 订单完成时间. ORDER_COMPLETE_TIME: CHAR(14) + */ + public void setOrderCompleteTime(String orderCompleteTime){ + this.orderCompleteTime = orderCompleteTime; + } + + /** + * Get orderCompleteTime : 订单完成时间. ORDER_COMPLETE_TIME: CHAR(14) + */ + public String getOrderCompleteTime(){ + return this.orderCompleteTime; + } + + /** + * Set nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) + */ + public void setNextSendTime(String nextSendTime){ + this.nextSendTime = nextSendTime; + } + + /** + * Get nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) + */ + public String getNextSendTime(){ + return this.nextSendTime; + } + + /** + * Set sendCount : 发送次数. SEND_COUNT: NUMBER(10) + */ + public void setSendCount(Long sendCount){ + this.sendCount = sendCount; + } + + /** + * Get sendCount : 发送次数. SEND_COUNT: NUMBER(10) + */ + public Long getSendCount(){ + return this.sendCount; + } + + /** + * Set sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) + */ + public void setSendStatus(String sendStatus){ + this.sendStatus = sendStatus; + } + + /** + * Get sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) + */ + public String getSendStatus(){ + return this.sendStatus; + } + + /** + * Set createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) + */ + public void setCreateUser(String createUser){ + this.createUser = createUser; + } + + /** + * Get createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) + */ + public String getCreateUser(){ + return this.createUser; + } + + /** + * Set createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) + */ + public void setCreateTime(String createTime){ + this.createTime = createTime; + } + + /** + * Get createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) + */ + public String getCreateTime(){ + return this.createTime; + } + + /** + * Set lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) + */ + public void setLstUpdUser(String lstUpdUser){ + this.lstUpdUser = lstUpdUser; + } + + /** + * Get lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) + */ + public String getLstUpdUser(){ + return this.lstUpdUser; + } + + /** + * Set lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) + */ + public void setLstUpdTime(String lstUpdTime){ + this.lstUpdTime = lstUpdTime; + } + + /** + * Get lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) + */ + public String getLstUpdTime(){ + return this.lstUpdTime; + } + + public Long getCarMileage() { + return carMileage; + } + + public void setCarMileage(Long carMileage) { + this.carMileage = carMileage; + } +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcCalcFactorVo.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcCalcFactorVo.java new file mode 100644 index 00000000..c28e8407 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcCalcFactorVo.java @@ -0,0 +1,143 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess; + +// Generated by AutoCode4J +/** + * EntityBean: TBL_DC_CALC_FACTOR 计算因子表 : TBL_DC_CALC_FACTOR + * This is a value object(VO). + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +public class DcCalcFactorVo implements java.io.Serializable { + + /** default Serial Version UID*/ + private static final long serialVersionUID = 1L; + // -- Fields -- + /** version : VERSION. VERSION: VARCHAR2(32 CHAR) */ + private String version ; + + /** avaerageMileage : 平均里程(m). AVAERAGE_MILEAGE: NUMBER(10) */ + private Long avaerageMileage ; + + /** normalFactor : 高碳排放因子. NORMAL_FACTOR: NUMBER(10) */ + private Long normalFactor ; + + /** busFactor : 公交排放因子. BUS_FACTOR: NUMBER(10) */ + private Long busFactor ; + + /** subwayFactor : 地铁排放因子. SUBWAY_FACTOR: NUMBER(10) */ + private Long subwayFactor ; + + /** startTime : 开始时间. START_TIME: CHAR(14) */ + private String startTime ; + + /** endTime : 失效时间. END_TIME: CHAR(14) */ + private String endTime ; + + // -- Constructor -- + /** + * Constructor + * + */ + public DcCalcFactorVo() { + // Default Construtor + } + + public DcCalcFactorVo(String version) { + this.version = version; + } + + // -- Setter And Getter + /** + * Set version : VERSION. VERSION: VARCHAR2(32 CHAR) + */ + public void setVersion(String version){ + this.version = version; + } + + /** + * Get version : VERSION. VERSION: VARCHAR2(32 CHAR) + */ + public String getVersion(){ + return this.version; + } + + /** + * Set avaerageMileage : 平均里程(m). AVAERAGE_MILEAGE: NUMBER(10) + */ + public void setAvaerageMileage(Long avaerageMileage){ + this.avaerageMileage = avaerageMileage; + } + + /** + * Get avaerageMileage : 平均里程(m). AVAERAGE_MILEAGE: NUMBER(10) + */ + public Long getAvaerageMileage(){ + return this.avaerageMileage; + } + + /** + * Set normalFactor : 高碳排放因子. NORMAL_FACTOR: NUMBER(10) + */ + public void setNormalFactor(Long normalFactor){ + this.normalFactor = normalFactor; + } + + /** + * Get normalFactor : 高碳排放因子. NORMAL_FACTOR: NUMBER(10) + */ + public Long getNormalFactor(){ + return this.normalFactor; + } + + /** + * Set busFactor : 公交排放因子. BUS_FACTOR: NUMBER(10) + */ + public void setBusFactor(Long busFactor){ + this.busFactor = busFactor; + } + + /** + * Get busFactor : 公交排放因子. BUS_FACTOR: NUMBER(10) + */ + public Long getBusFactor(){ + return this.busFactor; + } + + /** + * Set subwayFactor : 地铁排放因子. SUBWAY_FACTOR: NUMBER(10) + */ + public void setSubwayFactor(Long subwayFactor){ + this.subwayFactor = subwayFactor; + } + + /** + * Get subwayFactor : 地铁排放因子. SUBWAY_FACTOR: NUMBER(10) + */ + public Long getSubwayFactor(){ + return this.subwayFactor; + } + + /** + * Set endTime : 失效时间. END_TIME: CHAR(14) + */ + public void setEndTime(String endTime){ + this.endTime = endTime; + } + + /** + * Get endTime : 失效时间. END_TIME: CHAR(14) + */ + public String getEndTime(){ + return this.endTime; + } + + public String getStartTime() { + return startTime; + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcCtrlVo.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcCtrlVo.java new file mode 100644 index 00000000..4ed52c8c --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcCtrlVo.java @@ -0,0 +1,213 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess; + +// Generated by AutoCode4J +/** + * EntityBean: TBL_MC_CTRL 系统控制表 : TBL_MC_CTRL + * This is a value object(VO). + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +public class DcCtrlVo implements java.io.Serializable { + + /** default Serial Version UID*/ + private static final long serialVersionUID = 1L; + // -- Fields -- + /** sday : 当前清分日. SDAY: CHAR(8) */ + private String sday ; + + /** prevPrevStmtDay : 上二清分日期. PREV_PREV_STMT_DAY: CHAR(8) */ + private String prevPrevStmtDay ; + + /** prevStmtDay : 上一清分日期. PREV_STMT_DAY: CHAR(8) */ + private String prevStmtDay ; + + /** nextDate : 下一清分日期. NEXT_DATE: CHAR(8) */ + private String nextDate ; + + /** cycleDate : 轮循清分日期. CYCLE_DATE: CHAR(8) */ + private String cycleDate ; + + /** dayCutUpdt : 日切开始时间. DAY_CUT_UPDT: CHAR(14) */ + private String dayCutUpdt ; + + /** fepProcSt : 前置包处理品状态. FEP_PROC_ST: CHAR(2) */ + private String fepProcSt ; + + /** batchSt : 批处理状态. BATCH_ST: CHAR(2) */ + private String batchSt ; + + /** updtDt : 修改时间. UPDT_DT: CHAR(14) */ + private String updtDt ; + + /** versionDt : 参数版本时间. VERSION_DT: CHAR(14) */ + private String versionDt ; + + // -- Extends -- + /** currentTime : 当前时间 */ + private String currentTime; + + // -- Constructor -- + /** + * Constructor + * + */ + public DcCtrlVo() { + } + + // -- Setter And Getter + /** + * Set sday : 当前清分日. SDAY: CHAR(8) + */ + public void setSday(String sday){ + this.sday = sday; + } + + /** + * Get sday : 当前清分日. SDAY: CHAR(8) + */ + public String getSday(){ + return this.sday; + } + + /** + * Set prevPrevStmtDay : 上二清分日期. PREV_PREV_STMT_DAY: CHAR(8) + */ + public void setPrevPrevStmtDay(String prevPrevStmtDay){ + this.prevPrevStmtDay = prevPrevStmtDay; + } + + /** + * Get prevPrevStmtDay : 上二清分日期. PREV_PREV_STMT_DAY: CHAR(8) + */ + public String getPrevPrevStmtDay(){ + return this.prevPrevStmtDay; + } + + /** + * Set prevStmtDay : 上一清分日期. PREV_STMT_DAY: CHAR(8) + */ + public void setPrevStmtDay(String prevStmtDay){ + this.prevStmtDay = prevStmtDay; + } + + /** + * Get prevStmtDay : 上一清分日期. PREV_STMT_DAY: CHAR(8) + */ + public String getPrevStmtDay(){ + return this.prevStmtDay; + } + + /** + * Set nextDate : 下一清分日期. NEXT_DATE: CHAR(8) + */ + public void setNextDate(String nextDate){ + this.nextDate = nextDate; + } + + /** + * Get nextDate : 下一清分日期. NEXT_DATE: CHAR(8) + */ + public String getNextDate(){ + return this.nextDate; + } + + /** + * Set cycleDate : 轮循清分日期. CYCLE_DATE: CHAR(8) + */ + public void setCycleDate(String cycleDate){ + this.cycleDate = cycleDate; + } + + /** + * Get cycleDate : 轮循清分日期. CYCLE_DATE: CHAR(8) + */ + public String getCycleDate(){ + return this.cycleDate; + } + + /** + * Set dayCutUpdt : 日切开始时间. DAY_CUT_UPDT: CHAR(14) + */ + public void setDayCutUpdt(String dayCutUpdt){ + this.dayCutUpdt = dayCutUpdt; + } + + /** + * Get dayCutUpdt : 日切开始时间. DAY_CUT_UPDT: CHAR(14) + */ + public String getDayCutUpdt(){ + return this.dayCutUpdt; + } + + /** + * Set fepProcSt : 前置包处理品状态. FEP_PROC_ST: CHAR(2) + */ + public void setFepProcSt(String fepProcSt){ + this.fepProcSt = fepProcSt; + } + + /** + * Get fepProcSt : 前置包处理品状态. FEP_PROC_ST: CHAR(2) + */ + public String getFepProcSt(){ + return this.fepProcSt; + } + + /** + * Set batchSt : 批处理状态. BATCH_ST: CHAR(2) + */ + public void setBatchSt(String batchSt){ + this.batchSt = batchSt; + } + + /** + * Get batchSt : 批处理状态. BATCH_ST: CHAR(2) + */ + public String getBatchSt(){ + return this.batchSt; + } + + /** + * Set updtDt : 修改时间. UPDT_DT: CHAR(14) + */ + public void setUpdtDt(String updtDt){ + this.updtDt = updtDt; + } + + /** + * Get updtDt : 修改时间. UPDT_DT: CHAR(14) + */ + public String getUpdtDt(){ + return this.updtDt; + } + + /** + * Set versionDt : 参数版本时间. VERSION_DT: CHAR(14) + */ + public void setVersionDt(String versionDt){ + this.versionDt = versionDt; + } + + /** + * Get versionDt : 参数版本时间. VERSION_DT: CHAR(14) + */ + public String getVersionDt(){ + return this.versionDt; + } + + /** + * get currentTime : 当前时间 + */ + public String getCurrentTime() { + return currentTime; + } + + /** + * set currentTime : 当前时间 + */ + public void setCurrentTime(String currentTime) { + this.currentTime = currentTime; + } +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcDcSubwayChangeStationVo.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcDcSubwayChangeStationVo.java new file mode 100644 index 00000000..041322e0 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcDcSubwayChangeStationVo.java @@ -0,0 +1,66 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess; + +// Generated by AutoCode4J +/** + * EntityBean: TBL_DC_SUBWAY_CHANGE_STATION 地铁换乘站点表 : TBL_DC_SUBWAY_CHANGE_STATION + * This is a value object(VO). + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +public class DcDcSubwayChangeStationVo implements java.io.Serializable { + + /** default Serial Version UID*/ + private static final long serialVersionUID = 1L; + // -- Fields -- + /** stationId : 站点ID. STATION_ID: VARCHAR2(32 CHAR) */ + private String stationId ; + + /** standardId : 标准化站点ID. STANDARD_ID: VARCHAR2(32 CHAR) */ + private String standardId ; + + // -- Constructor -- + /** + * Constructor + * + */ + public DcDcSubwayChangeStationVo() { + // Default Construtor + } + + public DcDcSubwayChangeStationVo(String stationId, String standardId) { + this.stationId = stationId; + this.standardId = standardId; + } + + // -- Setter And Getter + /** + * Set stationId : 站点ID. STATION_ID: VARCHAR2(32 CHAR) + */ + public void setStationId(String stationId){ + this.stationId = stationId; + } + + /** + * Get stationId : 站点ID. STATION_ID: VARCHAR2(32 CHAR) + */ + public String getStationId(){ + return this.stationId; + } + + /** + * Set standardId : 标准化站点ID. STANDARD_ID: VARCHAR2(32 CHAR) + */ + public void setStandardId(String standardId){ + this.standardId = standardId; + } + + /** + * Get standardId : 标准化站点ID. STANDARD_ID: VARCHAR2(32 CHAR) + */ + public String getStandardId(){ + return this.standardId; + } + +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcDcSubwayMileageVo.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcDcSubwayMileageVo.java new file mode 100644 index 00000000..8d5e0c8a --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcDcSubwayMileageVo.java @@ -0,0 +1,98 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess; + +// Generated by AutoCode4J +/** + * EntityBean: TBL_DC_SUBWAY_MILEAGE 地铁站点里程表 : TBL_DC_SUBWAY_MILEAGE + * This is a value object(VO). + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +public class DcDcSubwayMileageVo implements java.io.Serializable { + + /** default Serial Version UID*/ + private static final long serialVersionUID = 1L; + // -- Fields -- + /** inStationId : 进站ID. IN_STATION_ID: VARCHAR2(32 CHAR) */ + private String inStationId ; + + /** outStationId : 出站ID. OUT_STATION_ID: VARCHAR2(32 CHAR) */ + private String outStationId ; + + /** mileage : 里程. MILEAGE: NUMBER(10) */ + private Long mileage ; + + /** carMileage : 驾车里程. CAR_MILEAGE: NUMBER(10) */ + private Long carMileage ; + + // -- Constructor -- + /** + * Constructor + * + */ + public DcDcSubwayMileageVo() { + // Default Construtor + } + + public DcDcSubwayMileageVo(String inStationId, String outStationId) { + this.inStationId = inStationId; + this.outStationId = outStationId; + } + + public DcDcSubwayMileageVo(Long mileage, Long carMileage) { + this.mileage = mileage; + this.carMileage = carMileage; + } + + // -- Setter And Getter + /** + * Set inStationId : 进站ID. IN_STATION_ID: VARCHAR2(32 CHAR) + */ + public void setInStationId(String inStationId){ + this.inStationId = inStationId; + } + + /** + * Get inStationId : 进站ID. IN_STATION_ID: VARCHAR2(32 CHAR) + */ + public String getInStationId(){ + return this.inStationId; + } + + /** + * Set outStationId : 出站ID. OUT_STATION_ID: VARCHAR2(32 CHAR) + */ + public void setOutStationId(String outStationId){ + this.outStationId = outStationId; + } + + /** + * Get outStationId : 出站ID. OUT_STATION_ID: VARCHAR2(32 CHAR) + */ + public String getOutStationId(){ + return this.outStationId; + } + + /** + * Set mileage : 里程. MILEAGE: NUMBER(10) + */ + public void setMileage(Long mileage){ + this.mileage = mileage; + } + + /** + * Get mileage : 里程. MILEAGE: NUMBER(10) + */ + public Long getMileage(){ + return this.mileage; + } + + public Long getCarMileage() { + return carMileage; + } + + public void setCarMileage(Long carMileage) { + this.carMileage = carMileage; + } +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcNfcTravelNoticeVo.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcNfcTravelNoticeVo.java new file mode 100644 index 00000000..559e8604 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcNfcTravelNoticeVo.java @@ -0,0 +1,459 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess; + +// Generated by AutoCode4J +/** + * EntityBean: TBL_DC_NFC_TRAVEL_NOTICE NFC卡交易推送表 : TBL_DC_NFC_TRAVEL_NOTICE + * This is a value object(VO). + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +public class DcNfcTravelNoticeVo implements java.io.Serializable { + + /** default Serial Version UID*/ + private static final long serialVersionUID = 1L; + // -- Fields -- + /** seqNo : 推送序号. SEQ_NO: VARCHAR2(64 CHAR) */ + private String seqNo ; + + /** txnLock : 锁标志. TXN_LOCK: CHAR(1) */ + private String txnLock ; + + /** txnTime : 锁时间. TXN_TIME: CHAR(14) */ + private String txnTime ; + + /** travelNo : 业务流水号. TRAVEL_NO: VARCHAR2(32 CHAR) */ + private String travelNo ; + + /** transType : 交易类型. TRANS_TYPE: VARCHAR2(32 CHAR) */ + private String transType ; + + /** inTransTime : 进站时间. IN_TRANS_TIME: CHAR(14) */ + private String inTransTime ; + + /** outTransTime : 出站时间. OUT_TRANS_TIME: CHAR(14) */ + private String outTransTime ; + + /** cardNo : 卡号. CARD_NO: VARCHAR2(32 CHAR) */ + private String cardNo ; + + /** userId : 用户号. USER_ID: VARCHAR2(32 CHAR) */ + private String userId ; + + /** inStationId : 进站点ID. IN_STATION_ID: VARCHAR2(32 CHAR) */ + private String inStationId ; + + /** outStationId : 出站点ID. OUT_STATION_ID: VARCHAR2(32 CHAR) */ + private String outStationId ; + + /** mileage : 里程数. MILEAGE: NUMBER(10) */ + private Long mileage ; + + /** firstChannels : 推送一级机构号. FIRST_CHANNELS: VARCHAR2(512 CHAR) */ + private String firstChannels ; + + /** secondChannels : 推送二级机构号. SECOND_CHANNELS: VARCHAR2(512 CHAR) */ + private String secondChannels ; + + /** userTokens : 机构用户令牌. USER_TOKENS: VARCHAR2(512 CHAR) */ + private String userTokens ; + + /** stlmDate : 清算日期. STLM_DATE : CHAR(8) */ + private String stlmDate; + + /** status : 状态. STATUS: VARCHAR2(32 CHAR) */ + private String status ; + + /** orderCompleteTime : 订单完成时间. ORDER_COMPLETE_TIME: CHAR(14) */ + private String orderCompleteTime ; + + /** nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) */ + private String nextSendTime ; + + /** sendCount : 发送次数. SEND_COUNT: NUMBER(10) */ + private Long sendCount ; + + /** sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) */ + private String sendStatus ; + + /** createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) */ + private String createUser ; + + /** createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) */ + private String createTime ; + + /** lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) */ + private String lstUpdUser ; + + /** lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) */ + private String lstUpdTime ; + + /** remark : 备注. REMARK: VARCHAR2(255 CHAR) */ + private String remark; + // -- Constructor -- + /** + * Constructor + * + */ + public DcNfcTravelNoticeVo() { + // Default Construtor + } + + public DcNfcTravelNoticeVo(String seqNo) { + this.seqNo = seqNo; + } + + // -- Setter And Getter + /** + * Set seqNo : 推送序号. SEQ_NO: VARCHAR2(64 CHAR) + */ + public void setSeqNo(String seqNo){ + this.seqNo = seqNo; + } + + /** + * Get seqNo : 推送序号. SEQ_NO: VARCHAR2(64 CHAR) + */ + public String getSeqNo(){ + return this.seqNo; + } + + /** + * Set txnLock : 锁标志. TXN_LOCK: CHAR(1) + */ + public void setTxnLock(String txnLock){ + this.txnLock = txnLock; + } + + /** + * Get txnLock : 锁标志. TXN_LOCK: CHAR(1) + */ + public String getTxnLock(){ + return this.txnLock; + } + + /** + * Set txnTime : 锁时间. TXN_TIME: CHAR(14) + */ + public void setTxnTime(String txnTime){ + this.txnTime = txnTime; + } + + /** + * Get txnTime : 锁时间. TXN_TIME: CHAR(14) + */ + public String getTxnTime(){ + return this.txnTime; + } + + /** + * Set travelNo : 业务流水号. TRAVEL_NO: VARCHAR2(32 CHAR) + */ + public void setTravelNo(String travelNo){ + this.travelNo = travelNo; + } + + /** + * Get travelNo : 业务流水号. TRAVEL_NO: VARCHAR2(32 CHAR) + */ + public String getTravelNo(){ + return this.travelNo; + } + + /** + * Set transType : 交易类型. TRANS_TYPE: VARCHAR2(32 CHAR) + */ + public void setTransType(String transType){ + this.transType = transType; + } + + /** + * Get transType : 交易类型. TRANS_TYPE: VARCHAR2(32 CHAR) + */ + public String getTransType(){ + return this.transType; + } + + /** + * Set inTransTime : 进站时间. IN_TRANS_TIME: CHAR(14) + */ + public void setInTransTime(String inTransTime){ + this.inTransTime = inTransTime; + } + + /** + * Get inTransTime : 进站时间. IN_TRANS_TIME: CHAR(14) + */ + public String getInTransTime(){ + return this.inTransTime; + } + + /** + * Set outTransTime : 出站时间. OUT_TRANS_TIME: CHAR(14) + */ + public void setOutTransTime(String outTransTime){ + this.outTransTime = outTransTime; + } + + /** + * Get outTransTime : 出站时间. OUT_TRANS_TIME: CHAR(14) + */ + public String getOutTransTime(){ + return this.outTransTime; + } + + /** + * Set cardNo : 卡号. CARD_NO: VARCHAR2(32 CHAR) + */ + public void setCardNo(String cardNo){ + this.cardNo = cardNo; + } + + /** + * Get cardNo : 卡号. CARD_NO: VARCHAR2(32 CHAR) + */ + public String getCardNo(){ + return this.cardNo; + } + + /** + * Set userId : 用户号. USER_ID: VARCHAR2(32 CHAR) + */ + public void setUserId(String userId){ + this.userId = userId; + } + + /** + * Get userId : 用户号. USER_ID: VARCHAR2(32 CHAR) + */ + public String getUserId(){ + return this.userId; + } + + /** + * Set inStationId : 进站点ID. IN_STATION_ID: VARCHAR2(32 CHAR) + */ + public void setInStationId(String inStationId){ + this.inStationId = inStationId; + } + + /** + * Get inStationId : 进站点ID. IN_STATION_ID: VARCHAR2(32 CHAR) + */ + public String getInStationId(){ + return this.inStationId; + } + + /** + * Set outStationId : 出站点ID. OUT_STATION_ID: VARCHAR2(32 CHAR) + */ + public void setOutStationId(String outStationId){ + this.outStationId = outStationId; + } + + /** + * Get outStationId : 出站点ID. OUT_STATION_ID: VARCHAR2(32 CHAR) + */ + public String getOutStationId(){ + return this.outStationId; + } + + /** + * Set mileage : 里程数. MILEAGE: NUMBER(10) + */ + public void setMileage(Long mileage){ + this.mileage = mileage; + } + + /** + * Get mileage : 里程数. MILEAGE: NUMBER(10) + */ + public Long getMileage(){ + return this.mileage; + } + + /** + * Set firstChannels : 推送一级机构号. FIRST_CHANNELS: VARCHAR2(512 CHAR) + */ + public void setFirstChannels(String firstChannels){ + this.firstChannels = firstChannels; + } + + /** + * Get firstChannels : 推送一级机构号. FIRST_CHANNELS: VARCHAR2(512 CHAR) + */ + public String getFirstChannels(){ + return this.firstChannels; + } + + /** + * Set secondChannels : 推送二级机构号. SECOND_CHANNELS: VARCHAR2(512 CHAR) + */ + public void setSecondChannels(String secondChannels){ + this.secondChannels = secondChannels; + } + + /** + * Get secondChannels : 推送二级机构号. SECOND_CHANNELS: VARCHAR2(512 CHAR) + */ + public String getSecondChannels(){ + return this.secondChannels; + } + + /** + * Set userTokens : 机构用户令牌. USER_TOKENS: VARCHAR2(512 CHAR) + */ + public void setUserTokens(String userTokens){ + this.userTokens = userTokens; + } + + /** + * Get userTokens : 机构用户令牌. USER_TOKENS: VARCHAR2(512 CHAR) + */ + public String getUserTokens(){ + return this.userTokens; + } + + /** + * Set status : 状态. STATUS: VARCHAR2(32 CHAR) + */ + public void setStatus(String status){ + this.status = status; + } + + /** + * Get status : 状态. STATUS: VARCHAR2(32 CHAR) + */ + public String getStatus(){ + return this.status; + } + + /** + * Set orderCompleteTime : 订单完成时间. ORDER_COMPLETE_TIME: CHAR(14) + */ + public void setOrderCompleteTime(String orderCompleteTime){ + this.orderCompleteTime = orderCompleteTime; + } + + /** + * Get orderCompleteTime : 订单完成时间. ORDER_COMPLETE_TIME: CHAR(14) + */ + public String getOrderCompleteTime(){ + return this.orderCompleteTime; + } + + /** + * Set nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) + */ + public void setNextSendTime(String nextSendTime){ + this.nextSendTime = nextSendTime; + } + + /** + * Get nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) + */ + public String getNextSendTime(){ + return this.nextSendTime; + } + + /** + * Set sendCount : 发送次数. SEND_COUNT: NUMBER(10) + */ + public void setSendCount(Long sendCount){ + this.sendCount = sendCount; + } + + /** + * Get sendCount : 发送次数. SEND_COUNT: NUMBER(10) + */ + public Long getSendCount(){ + return this.sendCount; + } + + /** + * Set sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) + */ + public void setSendStatus(String sendStatus){ + this.sendStatus = sendStatus; + } + + /** + * Get sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) + */ + public String getSendStatus(){ + return this.sendStatus; + } + + /** + * Set createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) + */ + public void setCreateUser(String createUser){ + this.createUser = createUser; + } + + /** + * Get createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) + */ + public String getCreateUser(){ + return this.createUser; + } + + /** + * Set createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) + */ + public void setCreateTime(String createTime){ + this.createTime = createTime; + } + + /** + * Get createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) + */ + public String getCreateTime(){ + return this.createTime; + } + + /** + * Set lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) + */ + public void setLstUpdUser(String lstUpdUser){ + this.lstUpdUser = lstUpdUser; + } + + /** + * Get lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) + */ + public String getLstUpdUser(){ + return this.lstUpdUser; + } + + /** + * Set lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) + */ + public void setLstUpdTime(String lstUpdTime){ + this.lstUpdTime = lstUpdTime; + } + + /** + * Get lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) + */ + public String getLstUpdTime(){ + return this.lstUpdTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getStlmDate() { + return stlmDate; + } + + public void setStlmDate(String stlmDate) { + this.stlmDate = stlmDate; + } +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcNoticeErrorVo.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcNoticeErrorVo.java new file mode 100644 index 00000000..b047fb97 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/DcNoticeErrorVo.java @@ -0,0 +1,245 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess; + +// Generated by AutoCode4J +/** + * EntityBean: TBL_DC_NOTICE_ERROR 推送错误记录表 : TBL_DC_NOTICE_ERROR + * This is a value object(VO). + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +public class DcNoticeErrorVo implements java.io.Serializable { + + /** default Serial Version UID*/ + private static final long serialVersionUID = 1L; + // -- Fields -- + /** seqNo : 序号. SEQ_NO: VARCHAR2(64 CHAR) */ + private String seqNo ; + + /** noticeSeqNo : 推送序号. NOTICE_SEQ_NO: VARCHAR2(64 CHAR) */ + private String noticeSeqNo ; + + /** msgContent : 消息内容. MSG_CONTENT: CLOB */ + private String msgContent ; + + /** noticeType : 推送类型. NOTICE_TYPE: VARCHAR2(32 CHAR) */ + private String noticeType ; + + /** reason : 失败原因. REASON: VARCHAR2(255 CHAR) */ + private String reason ; + + /** status : 状态. STATUS: VARCHAR2(32 CHAR) */ + private String status ; + + /** nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) */ + private String nextSendTime ; + + /** sendCount : 发送次数. SEND_COUNT: NUMBER(10) */ + private Long sendCount ; + + /** sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) */ + private String sendStatus ; + + /** createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) */ + private String createUser ; + + /** createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) */ + private String createTime ; + + /** lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) */ + private String lstUpdUser ; + + /** lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) */ + private String lstUpdTime ; + + // -- Constructor -- + /** + * Constructor + * + */ + public DcNoticeErrorVo() { + // Default Construtor + } + + public DcNoticeErrorVo(String seqNo) { + this.seqNo = seqNo; + } + + // -- Setter And Getter + /** + * Set seqNo : 序号. SEQ_NO: VARCHAR2(64 CHAR) + */ + public void setSeqNo(String seqNo){ + this.seqNo = seqNo; + } + + /** + * Get seqNo : 序号. SEQ_NO: VARCHAR2(64 CHAR) + */ + public String getSeqNo(){ + return this.seqNo; + } + + /** + * Set noticeSeqNo : 推送序号. NOTICE_SEQ_NO: VARCHAR2(64 CHAR) + */ + public void setNoticeSeqNo(String noticeSeqNo){ + this.noticeSeqNo = noticeSeqNo; + } + + /** + * Get noticeSeqNo : 推送序号. NOTICE_SEQ_NO: VARCHAR2(64 CHAR) + */ + public String getNoticeSeqNo(){ + return this.noticeSeqNo; + } + + /** + * Set noticeType : 推送类型. NOTICE_TYPE: VARCHAR2(32 CHAR) + */ + public void setNoticeType(String noticeType){ + this.noticeType = noticeType; + } + + /** + * Get noticeType : 推送类型. NOTICE_TYPE: VARCHAR2(32 CHAR) + */ + public String getNoticeType(){ + return this.noticeType; + } + + /** + * Set reason : 失败原因. REASON: VARCHAR2(255 CHAR) + */ + public void setReason(String reason){ + this.reason = reason; + } + + /** + * Get reason : 失败原因. REASON: VARCHAR2(255 CHAR) + */ + public String getReason(){ + return this.reason; + } + + /** + * Set status : 状态. STATUS: VARCHAR2(32 CHAR) + */ + public void setStatus(String status){ + this.status = status; + } + + /** + * Get status : 状态. STATUS: VARCHAR2(32 CHAR) + */ + public String getStatus(){ + return this.status; + } + + /** + * Set nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) + */ + public void setNextSendTime(String nextSendTime){ + this.nextSendTime = nextSendTime; + } + + /** + * Get nextSendTime : 下次发送时间. NEXT_SEND_TIME: CHAR(14) + */ + public String getNextSendTime(){ + return this.nextSendTime; + } + + /** + * Set sendCount : 发送次数. SEND_COUNT: NUMBER(10) + */ + public void setSendCount(Long sendCount){ + this.sendCount = sendCount; + } + + /** + * Get sendCount : 发送次数. SEND_COUNT: NUMBER(10) + */ + public Long getSendCount(){ + return this.sendCount; + } + + /** + * Set sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) + */ + public void setSendStatus(String sendStatus){ + this.sendStatus = sendStatus; + } + + /** + * Get sendStatus : 发送状态. SEND_STATUS: VARCHAR2(32 CHAR) + */ + public String getSendStatus(){ + return this.sendStatus; + } + + /** + * Set createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) + */ + public void setCreateUser(String createUser){ + this.createUser = createUser; + } + + /** + * Get createUser : 创建用户. CREATE_USER: VARCHAR2(32 CHAR) + */ + public String getCreateUser(){ + return this.createUser; + } + + /** + * Set createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) + */ + public void setCreateTime(String createTime){ + this.createTime = createTime; + } + + /** + * Get createTime : 创建时间. CREATE_TIME: CHAR(14 CHAR) + */ + public String getCreateTime(){ + return this.createTime; + } + + /** + * Set lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) + */ + public void setLstUpdUser(String lstUpdUser){ + this.lstUpdUser = lstUpdUser; + } + + /** + * Get lstUpdUser : 最后更新用户. LST_UPD_USER: VARCHAR2(32 CHAR) + */ + public String getLstUpdUser(){ + return this.lstUpdUser; + } + + /** + * Set lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) + */ + public void setLstUpdTime(String lstUpdTime){ + this.lstUpdTime = lstUpdTime; + } + + /** + * Get lstUpdTime : 最后更新时间. LST_UPD_TIME: CHAR(14) + */ + public String getLstUpdTime(){ + return this.lstUpdTime; + } + + public String getMsgContent() { + return msgContent; + } + + public void setMsgContent(String msgContent) { + this.msgContent = msgContent; + } +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/Mileage.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/Mileage.java new file mode 100644 index 00000000..f325961c --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/Mileage.java @@ -0,0 +1,26 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess; + +public class Mileage { + + /** carMileage: 驾车里程 */ + private Long carMileage; + + /** subwayMileage: 地铁里程 */ + private Long subWayMileage; + + public Long getCarMileage() { + return carMileage; + } + + public void setCarMileage(Long carMileage) { + this.carMileage = carMileage; + } + + public Long getSubWayMileage() { + return subWayMileage; + } + + public void setSubWayMileage(Long subWayMileage) { + this.subWayMileage = subWayMileage; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcAsynCtrlDao.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcAsynCtrlDao.java new file mode 100644 index 00000000..051a263b --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcAsynCtrlDao.java @@ -0,0 +1,54 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao; + +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcAsynCtrlVo; +import org.apache.ibatis.annotations.Mapper; + +// Generated by AutoCode4J +/** + * Interface: TBL_DC_ASYN_CTRL 系统时间片控制表 : TBL_DC_ASYN_CTRL + * This is a interface. + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +@Mapper +public interface DcAsynCtrlDao { + + /** mapped key is : com.jiuyv.sptcc.market.dataProcess.model.dataProcess.dao.DcAsynCtrlDao.filterQuery */ + String MAPPED_FIND = "com.jiuyv.sptcc.market.dataProcess.model.dataProcess.dao.DcAsynCtrlDao.filterQuery"; + + /** + * Find DcAsynCtrlVo by Primary Key. + * + * @param appId : 应用id + * @return DcAsynCtrlVo : TBL_DC_ASYN_CTRL 系统时间片控制表 + */ + DcAsynCtrlVo findByKey(String appId ) ; + + /** + * Find DcAsynCtrlVo by Primary Key. + * + * @param appId : 应用id + * @return DcAsynCtrlVo : TBL_DC_ASYN_CTRL 系统时间片控制表 + */ + DcAsynCtrlVo findByKeyForUpdate(String appId ) ; + + /** + * Update DcAsynCtrlVo by Primary Key. + * + * @return effect rows. + * @author AutoCode4J + */ + int updateByKey(DcAsynCtrlVo vo); + + + /** + * Insert DcAsynCtrlVo. + * + * @return effect rows. + * @author AutoCode4J + */ + int insert(DcAsynCtrlVo vo) ; + +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcBcTravelNoticeDao.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcBcTravelNoticeDao.java new file mode 100644 index 00000000..1d085042 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcBcTravelNoticeDao.java @@ -0,0 +1,106 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao; + +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.BcTravelNoticeFilter; +import com.jiuyv.sptcc.carbon.dataprocess.model.common.PageDomin; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.*; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Options; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.cursor.Cursor; +import org.apache.ibatis.mapping.ResultSetType; + +import java.util.List; + +// Generated by AutoCode4J +/** + * Interface: TBL_DC_BC_TRAVEL_NOTICE 二维码交易推送表 : TBL_DC_BC_TRAVEL_NOTICE + * This is a interface. + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +@Mapper +public interface DcBcTravelNoticeDao { + + /** mapped key is : com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcBcTravelNoticeDao.filterQuery */ + String MAPPED_FIND = "com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcBcTravelNoticeDao.filterQuery"; + + /** + * Find DcBcTravelNoticeVo by Primary Key. + * + * @param seqNo : 推送序号 + * @return DcBcTravelNoticeVo : TBL_DC_BC_TRAVEL_NOTICE 二维码交易推送表 + */ + DcBcTravelNoticeVo findByKey(String seqNo ) ; + + /** + * Find DcNfcTravelNoticeVo by Primary Key. + * + * @param seqNo : 推送序号 + * @return DcNfcTravelNoticeVo : TBL_DC_NFC_TRAVEL_NOTICE NFC卡交易推送表 + */ + DcBcTravelNoticeVo findByKeyForUpdate(String seqNo ) ; + + /** + * 查询当前时间片时间需要处理的交易 + * @param currentTime 时间片时间 + * @return 交易列表 + */ + List findByNextProcessTime(String currentTime); + + /** + * 根据行程单号查询行程 + * @param travelNo 行程单号 + * @return 行程 + */ + DcBcTravelNoticeVo findByTravelNo(String travelNo); + + /** + * Update DcBcTravelNoticeVo by Primary Key. + * + * @return effect rows. + * @author AutoCode4J + */ + int updateByKey(DcBcTravelNoticeVo vo); + + + /** + * Insert DcBcTravelNoticeVo. + * + * @return effect rows. + * @author AutoCode4J + */ + int insert(DcBcTravelNoticeVo vo) ; + + /** + * 游标获取对账数据 + * @param filter 查询条件 + * @return 数据 + */ + @Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = Integer.MIN_VALUE) + Cursor getNoticeForAcct(@Param("filter") BcTravelNoticeFilter filter); + + /** + * 分页查询 + * @param filter 查询条件 + * @param pageVo 分页参数 + * @return 数据 + */ + List page(@Param("filter") BcTravelNoticeFilter filter, @Param("pageVo") PageDomin pageVo); + + /** + * 查询总数 + * @param filter 查询条件 + * @return 数据 + */ + Long count(@Param("filter")BcTravelNoticeFilter filter); + + /** + * 更新下次处理时间 + * @param bean 对象 + * @return 结果 + */ + int updateNextProcess(DcBcTravelNoticeVo bean); + +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcCalcFactorDao.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcCalcFactorDao.java new file mode 100644 index 00000000..bfd54fc5 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcCalcFactorDao.java @@ -0,0 +1,54 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao; + +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.*; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +// Generated by AutoCode4J +/** + * Interface: TBL_DC_CALC_FACTOR 计算因子表 : TBL_DC_CALC_FACTOR + * This is a interface. + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +@Mapper +public interface DcCalcFactorDao { + + /** mapped key is : com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcCalcFactorDao.filterQuery */ + String MAPPED_FIND = "com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcCalcFactorDao.filterQuery"; + + /** + * Find DcCalcFactorVo by Primary Key. + * + * @param version : VERSION + * @return DcCalcFactorVo : TBL_DC_CALC_FACTOR 计算因子表 + */ + DcCalcFactorVo findByKey(String version ) ; + + /** + * 查询所有因子 + * @return 因子列表 + */ + List findAll(); + + /** + * Update DcCalcFactorVo by Primary Key. + * + * @return effect rows. + * @author AutoCode4J + */ + int updateByKey(DcCalcFactorVo vo); + + + /** + * Insert DcCalcFactorVo. + * + * @return effect rows. + * @author AutoCode4J + */ + int insert(DcCalcFactorVo vo) ; + +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcCtrlDao.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcCtrlDao.java new file mode 100644 index 00000000..3e53d268 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcCtrlDao.java @@ -0,0 +1,24 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao; + +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcCtrlVo; +import org.apache.ibatis.annotations.Mapper; + +// Generated by AutoCode4J + +/** + * Interface: TBL_DC_CTRL 系统控制表 : TBL_DC_CTRL + * This is a interface. + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +@Mapper +public interface DcCtrlDao { + + /** + * 获取清算日期 + * @return 清算日期 + */ + DcCtrlVo selectSysInfo(); +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcDcSubwayChangeStationDao.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcDcSubwayChangeStationDao.java new file mode 100644 index 00000000..234b1387 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcDcSubwayChangeStationDao.java @@ -0,0 +1,41 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao; + +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcDcSubwayChangeStationVo; +import org.apache.ibatis.annotations.MapKey; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Map; + +// Generated by AutoCode4J +/** + * Interface: TBL_DC_SUBWAY_CHANGE_STATION 地铁换乘站点表 : TBL_DC_SUBWAY_CHANGE_STATION + * This is a interface. + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +@Mapper +public interface DcDcSubwayChangeStationDao { + + /** mapped key is : com.jiuyv.sptcc.market.dataProcess.model.dataProcess.dao.DcSubwayChangeStationDao.filterQuery */ + String MAPPED_FIND = "com.jiuyv.sptcc.market.dataProcess.model.dataProcess.dao.DcSubwayChangeStationDao.filterQuery"; + + /** + * Find DcSubwayChangeStationVo by Primary Key. + * + * @param stationId : 站点ID + * @param standardId : 标准化站点ID + * @return DcSubwayChangeStationVo : TBL_DC_SUBWAY_CHANGE_STATION 地铁换乘站点表 + */ + DcDcSubwayChangeStationVo findByKey(String stationId , String standardId ) ; + + /** + * Find DcSubwayChangeStationVo by Primary Key. + * + * @return DcSubwayChangeStationVo : TBL_DC_SUBWAY_CHANGE_STATION 地铁换乘站点表 + */ + @MapKey("stationId") + Map findAll() ; + +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcDcSubwayMileageDao.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcDcSubwayMileageDao.java new file mode 100644 index 00000000..583321aa --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcDcSubwayMileageDao.java @@ -0,0 +1,30 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao; + +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcDcSubwayMileageVo; +import org.apache.ibatis.annotations.Mapper; + +// Generated by AutoCode4J +/** + * Interface: TBL_DC_SUBWAY_MILEAGE 地铁站点里程表 : TBL_DC_SUBWAY_MILEAGE + * This is a interface. + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +@Mapper +public interface DcDcSubwayMileageDao { + + /** mapped key is : com.jiuyv.sptcc.market.dataProcess.model.dataProcess.dao.DcSubwayMileageDao.filterQuery */ + String MAPPED_FIND = "com.jiuyv.sptcc.market.dataProcess.model.dataProcess.dao.DcSubwayMileageDao.filterQuery"; + + /** + * Find DcSubwayMileageVo by Primary Key. + * + * @param inStationId : 进站ID + * @param outStationId : 出站ID + * @return DcSubwayMileageVo : TBL_DC_SUBWAY_MILEAGE 地铁站点里程表 + */ + DcDcSubwayMileageVo findByKey(String inStationId , String outStationId ) ; + +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcNfcTravelNoticeDao.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcNfcTravelNoticeDao.java new file mode 100644 index 00000000..d7a4cecb --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcNfcTravelNoticeDao.java @@ -0,0 +1,70 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao; + +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcNfcTravelNoticeVo; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +// Generated by AutoCode4J +/** + * Interface: TBL_DC_NFC_TRAVEL_NOTICE NFC卡交易推送表 : TBL_DC_NFC_TRAVEL_NOTICE + * This is a interface. + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +@Mapper +public interface DcNfcTravelNoticeDao { + + /** mapped key is : com.jiuyv.sptcc.market.dataProcess.model.dataProcess.dao.DcNfcTravelNoticeDao.filterQuery */ + String MAPPED_FIND = "com.jiuyv.sptcc.market.dataProcess.model.dataProcess.dao.DcNfcTravelNoticeDao.filterQuery"; + + /** + * Find DcNfcTravelNoticeVo by Primary Key. + * + * @param seqNo : 推送序号 + * @return DcNfcTravelNoticeVo : TBL_DC_NFC_TRAVEL_NOTICE NFC卡交易推送表 + */ + DcNfcTravelNoticeVo findByKey(String seqNo ) ; + + /** + * Find DcNfcTravelNoticeVo by Primary Key. + * + * @param seqNo : 推送序号 + * @return DcNfcTravelNoticeVo : TBL_DC_NFC_TRAVEL_NOTICE NFC卡交易推送表 + */ + DcNfcTravelNoticeVo findByKeyForUpdate(String seqNo ) ; + + /** + * 查询当前时间片时间需要处理的交易 + * @param currentTime 时间片时间 + * @return 交易列表 + */ + List findByNextProcessTime(String currentTime); + + /** + * 根据行程单号查询行程 + * @param travelNo 行程单号 + * @return 行程 + */ + DcNfcTravelNoticeVo findByTravelNo(String travelNo); + + /** + * Update DcNfcTravelNoticeVo by Primary Key. + * + * @return effect rows. + * @author AutoCode4J + */ + int updateByKey(DcNfcTravelNoticeVo vo); + + + /** + * Insert DcNfcTravelNoticeVo. + * + * @return effect rows. + * @author AutoCode4J + */ + int insert(DcNfcTravelNoticeVo vo) ; + +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcNoticeErrorDao.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcNoticeErrorDao.java new file mode 100644 index 00000000..310d1f2e --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/DcNoticeErrorDao.java @@ -0,0 +1,88 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao; + +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.NoticeErrorFilter; +import com.jiuyv.sptcc.carbon.dataprocess.model.common.PageDomin; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcNoticeErrorVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +// Generated by AutoCode4J +/** + * Interface: TBL_DC_NOTICE_ERROR 推送错误记录表 : TBL_DC_NOTICE_ERROR + * This is a interface. + * Description: + * + * @author AutoCode4J + * @version 1.0 + */ +@Mapper +public interface DcNoticeErrorDao { + + /** mapped key is : com.jiuyv.sptcc.market.dataProcess.model.dataProcess.dao.DcNoticeErrorDao.filterQuery */ + String MAPPED_FIND = "com.jiuyv.sptcc.market.dataProcess.model.dataProcess.dao.DcNoticeErrorDao.filterQuery"; + + /** + * Find DcNoticeErrorVo by Primary Key. + * + * @param seqNo : 序号 + * @return DcNoticeErrorVo : TBL_DC_NOTICE_ERROR 推送错误记录表 + */ + DcNoticeErrorVo findByKey(String seqNo ) ; + + /** + * Find DcNoticeErrorVo by Primary Key. + * + * @param seqNo : 序号 + * @return DcNoticeErrorVo : TBL_DC_NOTICE_ERROR 推送错误记录表 + */ + DcNoticeErrorVo findByKeyForUpdate(String seqNo ) ; + + /** + * Update DcNoticeErrorVo by Primary Key. + * + * @return effect rows. + * @author AutoCode4J + */ + int updateByKey(DcNoticeErrorVo vo); + + + /** + * Insert DcNoticeErrorVo. + * + * @return effect rows. + * @author AutoCode4J + */ + int insert(DcNoticeErrorVo vo) ; + + /** + * 根据时间查询需要处理的交易 + * @param currentTime 时间 + * @return 交易列表 + */ + List findByNextProcessTime(String currentTime); + + /** + * 分页查询 + * @param filter 查询条件 + * @param pageVo 分页参数 + * @return 数据 + */ + List page(@Param("filter") NoticeErrorFilter filter, @Param("pageVo") PageDomin pageVo); + + /** + * 查询总数 + * @param filter 查询条件 + * @return 数据 + */ + Long count(@Param("filter") NoticeErrorFilter filter); + + /** + * 更新下次处理时间 + * @param bean 对象 + * @return 结果 + */ + int updateNextProcess(DcNoticeErrorVo bean); + +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/PingTestDao.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/PingTestDao.java new file mode 100644 index 00000000..add0db4e --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/model/dataProcess/dao/PingTestDao.java @@ -0,0 +1,17 @@ +package com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao; + +import org.apache.ibatis.annotations.Mapper; + +// Generated by AutoCode4J +/** + * Interface: This is a interface. Description: + * + * @author AutoCode4J + * @version 1.0 + */ +@Mapper +public interface PingTestDao { + + boolean pingTest(); + +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/IProcess.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/IProcess.java new file mode 100644 index 00000000..503088f6 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/IProcess.java @@ -0,0 +1,20 @@ +package com.jiuyv.sptcc.carbon.dataprocess.plugin; + + +/** + * 接口业务逻辑处理interface + * R输入对象 + * S输出对象 + * @author jiuyv + * @since 2014-2-17 15:41:44 + * @version 1.0.0 + */ +public interface IProcess { + + /** + * 接口逻辑处理流程 + * @param req 输入对象 + * @return 返回对象 + */ + S process(R req); +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/BcTravelNoticePageProcessImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/BcTravelNoticePageProcessImpl.java new file mode 100644 index 00000000..432fb613 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/BcTravelNoticePageProcessImpl.java @@ -0,0 +1,107 @@ +package com.jiuyv.sptcc.carbon.dataprocess.plugin.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.ExtData; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import com.jiuyv.sptcc.carbon.dataprocess.common.validate.BizCheck; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.*; +import com.jiuyv.sptcc.carbon.dataprocess.plugin.IProcess; +import com.jiuyv.sptcc.carbon.dataprocess.plugin.impl.base.BaseProcess; +import com.jiuyv.sptcc.carbon.dataprocess.service.IDcBcTravelNoticeService; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * NFC行程分页查询实现 + * @author jiuyv + * @author zsd + * @since 2014-2-17 15:41:44 + * @version 1.0.0 + */ +@Service +public class BcTravelNoticePageProcessImpl extends BaseProcess implements IProcess { + + /** The Constant LOGGER. */ + private static final Logger LOGGER = LoggerFactory + .getLogger(BcTravelNoticePageProcessImpl.class); + + /** 订单service */ + @Autowired + private IDcBcTravelNoticeService orderService; + + /** + * 输入对象检查 + * @param req 请求对象 + * @throws BaseException 业务异常 + */ + @Override + protected void preCheck(BcTravelNoticePageReqVo req) throws BaseException { + BizCheck.notNull(req.getFilter(), Constant.RespCode.INPUT_NOT_VALID, Constant.RespMsg.FILTER_IS_NULL); + if (StringUtils.isBlank(req.getFilter().getCreateTimeStart()) + && StringUtils.isBlank(req.getFilter().getCreateTimeEnd())) { + throw new BaseException(Constant.RespCode.INPUT_NOT_VALID, Constant.RespMsg.TIME_IS_NULL_1); + } + } + + /** + * 业务处理 + * @param req 请求对象 + * @param resp 返回对象 + * @return 返回对象 + */ + @Override + protected BcTravelNoticePageRespVo business(BcTravelNoticePageReqVo req, BcTravelNoticePageRespVo resp) + throws BaseException { + // 返回数据 + Long totalCount = 0l; + BcTravelNoticeFilter filter = req.getFilter(); + // 分页参数空处理 + PageVo pageVo = req.getPageVo(); + if (pageVo == null) { + pageVo = new PageVo(); + } + ExtData ext = orderService.page(filter, pageVo); + if (ext.isSuccess()) { + totalCount = ext.getTotalCount(); + if (totalCount > 0l) { + resp.setOrderList(ext.getDataList()); + } + } + // 回填订单信息 + resp.setRespCode(Constant.RespCode.SUCCESS); + resp.setTotalCount(totalCount); + return resp; + } + + /** + * 拷贝请求对象的内容至返回对象 + * @param req 请求对象 + * @return 返回对象 + */ + @Override + protected BcTravelNoticePageRespVo req2resp(BcTravelNoticePageReqVo req) { + BcTravelNoticePageRespVo resp = new BcTravelNoticePageRespVo(); + resp.setReqId(req.getReqId()); + return resp; + } + + /** + * 组装错误返回对象 + * @param req 输入对象 + * @param code 返回码 + * @param message 返回码解释 + * @return 返回对象 + */ + @Override + protected BcTravelNoticePageRespVo generateErrorResp(BcTravelNoticePageReqVo req, String code, + String message) { + BcTravelNoticePageRespVo resp = req2resp(req); + resp.setRespCode(code); + resp.setRespDesc(message); + return resp; + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/BcTravelNoticeReprocessProcessImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/BcTravelNoticeReprocessProcessImpl.java new file mode 100644 index 00000000..e7408f15 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/BcTravelNoticeReprocessProcessImpl.java @@ -0,0 +1,88 @@ +package com.jiuyv.sptcc.carbon.dataprocess.plugin.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import com.jiuyv.sptcc.carbon.dataprocess.common.validate.BizCheck; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.BcTravelNoticeReprocessReqVo; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.BcTravelNoticeReprocessRespVo; +import com.jiuyv.sptcc.carbon.dataprocess.plugin.IProcess; +import com.jiuyv.sptcc.carbon.dataprocess.plugin.impl.base.BaseProcess; +import com.jiuyv.sptcc.carbon.dataprocess.service.IDcBcTravelNoticeService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * NFC行程重新处理 + * @author jiuyv + * @author zsd + * @since 2014-2-17 15:41:44 + * @version 1.0.0 + */ +@Service +public class BcTravelNoticeReprocessProcessImpl extends BaseProcess implements IProcess { + + /** The Constant LOGGER. */ + private static final Logger LOGGER = LoggerFactory + .getLogger(BcTravelNoticeReprocessProcessImpl.class); + + /** 订单service */ + @Autowired + private IDcBcTravelNoticeService orderService; + + /** + * 输入对象检查 + * @param req 请求对象 + * @throws BaseException 业务异常 + */ + @Override + protected void preCheck(BcTravelNoticeReprocessReqVo req) throws BaseException { + BizCheck.notBlank(req.getSeqNo(), Constant.RespCode.INPUT_NOT_VALID, Constant.RespMsg.SEQ_NO_NULL); + } + + /** + * 业务处理 + * @param req 请求对象 + * @param resp 返回对象 + * @return 返回对象 + */ + @Override + protected BcTravelNoticeReprocessRespVo business(BcTravelNoticeReprocessReqVo req, BcTravelNoticeReprocessRespVo resp) + throws BaseException { + // 返回数据 + // 回填订单信息 + orderService.doRegisterReprocess(req.getSeqNo()); + resp.setRespCode(Constant.RespCode.SUCCESS); + return resp; + } + + /** + * 拷贝请求对象的内容至返回对象 + * @param req 请求对象 + * @return 返回对象 + */ + @Override + protected BcTravelNoticeReprocessRespVo req2resp(BcTravelNoticeReprocessReqVo req) { + BcTravelNoticeReprocessRespVo resp = new BcTravelNoticeReprocessRespVo(); + resp.setReqId(req.getReqId()); + return resp; + } + + /** + * 组装错误返回对象 + * @param req 输入对象 + * @param code 返回码 + * @param message 返回码解释 + * @return 返回对象 + */ + @Override + protected BcTravelNoticeReprocessRespVo generateErrorResp(BcTravelNoticeReprocessReqVo req, String code, + String message) { + BcTravelNoticeReprocessRespVo resp = req2resp(req); + resp.setRespCode(code); + resp.setRespDesc(message); + return resp; + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/DcTravelProcessImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/DcTravelProcessImpl.java new file mode 100644 index 00000000..c4de2670 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/DcTravelProcessImpl.java @@ -0,0 +1,225 @@ +package com.jiuyv.sptcc.carbon.dataprocess.plugin.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.JsonUtil; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.Sm3Util; +import com.jiuyv.sptcc.carbon.dataprocess.model.ResultBean; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcBcTravelNoticeVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcCalcFactorVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcDcSubwayChangeStationVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcDcSubwayMileageVo; +import com.jiuyv.sptcc.carbon.dataprocess.plugin.IProcess; +import com.jiuyv.sptcc.carbon.dataprocess.service.IBcTravelTransService; +import com.jiuyv.sptcc.carbon.dataprocess.service.ICacheService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.Map; + +/** + * NFC行程处理类 + */ +@Service +public class DcTravelProcessImpl implements IProcess> { + + /** The Constant LOGGER. */ + private static final Logger LOGGER = LoggerFactory + .getLogger(DcTravelProcessImpl.class); + + private static final DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); + + private static final DcDcSubwayMileageVo zeroMileage = new DcDcSubwayMileageVo(0L, 0L); + + private static final BigDecimal THOUSAND = new BigDecimal(1000); + + @Autowired + private IBcTravelTransService transService; + + @Autowired + private ICacheService cacheService; + + @Value("${bc-travel.sm3Key}") + private String sm3Key; + + /** + * 处理方法 + * @param req 输入对象 + * @return 结果 + */ + @Override + public ResultBean process(DcBcTravelNoticeVo req) { + ResultBean rb = transService.doTry(req); + // 要么是处理完毕的交易,要么有别的线程在处理 + if (!rb.isSuccess()) { + return new ResultBean<>(false, rb.getData(), rb.getRespCode(), rb.getRespMessage()); + } + DcBcTravelNoticeVo vo = rb.getData(); + // 补充里程信息 + if (Constant.BcTravelTransType.SUBWAY.equals(vo.getTransType())) { + DcDcSubwayMileageVo mileage = getMileage(vo.getInStationId(), vo.getOutStationId()); + // 获取不到里程 + if (mileage == null) { + vo.setStatus(Constant.NfcTravelStatus.PROCESSING); + vo.setRemark(Constant.RespMsg.MILEAGE_NOT_FOUND); + transService.doCancel(vo); + LOGGER.info("mileage not found! vo: [{}]", JsonUtil.convertToJson(vo)); + return new ResultBean<>(false, vo, Constant.RespCode.INPUT_NOT_VALID, Constant.RespMsg.MILEAGE_NOT_FOUND); + } + // 0米代表同站进出,不同步 + if (mileage.equals(zeroMileage)) { + // 无需重试,记录日志即可,不记录失败表 + vo.setRemark(Constant.RespMsg.SAME_STATION); + transService.doConfirm(vo); + LOGGER.info("zeroMileage! vo: [{}]", JsonUtil.convertToJson(vo)); + return new ResultBean<>(false, vo, Constant.RespCode.INPUT_NOT_VALID, Constant.RespMsg.SAME_STATION); + } + vo.setCarMileage(mileage.getCarMileage()); + vo.setMileage(mileage.getMileage()); + } + try { + // 计算碳排放量 + calcCarbonFootprint(vo); + // 计算特征值 + calcSign(vo); + } catch (BaseException e) { + LOGGER.info("process falied, reason:{}", e.getMessage(), e); + vo.setRemark(e.getLocalizedMessage()); + transService.doCancel(vo); + return new ResultBean<>(false, vo, e.getErrorCode(), e.getErrorMessage()); + } catch (Exception e) { + LOGGER.info("process falied, reason: sys_error", e.getMessage(), e); + vo.setRemark(e.getLocalizedMessage()); + transService.doCancel(vo); + return new ResultBean<>(false, vo, Constant.RespCode.SYS_ERROR, Constant.RespMsg.SYS_ERROR); + } + // 计算行程特征值 + // 转换消息体 + /*NfcTravelNoticeVo noticeVo = conver2Send(vo); + // 如果是待发送就进行发送 + try { + // 推送 + // sendService.sendReqToRabbitmq(JsonUtil.convertToJson(noticeVo), rabbitChannel.nfcTravelNotice(), null, getRoutingKey(vo)); + + } catch (Exception e) { + // 放入MQ失败更新下次发送时间 + vo.setStatus(Constant.NfcTravelStatus.WAIT_FOR_SEND); + transService.doCancel(vo); + return new ResultBean<>(false, vo, Constant.RespCode.POST_FAILED, Constant.RespMsg.POST_FAILED); + }*/ + // 更新行程信息 + ResultBean res = transService.doConfirm(vo); + LOGGER.info("process success! vo: [{}]", JsonUtil.convertToJson(res.getData())); + return new ResultBean<>(true, vo, Constant.RespCode.SUCCESS, Constant.RespMsg.SUCCESS); + } + + /** + * 根据行程时间选择 + * @param calcList 因子列表 + * @param vo 行程对象 + * @return 因子对象 + */ + private DcCalcFactorVo getCalcFactor(List calcList, DcBcTravelNoticeVo vo) { + String transTime = vo.getInTransTime(); + for (DcCalcFactorVo calcVo : calcList) { + if (!LocalDateTime.parse(transTime, sdf).isAfter(LocalDateTime.parse(calcVo.getEndTime(), sdf)) + && !LocalDateTime.parse(transTime, sdf).isBefore(LocalDateTime.parse(calcVo.getStartTime(), sdf))) { + return calcVo; + } + } + return null; + } + + /** + * 计算碳减排量 + * @param vo 行程 + */ + private void calcCarbonFootprint(DcBcTravelNoticeVo vo) throws BaseException { + // 获取计算因子列表 + List calcList = cacheService.findCalcFactor(); + // 查询符合条件的因子版本 + DcCalcFactorVo calcVo = getCalcFactor(calcList, vo); + if (calcVo == null) { + throw new BaseException(Constant.RespCode.BUSINESS_ERROR, Constant.RespMsg.FACTOR_NOT_FOUND); + } + BigDecimal result; + // 放入因子版本号,事后追踪用 + vo.setCalcFactorVersion(calcVo.getVersion()); + // 公交和地铁计算方式不同 + // 结果保留5位小数,进位方式为截断 + if (Constant.BcTravelTransType.BUS.equals(vo.getTransType())) { + // 平均里程数 + Long averageMileage = calcVo.getAvaerageMileage(); + // 高碳排放因子 + Long normalFactor = calcVo.getNormalFactor(); + // 公交排放因子 + Long busFactor = calcVo.getBusFactor(); + // 平均里程数 * (高碳排放因子 - 公交排放因子) + result = new BigDecimal(averageMileage).divide(THOUSAND).multiply(new BigDecimal(normalFactor).subtract(new BigDecimal(busFactor))).setScale(5, RoundingMode.DOWN); + } else if (Constant.BcTravelTransType.SUBWAY.equals(vo.getTransType())) { + // 高碳排放因子 + Long normalFactor = calcVo.getNormalFactor(); + // 地铁排放因子 + Long subwayFactor = calcVo.getSubwayFactor(); + // 驾车里程*高碳排放因子 - 地铁里程*地铁排放因子 + BigDecimal carCarbon = new BigDecimal(vo.getCarMileage()).divide(THOUSAND).multiply(new BigDecimal(normalFactor)); + BigDecimal subwayCarbon = new BigDecimal(vo.getMileage()).divide(THOUSAND).multiply(new BigDecimal(subwayFactor)); + result = carCarbon.subtract(subwayCarbon).setScale(5, RoundingMode.DOWN); + } else { + throw new BaseException(Constant.RespCode.INPUT_NOT_VALID, Constant.RespMsg.TRANSTYPE_NOT_SUPPORT); + } + vo.setCarbonFootprint(result.toPlainString()); + } + + /** + * 计算行程特征值 + * @param vo 行程 + */ + private void calcSign(DcBcTravelNoticeVo vo) throws UnsupportedEncodingException { + // 计算碳排放量 + // 特征值 + // 用户号+交易类型+上车时间+唯一流水号+秘钥 SM3 + String plainText = vo.getUserId() + vo.getTransType() + vo.getTravelNo() + vo.getInTransTime() + sm3Key; + vo.setTravelHash(Sm3Util.encrypt(plainText)); + } + + /** + * 获取行程里程 + * @param inStationId 进站ID + * @param outStationId 出站ID + * @return 里程数 + */ + private DcDcSubwayMileageVo getMileage(String inStationId, String outStationId) { + String inStationIdPad = inStationId; + String outStationIdPad = outStationId; + // 换乘站点ID标准化 + // 进站ID等于出站ID则里程为0 + if (inStationIdPad.equals(outStationIdPad)) { + return zeroMileage; + } + // 归一化换乘站信息 + String in = inStationIdPad; + String out = outStationIdPad; + Map changeMap = cacheService.findChangeStation(); + if (changeMap.containsKey(inStationIdPad)) { + in = changeMap.get(inStationIdPad).getStandardId(); + } + if (changeMap.containsKey(outStationIdPad)) { + out = changeMap.get(outStationIdPad).getStandardId(); + } + // 归一化后还需要再判断一下 + if (in.equals(out)) { + return zeroMileage; + } + return cacheService.getMileage(in, out); + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/NoticeErrorPageProcessImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/NoticeErrorPageProcessImpl.java new file mode 100644 index 00000000..777f8307 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/NoticeErrorPageProcessImpl.java @@ -0,0 +1,107 @@ +package com.jiuyv.sptcc.carbon.dataprocess.plugin.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.ExtData; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import com.jiuyv.sptcc.carbon.dataprocess.common.validate.BizCheck; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.*; +import com.jiuyv.sptcc.carbon.dataprocess.plugin.IProcess; +import com.jiuyv.sptcc.carbon.dataprocess.plugin.impl.base.BaseProcess; +import com.jiuyv.sptcc.carbon.dataprocess.service.IDcNoticeErrorService; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 失败消息分页查询实现 + * @author jiuyv + * @author zsd + * @since 2014-2-17 15:41:44 + * @version 1.0.0 + */ +@Service +public class NoticeErrorPageProcessImpl extends BaseProcess implements IProcess { + + /** The Constant LOGGER. */ + private static final Logger LOGGER = LoggerFactory + .getLogger(NoticeErrorPageProcessImpl.class); + + /** 订单service */ + @Autowired + private IDcNoticeErrorService orderService; + + /** + * 输入对象检查 + * @param req 请求对象 + * @throws BaseException 业务异常 + */ + @Override + protected void preCheck(NoticeErrorPageReqVo req) throws BaseException { + BizCheck.notNull(req.getFilter(), Constant.RespCode.INPUT_NOT_VALID, Constant.RespMsg.FILTER_IS_NULL); + if (StringUtils.isBlank(req.getFilter().getCreateTimeStart()) + && StringUtils.isBlank(req.getFilter().getCreateTimeEnd())) { + throw new BaseException(Constant.RespCode.INPUT_NOT_VALID, Constant.RespMsg.TIME_IS_NULL_1); + } + } + + /** + * 业务处理 + * @param req 请求对象 + * @param resp 返回对象 + * @return 返回对象 + */ + @Override + protected NoticeErrorPageRespVo business(NoticeErrorPageReqVo req, NoticeErrorPageRespVo resp) + throws BaseException { + // 返回数据 + Long totalCount = 0l; + NoticeErrorFilter filter = req.getFilter(); + // 分页参数空处理 + PageVo pageVo = req.getPageVo(); + if (pageVo == null) { + pageVo = new PageVo(); + } + ExtData ext = orderService.page(filter, pageVo); + if (ext.isSuccess()) { + totalCount = ext.getTotalCount(); + if (totalCount > 0l) { + resp.setOrderList(ext.getDataList()); + } + } + // 回填订单信息 + resp.setRespCode(Constant.RespCode.SUCCESS); + resp.setTotalCount(totalCount); + return resp; + } + + /** + * 拷贝请求对象的内容至返回对象 + * @param req 请求对象 + * @return 返回对象 + */ + @Override + protected NoticeErrorPageRespVo req2resp(NoticeErrorPageReqVo req) { + NoticeErrorPageRespVo resp = new NoticeErrorPageRespVo(); + resp.setReqId(req.getReqId()); + return resp; + } + + /** + * 组装错误返回对象 + * @param req 输入对象 + * @param code 返回码 + * @param message 返回码解释 + * @return 返回对象 + */ + @Override + protected NoticeErrorPageRespVo generateErrorResp(NoticeErrorPageReqVo req, String code, + String message) { + NoticeErrorPageRespVo resp = req2resp(req); + resp.setRespCode(code); + resp.setRespDesc(message); + return resp; + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/NoticeErrorReprocessProcessImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/NoticeErrorReprocessProcessImpl.java new file mode 100644 index 00000000..b25beb9f --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/NoticeErrorReprocessProcessImpl.java @@ -0,0 +1,88 @@ +package com.jiuyv.sptcc.carbon.dataprocess.plugin.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import com.jiuyv.sptcc.carbon.dataprocess.common.validate.BizCheck; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.NoticeErrorReprocessReqVo; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.NoticeErrorReprocessRespVo; +import com.jiuyv.sptcc.carbon.dataprocess.plugin.IProcess; +import com.jiuyv.sptcc.carbon.dataprocess.plugin.impl.base.BaseProcess; +import com.jiuyv.sptcc.carbon.dataprocess.service.IDcNoticeErrorService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 失败消息重新处理 + * @author jiuyv + * @author zsd + * @since 2014-2-17 15:41:44 + * @version 1.0.0 + */ +@Service +public class NoticeErrorReprocessProcessImpl extends BaseProcess implements IProcess { + + /** The Constant LOGGER. */ + private static final Logger LOGGER = LoggerFactory + .getLogger(NoticeErrorReprocessProcessImpl.class); + + /** 订单service */ + @Autowired + private IDcNoticeErrorService orderService; + + /** + * 输入对象检查 + * @param req 请求对象 + * @throws BaseException 业务异常 + */ + @Override + protected void preCheck(NoticeErrorReprocessReqVo req) throws BaseException { + BizCheck.notBlank(req.getSeqNo(), Constant.RespCode.INPUT_NOT_VALID, Constant.RespMsg.SEQ_NO_NULL); + } + + /** + * 业务处理 + * @param req 请求对象 + * @param resp 返回对象 + * @return 返回对象 + */ + @Override + protected NoticeErrorReprocessRespVo business(NoticeErrorReprocessReqVo req, NoticeErrorReprocessRespVo resp) + throws BaseException { + // 返回数据 + // 回填订单信息 + orderService.doRegisterReprocess(req.getSeqNo()); + resp.setRespCode(Constant.RespCode.SUCCESS); + return resp; + } + + /** + * 拷贝请求对象的内容至返回对象 + * @param req 请求对象 + * @return 返回对象 + */ + @Override + protected NoticeErrorReprocessRespVo req2resp(NoticeErrorReprocessReqVo req) { + NoticeErrorReprocessRespVo resp = new NoticeErrorReprocessRespVo(); + resp.setReqId(req.getReqId()); + return resp; + } + + /** + * 组装错误返回对象 + * @param req 输入对象 + * @param code 返回码 + * @param message 返回码解释 + * @return 返回对象 + */ + @Override + protected NoticeErrorReprocessRespVo generateErrorResp(NoticeErrorReprocessReqVo req, String code, + String message) { + NoticeErrorReprocessRespVo resp = req2resp(req); + resp.setRespCode(code); + resp.setRespDesc(message); + return resp; + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/base/BaseProcess.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/base/BaseProcess.java new file mode 100644 index 00000000..cc73d7d0 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/plugin/impl/base/BaseProcess.java @@ -0,0 +1,109 @@ +package com.jiuyv.sptcc.carbon.dataprocess.plugin.impl.base; + + +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import com.jiuyv.sptcc.carbon.dataprocess.common.validate.BizCheck; +import com.jiuyv.sptcc.carbon.dataprocess.dto.BaseReqVo; +import com.jiuyv.sptcc.carbon.dataprocess.dto.BaseRespVo; +import com.jiuyv.sptcc.carbon.dataprocess.plugin.IProcess; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 接口处理模板方法类 + * preCheck 预处理 + * business 业务处理 + * generateErrorResp 构造错误返回对象 + * R 请求对象 + * S 返回对象 + * @author zsd + * @since 2014-2-17 15:41:44 + * @version 1.0.0 + */ +public abstract class BaseProcess implements IProcess { + + /** + * Logger for this class + */ + protected static final Logger LOGGER = LoggerFactory.getLogger(BaseProcess.class); + + /** 交通卡用户中心交易代码 */ + private static final String SPTCC_TRANS_TYPE = "0000"; + + /** 交通卡用户中心创建标识 */ + private static final String SPTCC_CREATE_FLAG = "01"; + + /** + * 输入对象检查 + * @param req 请求对象 + * @throws BaseException 业务异常 + */ + protected abstract void preCheck(R req) throws BaseException; + + /** + * 接口逻辑处理 + * @param req 输入对象 + * @return 返回对象 + */ + public S process(R req) { + try { + // 预检查 + preCheck(req); + S resp = req2resp(req); + // 业务逻辑处理 + resp = business(req, resp); + return resp; + } catch(BaseException e) { + LOGGER.error("process error, error message [{}]", e.getErrorMessage()); + // 根据错误结果组装返回对象 + S resp = generateErrorResp(req, e.getErrorCode(), e.getErrorMessage()); + return resp; + } catch(Exception e) { + LOGGER.error("process error", e); + S resp = generateErrorResp(req, Constant.RespCode.SYS_ERROR, Constant.RespMsg.SYS_ERROR); + return resp; + } + } + + /** + * 接口业务处理 + * @param req 输入对象 + * @param resp 返回对象 + * @return 返回对象 + * @throws BaseException 业务异常 + */ + protected abstract S business(R req, S resp) throws Exception; + + /** + * 拷贝请求对象的内容至返回对象 + * @param req 请求对象 + * @return 返回对象 + */ + protected abstract S req2resp(R req); + + /** + * 组装错误返回对象 + * @param req 输入对象 + * @param code 返回码 + * @param message 返回码解释 + * @return 返回对象 + */ + protected S generateErrorResp(R req, String code, String message) { + S resp = req2resp(req); + resp.setRespCode(code); + resp.setRespDesc(message); + return resp; + } + + /** + * 检查基本参数 + * @param reqId 请求号 + * @throws BaseException 业务异常 + */ + protected void checkCommon(String reqId) throws BaseException { + // 请求流水号不能为空 + BizCheck.notBlank(reqId, Constant.RespCode.INPUT_NOT_VALID, Constant.RespMsg.REQ_ID_IS_NULL); + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/quartz/BcTravelResendTask.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/quartz/BcTravelResendTask.java new file mode 100644 index 00000000..2429d7b0 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/quartz/BcTravelResendTask.java @@ -0,0 +1,76 @@ +package com.jiuyv.sptcc.carbon.dataprocess.quartz; + +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.DateUtil; +import com.jiuyv.sptcc.carbon.dataprocess.model.ResultBean; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcBcTravelNoticeVo; +import com.jiuyv.sptcc.carbon.dataprocess.plugin.IProcess; +import com.jiuyv.sptcc.carbon.dataprocess.service.IAsynCtrlService; +import com.jiuyv.sptcc.carbon.dataprocess.service.IDcBcTravelNoticeService; +import org.apache.commons.collections.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@EnableScheduling +public class BcTravelResendTask { + + /** + * LOGGER + */ + private static final Logger LOGGER = LoggerFactory.getLogger(BcTravelResendTask.class); + + @Autowired + private IAsynCtrlService service; + + /** 二维码行程推送处理 */ + @Autowired + private IProcess> bcTravelNoticeProcess; + + @Autowired + private IDcBcTravelNoticeService orderService; + + @Scheduled(cron = "${quartz.corn}") + public void TimerRun() { + // 由于quartz只能最小到单秒触发,当单例执行时,有无法追回时间片的风险,执行2次,提高频度,这样单例时也可以追回时间片 + for (int times = 1; times <= 2; times++) { + String timecurrent = service.doGetTimeCut(Constant.AsynApp.BC_TRAVEL_SEND); + if (null != timecurrent) { + doBusiness(timecurrent); + // 取当前时间片减1小时,用于补漏 + String timecurrentDelay1Hour = DateUtil.getDateAdd(timecurrent, -3600L); + doBusiness(timecurrentDelay1Hour); + } + } + } + + /** + * 进行业务处理 + * @param timecurrent 时间片 + */ + private void doBusiness(String timecurrent) { + // 如果没有得到时间片,退出 + if (timecurrent == null) { + return; + } + // 根据时间查询列表 + List orderList = orderService.findByNextProcessTime(timecurrent); + // 列表不为空就逐条处理 + if (CollectionUtils.isNotEmpty(orderList)) { + for (DcBcTravelNoticeVo order : orderList) { + try { + bcTravelNoticeProcess.process(order); + } catch (Exception e) { + LOGGER.error("process error", e); + } + } + } + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/quartz/CarbonDataTask.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/quartz/CarbonDataTask.java new file mode 100644 index 00000000..3b0e957a --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/quartz/CarbonDataTask.java @@ -0,0 +1,41 @@ +package com.jiuyv.sptcc.carbon.dataprocess.quartz; + +import com.jiuyv.sptcc.carbon.dataprocess.service.ICalculateReductionService; +import com.jiuyv.sptcc.carbon.dataprocess.service.IReadFileService; +import com.xxl.job.core.handler.annotation.XxlJob; +import org.springframework.stereotype.Component; + +/** + * xxl任务调度入口 + * @author ren_chao + */ +@Component +public class CarbonDataTask { + + private final IReadFileService readFileService; + + private final ICalculateReductionService calculateReductionService; + + public CarbonDataTask(IReadFileService readFileService, ICalculateReductionService calculateReductionService) { + this.readFileService = readFileService; + this.calculateReductionService = calculateReductionService; + } + + /** + * 读取文件 + */ + @XxlJob(value = "readFileTask") + public void readFileTask() { + readFileService.readFileAndInsertDatabase(); + } + + /** + * 减碳量计算 + */ + @XxlJob(value = "calculateReductionTask") + public void calculateReductionTask() { + calculateReductionService.calculate(); + } + + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/quartz/CreateAcctFile.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/quartz/CreateAcctFile.java new file mode 100644 index 00000000..9a7dfc5b --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/quartz/CreateAcctFile.java @@ -0,0 +1,224 @@ +package com.jiuyv.sptcc.carbon.dataprocess.quartz; + +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.JsonUtil; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.SFtpUtil; +import com.jiuyv.sptcc.carbon.dataprocess.config.AcctSftpConfig; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.BcTravelNoticeFilter; +import com.jiuyv.sptcc.carbon.dataprocess.model.MsgInfo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.BcTravelAcctSumVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.BcTravelAcctVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcBcTravelNoticeVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcBcTravelNoticeDao; +import com.jiuyv.sptcc.carbon.dataprocess.service.IMsgSendService; +import com.jiuyv.sptcc.carbon.dataprocess.service.ISysCommonService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import org.apache.commons.lang.StringUtils; +import org.apache.ibatis.cursor.Cursor; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.io.*; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Iterator; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +/** + * 生成对账文件 + */ +@Component +public class CreateAcctFile { + + /** + * Constant Logger LOG: Logger :. + */ + private static final Logger LOG = LoggerFactory + .getLogger(CreateAcctFile.class); + + @Autowired + private ISysCommonService sysCommonService; + + @Autowired + private AcctSftpConfig sFtpConfig; + + @Autowired + private SqlSessionFactory sqlSessionFactory; + + @Value("${bc-travel.acct.prefix}") + private String prefix; + + /** 告警短信发送手机号 */ + @Value("${message.mobile}") + private String mobile; + + @Autowired + private IMsgSendService msgSendService; + + private static final String MSG_TITLE = "碳普惠批处理状态提醒"; + + @XxlJob(value="createBcAcctFile") + public void execute() throws Exception { + XxlJobHelper.log("CreateAcctFile start"); + String param = XxlJobHelper.getJobParam(); + LOG.info("CreateAcctFile start"); + String stlmDate = ""; + // 如果有传入参数取传入参数 + if (StringUtils.isNotBlank(param)) { + XxlJobHelper.log("param: [{}]", param); + try { + LocalDate.parse(param, DateTimeFormatter.ofPattern("yyyyMMdd")); + stlmDate = param; + } catch (Exception e) { + XxlJobHelper.log("param error"); + XxlJobHelper.handleFail() ; + return; + } + } else { + // 如果没有取系统时间-1天 + stlmDate = sysCommonService.selectSday().getPrevStmtDay(); + } + // 目前只有沪碳行系统 + XxlJobHelper.log("processing orgCode {}, stlmDate {}",stlmDate); + // 多个手机号 + String[] mobiles = mobile.split(","); + File file; + try { + file = doCreateFile(stlmDate); + // 上传至文件服务器 + SFtpUtil.uploadFile(sFtpConfig.getRemoteDir() + "/dataProcess/" + stlmDate.substring(0, 6) + "/", stlmDate + "_" + prefix + ".zip", new FileInputStream(file), sFtpConfig); + } catch (Exception e) { + XxlJobHelper.log("CreateAcctFile error", e); + LOG.error("CreateAcctFile error", e); + msgSendService.sendMsg(new MsgInfo(MSG_TITLE, "任务【碳减排文件生成】执行失败, 原因:【文件生成失败】"), mobiles); + XxlJobHelper.handleFail() ; + return; + } + XxlJobHelper.log("CreateAcctFile end"); + LOG.info("CreateAcctFile end"); + msgSendService.sendMsg(new MsgInfo(MSG_TITLE, "任务【碳减排文件生成】执行成功"), mobiles); + XxlJobHelper.handleSuccess() ; + return; + } + + /** + * 根据清算日期生成文件 + * + * @param stlmDate 清算日期 + * @return 临时文件对象 + * @throws IOException IOException + */ + private File doCreateFile(String stlmDate) throws IOException, BaseException { + // 创建临时文件 + File file = File.createTempFile(prefix, ".txt"); + File zipFile = File.createTempFile(prefix, ".zip"); + // 初始化汇总信息 + BcTravelAcctSumVo sum = new BcTravelAcctSumVo( stlmDate); + BcTravelNoticeFilter filter = new BcTravelNoticeFilter(); + filter.setStlmStartTime(stlmDate); + filter.setStlmEndTime(stlmDate); + filter.setStatus(Constant.NfcTravelStatus.SUCCESS); + // 转换列表类型 + if (!StringUtils.isBlank(filter.getStatus())) { + filter.setStatusList(filter.getStatus().split(",")); + } + // 手动开启sqlSession 游标读取时连接不能中断 + // 如果使用事务也可以保持连接,但可能由于时间过长事务一直不commit会造成问题 + try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))); + SqlSession sqlSession = sqlSessionFactory.openSession(); + Cursor cursor = sqlSession.getMapper(DcBcTravelNoticeDao.class).getNoticeForAcct(filter);) { + // 第一行预留500个空格,用于之后插入汇总 + String r = ""; + for (int i = 0; i <= 500; i++) { + r += " "; + } + bw.write(r); + bw.newLine(); + Iterator it = cursor.iterator(); + int i = 0; + while (it.hasNext()) { + DcBcTravelNoticeVo order = it.next(); + sum.setTotalCount(sum.getTotalCount() + 1); + // 写入文件 + BcTravelAcctVo o = new BcTravelAcctVo(); + o.setUserId(order.getUserId()); + o.setIntoTransTime(order.getInTransTime()); + o.setTransType(order.getTransType()); + o.setTravelNo(order.getTravelNo()); + o.setUserToken(order.getUserTokens()); + o.setFirstChannels(order.getFirstChannels()); + o.setSecondChannels(order.getSecondChannels()); + o.setBcChannel(order.getBcChannel()); + o.setCarbonFootprint(order.getCarbonFootprint()); + o.setTravelHash(order.getTravelHash()); + String row = JsonUtil.convertToJson(o); + bw.write(row); + bw.newLine(); + if (i % 1000 == 0) { + bw.flush(); + } + i ++; + } + bw.write("EOF"); + bw.flush(); + } catch (Exception e) { + XxlJobHelper.log("createFile error, stlmDate {}", stlmDate, e); + LOG.info("createFile error, stlmDate {}", stlmDate, e); + throw e; + } + // 头上添加汇总 + try (RandomAccessFile rf = new RandomAccessFile(file, "rw")){ + // 回到文件开始处 + rf.seek(0); + // 汇总信息 + String sumStr = JsonUtil.convertToJson(sum); + // 写入文件 + rf.write(sumStr.getBytes()); + } catch (Exception e) { + XxlJobHelper.log("createFile error, stlmDate {}", stlmDate, e); + LOG.info("createFile error, stlmDate {}", stlmDate, e); + throw e; + } + // 生成zip文件 + try (ZipOutputStream zo = new ZipOutputStream(new FileOutputStream(zipFile))) { + zipFile(zo, file, stlmDate + "_" + prefix + ".txt"); + } catch (Exception e) { + XxlJobHelper.log("createFile error, stlmDate {}", stlmDate, e); + LOG.info("createFile error, stlmDate {}", stlmDate, e); + throw e; + } + return zipFile; + } + + /** + * 压缩文件 + * + * @param zos 压缩输出流 + * @param file 文件对象 + * @throws IOException + */ + private static void zipFile(ZipOutputStream zos, File file, String fileName) throws IOException { + ZipEntry entry = new ZipEntry(fileName); + zos.putNextEntry(entry); + try (InputStream is = new FileInputStream(file);) { + int BUFFERSIZE = 2 << 10; + int length = 0; + byte[] buffer = new byte[BUFFERSIZE]; + while ((length = is.read(buffer, 0, BUFFERSIZE)) >= 0) { + zos.write(buffer, 0, length); + } + zos.flush(); + zos.closeEntry(); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/quartz/NotcieErrorReprocessTask.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/quartz/NotcieErrorReprocessTask.java new file mode 100644 index 00000000..cfa112ca --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/quartz/NotcieErrorReprocessTask.java @@ -0,0 +1,92 @@ +package com.jiuyv.sptcc.carbon.dataprocess.quartz; + +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.DateUtil; +import com.jiuyv.sptcc.carbon.dataprocess.controller.DataProcessController; +import com.jiuyv.sptcc.carbon.dataprocess.model.ResultBean; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcNoticeErrorVo; +import com.jiuyv.sptcc.carbon.dataprocess.service.IAsynCtrlService; +import com.jiuyv.sptcc.carbon.dataprocess.service.IDcNoticeErrorService; +import com.jiuyv.sptcc.carbon.dataprocess.service.INoticeErrorTransService; +import org.apache.commons.collections.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@EnableScheduling +public class NotcieErrorReprocessTask { + + /** + * LOGGER + */ + private static final Logger LOGGER = LoggerFactory.getLogger(NotcieErrorReprocessTask.class); + + @Autowired + private IAsynCtrlService service; + + @Autowired + private INoticeErrorTransService transService; + + @Autowired + private DataProcessController controller; + + @Autowired + private IDcNoticeErrorService errorLogService; + + @Scheduled(cron = "${quartz.corn}") + public void TimerRun() { + // 由于quartz只能最小到单秒触发,当单例执行时,有无法追回时间片的风险,执行2次,提高频度,这样单例时也可以追回时间片 + for (int times = 1; times <= 2; times++) { + String timecurrent = service.doGetTimeCut(Constant.AsynApp.ERROR_LOG_PROCESS); + if (null != timecurrent) { + doBusiness(timecurrent); + // 取当前时间片减1小时,用于补漏 + String timecurrentDelay1Hour = DateUtil.getDateAdd(timecurrent, -3600L); + doBusiness(timecurrentDelay1Hour); + } + } + } + + /** + * 进行业务处理 + * @param timecurrent 时间片 + */ + private void doBusiness(String timecurrent) { + // 如果没有得到时间片,退出 + if (timecurrent == null) { + return; + } + // 根据时间查询列表 + List errors = errorLogService.findByNextProcessTime(timecurrent); + // 列表不为空就逐条处理 + if (CollectionUtils.isNotEmpty(errors)) { + for (DcNoticeErrorVo error : errors) { + ResultBean rb = transService.doTry(error); + if (!rb.isSuccess()) { + continue; + } + error = rb.getData(); + if (Constant.NoticeType.BC_TRAVEL_NOTICE.equals(error.getNoticeType())) { + try { + // 执行推送处理流程 + controller.processMsg(error.getMsgContent()); + error.setStatus(Constant.SendStatus.SUCCESS); + error.setReason("成功"); + transService.doConfirm(error); + } catch (Exception e) { + LOGGER.error("process error", e); + error.setStatus(Constant.SendStatus.PROCESSING); + error.setReason("系统异常"); + transService.doCancel(error); + } + } + } + } + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/quartz/ReadBarCodeFileTask.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/quartz/ReadBarCodeFileTask.java new file mode 100644 index 00000000..b659ea7d --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/quartz/ReadBarCodeFileTask.java @@ -0,0 +1,194 @@ +package com.jiuyv.sptcc.carbon.dataprocess.quartz; + +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.SFtpUtil; +import com.jiuyv.sptcc.carbon.dataprocess.config.DataCenterSftpConfig; +import com.jiuyv.sptcc.carbon.dataprocess.controller.DataProcessController; +import com.jiuyv.sptcc.carbon.dataprocess.model.MsgInfo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcNoticeErrorVo; +import com.jiuyv.sptcc.carbon.dataprocess.service.IDcNoticeErrorService; +import com.jiuyv.sptcc.carbon.dataprocess.service.IMsgSendService; +import com.jiuyv.sptcc.carbon.dataprocess.service.ISysCommonService; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Enumeration; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +@Component +public class ReadBarCodeFileTask { + + @Autowired + private ISysCommonService sysCommonService; + + @Autowired + private DataCenterSftpConfig sftpConfig; + + /** 错误数据service */ + @Autowired + private IDcNoticeErrorService errorService; + + @Autowired + private DataProcessController controller; + + /** 告警短信发送手机号 */ + @Value("${message.mobile}") + private String mobile; + + @Autowired + private IMsgSendService msgSendService; + + private static final String PREFIX = "_QrTravel"; + + private static final String MSG_TITLE = "碳普惠批处理状态提醒"; + + /** + * LOGGER + */ + private static final Logger LOG = LoggerFactory.getLogger(ReadBarCodeFileTask.class); + + @XxlJob(value="readBarCodeFileTask") + public void execute() throws Exception { + XxlJobHelper.log("readBarCodeFileTask start"); + String param = XxlJobHelper.getJobParam(); + LOG.info("readBarCodeFileTask start"); + String stlmDate = ""; + // 如果有传入参数取传入参数 + if (StringUtils.isNotBlank(param)) { + XxlJobHelper.log("param: [{}]", param); + try { + LocalDate.parse(param, DateTimeFormatter.ofPattern("yyyyMMdd")); + stlmDate = param; + } catch (Exception e) { + XxlJobHelper.log("param error"); + XxlJobHelper.handleFail() ; + return; + } + } else { + // 如果没有取系统时间-1天 + stlmDate = sysCommonService.selectSday().getPrevStmtDay(); + } + // 目前只有沪碳行系统 + XxlJobHelper.log("processing stlmDate {}", stlmDate); + // 多个手机号 + String[] mobiles = mobile.split(","); + // 下载文件 + String fileName = stlmDate + PREFIX + ".zip"; + File downLoadFile = new File(sftpConfig.getLocalDir() + fileName); + try { + SFtpUtil.downLoadFile(sftpConfig.getRemoteDir(), fileName, downLoadFile, sftpConfig); + } catch (Exception e) { + XxlJobHelper.log("readBarCodeFileTask error", e); + LOG.error("readBarCodeFileTask error", e); + msgSendService.sendMsg(new MsgInfo(MSG_TITLE, "任务【数据中台二维码文件下载】执行失败, 原因:【下载数据中台文件失败】"), mobiles); + XxlJobHelper.handleFail() ; + return; + } + // 解压文件 + try { + unzip(downLoadFile, sftpConfig.getLocalDir()); + } catch (Exception e) { + XxlJobHelper.log("异常文件:" + fileName + ",文件解压异常{}", e); + LOG.error("异常文件:" + fileName + ",文件解压异常{}", e); + msgSendService.sendMsg(new MsgInfo(MSG_TITLE, "任务【数据中台二维码文件下载】执行失败, 原因:【下载数据中台文件解压异常】"), mobiles); + XxlJobHelper.handleFail() ; + return; + } + File unzipFile = new File(sftpConfig.getLocalDir() + stlmDate + PREFIX + ".csv"); + // 读取文件 + try (FileInputStream fileinputStream = new FileInputStream(unzipFile); + BufferedReader br = new BufferedReader(new InputStreamReader(fileinputStream, StandardCharsets.UTF_8));) { + LOG.info("读取文件:" + fileName); + String line; + int lineNum = 0; + while ((line = br.readLine()) != null) { + lineNum++; + try { + controller.processMsg(line); + } catch (Exception e) { + LOG.error("读取文件行失败,文件名:{},行数:{},内容:{}",fileName, lineNum, line, e); + // 插入错误日志 + insertErrorLog(line); + } + } + } catch (Exception e) { + XxlJobHelper.log("异常文件:" + fileName + ",文件读取异常{}", e); + LOG.error("异常文件:" + fileName + ",文件读取异常{}", e); + msgSendService.sendMsg(new MsgInfo(MSG_TITLE, "任务【数据中台二维码文件下载】执行失败, 原因:【下载数据中台文件读取异常】"), mobiles); + XxlJobHelper.handleFail() ; + return; + } + if (!downLoadFile.delete()) { + XxlJobHelper.log("delete file failed, file: [{}]", downLoadFile.getName()); + LOG.info("delete file failed, file: [{}]", downLoadFile.getName()); + } + if (!unzipFile.delete()) { + XxlJobHelper.log("delete file failed, file: [{}]", unzipFile.getName()); + LOG.info("delete file failed, file: [{}]", unzipFile.getName()); + } + XxlJobHelper.log("readBarCodeFileTask end"); + LOG.info("CreateAcctFile end"); + msgSendService.sendMsg(new MsgInfo(MSG_TITLE, "任务【数据中台二维码文件下载】执行成功"), mobiles); + XxlJobHelper.handleSuccess() ; + return; + } + + /** + * 录入错误信息记录 + * @param message 消息 + */ + private void insertErrorLog(String message) { + DcNoticeErrorVo error = new DcNoticeErrorVo(); + error.setNoticeType(Constant.NoticeType.BC_TRAVEL_NOTICE); + error.setMsgContent(message); + error.setStatus(Constant.SendStatus.INIT); + error.setSendCount(0L); + error.setSendStatus(Constant.SendStatus.INIT); + errorService.doInsert(error); + } + + /** + * 解压缩文件 + * @param downloadFile zip文件 + * @param output 输出目录 + * @throws IOException 异常 + */ + private void unzip(File downloadFile, String output) throws IOException { + ZipEntry entry; + try (ZipFile zipFile = new ZipFile(downloadFile);){ + Enumeration dir = zipFile.entries(); + while (dir.hasMoreElements()) { + entry = (ZipEntry) dir.nextElement(); + if (entry.isDirectory()) { + continue; + } else { + try (BufferedInputStream is = new BufferedInputStream(zipFile.getInputStream(entry)); + FileOutputStream fos = new FileOutputStream(output + entry.getName());) { + int BUFFERSIZE = 2 << 10; + int length = 0; + byte[] buffer = new byte[BUFFERSIZE]; + while ((length = is.read(buffer, 0, BUFFERSIZE)) >= 0) { + fos.write(buffer, 0, length); + } + fos.flush(); + } catch (Exception e) { + throw e; + } + } + } + } catch (Exception e) { + throw e; + } + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IAsynCtrlService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IAsynCtrlService.java new file mode 100644 index 00000000..08de3f10 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IAsynCtrlService.java @@ -0,0 +1,14 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service; + +/** + * 时间片service + */ +public interface IAsynCtrlService { + + /** + * 获取时间片 + * @param appId 应用类型 + * @return 获取的时间 + */ + String doGetTimeCut(String appId); +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IAuthService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IAuthService.java new file mode 100644 index 00000000..2898f15a --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IAuthService.java @@ -0,0 +1,15 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service; + +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.AuthInfo; + +public interface IAuthService { + + /** + * 获取用户的二维码行程授权状态 + * @param userId 用户号 + * @param time 时间 + * @return 授权信息 + */ + AuthInfo getQrCodeAuthByUser(String userId, String time) throws BaseException; +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IBcTravelTransService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IBcTravelTransService.java new file mode 100644 index 00000000..0e7f02cb --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IBcTravelTransService.java @@ -0,0 +1,28 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service; + +import com.jiuyv.sptcc.carbon.dataprocess.model.ResultBean; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcBcTravelNoticeVo; + +public interface IBcTravelTransService { + + /** + * 尝试锁定订单 + * @param orderVo 订单信息 + * @return 结果信息 + */ + ResultBean doTry(DcBcTravelNoticeVo orderVo); + + /** + * 订单修改为成功 + * @param orderVo 订单信息 + * @return 结果信息 + */ + ResultBean doConfirm(DcBcTravelNoticeVo orderVo); + + /** + * 订单修改订单为失败 + * @param orderVo 订单信息 + * @return 结果信息 + */ + ResultBean doCancel(DcBcTravelNoticeVo orderVo); +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IBloomFilterService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IBloomFilterService.java new file mode 100644 index 00000000..099dc0b1 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IBloomFilterService.java @@ -0,0 +1,16 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service; + +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.AuthInfo; + +public interface IBloomFilterService { + + /** + * 根据用户和交易时间查询是否授权 + * @param userId 用户号 + * @param transTime 交易时间 + * @return 授权对象 + * @throws BaseException + */ + AuthInfo getBcAuthByUser(String userId, String transTime) throws BaseException; +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/ICacheService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/ICacheService.java new file mode 100644 index 00000000..ec83b945 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/ICacheService.java @@ -0,0 +1,29 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service; + +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcCalcFactorVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcDcSubwayChangeStationVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcDcSubwayMileageVo; + +import java.util.List; +import java.util.Map; + +public interface ICacheService { + + /** + * 查询所有的换乘站点 + * @return 站点列表 + */ + Map findChangeStation(); + + /** + * 查询站点里程 + * @return 里程数 + */ + DcDcSubwayMileageVo getMileage(String inStationId, String outStationId); + + /** + * 查询所有的计算因子 + * @return 因子列表 + */ + List findCalcFactor(); +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/ICalculateReductionService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/ICalculateReductionService.java new file mode 100644 index 00000000..d88e434d --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/ICalculateReductionService.java @@ -0,0 +1,14 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service; + +/** + * 计算碳减排量 + * + * @author ren_chao + */ +public interface ICalculateReductionService { + + /** + * 计算碳减排量 + */ + void calculate(); +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IDcBcTravelNoticeService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IDcBcTravelNoticeService.java new file mode 100644 index 00000000..c6412232 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IDcBcTravelNoticeService.java @@ -0,0 +1,47 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service; + +import com.jiuyv.sptcc.carbon.dataprocess.common.database.ExtData; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.BcTravelNoticeFilter; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.PageVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcBcTravelNoticeVo; + +import java.util.List; + +public interface IDcBcTravelNoticeService { + + /** + * 新增行程记录 + * @param bean 行程 + * @return 行程 + */ + DcBcTravelNoticeVo doInsert(DcBcTravelNoticeVo bean); + + /** + * 查询当前时间片时间需要处理的交易 + * @param currentTime 时间片时间 + * @return 交易列表 + */ + List findByNextProcessTime(String currentTime); + + /** + * 根据主键查询 + * @param seqNo 序号 + * @return 行程 + */ + DcBcTravelNoticeVo selectByKey(String seqNo); + + /** + * 分页查询 + * @param filter 查询条件 + * @param pageVo 分页参数 + * @return 数据 + */ + ExtData page(BcTravelNoticeFilter filter, PageVo pageVo); + + /** + * 为重新处理设置时间 + * @param seqNo 序号 + */ + void doRegisterReprocess(String seqNo) throws BaseException; +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IDcNoticeErrorService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IDcNoticeErrorService.java new file mode 100644 index 00000000..c7c80b65 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IDcNoticeErrorService.java @@ -0,0 +1,45 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service; + +import com.jiuyv.sptcc.carbon.dataprocess.common.database.ExtData; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.NoticeErrorFilter; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.PageVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcNoticeErrorVo; + +import java.util.List; + +public interface IDcNoticeErrorService { + + /** + * 新增记录 + * @param bean 对象 + */ + void doInsert(DcNoticeErrorVo bean); + + /** + * 查询当前时间片时间需要处理的交易 + * @param currentTime 时间片时间 + * @return 交易列表 + */ + List findByNextProcessTime(String currentTime); + + /** + * 更新记录 + * @param bean 对象 + */ + void doUpdate(DcNoticeErrorVo bean); + + /** + * 分页查询 + * @param filter 查询条件 + * @param pageVo 分页参数 + * @return 数据 + */ + ExtData page(NoticeErrorFilter filter, PageVo pageVo); + + /** + * 为重新处理设置时间 + * @param seqNo 序号 + */ + void doRegisterReprocess(String seqNo) throws BaseException; +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IMsgSendService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IMsgSendService.java new file mode 100644 index 00000000..e4e37d95 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IMsgSendService.java @@ -0,0 +1,19 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service; + + +import com.jiuyv.sptcc.carbon.dataprocess.model.MsgInfo; + +/** + * 短信发送service + * @author jiuyv + * + */ +public interface IMsgSendService { + + /** + * 发送短信 + * @param info 短信内容 + * @param mobiles 手机号列表 + */ + void sendMsg(MsgInfo info,String[] mobiles); +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/INoticeErrorTransService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/INoticeErrorTransService.java new file mode 100644 index 00000000..238b02b1 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/INoticeErrorTransService.java @@ -0,0 +1,28 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service; + +import com.jiuyv.sptcc.carbon.dataprocess.model.ResultBean; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcNoticeErrorVo; + +public interface INoticeErrorTransService { + + /** + * 尝试锁定订单 + * @param orderVo 订单信息 + * @return 结果信息 + */ + ResultBean doTry(DcNoticeErrorVo orderVo); + + /** + * 订单修改为成功 + * @param orderVo 订单信息 + * @return 结果信息 + */ + ResultBean doConfirm(DcNoticeErrorVo orderVo); + + /** + * 订单修改订单为失败 + * @param orderVo 订单信息 + * @return 结果信息 + */ + ResultBean doCancel(DcNoticeErrorVo orderVo); +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IPingTestService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IPingTestService.java new file mode 100644 index 00000000..943fd967 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IPingTestService.java @@ -0,0 +1,13 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service; + +public interface IPingTestService { + /** + * Do store roll back.心跳测试 + * + * @param + * @return boolean + */ + boolean ping(); + + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IReadFileService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IReadFileService.java new file mode 100644 index 00000000..0b9d376c --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/IReadFileService.java @@ -0,0 +1,13 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service; + +/** + * 读取文件入库 + * @author ren_chao + */ +public interface IReadFileService { + + /** + * 读取文件并插入数据库 + */ + void readFileAndInsertDatabase(); +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/ISysCommonService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/ISysCommonService.java new file mode 100644 index 00000000..8f358402 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/ISysCommonService.java @@ -0,0 +1,19 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service; + +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcCtrlVo; + +public interface ISysCommonService { + + /** + * 获取系统时间 + * @return SysTimeBean + */ + String selectSysCurrentTime(); + + /** + * 获取系统清算日期 + * @return SysTimeBean + */ + DcCtrlVo selectSday(); + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/AsynCtrlServiceImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/AsynCtrlServiceImpl.java new file mode 100644 index 00000000..cea1630b --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/AsynCtrlServiceImpl.java @@ -0,0 +1,47 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.common.util.DateUtil; +import com.jiuyv.sptcc.carbon.dataprocess.model.common.dao.SysBaseInfoDao; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcAsynCtrlVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcAsynCtrlDao; +import com.jiuyv.sptcc.carbon.dataprocess.service.IAsynCtrlService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class AsynCtrlServiceImpl implements IAsynCtrlService { + + @Autowired + private DcAsynCtrlDao asynCtrlDao; + + @Autowired + private SysBaseInfoDao sysDao; + + + /** + * 获取时间片 + * @param appId 应用类型 + * @return 获取的时间 + */ + @Override + public String doGetTimeCut(String appId) { + // 获得时间片 + DcAsynCtrlVo current = asynCtrlDao.findByKeyForUpdate(appId); + // 将时间片加1s后放回 + if (current == null) { + return null; + } + String currenttime = current.getCurrDateTime(); + String dealtime = DateUtil.getDateAdd(currenttime, 3L); + //延迟3秒处理 + if (Long.valueOf(sysDao.selectSysCurrentTime()) < Long + .valueOf(dealtime)) { + // 不允许3秒后的时间片跑的比当前时间快 + return null; + } + String nexttime = DateUtil.getDateAdd(currenttime, 1); + current.setCurrDateTime(nexttime); + asynCtrlDao.updateByKey(current); + return currenttime; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/AuthService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/AuthService.java new file mode 100644 index 00000000..5f5bccfa --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/AuthService.java @@ -0,0 +1,71 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service.impl; + +import com.jiuyv.sptcc.tanph.auth.entity.auth.UserAuthVo; +import com.jiuyv.sptcc.tanph.auth.entity.auth.api.tanph.AuthStatusHistorySearchRequestVo; +import com.jiuyv.sptcc.tanph.auth.entity.auth.api.tanph.AuthStatusHistorySearchResponseVo; +import com.jiuyv.sptcc.carbon.dataprocess.api.IAuthTanphFeign; +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.DateUtil; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.JsonUtil; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.UUIDUtil; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.AuthInfo; +import com.jiuyv.sptcc.carbon.dataprocess.service.IAuthService; +import org.apache.commons.collections.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service +public class AuthService implements IAuthService { + + /** + * LOGGER + */ + private static final Logger LOGGER = LoggerFactory.getLogger(AuthService.class); + + /** 授权模块调用*/ + @Autowired + private IAuthTanphFeign authFeign; + + /** + * 获取用户的二维码行程授权状态 + * @param userId 用户号 + * @param time 时间 + * @return 授权信息 + */ + public AuthInfo getQrCodeAuthByUser(String userId, String time) throws BaseException { + AuthStatusHistorySearchRequestVo requestVo = new AuthStatusHistorySearchRequestVo(); + requestVo.setReqId(UUIDUtil.getTimebaseUUID().toString()); + requestVo.setOrgCode(Constant.OrgCode.TANPH); + requestVo.setReqTime(DateUtil.getDateTime()); + requestVo.setUserId(userId); + requestVo.setQueryTime(time); + requestVo.setResourceId(Constant.ResourceId.BC_TRAVEL); + LOGGER.info("send auth query to auth: [{}]", JsonUtil.convertToLogJson(requestVo)); + AuthStatusHistorySearchResponseVo responseVo = authFeign.authStatusHistorySearch(requestVo); + LOGGER.info("receive auth query from auth: [{}]", JsonUtil.convertToLogJson(responseVo)); + // 没查到就报错等下次处理 + if (responseVo == null || !Constant.RespCode.SUCCESS.equals(responseVo.getRespCode())) { + throw new BaseException(Constant.RespCode.POST_FAILED, Constant.RespMsg.POST_FAILED); + } + // 组装授权对象 + AuthInfo authInfo = new AuthInfo(); + if (CollectionUtils.isNotEmpty(responseVo.getUserAuthVoList())) { + Map userToken = new HashMap<>(); + authInfo.setUserTokens(userToken); + for (UserAuthVo authVo : responseVo.getUserAuthVoList()) { + String channel = authVo.getFirstChannel() + "_" + authVo.getSecondChannel(); + String token = authVo.getToken(); + userToken.put(channel, token); + } + } + authInfo.setResourceId(Constant.ResourceId.BC_TRAVEL); + authInfo.setUserId(userId); + return authInfo; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/BaseService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/BaseService.java new file mode 100644 index 00000000..ef8b55df --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/BaseService.java @@ -0,0 +1,149 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.DateUtil; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.PageVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.common.PageDomin; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcAsynCtrlVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcBcTravelNoticeVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcNoticeErrorVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcAsynCtrlDao; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; + +public class BaseService { + + @Autowired + private DcAsynCtrlDao asynCtrlDao; + + @Value("${quartz.addProcessTimerVal}") + private Long[] nextProcess; + + /** + * 计算下次处理时间 + * @param travel 行程 + * @return 行程 + */ + protected DcNoticeErrorVo calNextProcessTime(DcNoticeErrorVo travel) { + // 获得时间片 + DcAsynCtrlVo current = asynCtrlDao.findByKey(Constant.AsynApp.ERROR_LOG_PROCESS); + if (null == current) { + return travel; + } + String currenttime = current.getCurrDateTime(); + // 发送次数为空的判断 + if (travel.getSendCount() == null) { + travel.setSendCount(0L); + } + // 发送次数为空的判断 + if (travel.getSendCount() == null) { + travel.setSendCount(0L); + } + // 处理次数+1 + travel.setSendCount(travel.getSendCount() + 1); + // 大于6次时间片关闭 + if (travel.getSendCount() >= 6l) { + travel.setSendStatus(Constant.SendStatus.FAILED); + return travel; + } else { + // 计算下次处理时间 + // 按照配置的间隔计算,如果上次处理时间 + 间隔比当前时间早,就按照当前时间再算一次 + if (StringUtils.isBlank(travel.getNextSendTime())) { + travel.setNextSendTime(currenttime); + } + String nexttime = DateUtil.getDateAdd(travel.getNextSendTime(), nextProcess[travel.getSendCount().intValue()]); + if (DateUtil.getdiffsecs(currenttime, nexttime) > 0) { + nexttime = DateUtil.getDateAdd(currenttime, nextProcess[0]); + } + travel.setNextSendTime(nexttime); + } + return travel; + } + + /** + * 计算下次处理时间 + * @param travel 行程 + * @return 行程 + */ + protected DcBcTravelNoticeVo calNextProcessTime(DcBcTravelNoticeVo travel) { + // 获得时间片 + DcAsynCtrlVo current = asynCtrlDao.findByKey(Constant.AsynApp.BC_TRAVEL_SEND); + if (null == current) { + return travel; + } + String currenttime = current.getCurrDateTime(); + if (travel.getSendCount() == null) { + travel.setSendCount(0L); + } + // 处理次数+1 + travel.setSendCount(travel.getSendCount() + 1); + // 大于6次时间片关闭 + if (travel.getSendCount() >= 6l) { + travel.setSendStatus(Constant.SendStatus.FAILED); + return travel; + } else { + // 计算下次处理时间 + // 按照配置的间隔计算,如果上次处理时间 + 间隔比当前时间早,就按照当前时间再算一次 + if (StringUtils.isBlank(travel.getNextSendTime())) { + travel.setNextSendTime(currenttime); + } + String nexttime = DateUtil.getDateAdd(travel.getNextSendTime(), nextProcess[travel.getSendCount().intValue()]); + if (DateUtil.getdiffsecs(currenttime, nexttime) > 0) { + nexttime = DateUtil.getDateAdd(currenttime, nextProcess[0]); + } + travel.setNextSendTime(nexttime); + } + return travel; + } + + public static PageDomin convert(PageVo pageVo, String PK) { + PageDomin pageDomin = new PageDomin(); + // 默认每页20条 + if (pageVo.getPageSize() == null) { + pageDomin.setPageSize(20); + } else { + pageDomin.setPageSize(pageVo.getPageSize()); + } + // 默认第一页 + if (pageVo.getStartPage() == null) { + pageDomin.setStartPage(1); + } else { + pageDomin.setStartPage(pageVo.getStartPage()); + } + // 排序字段为空则指定主键 + String sortField = pageVo.getSortField(); + if (StringUtils.isBlank(sortField)) { + sortField = PK; + } else { + // 不为空则加上主键防止由于排序字段值相同而导致分页数据混乱 + sortField += "," + PK; + } + String sortType = pageVo.getSortType(); + if (StringUtils.isBlank(sortField)) { + sortType = Constant.SortType.DESC; + } else { + sortType += "," + Constant.SortType.DESC; + } + String[] sortFields = sortField.split(","); + String[] sortTypes = sortType.split(","); + String sortReg = ""; + for (int i = 0; i<= sortFields.length - 1; i++) { + if (i > 0) { + sortReg += ","; + } + String f = sortFields[i]; + String t = i > sortTypes.length - 1 ? Constant.SortType.DESC : sortTypes[i]; + if (!Constant.SortType.ASC.equals(t)) { + t = Constant.SortType.DESC; + } + sortReg += f + " " + t; + } + pageDomin.setSortReg(sortReg); + Integer offset = (pageDomin.getStartPage() - 1) * pageDomin.getPageSize() + 1; + pageDomin.setOffset(offset); + Integer endline = offset + pageDomin.getPageSize() - 1; + pageDomin.setEndline(endline); + return pageDomin; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/BcTravelServiceImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/BcTravelServiceImpl.java new file mode 100644 index 00000000..d80fc1d3 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/BcTravelServiceImpl.java @@ -0,0 +1,122 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.LockUtil; +import com.jiuyv.sptcc.carbon.dataprocess.model.ResultBean; +import com.jiuyv.sptcc.carbon.dataprocess.model.common.dao.SysBaseInfoDao; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcBcTravelNoticeVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcCtrlVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcBcTravelNoticeDao; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcCtrlDao; +import com.jiuyv.sptcc.carbon.dataprocess.service.IBcTravelTransService; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +/** + * + * NFC行程交易处理 + */ +@Service +public class BcTravelServiceImpl extends BaseService implements IBcTravelTransService { + + @Autowired + private DcBcTravelNoticeDao travelDao; + + @Autowired + private SysBaseInfoDao sysDao; + + @Autowired + private DcCtrlDao ctrlDao; + + @Value("${txnLockLoserTimerVal}") + private Long lockExipreTime; + + /** + * 尝试锁定行程 + * @param travelVo 行程信息 + * @return 结果信息 + */ + public ResultBean doTry(DcBcTravelNoticeVo travelVo) { + // 行锁行程 + travelVo = travelDao.findByKeyForUpdate(travelVo.getSeqNo()); + // 如果行程状态已经完成 + if (Constant.NfcTravelStatus.SUCCESS.equals(travelVo.getStatus()) + || Constant.NfcTravelStatus.FAILED.equals(travelVo.getStatus())) { + // 直接返回失败,返回当时的返回码和描述 + return new ResultBean<>(false, travelVo, Constant.RespCode.SUCCESS, travelVo.getRemark()); + } + // 获取当前时间 + String currentTime = sysDao.selectSysCurrentTime(); + // 验证是否上锁 + if (LockUtil.lockTimeLoser(travelVo.getTxnLock(), travelVo.getTxnTime(), currentTime, lockExipreTime)) { + // 上锁了返回失败 + travelVo.setRemark(Constant.RespMsg.BUSSINESS_PROCESSING); + return new ResultBean<>(false, travelVo, Constant.RespCode.BUSSINESS_PROCESSING, Constant.RespMsg.BUSSINESS_PROCESSING); + } + // 设置锁字段 + travelVo.setTxnLock(Constant.TxnLock.Y); + travelVo.setTxnTime(currentTime); + // 设置为处理中 + travelVo.setStatus(Constant.NfcTravelStatus.PROCESSING); + travelDao.updateByKey(travelVo); + // 成功 + return new ResultBean<>(true, travelVo, Constant.RespCode.SUCCESS, Constant.RespMsg.SUCCESS); + } + + /** + * 行程修改为成功 + * @param travelVo 行程信息 + * @return 结果信息 + */ + public ResultBean doConfirm(DcBcTravelNoticeVo travelVo) { + // 行锁行程 + DcBcTravelNoticeVo dbVo = travelDao.findByKeyForUpdate(travelVo.getSeqNo()); + dbVo.setTxnLock(Constant.TxnLock.N); + // 处理中则更新,否则不更新 + if (!Constant.NfcTravelStatus.SUCCESS.equals(dbVo.getStatus()) + && !Constant.NfcTravelStatus.FAILED.equals(dbVo.getStatus())) { + DcCtrlVo ctrlVo = ctrlDao.selectSysInfo(); + // 更新清算日期 + dbVo.setStlmDate(ctrlVo.getSday()); + dbVo.setOrderCompleteTime(ctrlVo.getCurrentTime()); + dbVo.setStatus(Constant.NfcTravelStatus.SUCCESS); + dbVo.setRemark(StringUtils.isNotBlank(travelVo.getRemark()) ? travelVo.getRemark() : Constant.RespMsg.SUCCESS); + dbVo.setSendStatus(Constant.SendStatus.SUCCESS); + dbVo.setMileage(travelVo.getMileage()); + dbVo.setCarMileage(travelVo.getCarMileage()); + dbVo.setCarbonFootprint(travelVo.getCarbonFootprint()); + dbVo.setCalcFactorVersion(travelVo.getCalcFactorVersion()); + dbVo.setTravelHash(travelVo.getTravelHash()); + } + travelDao.updateByKey(dbVo); + return new ResultBean<>(true, dbVo, Constant.RespCode.SUCCESS, Constant.RespMsg.SUCCESS); + } + + /** + * 行程修改行程为失败 + * @param travelVo 行程信息 + * @return 结果信息 + */ + public ResultBean doCancel(DcBcTravelNoticeVo travelVo) { + DcBcTravelNoticeVo dbVo = travelDao.findByKeyForUpdate(travelVo.getSeqNo()); + dbVo.setTxnLock(Constant.TxnLock.N); + // 行程是终态则不更新 + if (!Constant.NfcTravelStatus.SUCCESS.equals(dbVo.getStatus()) + && !Constant.NfcTravelStatus.FAILED.equals(dbVo.getStatus())) { + dbVo.setRemark(StringUtils.isNotBlank(travelVo.getRemark())? travelVo.getRemark() : Constant.RespMsg.UNKWON_ERROR); + dbVo.setMileage(travelVo.getMileage()); + // 如果是没有明确失败就计算下次处理时间 + if (!Constant.NfcTravelStatus.FAILED.equals(travelVo.getStatus())) { + dbVo.setSendStatus(Constant.SendStatus.PROCESSING); + dbVo = calNextProcessTime(dbVo); + } else { + dbVo.setSendStatus(Constant.SendStatus.FAILED); + } + } + travelDao.updateByKey(dbVo); + return new ResultBean<>(true, dbVo, Constant.RespCode.SUCCESS, Constant.RespMsg.SUCCESS); + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/BloomFilterService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/BloomFilterService.java new file mode 100644 index 00000000..b6b9dbd4 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/BloomFilterService.java @@ -0,0 +1,36 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service.impl; + +import com.jiuyv.spring.starter.bloomfilter.v2.BloomFilterCheck; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import com.jiuyv.sptcc.carbon.dataprocess.config.BcTravelAuthFilterConfig; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.AuthInfo; +import com.jiuyv.sptcc.carbon.dataprocess.quartz.BcTravelResendTask; +import com.jiuyv.sptcc.carbon.dataprocess.service.IBloomFilterService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class BloomFilterService implements IBloomFilterService { + + /** + * LOGGER + */ + private static final Logger LOGGER = LoggerFactory.getLogger(BcTravelResendTask.class); + + @Autowired + private AuthService authService; + + /** + * 根据用户和交易时间查询是否授权 + * @param userId 用户号 + * @param transTime 交易时间 + * @return 授权对象 + * @throws BaseException + */ + @BloomFilterCheck(filterName = BcTravelAuthFilterConfig.FILTER_NAME, key = "#userId") + public AuthInfo getBcAuthByUser(String userId, String transTime) throws BaseException { + return authService.getQrCodeAuthByUser(userId, transTime); + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/CacheServiceImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/CacheServiceImpl.java new file mode 100644 index 00000000..16c06416 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/CacheServiceImpl.java @@ -0,0 +1,63 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcCalcFactorVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcDcSubwayChangeStationVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcDcSubwayMileageVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcCalcFactorDao; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcDcSubwayChangeStationDao; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcDcSubwayMileageDao; +import com.jiuyv.sptcc.carbon.dataprocess.service.ICacheService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +@Service +public class CacheServiceImpl implements ICacheService { + + @Autowired + private DcDcSubwayChangeStationDao stationDao; + + @Autowired + private DcDcSubwayMileageDao mileageDao; + + @Autowired + private DcCalcFactorDao calcFactorDao; + + /** + * 查询所有的换乘站点 + * @return 站点列表 + */ + @Cacheable(value = "bcChangeStationCache", key = "#root.methodName", sync = true) + public Map findChangeStation() { + return stationDao.findAll(); + } + + /** + * 查询站点里程 + * @return 里程数 + */ + @Cacheable(value = "bcMileageCache", key = "#inStationId + '_' + #outStationId", sync = true) + public DcDcSubwayMileageVo getMileage(String inStationId, String outStationId) { + DcDcSubwayMileageVo mileageVo = mileageDao.findByKey(inStationId, outStationId); + if (mileageVo != null) { + return mileageVo; + } + mileageVo = mileageDao.findByKey(outStationId, inStationId); + if (mileageVo != null) { + return mileageVo; + } + return null; + } + + /** + * 查询所有的计算因子 + * @return 因子列表 + */ + @Cacheable(value = "calcFactorCache", key = "#root.methodName", sync = true) + public List findCalcFactor() { + return calcFactorDao.findAll(); + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/CalculateReductionServiceImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/CalculateReductionServiceImpl.java new file mode 100644 index 00000000..43302724 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/CalculateReductionServiceImpl.java @@ -0,0 +1,84 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.domain.BcTravelNotice; +import com.jiuyv.sptcc.carbon.dataprocess.dto.ReqCarbonBatchComputationDTO; +import com.jiuyv.sptcc.carbon.dataprocess.dto.ReqCarbonComputeDataDTO; +import com.jiuyv.sptcc.carbon.dataprocess.dto.ResEmissionReductionDTO; +import com.jiuyv.sptcc.carbon.dataprocess.dto.ResultDTO; +import com.jiuyv.sptcc.carbon.dataprocess.exception.ServiceException; +import com.jiuyv.sptcc.carbon.dataprocess.feign.CarbonDataProcessFeign; +import com.jiuyv.sptcc.carbon.dataprocess.mapper.BcSubwayMileageMapper; +import com.jiuyv.sptcc.carbon.dataprocess.mapper.BcTravelNoticeMapper; +import com.jiuyv.sptcc.carbon.dataprocess.service.ICalculateReductionService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 计算碳减排量 + * + * @author ren_chao + */ +@Service +public class CalculateReductionServiceImpl implements ICalculateReductionService { + private static final Logger LOGGER = LoggerFactory.getLogger(CalculateReductionServiceImpl.class); + + private final BcTravelNoticeMapper travelNoticeMapper; + + private final CarbonDataProcessFeign carbonDataProcessFeign; + + public CalculateReductionServiceImpl(BcTravelNoticeMapper travelNoticeMapper, + CarbonDataProcessFeign carbonDataProcessFeign) { + this.travelNoticeMapper = travelNoticeMapper; + this.carbonDataProcessFeign = carbonDataProcessFeign; + } + + + /** + * 计算碳减排量 + */ + @Override + public void calculate() { + String methodId = "123"; + String baseFactor = "0.130"; + String factor = "0.064"; + + Integer start = 0; + Integer count = 500; + + List bcTravelNoticeList = travelNoticeMapper.selectByPage(start, count); + List dataDTOList = bcTravelNoticeList.stream().map(bcTravelNotice -> { + ReqCarbonComputeDataDTO dataDTO = new ReqCarbonComputeDataDTO(); + dataDTO.setBaseFactor(baseFactor); + dataDTO.setFactor(factor); + dataDTO.setDataId(bcTravelNotice.getSeqNo()); + dataDTO.setTripDistance(bcTravelNotice.getMileage().toString()); + return dataDTO; + }).collect(Collectors.toList()); + + ReqCarbonBatchComputationDTO batchComputationDTO = new ReqCarbonBatchComputationDTO(); + batchComputationDTO.setCount(dataDTOList.size()); + batchComputationDTO.setMethodId(methodId); + batchComputationDTO.setRawDatas(dataDTOList); + + ResultDTO>> mapResultDTO = carbonDataProcessFeign.batchComputation(batchComputationDTO); + if (HttpStatus.OK.value() == mapResultDTO.getCode()) { + LOGGER.error("计算错误"); + throw new ServiceException("计算错误"); + } + + List emissionReductions = mapResultDTO.getContent().get("emissionReductions"); + emissionReductions.forEach(res -> { + BcTravelNotice bcTravelNotice = new BcTravelNotice(); + bcTravelNotice.setSeqNo(res.getDataId()); + bcTravelNotice.setCarbonFootprint(res.getEmissionReduction()); + travelNoticeMapper.updateByPrimaryKeySelective(bcTravelNotice); + }); + + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/DcBcTravelNoticeServiceImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/DcBcTravelNoticeServiceImpl.java new file mode 100644 index 00000000..f5270098 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/DcBcTravelNoticeServiceImpl.java @@ -0,0 +1,125 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.ExtData; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.DateUtil; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.BcTravelNoticeFilter; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.PageVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.common.PageDomin; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcAsynCtrlVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcBcTravelNoticeVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcAsynCtrlDao; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcBcTravelNoticeDao; +import com.jiuyv.sptcc.carbon.dataprocess.service.IDcBcTravelNoticeService; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 行程service + */ +@Service +public class DcBcTravelNoticeServiceImpl extends BaseService implements IDcBcTravelNoticeService { + + private static final Logger LOGGER = LoggerFactory.getLogger(DcBcTravelNoticeServiceImpl.class); + + @Autowired + private DcBcTravelNoticeDao travelDao; + + @Autowired + private DcAsynCtrlDao asynCtrlDao; + + @Value("${bc-travel.reprocess.delay}") + private Integer delay; + + private static final String PK = "seqNo"; + + /** + * 新增行程记录 + * @param bean 行程 + * @return 行程 + */ + public DcBcTravelNoticeVo doInsert(DcBcTravelNoticeVo bean) { + try { + bean.setTxnLock(Constant.TxnLock.N); + bean.setStatus(Constant.NfcTravelStatus.INIT); + bean.setSendCount(0L); + bean.setSendStatus(Constant.SendStatus.INIT); + calNextProcessTime(bean); + travelDao.insert(bean); + } catch (DuplicateKeyException e) { + LOGGER.info("dup travel...."); + } + return travelDao.findByTravelNo(bean.getTravelNo()); + } + + /** + * 查询当前时间片时间需要处理的交易 + * @param currentTime 时间片时间 + * @return 交易列表 + */ + public List findByNextProcessTime(String currentTime) { + return travelDao.findByNextProcessTime(currentTime); + } + + /** + * 根据主键查询 + * @param seqNo 序号 + * @return 行程推送对象 + */ + @Override + public DcBcTravelNoticeVo selectByKey(String seqNo) { + return travelDao.findByKey(seqNo); + } + + /** + * 分页查询 + * @param filter 查询条件 + * @param pageVo 分页参数 + * @return 数据 + */ + public ExtData page(BcTravelNoticeFilter filter, PageVo pageVo) { + // 转换列表类型 + if (!StringUtils.isBlank(filter.getStatus())) { + filter.setStatusList(filter.getStatus().split(",")); + } + ExtData resp = new ExtData<>(true, 0l, null); + PageDomin pageDomin = convert(pageVo, PK); + Long count = travelDao.count(filter); + if (count != null && count > 0) { + resp.setTotalCount(count); + resp.setDataList(travelDao.page(filter, pageDomin)); + } + return resp; + } + + /** + * 为重新处理设置时间 + * @param seqNo 序号 + */ + public void doRegisterReprocess(String seqNo) throws BaseException { + // 查询记录 + DcBcTravelNoticeVo db = travelDao.findByKey(seqNo); + if (db == null) { + throw new BaseException(Constant.RespCode.ORDER_NOT_FOUND, Constant.RespMsg.ORDER_NOT_FOUND); + } + // 获得时间片 + DcAsynCtrlVo current = asynCtrlDao.findByKey(Constant.AsynApp.BC_TRAVEL_SEND); + if (null == current) { + throw new BaseException(Constant.RespCode.BUSSINESS_ERROR, Constant.RespMsg.CONFIG_NOT_FOUND); + } + // 计算下次发送时间 + db.setNextSendTime(DateUtil.getDateAdd(current.getCurrDateTime(), delay)); + // 修改下次发送时间 + // 重置状态和发送状态 + // 重置发送次数 + travelDao.updateNextProcess(db); + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/DcNoticeErrorServiceImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/DcNoticeErrorServiceImpl.java new file mode 100644 index 00000000..7822ecd6 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/DcNoticeErrorServiceImpl.java @@ -0,0 +1,114 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.ExtData; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.DateUtil; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.NoticeErrorFilter; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.PageVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.common.PageDomin; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcAsynCtrlVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcNoticeErrorVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcAsynCtrlDao; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcNoticeErrorDao; +import com.jiuyv.sptcc.carbon.dataprocess.service.IDcNoticeErrorService; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class DcNoticeErrorServiceImpl extends BaseService implements IDcNoticeErrorService { + + private static final Logger LOGGER = LoggerFactory.getLogger(DcNoticeErrorServiceImpl.class); + + @Autowired + private DcNoticeErrorDao dao; + + @Autowired + private DcAsynCtrlDao asynCtrlDao; + + @Value("${bc-travel.reprocess.delay}") + private Integer delay; + + private static final String PK = "seqNo"; + + /** + * 新增记录 + * @param bean 对象 + */ + public void doInsert(DcNoticeErrorVo bean) { + try { + calNextProcessTime(bean); + dao.insert(bean); + } catch (DuplicateKeyException e) { + LOGGER.info("dup travel...."); + } + } + + /** + * 查询当前时间片时间需要处理的交易 + * @param currentTime 时间片时间 + * @return 交易列表 + */ + public List findByNextProcessTime(String currentTime) { + return dao.findByNextProcessTime(currentTime); + } + + /** + * 更新记录 + * @param bean 对象 + */ + public void doUpdate(DcNoticeErrorVo bean) { + dao.updateByKey(bean); + } + + /** + * 分页查询 + * @param filter 查询条件 + * @param pageVo 分页参数 + * @return 数据 + */ + public ExtData page(NoticeErrorFilter filter, PageVo pageVo) { + // 转换列表类型 + if (!StringUtils.isBlank(filter.getStatus())) { + filter.setStatusList(filter.getStatus().split(",")); + } + ExtData resp = new ExtData<>(true, 0l, null); + PageDomin pageDomin = convert(pageVo, PK); + Long count = dao.count(filter); + if (count != null && count > 0) { + resp.setTotalCount(count); + resp.setDataList(dao.page(filter, pageDomin)); + } + return resp; + } + + /** + * 为重新处理设置时间 + * @param seqNo 序号 + */ + public void doRegisterReprocess(String seqNo) throws BaseException { + // 查询记录 + DcNoticeErrorVo db = dao.findByKey(seqNo); + if (db == null) { + throw new BaseException(Constant.RespCode.ORDER_NOT_FOUND, Constant.RespMsg.ORDER_NOT_FOUND); + } + // 获得时间片 + DcAsynCtrlVo current = asynCtrlDao.findByKey(Constant.AsynApp.ERROR_LOG_PROCESS); + if (null == current) { + throw new BaseException(Constant.RespCode.BUSSINESS_ERROR, Constant.RespMsg.CONFIG_NOT_FOUND); + } + // 计算下次发送时间 + db.setNextSendTime(DateUtil.getDateAdd(current.getCurrDateTime(), delay)); + // 修改下次发送时间 + // 重置状态和发送状态 + // 重置发送次数 + dao.updateNextProcess(db); + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/MsgSendService.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/MsgSendService.java new file mode 100644 index 00000000..d0816682 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/MsgSendService.java @@ -0,0 +1,69 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.model.MsgInfo; +import com.jiuyv.sptcc.carbon.dataprocess.service.IMsgSendService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import java.util.HashMap; +import java.util.Map; + +/** + * 短信发送实现类 + * @author jiuyv + * + */ +@Service +public class MsgSendService implements IMsgSendService { + + @Value("${message.sendMobileUrl}") + private String sendMobileUrl; + + /** The Constant LOGGER. */ + private static final Logger LOGGER = LoggerFactory + .getLogger(MsgSendService.class); + private RestTemplate restTemplate = new RestTemplate(); + + + private void send(String sendMobiles, String msg) { + Map messageJson = new HashMap<>(); + messageJson.put("sms", msg); + messageJson.put("code", "utf-8"); + HttpEntity entity = getEntity(); + messageJson.put("phoneNo", sendMobiles); + LOGGER.info("send sms to {},msg is {}", messageJson.get("phoneNo"), messageJson.get("sms")); + this.restTemplate.exchange(sendMobileUrl, HttpMethod.GET, entity, String.class, + messageJson); + } + + private HttpEntity getEntity() { + HttpHeaders headers = new HttpHeaders(); + headers.add("Content-Type", "text/xml"); + headers.add("Accept-Encoding", "gzip, deflate"); + headers.add("Accept-Language", "zh-cn"); + headers.add("Connection", "Keep-Alive"); + HttpEntity entity = new HttpEntity<>(null, headers); + return entity; + } + + /** + * 发送短信 + * @param info 短信内容 + */ + @Override + public void sendMsg(MsgInfo info, String[] mobiles) { + LOGGER.info("message title: {}", info.getTitle()); + LOGGER.info("message content: {}", info.getContent()); + for (String mobile : mobiles) { + LOGGER.info("message receiver: {}", mobile); + send(mobile, info.getContent()); + } + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/NoticeErrorTransServiceImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/NoticeErrorTransServiceImpl.java new file mode 100644 index 00000000..3622763d --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/NoticeErrorTransServiceImpl.java @@ -0,0 +1,72 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.model.ResultBean; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcNoticeErrorVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcNoticeErrorDao; +import com.jiuyv.sptcc.carbon.dataprocess.service.INoticeErrorTransService; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * + * NFC行程交易处理 + */ +@Service +public class NoticeErrorTransServiceImpl extends BaseService implements INoticeErrorTransService { + + @Autowired + private DcNoticeErrorDao dao; + + /** + * 尝试锁定行程 + * + * @param travelVo 行程信息 + * @return 结果信息 + */ + public ResultBean doTry(DcNoticeErrorVo travelVo) { + // 成功 + return new ResultBean<>(true, travelVo, Constant.RespCode.SUCCESS, Constant.RespMsg.SUCCESS); + } + + /** + * 行程修改为成功 + * + * @param travelVo 行程信息 + * @return 结果信息 + */ + public ResultBean doConfirm(DcNoticeErrorVo travelVo) { + // 行锁行程 + DcNoticeErrorVo dbVo = dao.findByKeyForUpdate(travelVo.getSeqNo()); + // 处理中则更新,否则不更新 + if (!Constant.NfcTravelStatus.SUCCESS.equals(dbVo.getStatus()) + && !Constant.NfcTravelStatus.FAILED.equals(dbVo.getStatus())) { + dbVo.setStatus(Constant.NfcTravelStatus.SUCCESS); + dbVo.setReason(Constant.RespMsg.SUCCESS); + dbVo.setSendStatus(Constant.SendStatus.SUCCESS); + dao.updateByKey(dbVo); + } + return new ResultBean<>(true, dbVo, Constant.RespCode.SUCCESS, Constant.RespMsg.SUCCESS); + } + + /** + * 行程修改行程为失败 + * + * @param travelVo 行程信息 + * @return 结果信息 + */ + public ResultBean doCancel(DcNoticeErrorVo travelVo) { + DcNoticeErrorVo dbVo = dao.findByKeyForUpdate(travelVo.getSeqNo()); + // 行程是终态则不更新 + if (!Constant.NfcTravelStatus.SUCCESS.equals(dbVo.getStatus()) + && !Constant.NfcTravelStatus.FAILED.equals(dbVo.getStatus())) { + dbVo.setReason(StringUtils.isNotBlank(travelVo.getReason()) ? travelVo.getReason() : Constant.RespMsg.UNKWON_ERROR); + dbVo.setStatus(travelVo.getStatus()); + dbVo = calNextProcessTime(dbVo); + dao.updateByKey(dbVo); + } + return new ResultBean<>(true, dbVo, Constant.RespCode.SUCCESS, Constant.RespMsg.SUCCESS); + } + +} \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/PingTestServiceImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/PingTestServiceImpl.java new file mode 100644 index 00000000..3737e506 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/PingTestServiceImpl.java @@ -0,0 +1,28 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.PingTestDao; +import com.jiuyv.sptcc.carbon.dataprocess.service.IPingTestService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * pingTestService + * @author jiuyv + * + */ +@Service +public class PingTestServiceImpl implements IPingTestService { + + @Autowired + private PingTestDao pingTestDao; + + /** + * 收到pingTest时建立数据库链接 + * 缓解第一次建链接速度慢导致第一笔交易迟缓 + */ + @Override + public boolean ping() { + return (boolean) pingTestDao.pingTest(); + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/ReadFileServiceImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/ReadFileServiceImpl.java new file mode 100644 index 00000000..8eb50d6a --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/ReadFileServiceImpl.java @@ -0,0 +1,114 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.domain.BcSubwayMileage; +import com.jiuyv.sptcc.carbon.dataprocess.domain.BcTravelNotice; +import com.jiuyv.sptcc.carbon.dataprocess.mapper.BcSubwayMileageMapper; +import com.jiuyv.sptcc.carbon.dataprocess.mapper.BcTravelNoticeMapper; +import com.jiuyv.sptcc.carbon.dataprocess.service.IReadFileService; +import org.apache.commons.lang3.time.DateUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.text.ParseException; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +/** + * 读取文件入库 + * @author ren_chao + */ +@Service +public class ReadFileServiceImpl implements IReadFileService { + private static final Logger LOGGER = LoggerFactory.getLogger(ReadFileServiceImpl.class); + + private final BcTravelNoticeMapper bcTravelNoticeMapper; + private final BcSubwayMileageMapper subwayMileageMapper; + + public ReadFileServiceImpl(BcTravelNoticeMapper bcTravelNoticeMapper, BcSubwayMileageMapper subwayMileageMapper) { + this.bcTravelNoticeMapper = bcTravelNoticeMapper; + this.subwayMileageMapper = subwayMileageMapper; + } + + /** + * 读取文件并插入数据库 + */ + @Override + public void readFileAndInsertDatabase() { + String path = "C:\\Users\\RENCHAO\\Desktop\\temp-sss\\20230302_QrTravel.zip"; + + try (FileInputStream fileInputStream = new FileInputStream(path); + ZipInputStream zipInputStream = new ZipInputStream(fileInputStream); + BufferedReader br = new BufferedReader(new InputStreamReader(zipInputStream, StandardCharsets.UTF_8))) { + ZipEntry nextEntry; + while ((nextEntry = zipInputStream.getNextEntry()) != null && !nextEntry.isDirectory()) { + String line; + while ((line = br.readLine()) != null) { + insertData(line); + } + } + + } catch (IOException e) { + e.printStackTrace(); + } + } + + + /** + * 插入数据库 + * + */ + private void insertData(String line) { + String[] split = line.split(","); + BcTravelNotice travelNotice = new BcTravelNotice(); + travelNotice.setTravelNo(handleValue(split[0])); + travelNotice.setIndustryCode(handleValue(split[1])); + travelNotice.setUserId(handleValue(split[2])); + travelNotice.setCcid(handleValue(split[3])); + travelNotice.setInStationId(handleValue(split[4])); + travelNotice.setOutStationId(handleValue(split[5])); + travelNotice.setOpenChannel(handleValue(split[6])); + try { + travelNotice.setIntoTransTime(DateUtils.parseDate(split[7], "yyyy-MM-dd HH:mm:ss")); + travelNotice.setOutTransTime(DateUtils.parseDate(split[8], "yyyy-MM-dd HH:mm:ss")); + } catch (ParseException e) { + LOGGER.error("时间转换错误:{}", line, e); + } + + // 计算里程 + calculateMileage(travelNotice); + + bcTravelNoticeMapper.insertSelective(travelNotice); + + } + + /** + * 计算里程 + * + */ + private void calculateMileage(BcTravelNotice travelNotice) { + Integer mileage = subwayMileageMapper + .selectMileage(travelNotice.getInStationId(), travelNotice.getOutStationId()); + if (mileage == null) { + travelNotice.setMileage(0); + } else { + travelNotice.setMileage(mileage); + } + + } + + + /** + * 处理空字段 + * + */ + private String handleValue(String value) { + return "\\N".equals(value) ? null : value; + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/SysCommonServiceImpl.java b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/SysCommonServiceImpl.java new file mode 100644 index 00000000..5d024fe5 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/java/com/jiuyv/sptcc/carbon/dataprocess/service/impl/SysCommonServiceImpl.java @@ -0,0 +1,41 @@ +package com.jiuyv.sptcc.carbon.dataprocess.service.impl; + +import com.jiuyv.sptcc.carbon.dataprocess.model.common.dao.SysBaseInfoDao; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.DcCtrlVo; +import com.jiuyv.sptcc.carbon.dataprocess.model.dataProcess.dao.DcCtrlDao; +import com.jiuyv.sptcc.carbon.dataprocess.service.ISysCommonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 公用service + * @author jiuyv + * + */ +@Service +public class SysCommonServiceImpl implements ISysCommonService { + + @Autowired + private SysBaseInfoDao sysBaseInfoDao; + + @Autowired + private DcCtrlDao dcCtrlDao; + + /** + * 获取系统时间 + */ + @Override + public String selectSysCurrentTime() { + return sysBaseInfoDao.selectSysCurrentTime(); + } + + /** + * 获取系统清算日期 + * @return SysTimeBean + */ + @Override + public DcCtrlVo selectSday() { + return dcCtrlDao.selectSysInfo(); + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/application-default.yml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/application-default.yml new file mode 100644 index 00000000..7608de59 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/application-default.yml @@ -0,0 +1,105 @@ +spring: + datasource: + type: com.zaxxer.hikari.HikariDataSource + #url: jdbc:oracle:thin:@(DESCRIPTION=(FAILOVER=on)(LOAD_BALANCE=off)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=130.252.200.62)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=130.252.200.62)(PORT=1521)))(CONNECT_DATA=(SERVER = DEDICATED)(SID = orcl))) + url: jdbc:oracle:thin:@(DESCRIPTION=(FAILOVER=on)(LOAD_BALANCE=off)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.10.201)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.10.201)(PORT=1521)))(CONNECT_DATA=(SERVER = DEDICATED)(SID = jyorcl))) + username: marketing + password: marketing + hikari: + auto-commit: false + connection-init-sql: select 1 from dual + connection-test-query: select 1 from dual + minimum-idle: 5 # 最小空闲连接数量 + idle-timeout: 180000 # 空闲连接存活最大时间,默认600000(10分钟) + maximum-pool-size: 10 # 连接池最大连接数,默认是10 + connection-timeout: 30000 # 数据库连接超时时间,默认30秒,即30000 + max-lifetime: 1800000 # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟 + tomcat: + max-threads: 200 + cache: + type: caffeine + cache-names: + - changeStationCache + - mileageCache + - calcFactorCache + caffeine: + spec: initialCapacity=10,maximumSize=500,expireAfterWrite=60s +eureka: + instance: + appname: ${spring.application.name} + lease-expiration-duration-in-seconds: 90 + lease-renewal-interval-in-seconds: 10 + prefer-ip-address: true + instance-id: ${spring.cloud.client.ip-address}:${server.port} + client: + register-with-eureka: true + fetch-registry: true + serviceUrl: + defaultZone: http://192.168.10.165:18888/eureka/ +ribbon: + eureka: + enabled: true + eager-load: + enabled: false + clients: acc2Gate,rule + OkToRetryOnAllOperation: false + ReadTimeout: 20000 + ConnectTimeout: 10000 + MaxAutoRetriesNextServer: 0 + MaxAutoRetries: 0 +txnLockLoserTimerVal: 30 +quartz: + corn: "-" + addProcessTimerVal: 10,15,30,300,600,1200,1200 +lock: + time: 30000 + wait: 5000 +bc-travel: + sm3Key: 123456 + reprocess: + delay: 5 + dataCenter: + sftp: + # 端口 + port: 22 + # 服务器地址 + host: 130.252.200.93 + # 账号 + userName: tomcat + # 密码 + password: tomcat123 + # session连接超时时间 + sessionConnectTimeout: 30000 + # channel连接超时时间 + channelConnectedTimeout: 30000 + # 协议 + protocol: sftp + # 远端目录 + remoteDir: /home/tanphtest/dataProcess/temp/ + # 本地临时目录 + localDir: /home/tanphtest/dataProcess/temp/ + acct: + prefix: BcTravel + sftp: + # 端口 + port: 22 + # 服务器地址 + host: 130.252.200.93 + # 账号 + userName: tomcat + # 密码 + password: tomcat123 + # session连接超时时间 + sessionConnectTimeout: 30000 + # channel连接超时时间 + channelConnectedTimeout: 30000 + # 协议 + protocol: sftp + # 远端目录 + remoteDir: /home/tanphtest/dataProcess/temp/ + # 本地临时目录 + localDir: /home/tanphtest/dataProcess/temp/ + +message: + sendMobileUrl: http://163.10.10.185:10080/smsBridge/wl/SmsServlet?phoneNo={phoneNo}&sms={sms}&code={code} + mobile: 1381 \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/application.yml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/application.yml new file mode 100644 index 00000000..bdaf9519 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/application.yml @@ -0,0 +1,21 @@ +mybatis: + config-location: classpath:mybatis/mybatis.xml + mapperLocations: classpath*:mapper/**/*Mapper.xml +server: + connection-timeout : 60000 + compression : + enabled : true + min-response-size: 1024 + tomcat: + uri-encoding: UTF-8 +feign: + httpclient: + enabled: false +#替换默认的http连接 + okhttp: + enabled: true + compression: + request: + enabled: false + response: + enabled: false \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/applicationContext.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/applicationContext.xml new file mode 100644 index 00000000..56677e8e --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/applicationContext.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/bootstrap.yml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/bootstrap.yml new file mode 100644 index 00000000..b8cd6f99 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/bootstrap.yml @@ -0,0 +1,49 @@ +server: + port: 18818 +spring: + config: + use-legacy-processing: true + application: + name: marketing-dataProces + cloud: + config: + uri: http://130.252.200.93:18898 + username: config + password: config123 + profile: dev + label: dev + enabled: false + sleuth: + enabled: false +eureka: + client: + enabled: false +ribbon: + eureka: + enabled: false +#启用metrics,prometheus监控 +management: + security: + enabled: false + metrics: + export: + prometheus: + enabled: true + endpoint: + metrics: + enabled: true + prometheus: + enabled: true + # 启用pause端点 + pause: + enabled: true + # 启用restart端点,之所以要启用restart端点,是因为pause端点的启用依赖restart端点的启用 + restart: + enabled: true + endpoints: + web: + exposure: + include: pause,restart,refresh,prometheus,health + health: + rabbit: + enabled: false \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/logback-boot.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/logback-boot.xml new file mode 100644 index 00000000..de68ed48 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/logback-boot.xml @@ -0,0 +1,96 @@ + + + + + + + + + + System.out + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + UTF-8 + + + + + ${LOG_HOME}/${APP_NAME}.log + + + ${LOG_HOME}/${APP_NAME}.log.%d{yyyy-MM-dd}.%i.log.zip + + + 100MB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + ${LOG_HOME}/${APP_NAME}.log.%d{yyyy-MM-dd}.%i.log + 7 + + + 100MB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + System.err + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcSubwayMileageMapper.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcSubwayMileageMapper.xml new file mode 100644 index 00000000..d51b8401 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcSubwayMileageMapper.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcTravelNoticeMapper.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcTravelNoticeMapper.xml new file mode 100644 index 00000000..558e78dc --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mapper/BcTravelNoticeMapper.xml @@ -0,0 +1,239 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SEQ_NO + ,TXN_LOCK,TXN_TIME, + TRAVEL_NO,INDUSTRY_CODE,OPEN_CHANNEL, + INTO_TRANS_TIME,OUT_TRANS_TIME,USER_ID, + CCID,IN_STATION_ID,OUT_STATION_ID, + MILEAGE,CAR_MILEAGE,CARBON_FOOTPRINT, + CALC_FACTOR_VERSION,FIRST_CHANNELS,SECOND_CHANNELS, + USER_TOKENS,STLM_DATE,TRAVEL_HASH, + STATUS,REMARK,ORDER_COMPLETE_TIME, + NEXT_SEND_TIME,SEND_COUNT,SEND_STATUS, + CREATE_USER,CREATE_TIME,LST_UPD_USER, + LST_UPD_TIME + + + + + + + + + select TO_CHAR(SYSDATE, 'YYYYMMDD') || TO_CHAR(SEQ_BC_TRAVEL.nextVal, 'FM00000000') from dual + + insert into TBL_BC_TRAVEL_NOTICE + + SEQ_NO, + TXN_LOCK, + TXN_TIME, + TRAVEL_NO, + INDUSTRY_CODE, + OPEN_CHANNEL, + INTO_TRANS_TIME, + OUT_TRANS_TIME, + USER_ID, + CCID, + IN_STATION_ID, + OUT_STATION_ID, + MILEAGE, + CAR_MILEAGE, + CARBON_FOOTPRINT, + CALC_FACTOR_VERSION, + FIRST_CHANNELS, + SECOND_CHANNELS, + USER_TOKENS, + STLM_DATE, + TRAVEL_HASH, + STATUS, + REMARK, + ORDER_COMPLETE_TIME, + NEXT_SEND_TIME, + SEND_COUNT, + SEND_STATUS, + CREATE_USER, + CREATE_TIME, + LST_UPD_USER, + LST_UPD_TIME + + + #{seqNo,jdbcType=CHAR}, + #{txnLock,jdbcType=CHAR}, + #{txnTime,jdbcType=CHAR}, + #{travelNo,jdbcType=VARCHAR}, + #{industryCode,jdbcType=VARCHAR}, + #{openChannel,jdbcType=VARCHAR}, + #{intoTransTime,jdbcType=TIMESTAMP}, + #{outTransTime,jdbcType=TIMESTAMP}, + #{userId,jdbcType=VARCHAR}, + #{ccid,jdbcType=VARCHAR}, + #{inStationId,jdbcType=VARCHAR}, + #{outStationId,jdbcType=VARCHAR}, + #{mileage,jdbcType=DECIMAL}, + #{carMileage,jdbcType=DECIMAL}, + #{carbonFootprint,jdbcType=VARCHAR}, + #{calcFactorVersion,jdbcType=VARCHAR}, + #{firstChannels,jdbcType=VARCHAR}, + #{secondChannels,jdbcType=VARCHAR}, + #{userTokens,jdbcType=VARCHAR}, + #{stlmDate,jdbcType=CHAR}, + #{travelHash,jdbcType=VARCHAR}, + #{status,jdbcType=VARCHAR}, + #{remark,jdbcType=VARCHAR}, + #{orderCompleteTime,jdbcType=CHAR}, + #{nextSendTime,jdbcType=CHAR}, + #{sendCount,jdbcType=DECIMAL}, + #{sendStatus,jdbcType=VARCHAR}, + 'admin', SYSDATE, 'admin',SYSDATE + + + + + update TBL_BC_TRAVEL_NOTICE + + + TXN_LOCK = #{txnLock,jdbcType=CHAR}, + + + TXN_TIME = #{txnTime,jdbcType=CHAR}, + + + TRAVEL_NO = #{travelNo,jdbcType=VARCHAR}, + + + INDUSTRY_CODE = #{industryCode,jdbcType=VARCHAR}, + + + OPEN_CHANNEL = #{openChannel,jdbcType=VARCHAR}, + + + INTO_TRANS_TIME = #{intoTransTime,jdbcType=TIMESTAMP}, + + + OUT_TRANS_TIME = #{outTransTime,jdbcType=TIMESTAMP}, + + + USER_ID = #{userId,jdbcType=VARCHAR}, + + + CCID = #{ccid,jdbcType=VARCHAR}, + + + IN_STATION_ID = #{inStationId,jdbcType=VARCHAR}, + + + OUT_STATION_ID = #{outStationId,jdbcType=VARCHAR}, + + + MILEAGE = #{mileage,jdbcType=DECIMAL}, + + + CAR_MILEAGE = #{carMileage,jdbcType=DECIMAL}, + + + CARBON_FOOTPRINT = #{carbonFootprint,jdbcType=VARCHAR}, + + + CALC_FACTOR_VERSION = #{calcFactorVersion,jdbcType=VARCHAR}, + + + FIRST_CHANNELS = #{firstChannels,jdbcType=VARCHAR}, + + + SECOND_CHANNELS = #{secondChannels,jdbcType=VARCHAR}, + + + USER_TOKENS = #{userTokens,jdbcType=VARCHAR}, + + + STLM_DATE = #{stlmDate,jdbcType=CHAR}, + + + TRAVEL_HASH = #{travelHash,jdbcType=VARCHAR}, + + + STATUS = #{status,jdbcType=VARCHAR}, + + + REMARK = #{remark,jdbcType=VARCHAR}, + + + ORDER_COMPLETE_TIME = #{orderCompleteTime,jdbcType=CHAR}, + + + NEXT_SEND_TIME = #{nextSendTime,jdbcType=CHAR}, + + + SEND_COUNT = #{sendCount,jdbcType=DECIMAL}, + + + SEND_STATUS = #{sendStatus,jdbcType=VARCHAR}, + + + CREATE_USER = #{createUser,jdbcType=VARCHAR}, + + + CREATE_TIME = #{createTime,jdbcType=TIMESTAMP}, + + + LST_UPD_USER = #{lstUpdUser,jdbcType=VARCHAR}, + + + LST_UPD_TIME = #{lstUpdTime,jdbcType=TIMESTAMP}, + + + where SEQ_NO = #{seqNo,jdbcType=VARCHAR} + + + + diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/common/SysBaseInfoMapper.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/common/SysBaseInfoMapper.xml new file mode 100644 index 00000000..da0d8362 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/common/SysBaseInfoMapper.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcAsynCtrlMapper.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcAsynCtrlMapper.xml new file mode 100644 index 00000000..b85f4ce2 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcAsynCtrlMapper.xml @@ -0,0 +1,68 @@ + + + + + + select + t0.APP_ID as appId + ,t0.CYCLE_STAT as cycleStat + ,t0.CURR_DATE_TIME as currDateTime + ,t0.UPDATETIME as updatetime + from TBL_DC_ASYN_CTRL t0 + + + + + and t0.APP_ID = #{params.appId} + and t0.CYCLE_STAT = #{params.cycleStat} + and t0.CURR_DATE_TIME = #{params.currDateTime} + and t0.UPDATETIME = #{params.updatetime} + + + + + + + + + + + insert into TBL_DC_ASYN_CTRL + + APP_ID, + CYCLE_STAT, + CURR_DATE_TIME, + UPDATETIME, + + + #{appId}, + #{cycleStat}, + #{currDateTime}, + #{updatetime}, + + + + + + update TBL_DC_ASYN_CTRL + + APP_ID = #{appId}, + CYCLE_STAT = #{cycleStat}, + CURR_DATE_TIME = #{currDateTime}, + UPDATETIME = #{updatetime}, + + where APP_ID = #{appId} + + \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcBcTravelNoticeMapper.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcBcTravelNoticeMapper.xml new file mode 100644 index 00000000..390f18b9 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcBcTravelNoticeMapper.xml @@ -0,0 +1,309 @@ + + + + + + select + t0.SEQ_NO as seqNo + ,t0.TXN_LOCK as txnLock + ,t0.TXN_TIME as txnTime + ,t0.TRAVEL_NO as travelNo + ,t0.TRANS_TYPE as transType + ,t0.BC_CHANNEL as bcChannel + ,t0.IN_TRANS_TIME as inTransTime + ,t0.OUT_TRANS_TIME as outTransTime + ,t0.USER_ID as userId + ,t0.IN_STATION_ID as inStationId + ,t0.OUT_STATION_ID as outStationId + ,t0.MILEAGE as mileage + ,t0.CAR_MILEAGE as carMileage + ,t0.CARBON_FOOTPRINT as carbonFootprint + ,t0.CALC_FACTOR_VERSION as calcFactorVersion + ,t0.FIRST_CHANNELS as firstChannels + ,t0.SECOND_CHANNELS as secondChannels + ,t0.USER_TOKENS as userTokens + ,t0.STLM_DATE as stlmDate + ,t0.TRAVEL_HASH as travelHash + ,t0.STATUS as status + ,t0.REMARK as remark + ,t0.ORDER_COMPLETE_TIME as orderCompleteTime + ,t0.NEXT_SEND_TIME as nextSendTime + ,t0.SEND_COUNT as sendCount + ,t0.SEND_STATUS as sendStatus + ,t0.CREATE_USER as createUser + ,t0.CREATE_TIME as createTime + ,t0.LST_UPD_USER as lstUpdUser + ,t0.LST_UPD_TIME as lstUpdTime + from TBL_DC_BC_TRAVEL_NOTICE t0 + + + + + and t0.SEQ_NO = #{params.seqNo} + and t0.TXN_LOCK = #{params.txnLock} + and t0.TXN_TIME = #{params.txnTime} + and t0.TRAVEL_NO = #{params.travelNo} + and t0.TRANS_TYPE = #{params.transType} + and t0.BC_CHANNEL = #{params.bcChannel} + and t0.IN_TRANS_TIME = #{params.inTransTime} + and t0.OUT_TRANS_TIME = #{params.outTransTime} + and t0.USER_ID = #{params.userId} + and t0.IN_STATION_ID = #{params.inStationId} + and t0.OUT_STATION_ID = #{params.outStationId} + and t0.MILEAGE = #{params.mileage} + and t0.CARBON_FOOTPRINT = #{params.carbonFootprint} + and t0.CALC_FACTOR_VERSION = #{params.calcFactorVersion} + and t0.FIRST_CHANNELS = #{params.firstChannels} + and t0.SECOND_CHANNELS = #{params.secondChannels} + and t0.USER_TOKENS = #{params.userTokens} + and t0.STLM_DATE = #{params.stlmDate} + and t0.TRAVEL_HASH = #{params.travelHash} + and t0.STATUS = #{params.status} + and t0.REMARK = #{params.remark} + and t0.ORDER_COMPLETE_TIME = #{params.orderCompleteTime} + and t0.NEXT_SEND_TIME = #{params.nextSendTime} + and t0.SEND_COUNT = #{params.sendCount} + and t0.SEND_STATUS = #{params.sendStatus} + and t0.CREATE_USER = #{params.createUser} + and t0.CREATE_TIME = #{params.createTime} + and t0.LST_UPD_USER = #{params.lstUpdUser} + and t0.LST_UPD_TIME = #{params.lstUpdTime} + + + + + + + + + + + + + + + select to_char(current_timestamp, 'YYYYMMDDHH24MISS') || SEQ_DC_BC_TRAVEL.nextVal from dual + + insert into TBL_DC_BC_TRAVEL_NOTICE + + SEQ_NO,CREATE_TIME,LST_UPD_TIME,CREATE_USER,LST_UPD_USER, + TXN_LOCK, + TXN_TIME, + TRAVEL_NO, + TRANS_TYPE, + BC_CHANNEL, + IN_TRANS_TIME, + OUT_TRANS_TIME, + USER_ID, + IN_STATION_ID, + OUT_STATION_ID, + MILEAGE, + CAR_MILEAGE, + CARBON_FOOTPRINT, + CALC_FACTOR_VERSION, + FIRST_CHANNELS, + SECOND_CHANNELS, + USER_TOKENS, + STLM_DATE, + TRAVEL_HASH, + STATUS, + REMARK, + ORDER_COMPLETE_TIME, + NEXT_SEND_TIME, + SEND_COUNT, + SEND_STATUS, + + + #{seqNo},to_char(current_timestamp, 'YYYYMMDDHH24MISS'),to_char(current_timestamp, 'YYYYMMDDHH24MISS'),'SYSTEM','SYSTEM', + #{txnLock}, + #{txnTime}, + #{travelNo}, + #{transType}, + #{bcChannel}, + #{inTransTime}, + #{outTransTime}, + #{userId}, + #{inStationId}, + #{outStationId}, + #{mileage}, + #{carMileage}, + #{carbonFootprint}, + #{calcFactorVersion}, + #{firstChannels}, + #{secondChannels}, + #{userTokens}, + #{stlmDate}, + #{travelHash}, + #{status}, + #{remark}, + #{orderCompleteTime}, + #{nextSendTime}, + #{sendCount}, + #{sendStatus}, + + + + + + update TBL_DC_BC_TRAVEL_NOTICE + + LST_UPD_TIME = to_char(current_timestamp, 'YYYYMMDDHH24MISS'), + TXN_LOCK = #{txnLock}, + TXN_TIME = #{txnTime}, + TRAVEL_NO = #{travelNo}, + TRANS_TYPE = #{transType}, + BC_CHANNEL = #{bcChannel}, + IN_TRANS_TIME = #{inTransTime}, + OUT_TRANS_TIME = #{outTransTime}, + USER_ID = #{userId}, + IN_STATION_ID = #{inStationId}, + OUT_STATION_ID = #{outStationId}, + MILEAGE = #{mileage}, + CAR_MILEAGE = #{carMileage}, + CARBON_FOOTPRINT = #{carbonFootprint}, + CALC_FACTOR_VERSION = #{calcFactorVersion}, + FIRST_CHANNELS = #{firstChannels}, + SECOND_CHANNELS = #{secondChannels}, + USER_TOKENS = #{userTokens}, + STLM_DATE = #{stlmDate}, + TRAVEL_HASH = #{travelHash}, + STATUS = #{status}, + REMARK = #{remark}, + ORDER_COMPLETE_TIME = #{orderCompleteTime}, + NEXT_SEND_TIME = #{nextSendTime}, + SEND_COUNT = #{sendCount}, + SEND_STATUS = #{sendStatus}, + CREATE_USER = #{createUser}, + CREATE_TIME = #{createTime}, + LST_UPD_USER = #{lstUpdUser}, + + where SEQ_NO = #{seqNo} + + + + + + + + + + update TBL_DC_BC_TRAVEL_NOTICE + set NEXT_SEND_TIME = #{nextSendTime}, + SEND_COUNT = 0, + SEND_STATUS = 'INIT', + STATUS = 'INIT' + where SEQ_NO = #{seqNo} + + \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcCalcFactorMapper.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcCalcFactorMapper.xml new file mode 100644 index 00000000..a6fb131d --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcCalcFactorMapper.xml @@ -0,0 +1,80 @@ + + + + + + select + t0.VERSION as version + ,t0.AVAERAGE_MILEAGE as avaerageMileage + ,t0.NORMAL_FACTOR as normalFactor + ,t0.BUS_FACTOR as busFactor + ,t0.SUBWAY_FACTOR as subwayFactor + ,t0.START_TIME as startTime + ,t0.END_TIME as endTime + from TBL_DC_CALC_FACTOR t0 + + + + + and t0.VERSION = #{params.version} + and t0.AVAERAGE_MILEAGE = #{params.avaerageMileage} + and t0.NORMAL_FACTOR = #{params.normalFactor} + and t0.BUS_FACTOR = #{params.busFactor} + and t0.SUBWAY_FACTOR = #{params.subwayFactor} + and t0.END_TIME = #{params.endTime} + + + + + + + + + + insert into TBL_DC_CALC_FACTOR + + VERSION, + AVAERAGE_MILEAGE, + NORMAL_FACTOR, + BUS_FACTOR, + SUBWAY_FACTOR, + START_TIME, + END_TIME, + + + #{version}, + #{avaerageMileage}, + #{normalFactor}, + #{busFactor}, + #{subwayFactor}, + #{startTime}, + #{endTime}, + + + + + + update TBL_DC_CALC_FACTOR + + VERSION = #{version}, + AVAERAGE_MILEAGE = #{avaerageMileage}, + NORMAL_FACTOR = #{normalFactor}, + BUS_FACTOR = #{busFactor}, + SUBWAY_FACTOR = #{subwayFactor}, + START_TIME = #{startTime}, + END_TIME = #{endTime}, + + where VERSION = #{version} + + \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcCtrlMapper.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcCtrlMapper.xml new file mode 100644 index 00000000..ee632f9c --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcCtrlMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcDcSubwayChangeStationDao.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcDcSubwayChangeStationDao.xml new file mode 100644 index 00000000..b6ee6c5e --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcDcSubwayChangeStationDao.xml @@ -0,0 +1,27 @@ + + + + + + select + t0.STATION_ID as stationId + ,t0.STANDARD_ID as standardId + from TBL_DC_DC_SUBWAY_CHANGE_STAT t0 + + + + + + + \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcDcSubwayMileageDao.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcDcSubwayMileageDao.xml new file mode 100644 index 00000000..abed6733 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcDcSubwayMileageDao.xml @@ -0,0 +1,25 @@ + + + + + + select + t0.IN_STATION_ID as inStationId + ,t0.OUT_STATION_ID as outStationId + ,t0.MILEAGE as mileage + ,t0.CAR_MILEAGE as carMileage + from TBL_DC_DC_SUBWAY_MILEAGE t0 + + + + + \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcNfcTravelNoticeMapper.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcNfcTravelNoticeMapper.xml new file mode 100644 index 00000000..c4ca70f5 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcNfcTravelNoticeMapper.xml @@ -0,0 +1,152 @@ + + + + + + select + t0.SEQ_NO as seqNo + ,t0.TXN_LOCK as txnLock + ,t0.TXN_TIME as txnTime + ,t0.TRAVEL_NO as travelNo + ,t0.TRANS_TYPE as transType + ,t0.IN_TRANS_TIME as inTransTime + ,t0.OUT_TRANS_TIME as outTransTime + ,t0.CARD_NO as cardNo + ,t0.USER_ID as userId + ,t0.IN_STATION_ID as inStationId + ,t0.OUT_STATION_ID as outStationId + ,t0.MILEAGE as mileage + ,t0.FIRST_CHANNELS as firstChannels + ,t0.SECOND_CHANNELS as secondChannels + ,t0.USER_TOKENS as userTokens + ,t0.STLM_DATE as stlmDate + ,t0.STATUS as status + ,t0.REMARK as remark + ,t0.ORDER_COMPLETE_TIME as orderCompleteTime + ,t0.NEXT_SEND_TIME as nextSendTime + ,t0.SEND_COUNT as sendCount + ,t0.SEND_STATUS as sendStatus + ,t0.CREATE_USER as createUser + ,t0.CREATE_TIME as createTime + ,t0.LST_UPD_USER as lstUpdUser + ,t0.LST_UPD_TIME as lstUpdTime + from TBL_DC_NFC_TRAVEL_NOTICE t0 + + + + + + + + + + + + + + select to_char(current_timestamp, 'YYYYMMDDHH24MISS') || SEQ_DC_NFC_TRAVEL.nextVal from dual + + insert into TBL_DC_NFC_TRAVEL_NOTICE + + SEQ_NO,CREATE_TIME,LST_UPD_TIME,CREATE_USER,LST_UPD_USER, + TXN_LOCK, + TXN_TIME, + TRAVEL_NO, + TRANS_TYPE, + IN_TRANS_TIME, + OUT_TRANS_TIME, + CARD_NO, + USER_ID, + IN_STATION_ID, + OUT_STATION_ID, + MILEAGE, + FIRST_CHANNELS, + SECOND_CHANNELS, + USER_TOKENS, + STLM_DATE, + STATUS, + REMARK, + ORDER_COMPLETE_TIME, + NEXT_SEND_TIME, + SEND_COUNT, + SEND_STATUS, + + + #{seqNo},to_char(current_timestamp, 'YYYYMMDDHH24MISS'),to_char(current_timestamp, 'YYYYMMDDHH24MISS'),'SYSTEM','SYSTEM', + #{txnLock}, + #{txnTime}, + #{travelNo}, + #{transType}, + #{inTransTime}, + #{outTransTime}, + #{cardNo}, + #{userId}, + #{inStationId}, + #{outStationId}, + #{mileage}, + #{firstChannels}, + #{secondChannels}, + #{userTokens}, + #{stlmDate}, + #{status}, + #{remark}, + #{orderCompleteTime}, + #{nextSendTime}, + #{sendCount}, + #{sendStatus}, + + + + + + update TBL_DC_NFC_TRAVEL_NOTICE + + LST_UPD_TIME = to_char(current_timestamp, 'YYYYMMDDHH24MISS'), + TXN_LOCK = #{txnLock}, + TXN_TIME = #{txnTime}, + TRAVEL_NO = #{travelNo}, + TRANS_TYPE = #{transType}, + IN_TRANS_TIME = #{inTransTime}, + OUT_TRANS_TIME = #{outTransTime}, + CARD_NO = #{cardNo}, + USER_ID = #{userId}, + IN_STATION_ID = #{inStationId}, + OUT_STATION_ID = #{outStationId}, + MILEAGE = #{mileage}, + FIRST_CHANNELS = #{firstChannels}, + SECOND_CHANNELS = #{secondChannels}, + USER_TOKENS = #{userTokens}, + STLM_DATE = #{stlmDate}, + STATUS = #{status}, + REMARK = #{remark}, + ORDER_COMPLETE_TIME = #{orderCompleteTime}, + NEXT_SEND_TIME = #{nextSendTime}, + SEND_COUNT = #{sendCount}, + SEND_STATUS = #{sendStatus}, + CREATE_USER = #{createUser}, + CREATE_TIME = #{createTime}, + LST_UPD_USER = #{lstUpdUser}, + + where SEQ_NO = #{seqNo} + + \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcNoticeErrorMapper.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcNoticeErrorMapper.xml new file mode 100644 index 00000000..7e1a90da --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/DcNoticeErrorMapper.xml @@ -0,0 +1,167 @@ + + + + + + select + t0.SEQ_NO as seqNo + ,t0.NOTICE_SEQ_NO as noticeSeqNo + ,t0.MSG_CONTENT as msgContent + ,t0.NOTICE_TYPE as noticeType + ,t0.REASON as reason + ,t0.STATUS as status + ,t0.NEXT_SEND_TIME as nextSendTime + ,t0.SEND_COUNT as sendCount + ,t0.SEND_STATUS as sendStatus + ,t0.CREATE_USER as createUser + ,t0.CREATE_TIME as createTime + ,t0.LST_UPD_USER as lstUpdUser + ,t0.LST_UPD_TIME as lstUpdTime + from TBL_DC_NOTICE_ERROR t0 + + + + + + + + + + + + select to_char(current_timestamp, 'YYYYMMDDHH24MISS') || SEQ_DC_ERROR_LOG.nextVal from dual + + insert into TBL_DC_NOTICE_ERROR + + SEQ_NO,CREATE_TIME,LST_UPD_TIME,CREATE_USER,LST_UPD_USER, + NOTICE_SEQ_NO, + MSG_CONTENT, + NOTICE_TYPE, + REASON, + STATUS, + NEXT_SEND_TIME, + SEND_COUNT, + SEND_STATUS, + + + #{seqNo},to_char(current_timestamp, 'YYYYMMDDHH24MISS'),to_char(current_timestamp, 'YYYYMMDDHH24MISS'),'SYSTEM','SYSTEM', + #{noticeSeqNo}, + #{msgContent}, + #{noticeType}, + #{reason}, + #{status}, + #{nextSendTime}, + #{sendCount}, + #{sendStatus}, + + + + + + update TBL_DC_NOTICE_ERROR + + LST_UPD_TIME = to_char(current_timestamp, 'YYYYMMDDHH24MISS'), + NOTICE_SEQ_NO = #{noticeSeqNo}, + MSG_CONTENT = #{msgContent}, + NOTICE_TYPE = #{noticeType}, + REASON = #{reason}, + STATUS = #{status}, + NEXT_SEND_TIME = #{nextSendTime}, + SEND_COUNT = #{sendCount}, + SEND_STATUS = #{sendStatus}, + CREATE_USER = #{createUser}, + CREATE_TIME = #{createTime}, + LST_UPD_USER = #{lstUpdUser}, + + where SEQ_NO = #{seqNo} + + + + + + + + update TBL_DC_NOTICE_ERROR + set NEXT_SEND_TIME = #{nextSendTime}, + SEND_COUNT = 0, + SEND_STATUS = 'INIT', + STATUS = 'INIT' + where SEQ_NO = #{seqNo} + + + \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/PingTestMapper.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/PingTestMapper.xml new file mode 100644 index 00000000..50298c40 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mapper/dataProcess/PingTestMapper.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mybatis.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mybatis.xml new file mode 100644 index 00000000..b390056e --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/mybatis/mybatis.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/spring/applicationContext-public.xml b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/spring/applicationContext-public.xml new file mode 100644 index 00000000..7c082125 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/main/resources/spring/applicationContext-public.xml @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/test/java/com/jiuyv/sptcc/user/api/AuthTanphFeignMock.java b/carbon-dataprocess/carbon-dataprocess-service/src/test/java/com/jiuyv/sptcc/user/api/AuthTanphFeignMock.java new file mode 100644 index 00000000..167ec87e --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/test/java/com/jiuyv/sptcc/user/api/AuthTanphFeignMock.java @@ -0,0 +1,94 @@ +package com.jiuyv.sptcc.user.api; + +import com.jiuyv.sptcc.carbon.dataprocess.api.IAuthTanphFeign; +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.tanph.auth.entity.CommonRequestVO; +import com.jiuyv.sptcc.tanph.auth.entity.CommonResponseVO; +import com.jiuyv.sptcc.tanph.auth.entity.auth.UserAuthVo; +import com.jiuyv.sptcc.tanph.auth.entity.auth.api.icago.ResourceIdSearchRequestVo; +import com.jiuyv.sptcc.tanph.auth.entity.auth.api.icago.ResourceIdSearchResponseVo; +import com.jiuyv.sptcc.tanph.auth.entity.auth.api.tanph.*; +import feign.Response; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; + +public class AuthTanphFeignMock implements IAuthTanphFeign { + + + @Override + public CommonResponseVO auth(AuthTanphRequestVo authTanphRequestVo) { + return null; + } + + @Override + public CommonResponseVO authCancel(AuthCancelTanphRequestVo authCancelTanphRequestVo) { + return null; + } + + @Override + public AuthStatusSearchResponseVo authStatusSearch(AuthStatusSearchRequestVo authStatusSearchRequestVo) { + return null; + } + + @Override + public AuthUserInfoSearchResponseVo authUserInfoSearch(AuthUserInfoSearchRequestVo authUserInfoSearchRequestVo) { + return null; + } + + @Override + public AuthTempCodeGenerateResponseVo authTempCodeGenerate(AuthTempCodeGenerateRequestVo authTempCodeGenerateRequestVo) { + return null; + } + + @Override + public AuthTempCodeExchangeResponseVo authTempCodeExchange(AuthTempCodeExchangeRequestVo authTempCodeExchangeRequestVo) { + return null; + } + + @Override + public AuthStatusHistorySearchResponseVo authStatusHistorySearch(AuthStatusHistorySearchRequestVo authStatusHistorySearchRequestVo) { + AuthStatusHistorySearchResponseVo responseVo = new AuthStatusHistorySearchResponseVo(); + if ("123456".equals(authStatusHistorySearchRequestVo.getUserId())) { + responseVo.setRespCode(Constant.RespCode.SUCCESS); + return responseVo; + } + responseVo.setRespCode(Constant.RespCode.SUCCESS); + UserAuthVo authVo = new UserAuthVo(); + authVo.setFirstChannel("shmaas"); + authVo.setSecondChannel("shmaas"); + authVo.setToken("shmaas" + authStatusHistorySearchRequestVo.getUserId()); + UserAuthVo authVo2 = new UserAuthVo(); + authVo2.setFirstChannel("ccb"); + authVo2.setSecondChannel("ccb"); + authVo2.setToken("ccb" + authStatusHistorySearchRequestVo.getUserId()); + responseVo.setUserAuthVoList(Arrays.asList(authVo, authVo2)); + return responseVo; + } + + @Override + public AuthSearchForQRFilterResponseVo authListSearchForQRFilter(AuthSearchForQRFilterRequestVo authSearchForQRFilterRequestVo) { + AuthSearchForQRFilterResponseVo responseVo = new AuthSearchForQRFilterResponseVo(); + responseVo.setRespCode(Constant.RespCode.SUCCESS); + responseVo.setUserIdList(Arrays.asList("123456788", "00000222223")); + return responseVo; + } + + @Override + public Response syncListSearchForFullQRFilter(CommonRequestVO commonRequestVO) { + InputStream is = this.getClass().getClassLoader().getResourceAsStream("BC_TRAVEL_AUTH"); + Response response = null; + try { + response = Response.builder().status(200).body(is ,is.available()).build(); + } catch (IOException e) { + e.printStackTrace(); + } + return response; + } + + @Override + public ResourceIdSearchResponseVo tanphResourceIdListSearch(ResourceIdSearchRequestVo resourceIdSearchRequestVo) { + return null; + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/test/java/com/jiuyv/sptcc/user/api/MsgSendMock.java b/carbon-dataprocess/carbon-dataprocess-service/src/test/java/com/jiuyv/sptcc/user/api/MsgSendMock.java new file mode 100644 index 00000000..e397e3d9 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/test/java/com/jiuyv/sptcc/user/api/MsgSendMock.java @@ -0,0 +1,23 @@ +package com.jiuyv.sptcc.user.api; + + +import com.jiuyv.sptcc.carbon.dataprocess.model.MsgInfo; +import com.jiuyv.sptcc.carbon.dataprocess.service.IMsgSendService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class MsgSendMock implements IMsgSendService { + + /** The Constant LOGGER. */ + private static final Logger LOGGER = LoggerFactory + .getLogger(MsgSendMock.class); + + @Override + public void sendMsg(MsgInfo info, String[] mobiles) { + LOGGER.info("msg send title:{}", info.getTitle()); + LOGGER.info("msg send content:{}", info.getContent()); + for (String mobile : mobiles) { + LOGGER.info("msg send user:{}", mobile); + } + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/test/java/com/jiuyv/sptcc/user/controller/ConsoleTest.java b/carbon-dataprocess/carbon-dataprocess-service/src/test/java/com/jiuyv/sptcc/user/controller/ConsoleTest.java new file mode 100644 index 00000000..34eaeb6f --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/test/java/com/jiuyv/sptcc/user/controller/ConsoleTest.java @@ -0,0 +1,116 @@ +package com.jiuyv.sptcc.user.controller; + + +import com.jiuyv.sptcc.carbon.dataprocess.Application; +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.UUIDUtil; +import com.jiuyv.sptcc.carbon.dataprocess.controller.DataProcessBatchConsoleController; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.*; +import com.jiuyv.sptcc.carbon.dataprocess.quartz.CreateAcctFile; +import org.junit.jupiter.api.*; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.MockitoAnnotations; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import javax.annotation.Resource; + +@ExtendWith(SpringExtension.class) +@SpringBootTest(classes = Application.class) +@TestMethodOrder(MethodOrderer.MethodName.class) +public class ConsoleTest { + + /** The Constant LOGGER. */ + private static final Logger LOGGER = LoggerFactory + .getLogger(ConsoleTest.class); + + @Resource + private CreateAcctFile acctFile; + + @Resource + private DataProcessBatchConsoleController controller; + + @BeforeEach + public void initMocks() { + MockitoAnnotations.initMocks(this); + } + + /*@Test + public void test1() throws Exception { + LOGGER.info("---------------- 公交行程通知 开始 ----------------"); + acctFile.execute(); + LOGGER.info("---------------- 公交行程通知 结束 ----------------"); + }*/ + + @Test + public void test2() throws Exception { + BcTravelNoticePageReqVo reqVo = new BcTravelNoticePageReqVo(); + BcTravelNoticeFilter filter = new BcTravelNoticeFilter(); + filter.setCreateTimeStart("20230101000000"); + filter.setCreateTimeEnd("20231231235959"); + reqVo.setReqId(UUIDUtil.getTimebaseUUID().toString()); + reqVo.setFilter(filter); + BcTravelNoticePageRespVo respVo = controller.bcTravelNoticePage(reqVo); + Assertions.assertEquals(Constant.RespCode.SUCCESS, respVo.getRespCode()); + // assertEquals(Long.valueOf(4), respVo.getTotalCount()); + } + + @Test + public void test3() throws Exception { + NoticeErrorPageReqVo reqVo = new NoticeErrorPageReqVo(); + NoticeErrorFilter filter = new NoticeErrorFilter(); + filter.setCreateTimeStart("20230101000000"); + filter.setCreateTimeEnd("20231231235959"); + reqVo.setReqId(UUIDUtil.getTimebaseUUID().toString()); + reqVo.setFilter(filter); + NoticeErrorPageRespVo respVo = controller.noticeErrorPage(reqVo); + Assertions.assertEquals(Constant.RespCode.SUCCESS, respVo.getRespCode()); + // assertEquals(Long.valueOf(4), respVo.getTotalCount()); + } + + @Test + public void test4() throws Exception { + BcTravelNoticeReprocessReqVo reqVo = new BcTravelNoticeReprocessReqVo(); + reqVo.setReqId(UUIDUtil.getTimebaseUUID().toString()); + reqVo.setSeqNo("test9"); + BcTravelNoticeReprocessRespVo respVo = controller.bcTravelNoticeReprocess(reqVo); + Assertions.assertEquals(Constant.RespCode.SUCCESS, respVo.getRespCode()); + + BcTravelNoticePageReqVo freqVo = new BcTravelNoticePageReqVo(); + BcTravelNoticeFilter filter = new BcTravelNoticeFilter(); + filter.setSeqNo("test9"); + filter.setCreateTimeStart("20230101000000"); + filter.setCreateTimeEnd("20231231235959"); + freqVo.setReqId(UUIDUtil.getTimebaseUUID().toString()); + freqVo.setFilter(filter); + BcTravelNoticePageRespVo frespVo = controller.bcTravelNoticePage(freqVo); + Assertions.assertEquals(Constant.RespCode.SUCCESS, frespVo.getRespCode()); + Assertions.assertEquals(Long.valueOf(0L), frespVo.getOrderList().get(0).getSendCount()); + Assertions.assertEquals("INIT", frespVo.getOrderList().get(0).getStatus()); + Assertions.assertEquals("INIT", frespVo.getOrderList().get(0).getSendStatus()); + } + + @Test + public void test5() throws Exception { + NoticeErrorReprocessReqVo reqVo = new NoticeErrorReprocessReqVo(); + reqVo.setReqId(UUIDUtil.getTimebaseUUID().toString()); + reqVo.setSeqNo("errortest1"); + NoticeErrorReprocessRespVo respVo = controller.noticeErrorReprocess(reqVo); + Assertions.assertEquals(Constant.RespCode.SUCCESS, respVo.getRespCode()); + + NoticeErrorPageReqVo freqVo = new NoticeErrorPageReqVo(); + NoticeErrorFilter filter = new NoticeErrorFilter(); + filter.setSeqNo("errortest1"); + filter.setCreateTimeStart("20230101000000"); + filter.setCreateTimeEnd("20231231235959"); + freqVo.setReqId(UUIDUtil.getTimebaseUUID().toString()); + freqVo.setFilter(filter); + NoticeErrorPageRespVo frespVo = controller.noticeErrorPage(freqVo); + Assertions.assertEquals(Constant.RespCode.SUCCESS, frespVo.getRespCode()); + Assertions.assertEquals(Long.valueOf(0L), frespVo.getOrderList().get(0).getSendCount()); + Assertions.assertEquals("INIT", frespVo.getOrderList().get(0).getStatus()); + Assertions.assertEquals("INIT", frespVo.getOrderList().get(0).getSendStatus()); + } +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/test/java/com/jiuyv/sptcc/user/controller/DataProcessControllerTest.java b/carbon-dataprocess/carbon-dataprocess-service/src/test/java/com/jiuyv/sptcc/user/controller/DataProcessControllerTest.java new file mode 100644 index 00000000..5c4ad546 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/test/java/com/jiuyv/sptcc/user/controller/DataProcessControllerTest.java @@ -0,0 +1,324 @@ +package com.jiuyv.sptcc.user.controller; + +import com.jiuyv.spring.starter.bloomfilter.v2.BloomFilterComponent; +import com.jiuyv.sptcc.carbon.dataprocess.Application; +import com.jiuyv.sptcc.carbon.dataprocess.common.Constant; +import com.jiuyv.sptcc.carbon.dataprocess.common.database.exception.BaseException; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.DateUtil; +import com.jiuyv.sptcc.carbon.dataprocess.common.util.UUIDUtil; +import com.jiuyv.sptcc.carbon.dataprocess.config.BcTravelAuthFilterConfig; +import com.jiuyv.sptcc.carbon.dataprocess.controller.DataProcessBatchConsoleController; +import com.jiuyv.sptcc.carbon.dataprocess.controller.DataProcessController; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.BcTravelNoticeFilter; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.BcTravelNoticePageReqVo; +import com.jiuyv.sptcc.carbon.dataprocess.dto.console.BcTravelNoticePageRespVo; +import com.jiuyv.sptcc.carbon.dataprocess.plugin.impl.DcTravelProcessImpl; +import com.jiuyv.sptcc.carbon.dataprocess.quartz.BcTravelResendTask; +import com.jiuyv.sptcc.carbon.dataprocess.quartz.NotcieErrorReprocessTask; +import com.jiuyv.sptcc.carbon.dataprocess.service.impl.AuthService; +import com.jiuyv.sptcc.carbon.dataprocess.service.impl.MsgSendService; +import com.jiuyv.sptcc.user.api.AuthTanphFeignMock; +import com.jiuyv.sptcc.user.api.MsgSendMock; +import org.junit.jupiter.api.*; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; +import org.mockito.Spy; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import javax.annotation.Resource; +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +/** + * 核心test + * @author jiuyv + * + */ +@ExtendWith(SpringExtension.class) +@SpringBootTest(classes = Application.class) +@TestMethodOrder(MethodOrderer.MethodName.class) +public class DataProcessControllerTest { + + /** The Constant LOGGER. */ + private static final Logger LOGGER = LoggerFactory + .getLogger(DataProcessControllerTest.class); + + private static final DateTimeFormatter sdf = DateTimeFormatter.ofPattern(DateUtil.DATE_14); + + private static final DateTimeFormatter sdf_c = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + @Resource + @InjectMocks + private DataProcessController controller; + + @Resource + private DataProcessBatchConsoleController consoleController; + + @Autowired + private BloomFilterComponent filterComponent; + + @Resource + @InjectMocks + private AuthService authService; + + @Resource + @InjectMocks + private MsgSendService sendService; + + @Resource + @InjectMocks + private BcTravelAuthFilterConfig authFilter; + + @Resource + @InjectMocks + private DcTravelProcessImpl process; + + @Resource + @InjectMocks + private BcTravelResendTask resendTask; + + @Resource + @InjectMocks + private NotcieErrorReprocessTask errorTask; + + @Spy + private AuthTanphFeignMock mock = new AuthTanphFeignMock(); + + @Spy + private MsgSendMock msgSendMock = new MsgSendMock(); + + @BeforeEach + public void initMocks() { + MockitoAnnotations.initMocks(this); + } + + @Test + public void test1() throws BaseException, IOException { + filterComponent.fetchIncreaseDataTask(authFilter); + + LOGGER.info("---------------- 公交行程通知 开始 ----------------"); + // controller.consume(); + Boolean isException = false; + try { + controller.processMsg(createBusNoticeVo("123456788", "20230421000000")); + } catch (Exception e) { + LOGGER.error("test error", e); + isException = true; + } + Assertions.assertEquals(Boolean.FALSE, isException); + LOGGER.info("---------------- 公交行程通知 结束 ----------------"); + + LOGGER.info("---------------- 公交行程通知 重复通知案例 开始 ----------------"); + isException = false; + try { + controller.processMsg(createBusNoticeVo("123456788", "20230421000000")); + } catch (Exception e) { + LOGGER.error("test error", e); + isException = true; + } + Assertions.assertEquals(Boolean.FALSE, isException); + LOGGER.info("---------------- 公交行程通知 重复通知案例 结束 ----------------"); + + LOGGER.info("---------------- 地铁行程通知 换乘站案例 开始 ----------------"); + isException = false; + try { + controller.processMsg(createSubwayNoticeVo("123456788", "20230421000001", "S1", "S2")); + } catch (Exception e) { + LOGGER.error("test error", e); + isException = true; + } + Assertions.assertEquals(Boolean.FALSE, isException); + LOGGER.info("---------------- 地铁行程通知 换乘站案例 结束 ----------------"); + + LOGGER.info("---------------- 地铁行程通知 换乘站案例 开始 ----------------"); + isException = false; + try { + controller.processMsg(createSubwayNoticeVo("123456788", "20230421000002", "T1", "S2")); + } catch (Exception e) { + LOGGER.error("test error", e); + isException = true; + } + Assertions.assertEquals(Boolean.FALSE, isException); + LOGGER.info("---------------- 地铁行程通知 换乘站案例 结束 ----------------"); + + LOGGER.info("---------------- 地铁行程通知 换乘站案例 开始 ----------------"); + isException = false; + try { + controller.processMsg(createSubwayNoticeVo("123456788", "20230421000003", "T1", "T2")); + } catch (Exception e) { + LOGGER.error("test error", e); + isException = true; + } + Assertions.assertEquals(Boolean.FALSE, isException); + LOGGER.info("---------------- 地铁行程通知 换乘站案例 结束 ----------------"); + + LOGGER.info("---------------- 地铁行程通知 换乘站案例 开始 ----------------"); + isException = false; + try { + controller.processMsg(createSubwayNoticeVo("123456788", "20230421000004", "S1", "T2")); + } catch (Exception e) { + LOGGER.error("test error", e); + isException = true; + } + Assertions.assertEquals(Boolean.FALSE, isException); + LOGGER.info("---------------- 地铁行程通知 换乘站案例 结束 ----------------"); + + LOGGER.info("---------------- 地铁行程通知 换乘站案例 开始 ----------------"); + isException = false; + try { + controller.processMsg(createSubwayNoticeVo("123456788", "20230421000005", "S1", "T2")); + } catch (Exception e) { + LOGGER.error("test error", e); + isException = true; + } + Assertions.assertEquals(Boolean.FALSE, isException); + LOGGER.info("---------------- 地铁行程通知 换乘站案例 结束 ----------------"); + + LOGGER.info("---------------- 地铁行程通知 换乘站案例 开始 ----------------"); + isException = false; + try { + controller.processMsg(createSubwayNoticeVo("123456788", "20230421000006", "S2", "T1")); + } catch (Exception e) { + LOGGER.error("test error", e); + isException = true; + } + Assertions.assertEquals(Boolean.FALSE, isException); + LOGGER.info("---------------- 地铁行程通知 换乘站案例 结束 ----------------"); + + LOGGER.info("---------------- 地铁行程通知 里程未知案例 开始 ----------------"); + isException = false; + try { + controller.processMsg(createSubwayNoticeVo("123456788", "20230421000007", "S2", "S3")); + } catch (Exception e) { + LOGGER.error("test error", e); + isException = true; + } + Assertions.assertEquals(Boolean.FALSE, isException); + LOGGER.info("---------------- 地铁行程通知 里程未知案例 结束 ----------------"); + + LOGGER.info("---------------- 地铁行程通知 未授权案例 开始 ----------------"); + isException = false; + try { + controller.processMsg(createSubwayNoticeVo("123456", "20230421000008", "S1", "S2")); + } catch (Exception e) { + LOGGER.error("test error", e); + isException = true; + } + Assertions.assertEquals(Boolean.FALSE, isException); + LOGGER.info("---------------- 地铁行程通知 未授权案例 结束 ----------------"); + } + + @Test + public void test2() { + Boolean isException = false; + try { + resendTask.TimerRun(); + } catch (Exception e) { + LOGGER.error("test error", e); + isException = true; + } + Assertions.assertEquals(Boolean.FALSE, isException); + + BcTravelNoticePageReqVo reqVo = new BcTravelNoticePageReqVo(); + BcTravelNoticeFilter filter = new BcTravelNoticeFilter(); + filter.setCreateTimeStart("20220101000000"); + filter.setCreateTimeEnd("20241231235959"); + filter.setSeqNo("test1"); + reqVo.setReqId(UUIDUtil.getTimebaseUUID().toString()); + reqVo.setFilter(filter); + BcTravelNoticePageRespVo respVo = consoleController.bcTravelNoticePage(reqVo); + Assertions.assertEquals(Constant.RespCode.SUCCESS, respVo.getRespCode()); + Assertions.assertEquals(Constant.NfcTravelStatus.SUCCESS, respVo.getOrderList().get(0).getStatus()); + Assertions.assertEquals("1.0", respVo.getOrderList().get(0).getCalcFactorVersion()); + + reqVo = new BcTravelNoticePageReqVo(); + filter = new BcTravelNoticeFilter(); + filter.setCreateTimeStart("20220101000000"); + filter.setCreateTimeEnd("20241231235959"); + filter.setSeqNo("test2"); + reqVo.setReqId(UUIDUtil.getTimebaseUUID().toString()); + reqVo.setFilter(filter); + respVo = consoleController.bcTravelNoticePage(reqVo); + Assertions.assertEquals(Constant.RespCode.SUCCESS, respVo.getRespCode()); + Assertions.assertEquals(Constant.NfcTravelStatus.SUCCESS, respVo.getOrderList().get(0).getStatus()); + Assertions.assertEquals("1.0", respVo.getOrderList().get(0).getCalcFactorVersion()); + + reqVo = new BcTravelNoticePageReqVo(); + filter = new BcTravelNoticeFilter(); + filter.setCreateTimeStart("20220101000000"); + filter.setCreateTimeEnd("20241231235959"); + filter.setSeqNo("test3"); + reqVo.setReqId(UUIDUtil.getTimebaseUUID().toString()); + reqVo.setFilter(filter); + respVo = consoleController.bcTravelNoticePage(reqVo); + Assertions.assertEquals(Constant.RespCode.SUCCESS, respVo.getRespCode()); + Assertions.assertEquals(Constant.NfcTravelStatus.PROCESSING, respVo.getOrderList().get(0).getStatus()); + Assertions.assertEquals("因子未找到", respVo.getOrderList().get(0).getRemark()); + + reqVo = new BcTravelNoticePageReqVo(); + filter = new BcTravelNoticeFilter(); + filter.setCreateTimeStart("20220101000000"); + filter.setCreateTimeEnd("20241231235959"); + filter.setSeqNo("test4"); + reqVo.setReqId(UUIDUtil.getTimebaseUUID().toString()); + reqVo.setFilter(filter); + respVo = consoleController.bcTravelNoticePage(reqVo); + Assertions.assertEquals(Constant.RespCode.SUCCESS, respVo.getRespCode()); + Assertions.assertEquals(Constant.NfcTravelStatus.SUCCESS, respVo.getOrderList().get(0).getStatus()); + Assertions.assertEquals("2.0", respVo.getOrderList().get(0).getCalcFactorVersion()); + + } + + @Test + public void test3() { + Boolean isException = false; + try { + errorTask.TimerRun(); + } catch (Exception e) { + LOGGER.error("test error", e); + isException = true; + } + Assertions.assertEquals(Boolean.FALSE, isException); + } + + /** + * 创建公交行程对象 + * @param userId 用户号 + * @param transTime 交易时间 + * @return 行程 + */ + private String createBusNoticeVo(String userId, String transTime) { + return UUIDUtil.getTimebaseUUID().toString().replace("-", "") + "," + + "77" + "," + + userId + "," + + "" + "," + + "" + "," + + "JTK_APP" + "," + + LocalDateTime.parse(transTime, sdf).format(sdf_c); + } + + /** + * 创建地铁行程 + * @param userId 用户号 + * @param transTime 交易时间 + * @param inStationId 进站ID + * @param outStationId 出站ID + * @return 地铁行程 + */ + private String createSubwayNoticeVo(String userId, String transTime, String inStationId, String outStationId) { + return UUIDUtil.getTimebaseUUID().toString().replace("-", "") + "," + + "77" + "," + + userId + "," + + inStationId + "," + + outStationId + "," + + "JTK_APP" + "," + + LocalDateTime.parse(transTime, sdf).format(sdf_c); + } + +} diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/test/resources/application-default.yml b/carbon-dataprocess/carbon-dataprocess-service/src/test/resources/application-default.yml new file mode 100644 index 00000000..06e5c22f --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/test/resources/application-default.yml @@ -0,0 +1,80 @@ +spring: + jpa: + generate-ddl: false +# 是否打印sql语句 + show-sql: true +# 自动生成ddl,由于指定了具体的ddl,此处设置为none + hibernate: + ddl-auto: none +# 使用H2数据库 + datasource: + platform: h2 +# 指定生成数据库的schema文件位置 + schema: + classpath: schema.sql +# 指定插入数据库语句的脚本位置 + data: + classpath: data.sql + cache: + type: caffeine + cache-names: + - bcChangeStationCache + - bcMileageCache + - calcFactorCache + caffeine: + spec: initialCapacity=10,maximumSize=500,expireAfterWrite=60s +txnLockLoserTimerVal: 30 +quartz: + corn: "-" + addProcessTimerVal: 10,15,30,300,600,1200,1200 +lock: + time: 30000 + wait: 5000 +bc-travel: + sm3Key: 123456 + reprocess: + delay: 5 + data-center: + sftp: + # 端口 + port: 22 + # 服务器地址 + host: 130.252.200.93 + # 账号 + userName: tomcat + # 密码 + password: tomcat123 + # session连接超时时间 + sessionConnectTimeout: 30000 + # channel连接超时时间 + channelConnectedTimeout: 30000 + # 协议 + protocol: sftp + # 远端目录 + remoteDir: /home/tanphtest/dataProcess/temp/ + # 本地临时目录 + localDir: /home/tanphtest/dataProcess/temp/ + acct: + prefix: BcTravel + sftp: + # 端口 + port: 22 + # 服务器地址 + host: 130.252.200.93 + # 账号 + userName: tomcat + # 密码 + password: tomcat123 + # session连接超时时间 + sessionConnectTimeout: 30000 + # channel连接超时时间 + channelConnectedTimeout: 30000 + # 协议 + protocol: sftp + # 远端目录 + remoteDir: /home/tanphtest/dataProcess/temp/ + # 本地临时目录 + localDir: /home/tanphtest/dataProcess/temp/ +message: + sendMobileUrl: http://163.10.10.185:10080/smsBridge/wl/SmsServlet?phoneNo={phoneNo}&sms={sms}&code={code} + mobile: 1381 \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/test/resources/applicationContext-test.xml b/carbon-dataprocess/carbon-dataprocess-service/src/test/resources/applicationContext-test.xml new file mode 100644 index 00000000..fb037fe2 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/test/resources/applicationContext-test.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/test/resources/data.sql b/carbon-dataprocess/carbon-dataprocess-service/src/test/resources/data.sql new file mode 100644 index 00000000..eb95ecca --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/test/resources/data.sql @@ -0,0 +1,52 @@ +select 1 from dual; + +INSERT INTO TBL_DC_ASYN_CTRL (APP_ID, CYCLE_STAT, CURR_DATE_TIME, UPDATETIME) values ('BC_TRAVEL_SEND','1','20230423122959', to_char(current_timestamp, 'YYYYMMDDHH24MISS')); +INSERT INTO TBL_DC_ASYN_CTRL (APP_ID, CYCLE_STAT, CURR_DATE_TIME, UPDATETIME) values ('ERROR_LOG_PROCESS','1','20230423122959', to_char(current_timestamp, 'YYYYMMDDHH24MISS')); + +INSERT INTO TBL_DC_DC_SUBWAY_MILEAGE (IN_STATION_ID,OUT_STATION_ID,MILEAGE, CAR_MILEAGE) values +('S1', 'S2', 1000000, 900000); +INSERT INTO TBL_DC_DC_SUBWAY_MILEAGE (IN_STATION_ID,OUT_STATION_ID,MILEAGE, CAR_MILEAGE) values +('S2', 'S1', 1000000, 900000); + +INSERT INTO TBL_DC_DC_SUBWAY_CHANGE_STAT (STATION_ID,STANDARD_ID) values +('T1', 'S1'); +INSERT INTO TBL_DC_DC_SUBWAY_CHANGE_STAT (STATION_ID,STANDARD_ID) values +('T2', 'S2'); + +INSERT INTO TBL_DC_BC_TRAVEL_NOTICE(SEQ_NO,TRAVEL_NO,TRANS_TYPE,IN_TRANS_TIME,OUT_TRANS_TIME,USER_ID,IN_STATION_ID,OUT_STATION_ID,MILEAGE,FIRST_CHANNELS,SECOND_CHANNELS,USER_TOKENS,STLM_DATE,STATUS,REMARK,ORDER_COMPLETE_TIME,NEXT_SEND_TIME,SEND_COUNT,SEND_STATUS,CREATE_USER,CREATE_TIME,LST_UPD_USER,LST_UPD_TIME,TXN_LOCK,TXN_TIME, CAR_MILEAGE, CARBON_FOOTPRINT, CALC_FACTOR_VERSION, TRAVEL_HASH, BC_CHANNEL) values +('test1', '23465432456765432345678','BUS','20230423100000',NULL,'00000222223',NULL,NULL,NULL,'icago','icago','usdfnoe3409u54323','20230423','INIT',NULL,'20230423120000','20230423123000',0,'INIT','market','20230423235959','market','20230423235959','N',NULL, NULL, NULL, NULL, NULL, NULL); + +INSERT INTO TBL_DC_BC_TRAVEL_NOTICE(SEQ_NO,TRAVEL_NO,TRANS_TYPE,IN_TRANS_TIME,OUT_TRANS_TIME,USER_ID,IN_STATION_ID,OUT_STATION_ID,MILEAGE,FIRST_CHANNELS,SECOND_CHANNELS,USER_TOKENS,STLM_DATE,STATUS,REMARK,ORDER_COMPLETE_TIME,NEXT_SEND_TIME,SEND_COUNT,SEND_STATUS,CREATE_USER,CREATE_TIME,LST_UPD_USER,LST_UPD_TIME,TXN_LOCK,TXN_TIME, CAR_MILEAGE, CARBON_FOOTPRINT, CALC_FACTOR_VERSION, TRAVEL_HASH, BC_CHANNEL) values +('test2', '23465432456765432345679','SUBWAY','20230423100000',20230423120000,'00000222223','S1','T2',NULL,'icago','icago','usdfnoe3409u54323','20230423','INIT',NULL,'20230423120000', '20230423123000',0,'INIT','market','20230423235959','market','20230423235959','N',NULL, NULL, NULL, NULL, NULL, NULL); + +INSERT INTO TBL_DC_BC_TRAVEL_NOTICE(SEQ_NO,TRAVEL_NO,TRANS_TYPE,IN_TRANS_TIME,OUT_TRANS_TIME,USER_ID,IN_STATION_ID,OUT_STATION_ID,MILEAGE,FIRST_CHANNELS,SECOND_CHANNELS,USER_TOKENS,STLM_DATE,STATUS,REMARK,ORDER_COMPLETE_TIME,NEXT_SEND_TIME,SEND_COUNT,SEND_STATUS,CREATE_USER,CREATE_TIME,LST_UPD_USER,LST_UPD_TIME,TXN_LOCK,TXN_TIME, CAR_MILEAGE, CARBON_FOOTPRINT, CALC_FACTOR_VERSION, TRAVEL_HASH, BC_CHANNEL) values +('test3', '23465432456765432345680','BUS','20220423100000',NULL,'00000222223',NULL,NULL,NULL,'icago','icago','usdfnoe3409u54323','20230423','INIT',NULL,'20230423120000','20230423123000',0,'INIT','market','20230423235959','market','20230423235959','N',NULL, NULL, NULL, NULL, NULL, NULL); + +INSERT INTO TBL_DC_BC_TRAVEL_NOTICE(SEQ_NO,TRAVEL_NO,TRANS_TYPE,IN_TRANS_TIME,OUT_TRANS_TIME,USER_ID,IN_STATION_ID,OUT_STATION_ID,MILEAGE,FIRST_CHANNELS,SECOND_CHANNELS,USER_TOKENS,STLM_DATE,STATUS,REMARK,ORDER_COMPLETE_TIME,NEXT_SEND_TIME,SEND_COUNT,SEND_STATUS,CREATE_USER,CREATE_TIME,LST_UPD_USER,LST_UPD_TIME,TXN_LOCK,TXN_TIME, CAR_MILEAGE, CARBON_FOOTPRINT, CALC_FACTOR_VERSION, TRAVEL_HASH, BC_CHANNEL) values +('test4', '23465432456765432345681','SUBWAY','20240423100000',20230423120000,'00000222223','S1','T2',NULL,'icago','icago','usdfnoe3409u54323','20230423','INIT',NULL,'20230423120000', '20230423123000',0,'INIT','market','20230423235959','market','20230423235959','N',NULL, NULL, NULL, NULL, NULL, NULL); + +INSERT INTO TBL_DC_BC_TRAVEL_NOTICE(SEQ_NO,TRAVEL_NO,TRANS_TYPE,IN_TRANS_TIME,OUT_TRANS_TIME,USER_ID,IN_STATION_ID,OUT_STATION_ID,MILEAGE,FIRST_CHANNELS,SECOND_CHANNELS,USER_TOKENS,STLM_DATE,STATUS,REMARK,ORDER_COMPLETE_TIME,NEXT_SEND_TIME,SEND_COUNT,SEND_STATUS,CREATE_USER,CREATE_TIME,LST_UPD_USER,LST_UPD_TIME,TXN_LOCK,TXN_TIME, CAR_MILEAGE, CARBON_FOOTPRINT, CALC_FACTOR_VERSION, TRAVEL_HASH, BC_CHANNEL) values +('test5', '23465432456765432345682','BUS','20230423100000',NULL,'00000222223',NULL,NULL,NULL,'icago','icago','usdfnoe3409u54323','20230423','INIT',NULL,'20230423120000','20230423123000',0,'INIT','market','20230423235959','market','20230423235959','N',NULL, NULL, NULL, NULL, NULL, NULL); + +INSERT INTO TBL_DC_BC_TRAVEL_NOTICE(SEQ_NO,TRAVEL_NO,TRANS_TYPE,IN_TRANS_TIME,OUT_TRANS_TIME,USER_ID,IN_STATION_ID,OUT_STATION_ID,MILEAGE,FIRST_CHANNELS,SECOND_CHANNELS,USER_TOKENS,STLM_DATE,STATUS,REMARK,ORDER_COMPLETE_TIME,NEXT_SEND_TIME,SEND_COUNT,SEND_STATUS,CREATE_USER,CREATE_TIME,LST_UPD_USER,LST_UPD_TIME,TXN_LOCK,TXN_TIME, CAR_MILEAGE, CARBON_FOOTPRINT, CALC_FACTOR_VERSION, TRAVEL_HASH, BC_CHANNEL) values +('test6', '23465432456765432345683','SUBWAY','20230423100000',20230423120000,'00000222223','S1','T2',NULL,'icago','icago','usdfnoe3409u54323','20230423','INIT',NULL,'20230423120000', '20230423123000',0,'INIT','market','20230423235959','market','20230423235959','N',NULL, NULL, NULL, NULL, NULL, NULL); + +INSERT INTO TBL_DC_BC_TRAVEL_NOTICE(SEQ_NO,TRAVEL_NO,TRANS_TYPE,IN_TRANS_TIME,OUT_TRANS_TIME,USER_ID,IN_STATION_ID,OUT_STATION_ID,MILEAGE,FIRST_CHANNELS,SECOND_CHANNELS,USER_TOKENS,STLM_DATE,STATUS,REMARK,ORDER_COMPLETE_TIME,NEXT_SEND_TIME,SEND_COUNT,SEND_STATUS,CREATE_USER,CREATE_TIME,LST_UPD_USER,LST_UPD_TIME,TXN_LOCK,TXN_TIME, CAR_MILEAGE, CARBON_FOOTPRINT, CALC_FACTOR_VERSION, TRAVEL_HASH, BC_CHANNEL) values +('test7', '23465432456765432345684','BUS','20230423100000',NULL,'00000222223',NULL,NULL,NULL,'icago','icago','usdfnoe3409u54323','20230423','INIT',NULL,'20230423120000','20230423123000',0,'INIT','market','20230423235959','market','20230423235959','N',NULL, NULL, NULL, NULL, NULL, NULL); + +INSERT INTO TBL_DC_BC_TRAVEL_NOTICE(SEQ_NO,TRAVEL_NO,TRANS_TYPE,IN_TRANS_TIME,OUT_TRANS_TIME,USER_ID,IN_STATION_ID,OUT_STATION_ID,MILEAGE,FIRST_CHANNELS,SECOND_CHANNELS,USER_TOKENS,STLM_DATE,STATUS,REMARK,ORDER_COMPLETE_TIME,NEXT_SEND_TIME,SEND_COUNT,SEND_STATUS,CREATE_USER,CREATE_TIME,LST_UPD_USER,LST_UPD_TIME,TXN_LOCK,TXN_TIME, CAR_MILEAGE, CARBON_FOOTPRINT, CALC_FACTOR_VERSION, TRAVEL_HASH, BC_CHANNEL) values +('test8', '23465432456765432345685','SUBWAY','20230423100000',20230423120000,'00000222223','S1','T2',NULL,'icago','icago','usdfnoe3409u54323','20230423','INIT',NULL,'20230423120000', '20230423123000',0,'INIT','market','20230423235959','market','20230423235959','N',NULL, NULL, NULL, NULL, NULL, NULL); + +INSERT INTO TBL_DC_BC_TRAVEL_NOTICE(SEQ_NO,TRAVEL_NO,TRANS_TYPE,IN_TRANS_TIME,OUT_TRANS_TIME,USER_ID,IN_STATION_ID,OUT_STATION_ID,MILEAGE,FIRST_CHANNELS,SECOND_CHANNELS,USER_TOKENS,STLM_DATE,STATUS,REMARK,ORDER_COMPLETE_TIME,NEXT_SEND_TIME,SEND_COUNT,SEND_STATUS,CREATE_USER,CREATE_TIME,LST_UPD_USER,LST_UPD_TIME,TXN_LOCK,TXN_TIME, CAR_MILEAGE, CARBON_FOOTPRINT, CALC_FACTOR_VERSION, TRAVEL_HASH, BC_CHANNEL) values +('test9', '23465432456765432345686','BUS','20230423100000',NULL,'00000222223',NULL,NULL,NULL,'icago','icago','usdfnoe3409u54323','20230423','INIT',NULL,'20230423120000','20230423123000',0,'SUCCESS','market','20230423235959','market','20230423235959','N',NULL, NULL, NULL, NULL, NULL, NULL); + +INSERT INTO TBL_DC_NOTICE_ERROR(SEQ_NO,NOTICE_SEQ_NO,NOTICE_TYPE,MSG_CONTENT,REASON,STATUS,NEXT_SEND_TIME,SEND_COUNT,SEND_STATUS,CREATE_USER,CREATE_TIME,LST_UPD_USER,LST_UPD_TIME) values +('errortest1','test2', 'BC_TRAVEL_NOTICE', '1,77,00000222223,,,ALIPAY,2023-06-18 00:00:00','', 'INIT','20230423123000',0,'INIT','market','20230423235959','market','20230423235959'); + +INSERT INTO TBL_DC_NOTICE_ERROR(SEQ_NO,NOTICE_SEQ_NO,NOTICE_TYPE,MSG_CONTENT,REASON,STATUS,NEXT_SEND_TIME,SEND_COUNT,SEND_STATUS,CREATE_USER,CREATE_TIME,LST_UPD_USER,LST_UPD_TIME) values +('errortest2','test21', 'BC_TRAVEL_NOTICE', '1,77,00000222223,,,ALIPAY,2023-06-18 00:00:00','', 'INIT','20230423123000',0,'SUCCESS','market','20230423235959','market','20230423235959'); + +INSERT INTO TBL_DC_CALC_FACTOR(VERSION, AVAERAGE_MILEAGE,BUS_FACTOR, NORMAL_FACTOR, SUBWAY_FACTOR, START_TIME, END_TIME) values +('1.0', 6400, 64, 130, 33, '20230101000000', '20230719000000'); +INSERT INTO TBL_DC_CALC_FACTOR(VERSION, AVAERAGE_MILEAGE,BUS_FACTOR, NORMAL_FACTOR, SUBWAY_FACTOR, START_TIME, END_TIME) values +('2.0', 6400, 64, 130, 33, '20230719000000', '20991231235959'); \ No newline at end of file diff --git a/carbon-dataprocess/carbon-dataprocess-service/src/test/resources/schema.sql b/carbon-dataprocess/carbon-dataprocess-service/src/test/resources/schema.sql new file mode 100644 index 00000000..dac408a7 --- /dev/null +++ b/carbon-dataprocess/carbon-dataprocess-service/src/test/resources/schema.sql @@ -0,0 +1,380 @@ +SET MODE Oracle; +/*==============================================================*/ +/* Table: TBL_DC_ASYN_CTRL */ +/*==============================================================*/ +create table TBL_DC_ASYN_CTRL +( + APP_ID VARCHAR2(32 CHAR) not null, + CYCLE_STAT NUMBER(1), + CURR_DATE_TIME CHAR(14), + UPDATETIME VARCHAR2(14), + constraint PK_TBL_DC_ASYN_CTRL primary key (APP_ID) +); + +comment on column TBL_DC_ASYN_CTRL.CYCLE_STAT is +'‘0’—停止 +‘1’—轮循 +'; + +comment on column TBL_DC_ASYN_CTRL.CURR_DATE_TIME is +'YYYYMMDDHHMISS'; + + + +/*==============================================================*/ +/* Table: TBL_DC_NFC_TRAVEL_NOTICE */ +/*==============================================================*/ +create table TBL_DC_NFC_TRAVEL_NOTICE +( + SEQ_NO VARCHAR2(64 CHAR) not null, + TRAVEL_NO VARCHAR2(64 CHAR), + TRANS_TYPE VARCHAR2(32 CHAR), + IN_TRANS_TIME CHAR(14), + OUT_TRANS_TIME CHAR(14), + CARD_NO VARCHAR2(32 CHAR), + USER_ID VARCHAR2(32 CHAR), + IN_STATION_ID VARCHAR2(32 CHAR), + OUT_STATION_ID VARCHAR2(32 CHAR), + MILEAGE NUMBER(10), + FIRST_CHANNELS VARCHAR2(512 CHAR), + SECOND_CHANNELS VARCHAR2(512 CHAR), + USER_TOKENS VARCHAR2(512 CHAR), + STLM_DATE CHAR(8), + STATUS VARCHAR2(32 CHAR), + REMARK VARCHAR(255 CHAR), + ORDER_COMPLETE_TIME CHAR(14), + NEXT_SEND_TIME CHAR(14), + SEND_COUNT NUMBER(10), + SEND_STATUS VARCHAR2(32 CHAR), + CREATE_USER VARCHAR2(32 CHAR) not null, + CREATE_TIME CHAR(14 CHAR) not null, + LST_UPD_USER VARCHAR2(32 CHAR) not null, + LST_UPD_TIME CHAR(14) not null, + TXN_LOCK CHAR(1), + TXN_TIME CHAR(14), + constraint PK_TBL_DC_NFC_TRAVEL_NOTICE primary key (SEQ_NO) +); + +comment on column TBL_DC_NFC_TRAVEL_NOTICE.TRAVEL_NO is +'卡号 + 上车时间 + 交易类型'; + +comment on column TBL_DC_NFC_TRAVEL_NOTICE.TRANS_TYPE is +'BUS:公交 +SUBWAY:地铁'; + +comment on column TBL_DC_NFC_TRAVEL_NOTICE.IN_TRANS_TIME is +'YYYYMMDDHHMISS'; + +comment on column TBL_DC_NFC_TRAVEL_NOTICE.OUT_TRANS_TIME is +'YYYYMMDDHHMISS'; + +comment on column TBL_DC_NFC_TRAVEL_NOTICE.CARD_NO is +'交通卡号'; + +comment on column TBL_DC_NFC_TRAVEL_NOTICE.MILEAGE is +'1234m填1234'; + +comment on column TBL_DC_NFC_TRAVEL_NOTICE.FIRST_CHANNELS is +'逗号分隔'; + +comment on column TBL_DC_NFC_TRAVEL_NOTICE.SECOND_CHANNELS is +'逗号分隔'; + +comment on column TBL_DC_NFC_TRAVEL_NOTICE.USER_TOKENS is +'逗号分隔'; + +comment on column TBL_DC_NFC_TRAVEL_NOTICE.STATUS is +'INIT:初始化 +PROCESSING:处理中 +WAIT_FOR_SEND:待发送 +SUCCESS:成功 +FAILED:失败'; + +comment on column TBL_DC_NFC_TRAVEL_NOTICE.SEND_STATUS is +'INIT:初始化 +PROCESSING:处理中 +SUCCESS:成功 +FAILED:失败'; + +/*==============================================================*/ +/* Index: IDX_DC_NTN_TRAVEL */ +/*==============================================================*/ +create unique index UIDX_DC_NTN_TRAVEL on TBL_DC_NFC_TRAVEL_NOTICE ( + TRAVEL_NO ASC +); + +/*==============================================================*/ +/* Index: IDX_DC_NTN_ACCT */ +/*==============================================================*/ +create index IDX_DC_NTN_ACCT on TBL_DC_NFC_TRAVEL_NOTICE ( + STLM_DATE ASC, + STATUS ASC +); + +/*==============================================================*/ +/* Index: IDX_DC_NTN_NEXT */ +/*==============================================================*/ +create index IDX_DC_NTN_NEXT on TBL_DC_NFC_TRAVEL_NOTICE ( + NEXT_SEND_TIME ASC, + STATUS ASC, + SEND_STATUS ASC +); + + + +/*==============================================================*/ +/* Table: TBL_DC_NOTICE_ERROR */ +/*==============================================================*/ +create table TBL_DC_NOTICE_ERROR +( + SEQ_NO VARCHAR2(64 CHAR) not null, + NOTICE_SEQ_NO VARCHAR2(64 CHAR), + MSG_CONTENT CLOB, + NOTICE_TYPE VARCHAR2(32 CHAR), + REASON VARCHAR2(255 CHAR), + STATUS VARCHAR2(32 CHAR), + NEXT_SEND_TIME CHAR(14), + SEND_COUNT NUMBER(10), + SEND_STATUS VARCHAR2(32 CHAR), + CREATE_USER VARCHAR2(32 CHAR) not null, + CREATE_TIME CHAR(14 CHAR) not null, + LST_UPD_USER VARCHAR2(32 CHAR) not null, + LST_UPD_TIME CHAR(14) not null, + constraint PK_TBL_DC_NOTICE_ERROR primary key (SEQ_NO) +); + +comment on column TBL_DC_NOTICE_ERROR.NOTICE_TYPE is +'NFC_TRAVEL_NOTICE:NFC行程推送'; + +comment on column TBL_DC_NOTICE_ERROR.STATUS is +'INIT:初始化 +PROCESSING:处理中 +WAIT_FOR_SEND:待发送 +SUCCESS:成功 +FAILED:失败'; + +comment on column TBL_DC_NOTICE_ERROR.SEND_STATUS is +'INIT:初始化 +PROCESSING:处理中 +SUCCESS:成功 +FAILED:失败'; + +/*==============================================================*/ +/* Index: IDX_DC_NE_NEXT */ +/*==============================================================*/ +create index IDX_DC_NE_NEXT on TBL_DC_NOTICE_ERROR ( + NEXT_SEND_TIME ASC, + STATUS ASC, + SEND_STATUS ASC +); + + +/*==============================================================*/ +/* Table: TBL_DC_SUBWAY_CHANGE_STATION */ +/*==============================================================*/ +create table TBL_DC_SUBWAY_CHANGE_STATION +( + STATION_ID VARCHAR2(32 CHAR) not null, + STANDARD_ID VARCHAR2(32 CHAR) not null, + constraint PK_TBL_DC_SUBWAY_CHANGE_STATIO primary key (STATION_ID, STANDARD_ID) +); + +/*==============================================================*/ +/* Index: IDX_DC_SCS_STATION */ +/*==============================================================*/ +create index IDX_DC_SCS_STATION on TBL_DC_SUBWAY_CHANGE_STATION ( + STATION_ID ASC +); + +/*==============================================================*/ +/* Table: TBL_DC_SUBWAY_MILEAGE */ +/*==============================================================*/ +create table TBL_DC_SUBWAY_MILEAGE +( + IN_STATION_ID VARCHAR2(32 CHAR) not null, + OUT_STATION_ID VARCHAR2(32 CHAR) not null, + IN_STATION_NAME VARCHAR2(255 CHAR), + OUT_STATION_NAME VARCHAR2(255 CHAR), + MILEAGE NUMBER(10), + constraint PK_TBL_DC_SUBWAY_MILEAGE primary key (IN_STATION_ID, OUT_STATION_ID) +); + +/*==============================================================*/ +/* Table: TBL_DC_BC_TRAVEL_NOTICE */ +/*==============================================================*/ +create table TBL_DC_BC_TRAVEL_NOTICE +( + SEQ_NO VARCHAR2(64 CHAR) not null, + TXN_LOCK CHAR(1), + TXN_TIME CHAR(14), + TRAVEL_NO VARCHAR2(32 CHAR), + TRANS_TYPE VARCHAR2(32 CHAR), + BC_CHANNEL VARCHAR2(32 CHAR), + IN_TRANS_TIME CHAR(14), + OUT_TRANS_TIME CHAR(14), + USER_ID VARCHAR2(32 CHAR), + IN_STATION_ID VARCHAR2(32 CHAR), + OUT_STATION_ID VARCHAR2(32 CHAR), + MILEAGE NUMBER(10), + CAR_MILEAGE NUMBER(10), + CARBON_FOOTPRINT VARCHAR2(32 CHAR), + CALC_FACTOR_VERSION VARCHAR2(32 CHAR), + FIRST_CHANNELS VARCHAR2(512 CHAR), + SECOND_CHANNELS VARCHAR2(512 CHAR), + USER_TOKENS VARCHAR2(512 CHAR), + STLM_DATE CHAR(8), + TRAVEL_HASH VARCHAR2(64 CHAR), + STATUS VARCHAR2(32 CHAR), + REMARK VARCHAR(255 CHAR), + ORDER_COMPLETE_TIME CHAR(14), + NEXT_SEND_TIME CHAR(14), + SEND_COUNT NUMBER(10), + SEND_STATUS VARCHAR2(32 CHAR), + CREATE_USER VARCHAR2(32 CHAR) not null, + CREATE_TIME CHAR(14 CHAR) not null, + LST_UPD_USER VARCHAR2(32 CHAR) not null, + LST_UPD_TIME CHAR(14) not null, + constraint PK_TBL_DC_BC_TRAVEL_NOTICE primary key (SEQ_NO) +); + +comment on column TBL_DC_BC_TRAVEL_NOTICE.TRAVEL_NO is +'卡号 + 上车时间 + 交易类型'; + +comment on column TBL_DC_BC_TRAVEL_NOTICE.TRANS_TYPE is +'BUS:公交 +SUBWAY:地铁'; + +comment on column TBL_DC_BC_TRAVEL_NOTICE.IN_TRANS_TIME is +'YYYYMMDDHHMISS'; + +comment on column TBL_DC_BC_TRAVEL_NOTICE.OUT_TRANS_TIME is +'YYYYMMDDHHMISS'; + +comment on column TBL_DC_BC_TRAVEL_NOTICE.MILEAGE is +'1234m填1234'; + +comment on column TBL_DC_BC_TRAVEL_NOTICE.FIRST_CHANNELS is +'逗号分隔'; + +comment on column TBL_DC_BC_TRAVEL_NOTICE.SECOND_CHANNELS is +'逗号分隔'; + +comment on column TBL_DC_BC_TRAVEL_NOTICE.USER_TOKENS is +'逗号分隔'; + +comment on column TBL_DC_BC_TRAVEL_NOTICE.STATUS is +'INIT:初始化 +PROCESSING:处理中 +WAIT_FOR_SEND:待发送 +SUCCESS:成功 +FAILED:失败'; + +comment on column TBL_DC_BC_TRAVEL_NOTICE.SEND_STATUS is +'INIT:初始化 +PROCESSING:处理中 +SUCCESS:成功 +FAILED:失败'; + +/*==============================================================*/ +/* Index: IDX_DC_BTN_TRAVEL */ +/*==============================================================*/ +create unique index UIDX_DC_BTN_TRAVEL on TBL_DC_BC_TRAVEL_NOTICE ( + TRAVEL_NO ASC +); + +/*==============================================================*/ +/* Index: IDX_DC_BTN_ACCT */ +/*==============================================================*/ +create index IDX_DC_BTN_ACCT on TBL_DC_BC_TRAVEL_NOTICE ( + STLM_DATE ASC, + STATUS ASC +); + +/*==============================================================*/ +/* Index: IDX_DC_BTN_NEXT */ +/*==============================================================*/ +create index IDX_DC_BTN_NEXT on TBL_DC_BC_TRAVEL_NOTICE ( + NEXT_SEND_TIME ASC, + STATUS ASC, + SEND_STATUS ASC +); + +/*==============================================================*/ +/* Table: TBL_DC_CALC_FACTOR */ +/*==============================================================*/ +create table TBL_DC_CALC_FACTOR +( + VERSION VARCHAR2(32 CHAR) not null, + AVAERAGE_MILEAGE NUMBER(10) not null, + NORMAL_FACTOR NUMBER(10) not null, + BUS_FACTOR NUMBER(10) not null, + SUBWAY_FACTOR NUMBER(10) not null, + START_TIME CHAR(14) not null, + END_TIME CHAR(14) not null, + constraint PK_TBL_DC_CALC_FACTOR primary key (VERSION) +); + +comment on column TBL_DC_CALC_FACTOR.AVAERAGE_MILEAGE is +'存的是M,计算时转换为KM'; + +comment on column TBL_DC_CALC_FACTOR.NORMAL_FACTOR is +'存的是gCO2/PKM,计算时直接使用'; + +comment on column TBL_DC_CALC_FACTOR.BUS_FACTOR is +'存的是gCO2/PKM,计算时直接使用'; + +comment on column TBL_DC_CALC_FACTOR.SUBWAY_FACTOR is +'存的是gCO2/PKM,计算时直接使用'; + +/*==============================================================*/ +/* Table: TBL_DC_DC_SUBWAY_CHANGE_STAT */ +/*==============================================================*/ +create table TBL_DC_DC_SUBWAY_CHANGE_STAT +( + STATION_ID VARCHAR2(32 CHAR) not null, + STANDARD_ID VARCHAR2(32 CHAR) not null, + constraint PK_TBL_DC_DC_SUBWAY_CHANGE_STA primary key (STATION_ID, STANDARD_ID) +); + +/*==============================================================*/ +/* Index: IDX_DC_SCS_STATION2 */ +/*==============================================================*/ +create index IDX_DC_DC_SCS_STATION on TBL_DC_DC_SUBWAY_CHANGE_STAT ( + STATION_ID ASC +); + +/*==============================================================*/ +/* Table: TBL_DC_DC_SUBWAY_MILEAGE */ +/*==============================================================*/ +create table TBL_DC_DC_SUBWAY_MILEAGE +( + IN_STATION_ID VARCHAR2(32 CHAR) not null, + OUT_STATION_ID VARCHAR2(32 CHAR) not null, + IN_STATION_NAME VARCHAR2(200 CHAR), + OUT_STATION_NAME VARCHAR2(200 CHAR), + MILEAGE NUMBER(10) not null, + CAR_MILEAGE NUMBER(10) not null, + constraint PK_TBL_DC_DC_SUBWAY_MILEAGE primary key (IN_STATION_ID, OUT_STATION_ID) +); + + +create sequence SEQ_DC_NFC_TRAVEL +increment by 1 +start with 1000 + maxvalue 999999999999 + minvalue 1 +cycle; + +create sequence SEQ_DC_BC_TRAVEL +increment by 1 +start with 1000 + maxvalue 999999999999 + minvalue 1 +cycle; + +create sequence SEQ_DC_ERROR_LOG +increment by 1 +start with 1000 + maxvalue 999999999999 + minvalue 1 +cycle; diff --git a/carbon-dataprocess/pom.xml b/carbon-dataprocess/pom.xml new file mode 100644 index 00000000..e0186edc --- /dev/null +++ b/carbon-dataprocess/pom.xml @@ -0,0 +1,109 @@ + + 4.0.0 + + com.jiuyv.sptcc + carbon-dataprocess + 0.0.1-SNAPSHOT + pom + + carbon-dataprocess + http://maven.apache.org + + carbon-dataprocess-service + carbon-dataprocess-api + + + + UTF-8 + 1.8 + -Xdoclint:none + 1.2.11 + 2021.0.2 + 2.6.7 + 8 + 8 + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring.cloud.version} + pom + import + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + + + + + nexus-releases + Internal Releases + http://172.16.12.11:8082/repository/maven-releases/ + + + nexus-snapshots + Internal Snapshots + http://172.16.12.11:8082/repository/maven-snapshots/ + + + + + jiuyv + jiuyv + http://172.16.12.11:8082/repository/maven-public/ + + true + always + + + + aliyun-releases + Internal Releases + http://maven.aliyun.com/nexus/content/groups/public + + + spring-milestone-releases + Internal Releases + https://repo.spring.io/milestone + + + + + + aliyun-releases + Internal Releases + http://maven.aliyun.com/nexus/content/groups/public + + + jiuyu + jiuyu Plugin Repository + http://172.16.12.11:8082/repository/maven-public/ + + + + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + none + + + + + diff --git a/sptcc_agile_etl/src/agile.batch/src/trunk/agile-bacth/agile-batch-service/src/main/java/com/jiuyv/sptcc/agile/batch/dao/TblDockerClientInfoMapper.java b/sptcc_agile_etl/src/agile.batch/src/trunk/agile-bacth/agile-batch-service/src/main/java/com/jiuyv/sptcc/agile/batch/dao/TblDockerClientInfoMapper.java new file mode 100644 index 00000000..e60a07d3 --- /dev/null +++ b/sptcc_agile_etl/src/agile.batch/src/trunk/agile-bacth/agile-batch-service/src/main/java/com/jiuyv/sptcc/agile/batch/dao/TblDockerClientInfoMapper.java @@ -0,0 +1,21 @@ +package com.jiuyv.sptcc.agile.batch.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; + +import com.jiuyv.sptcc.agile.batch.entity.TblDockerClientInfo; + + +/** + * 服务器清单 + * @author zhouliang + * @date 2023-06-14 + */ +@Mapper +public interface TblDockerClientInfoMapper{ + + + /** 查询集合*/ + List selectItemList(TblDockerClientInfo paramMap); +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/agile.batch/src/trunk/agile-bacth/agile-batch-service/src/main/java/com/jiuyv/sptcc/agile/batch/entity/TblDockerClientInfo.java b/sptcc_agile_etl/src/agile.batch/src/trunk/agile-bacth/agile-batch-service/src/main/java/com/jiuyv/sptcc/agile/batch/entity/TblDockerClientInfo.java new file mode 100644 index 00000000..e7acf2be --- /dev/null +++ b/sptcc_agile_etl/src/agile.batch/src/trunk/agile-bacth/agile-batch-service/src/main/java/com/jiuyv/sptcc/agile/batch/entity/TblDockerClientInfo.java @@ -0,0 +1,123 @@ +package com.jiuyv.sptcc.agile.batch.entity; + +/** + * 服务器清单 + * @author zhouliang + * @date 2023-06-14 + */ +public class TblDockerClientInfo implements java.io.Serializable { + + private static final long serialVersionUID = 1L; + + /** 服务器主键id */ + private Long dockerServerId; + + /** 服务器名称 */ + private String dockerServerName; + + /** 服务器ip */ + private String dockerServerIp; + + /** 服务器port */ + private String dockerServerPort; + + /** 服务器账户 */ + private String dockerServerUsername; + + /** 服务器密码 */ + private String dockerServerPassword; + + /** 数据状态 */ + private String dataStatus; + + /** + * Get服务器主键id + */ + public Long getDockerServerId(){ + return dockerServerId; + } + /** + * Set服务器主键id + */ + public void setDockerServerId(Long dockerServerId){ + this.dockerServerId = dockerServerId; + } + + /** + * Get服务器名称 + */ + public String getDockerServerName(){ + return dockerServerName; + } + /** + * Set服务器名称 + */ + public void setDockerServerName(String dockerServerName){ + this.dockerServerName = dockerServerName; + } + + /** + * Get服务器ip + */ + public String getDockerServerIp(){ + return dockerServerIp; + } + /** + * Set服务器ip + */ + public void setDockerServerIp(String dockerServerIp){ + this.dockerServerIp = dockerServerIp; + } + + /** + * Get服务器port + */ + public String getDockerServerPort(){ + return dockerServerPort; + } + /** + * Set服务器port + */ + public void setDockerServerPort(String dockerServerPort){ + this.dockerServerPort = dockerServerPort; + } + + /** + * Get服务器账户 + */ + public String getDockerServerUsername(){ + return dockerServerUsername; + } + /** + * Set服务器账户 + */ + public void setDockerServerUsername(String dockerServerUsername){ + this.dockerServerUsername = dockerServerUsername; + } + + /** + * Get服务器密码 + */ + public String getDockerServerPassword(){ + return dockerServerPassword; + } + /** + * Set服务器密码 + */ + public void setDockerServerPassword(String dockerServerPassword){ + this.dockerServerPassword = dockerServerPassword; + } + + /** + * Get数据状态 + */ + public String getDataStatus(){ + return dataStatus; + } + /** + * Set数据状态 + */ + public void setDataStatus(String dataStatus){ + this.dataStatus = dataStatus; + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/agile.batch/src/trunk/agile-bacth/agile-batch-service/src/main/resources/mappers/TblDockerClientInfoMapper.xml b/sptcc_agile_etl/src/agile.batch/src/trunk/agile-bacth/agile-batch-service/src/main/resources/mappers/TblDockerClientInfoMapper.xml new file mode 100644 index 00000000..37cfa492 --- /dev/null +++ b/sptcc_agile_etl/src/agile.batch/src/trunk/agile-bacth/agile-batch-service/src/main/resources/mappers/TblDockerClientInfoMapper.xml @@ -0,0 +1,19 @@ + + + + + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/pom.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/pom.xml new file mode 100644 index 00000000..2583f89d --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/pom.xml @@ -0,0 +1,78 @@ + + + + agile-portal + com.jiuyv.sptcc.agile + 0.2.8 + + 4.0.0 + + agile-portal-api + + + 8 + 8 + + + + + org.springframework + spring-web + + + + javax.servlet + javax.servlet-api + + + + + com.fasterxml.jackson.core + jackson-databind + + + + + com.jiuyv.sptcc.agile + agile-common + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.mockito + mockito-inline + test + + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.10 + + + default-prepare-agent + + prepare-agent + + + + default-report + prepare-package + + report + + + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/ContentFeignApi.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/ContentFeignApi.java new file mode 100644 index 00000000..c127e99b --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/ContentFeignApi.java @@ -0,0 +1,28 @@ +package com.jiuyv.sptccc.agile.api; + +import com.jiuyv.sptccc.agile.common.constant.FeignApiConstant; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.PortalContentDTO; +import com.jiuyv.sptccc.agile.dto.ReqPageDTO; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +public interface ContentFeignApi { + String API_PATH_PREFIX = FeignApiConstant.BASE_PREFIX + "/content"; + + @GetMapping("/contentList") + R> getContentList(@RequestParam("showType") String showType); + + @PostMapping("/information") + TableDataPage getInformationList(@RequestBody ReqPageDTO pageDTO); + + @GetMapping("/contentInfo/{contentId}") + R contentInfo(@PathVariable("contentId") Long contentId); + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/DockerApplyFeignApi.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/DockerApplyFeignApi.java new file mode 100644 index 00000000..76efd235 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/DockerApplyFeignApi.java @@ -0,0 +1,21 @@ +package com.jiuyv.sptccc.agile.api; + +import com.jiuyv.sptccc.agile.common.constant.FeignApiConstant; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.DockerApplyReviewDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerApplyPageDTO; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +public interface DockerApplyFeignApi { + String API_PATH_PREFIX = FeignApiConstant.BASE_PREFIX + "/dockerApply"; + + @PostMapping("/list") + TableDataPage getList(@RequestBody ReqDockerApplyPageDTO reqDTO); + + @GetMapping("/detail/{applyId}") + R detail(@PathVariable("applyId") Long reviewId); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/DockerDownloadApplyFeignApi.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/DockerDownloadApplyFeignApi.java new file mode 100644 index 00000000..02f8e04e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/DockerDownloadApplyFeignApi.java @@ -0,0 +1,16 @@ +package com.jiuyv.sptccc.agile.api; + +import com.jiuyv.sptccc.agile.common.constant.FeignApiConstant; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.DockerDownloadApplyDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerDownApplyPageDTO; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +public interface DockerDownloadApplyFeignApi { + String API_PATH_PREFIX = FeignApiConstant.BASE_PREFIX + "/downloadApply"; + + @PostMapping("/list") + TableDataPage getList(@RequestBody ReqDockerDownApplyPageDTO reqDTO); + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/DockerWithUserFeignApi.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/DockerWithUserFeignApi.java new file mode 100644 index 00000000..6da7e792 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/DockerWithUserFeignApi.java @@ -0,0 +1,40 @@ +package com.jiuyv.sptccc.agile.api; + +import com.jiuyv.sptccc.agile.common.constant.FeignApiConstant; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.DockerFileDTO; +import com.jiuyv.sptccc.agile.dto.DockerWithUserDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerDownApplyDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerWithUserDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerWithUserPageDTO; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +public interface DockerWithUserFeignApi { + String API_PATH_PREFIX = FeignApiConstant.BASE_PREFIX + "/dockerWithUser"; + + @PostMapping("/list") + TableDataPage getList(@RequestBody ReqDockerWithUserPageDTO reqDTO); + + @GetMapping("/info/{applyId}") + R getInfo(@PathVariable("applyId") Long applyId); + + @PutMapping("/fileBind") + R fileBind(@RequestBody ReqDockerWithUserDTO reqDTO); + + @PutMapping("/restart") + R restart(@RequestBody ReqDockerWithUserDTO reqDTO); + + @GetMapping("/fileList/{applyId}") + R> fileList(@PathVariable("applyId") Long applyId); + + @PutMapping("/applyDown") + R applyDown(@RequestBody ReqDockerDownApplyDTO reqDockerDownApplyDTO); + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/FileFeignApi.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/FileFeignApi.java new file mode 100644 index 00000000..1133c57e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/FileFeignApi.java @@ -0,0 +1,30 @@ +package com.jiuyv.sptccc.agile.api; + +import com.jiuyv.sptccc.agile.common.constant.FeignApiConstant; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.ReqFileDTO; +import com.jiuyv.sptccc.agile.dto.UploadFileDTO; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.multipart.MultipartFile; + +public interface FileFeignApi { + String API_PATH_PREFIX = FeignApiConstant.BASE_PREFIX + "/file"; + + @PostMapping(value = "/uploadFiles", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + R uploadFiles(@RequestPart("file") MultipartFile file, + @RequestParam("fileType") String fileType, + @RequestParam("remarks") String remarks); + + @PostMapping("/list") + TableDataPage getList(@RequestBody ReqFileDTO pageDTO); + + @DeleteMapping("delete/{fileId}") + R delete(@PathVariable("fileId") Long fileId); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/PortalLogFeignApi.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/PortalLogFeignApi.java new file mode 100644 index 00000000..fcf1bed4 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/PortalLogFeignApi.java @@ -0,0 +1,15 @@ +package com.jiuyv.sptccc.agile.api; + +import com.jiuyv.sptccc.agile.common.constant.FeignApiConstant; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.dto.ReqLogDTO; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +public interface PortalLogFeignApi { + String API_PATH_PREFIX = FeignApiConstant.BASE_PREFIX + "/logRecord"; + + @PostMapping("/recordLoginInfo") + R recordLoginInfo(@RequestBody ReqLogDTO logDTO); + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/PortalMessageApi.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/PortalMessageApi.java new file mode 100644 index 00000000..85a0ed20 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/PortalMessageApi.java @@ -0,0 +1,28 @@ +package com.jiuyv.sptccc.agile.api; + +import com.jiuyv.sptccc.agile.common.constant.FeignApiConstant; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.PortalMessageDTO; +import com.jiuyv.sptccc.agile.dto.ReqPageDTO; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * 门户消息调用api + * + * @author ren_chao + */ +public interface PortalMessageApi { + String API_PATH_PREFIX = FeignApiConstant.BASE_PREFIX + "/message"; + + @PostMapping("/page") + TableDataPage getMessageList(@RequestBody ReqPageDTO pageDTO); + + @PostMapping("/detail") + R detail(@RequestParam("msgId") Long msgId); + + @PostMapping("/markRead") + R markRead(@RequestBody(required = false) Long[] msgIds); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/PortalUserFeignApi.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/PortalUserFeignApi.java new file mode 100644 index 00000000..e456f464 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/api/PortalUserFeignApi.java @@ -0,0 +1,27 @@ +package com.jiuyv.sptccc.agile.api; + +import com.jiuyv.sptccc.agile.common.constant.FeignApiConstant; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.dto.PortalUserDTO; +import com.jiuyv.sptccc.agile.dto.ResUserPasswordDTO; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +public interface PortalUserFeignApi { + String API_PATH_PREFIX = FeignApiConstant.BASE_PREFIX + "/portalUser"; + + @GetMapping("/selectUserByUserName") + R selectUserByUserName(@RequestParam("username") String username); + + /** + * 重置用户登陆状态等信息 + */ + @PutMapping("/resetError") + R resetUserError(@RequestBody PortalUserDTO req); + + @PostMapping("/resetUserPwd") + R resetUserPwd(@RequestBody ResUserPasswordDTO passwordDTO); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/annotation/Anonymous.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/annotation/Anonymous.java new file mode 100644 index 00000000..b43f858b --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/annotation/Anonymous.java @@ -0,0 +1,18 @@ +package com.jiuyv.sptccc.agile.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 匿名访问不鉴权注解 + * + * @author admin + */ +@Target({ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Anonymous { +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/annotation/Log.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/annotation/Log.java new file mode 100644 index 00000000..8df1ef6e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/annotation/Log.java @@ -0,0 +1,45 @@ +package com.jiuyv.sptccc.agile.common.annotation; + +import com.jiuyv.sptccc.agile.common.enums.BusinessType; +import com.jiuyv.sptccc.agile.common.enums.OperatorType; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 自定义操作日志记录注解 + * + * @author admin + */ +@Target({ElementType.PARAMETER, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Log { + /** + * 模块 + */ + String title() default ""; + + /** + * 功能 + */ + BusinessType businessType() default BusinessType.OTHER; + + /** + * 操作人类别 + */ + OperatorType operatorType() default OperatorType.MANAGE; + + /** + * 是否保存请求的参数 + */ + boolean isSaveRequestData() default true; + + /** + * 是否保存响应的参数 + */ + boolean isSaveResponseData() default true; +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/annotation/LogIgnore.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/annotation/LogIgnore.java new file mode 100644 index 00000000..3d5e94cc --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/annotation/LogIgnore.java @@ -0,0 +1,19 @@ +package com.jiuyv.sptccc.agile.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + + +/** + * 方法不需要输出日志时使用 + * + * @author zhouliang + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface LogIgnore { +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/annotation/LogSimpleResult.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/annotation/LogSimpleResult.java new file mode 100644 index 00000000..dc64b7a5 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/annotation/LogSimpleResult.java @@ -0,0 +1,19 @@ +package com.jiuyv.sptccc.agile.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 返回内容太多时,不需要关注具体内容 + * 只需要知道返回情况时使用 + * + * @author zhouliang + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface LogSimpleResult { +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/annotation/NoRepeatSubmit.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/annotation/NoRepeatSubmit.java new file mode 100644 index 00000000..011ce293 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/annotation/NoRepeatSubmit.java @@ -0,0 +1,21 @@ +package com.jiuyv.sptccc.agile.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 忽略连续提交限制 + * + * @author admin + * + */ +@Inherited +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface NoRepeatSubmit { +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/constant/CacheNames.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/constant/CacheNames.java new file mode 100644 index 00000000..fb27d368 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/constant/CacheNames.java @@ -0,0 +1,47 @@ +package com.jiuyv.sptccc.agile.common.constant; + +/** + * 缓存的实例名称 + * + */ +public final class CacheNames { + private CacheNames() { + throw new IllegalStateException("Utility class"); + } + + /** + * 5s + */ + public static final String CACHE_5S = "cache_5s"; + + /** + * 30s + */ + public static final String CACHE_30S = "cache_30s"; + + /** + * 1分钟 验证码 + */ + public static final String CACHE_1MIN = "cache_1min"; + + /** + * 5分钟 + */ + public static final String CACHE_5MIN = "cache_5min"; + + /** + * 30分钟 + */ + public static final String CACHE_30MIN = "cache_30min"; + + /** + * 1天 + */ + public static final String CACHE_1DAY = "cache_1day"; + + /** + * 30天 字典 + */ + public static final String CACHE_30DAY = "cache_30day"; + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/constant/FeignApiConstant.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/constant/FeignApiConstant.java new file mode 100644 index 00000000..adc2c74d --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/constant/FeignApiConstant.java @@ -0,0 +1,13 @@ +package com.jiuyv.sptccc.agile.common.constant; + +public final class FeignApiConstant { + + public static final String USER_ID = "userId"; + public static final String USER_NAME = "userName"; + + public static final String SYS_TYPE = "portal"; + + public static final String EXC_MSG_KEY = "message"; + + public static final String BASE_PREFIX = "/public/portal-service"; +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/constant/FrontConstant.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/constant/FrontConstant.java new file mode 100644 index 00000000..65a03912 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/constant/FrontConstant.java @@ -0,0 +1,51 @@ +package com.jiuyv.sptccc.agile.common.constant; + +/** + * 通用常量信息 + * + */ +public class FrontConstant { + + + /** + * 基本权限 + */ + public static final String AUTHORITY_BASE = "base"; + + /** + * 全部权限 + */ + public static final String AUTHORITY_ALL = "all"; + + /** + * 通用成功标识 + */ + public static final String SUCCESS = "0"; + + /** + * 通用失败标识 + */ + public static final String FAIL = "1"; + + /** + * 变量名:登录用户信息 + */ + public static final String LOGIN_USER_INFO = "loginUserInfo"; + + /** + * 变量名:找回密码用户信息 + */ + public static final String RE_PASSWORD_USER_INFO = "rePasswordUserInfo"; + + + /** + * 短信模板:登录验证码 + */ + public static final String LOGIN_VERIFY_CODE_TEMPLATE = "portal_login_phone"; + + /** + * 短信模板:修改密码验证码 + */ + public static final String RE_PASSWORD_VERIFY_CODE_TEMPLATE = "portal_change_pwd_phone"; + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/constant/ServiceConstant.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/constant/ServiceConstant.java new file mode 100644 index 00000000..98091b6e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/constant/ServiceConstant.java @@ -0,0 +1,37 @@ +package com.jiuyv.sptccc.agile.common.constant; + +/** + * 通用常量信息 + * + * @author admin + */ +public class ServiceConstant { + + /** + * 门户文件上传 - 文件来源 + */ + public static final String FILE_SOURCE_TYPE = "user"; + + /** + * 门户文件上传 - 系统类型 + */ + public static final String SYS_TYPE = "portal"; + + /** + * 门户实验室文件 【数据来源】用户自己上传 + */ + public static final String PORTAL = "2"; + + /** + * 主机映射容器内,下载文件路径 + */ + public static final String DOCKER_LIB_PATH_MAPPING_DOWNLOAD = "notebooks/download"; + + //变量名:不要version字段 + public final static String NO_VERSION_FLAG = "noVersionFlag"; + + /** + * 一个固定的密钥,用于配置文件内容加密/解密 + */ + public static final String SM4_SECERT_KEY = "a14751855ccb428d982c33dfa3535a57"; +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/BusinessStatus.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/BusinessStatus.java new file mode 100644 index 00000000..3fb803a3 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/BusinessStatus.java @@ -0,0 +1,18 @@ +package com.jiuyv.sptccc.agile.common.enums; + +/** + * 操作状态 + * + * @author admin + */ +public enum BusinessStatus { + /** + * 成功 + */ + SUCCESS, + + /** + * 失败 + */ + FAIL, +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/BusinessType.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/BusinessType.java new file mode 100644 index 00000000..6e9d0531 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/BusinessType.java @@ -0,0 +1,58 @@ +package com.jiuyv.sptccc.agile.common.enums; + +/** + * 业务操作类型 + * + * @author admin + */ +public enum BusinessType { + /** + * 其它 + */ + OTHER, + + /** + * 新增 + */ + INSERT, + + /** + * 修改 + */ + UPDATE, + + /** + * 删除 + */ + DELETE, + + /** + * 授权 + */ + GRANT, + + /** + * 导出 + */ + EXPORT, + + /** + * 导入 + */ + IMPORT, + + /** + * 强退 + */ + FORCE, + + /** + * 生成代码 + */ + GENCODE, + + /** + * 清空数据 + */ + CLEAN, +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/ContentShowType.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/ContentShowType.java new file mode 100644 index 00000000..d2a3b6b8 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/ContentShowType.java @@ -0,0 +1,24 @@ +package com.jiuyv.sptccc.agile.common.enums; + +public enum ContentShowType { + BANNER("banner", "1"), + INFORMATION("资讯", "2"), + SCENES("应用场景", "3"), + DATA_PRODUCT("数据产品", "4"); + + private final String tag; + private final String value; + + ContentShowType(String name, String value) { + this.tag = name; + this.value = value; + } + + public String getTag() { + return tag; + } + + public String getValue() { + return value; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/DataStatusEnum.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/DataStatusEnum.java new file mode 100644 index 00000000..79d06541 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/DataStatusEnum.java @@ -0,0 +1,19 @@ +package com.jiuyv.sptccc.agile.common.enums; + +public enum DataStatusEnum { + NORMAL("00", "正常"), + DELETED("99", "删除"); + private final String code; + private final String msg; + + DataStatusEnum(String code, String msg) { + this.code = code; + this.msg = msg; + } + public String getCode() { + return code; + } + public String getMsg() { + return msg; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/DockerFileReviewStatus.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/DockerFileReviewStatus.java new file mode 100644 index 00000000..3c2c9e7d --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/DockerFileReviewStatus.java @@ -0,0 +1,26 @@ +package com.jiuyv.sptccc.agile.common.enums; + +/** + * Docker文件下载申请状态 + * @author ren_chao + */ +public enum DockerFileReviewStatus { + DEFAULT("00", "未提交"), + PENDING("01", "待审核"), + PASS("02", "通过"), + REJECT("03", "驳回"); + + private final String code; + private final String msg; + + DockerFileReviewStatus(String code, String msg) { + this.code = code; + this.msg = msg; + } + public String getCode() { + return code; + } + public String getMsg() { + return msg; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/FileTypeEnum.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/FileTypeEnum.java new file mode 100644 index 00000000..019e1eae --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/FileTypeEnum.java @@ -0,0 +1,22 @@ +package com.jiuyv.sptccc.agile.common.enums; + +public enum FileTypeEnum { + NORMAL("normal", "常规文件"), + FLINK("flink", "flink组件"), + PYTHON("python", "python组件"), + DATA("data", "数据文件"); + + private final String code; + private final String msg; + + FileTypeEnum(String code, String msg) { + this.code = code; + this.msg = msg; + } + public String getCode() { + return code; + } + public String getMsg() { + return msg; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/LabStatusEnum.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/LabStatusEnum.java new file mode 100644 index 00000000..f7754ea9 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/LabStatusEnum.java @@ -0,0 +1,23 @@ +package com.jiuyv.sptccc.agile.common.enums; + +/** + * 门户实验室业务状态 + */ +public enum LabStatusEnum { + DEFAULT("00", "未加载"), + IN_USE("01", "生效中"), + UNLOADED("07", "已卸载"); + private final String code; + private final String msg; + + LabStatusEnum(String code, String msg) { + this.code = code; + this.msg = msg; + } + public String getCode() { + return code; + } + public String getMsg() { + return msg; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/OperatorType.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/OperatorType.java new file mode 100644 index 00000000..831c9446 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/OperatorType.java @@ -0,0 +1,23 @@ +package com.jiuyv.sptccc.agile.common.enums; + +/** + * 操作人类别 + * + * @author admin + */ +public enum OperatorType { + /** + * 其它 + */ + OTHER, + + /** + * 后台用户 + */ + MANAGE, + + /** + * 手机端用户 + */ + MOBILE +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/UserStatus.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/UserStatus.java new file mode 100644 index 00000000..337b75b5 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/enums/UserStatus.java @@ -0,0 +1,26 @@ +package com.jiuyv.sptccc.agile.common.enums; + +/** + * 用户状态 + * + * @author admin + */ +public enum UserStatus { + OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除"); + + private final String code; + private final String info; + + UserStatus(String code, String info) { + this.code = code; + this.info = info; + } + + public String getCode() { + return code; + } + + public String getInfo() { + return info; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/exception/ServiceException.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/exception/ServiceException.java new file mode 100644 index 00000000..8e664c8b --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/exception/ServiceException.java @@ -0,0 +1,62 @@ +package com.jiuyv.sptccc.agile.common.exception; + +/** + * 业务异常 + * + * @author admin + */ +public final class ServiceException extends RuntimeException { + private static final long serialVersionUID = 1L; + + /** + * 错误码 + */ + private Integer code; + + /** + * 错误提示 + */ + private String message; + + /** + * 错误明细,内部调试错误 + */ + private String detailMessage; + + /** + * 空构造方法,避免反序列化问题 + */ + public ServiceException() { + } + + public ServiceException(String message) { + this.message = message; + } + + public ServiceException(String message, Integer code) { + this.message = message; + this.code = code; + } + + public String getDetailMessage() { + return detailMessage; + } + + public ServiceException setDetailMessage(String detailMessage) { + this.detailMessage = detailMessage; + return this; + } + + public String getMessage() { + return message; + } + + public ServiceException setMessage(String message) { + this.message = message; + return this; + } + + public Integer getCode() { + return code; + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/utils/IpUtils.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/utils/IpUtils.java new file mode 100644 index 00000000..dc564d00 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/utils/IpUtils.java @@ -0,0 +1,227 @@ +package com.jiuyv.sptccc.agile.common.utils; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.client.RestTemplate; + +import javax.servlet.http.HttpServletRequest; + +/** + * 获取IP方法 + * + * @author admin + */ +public class IpUtils { + // IP地址查询 + public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp"; + // 未知地址 + public static final String UNKNOWN = "XX XX"; + private static final Logger LOGGER = LoggerFactory.getLogger(IpUtils.class); + private static RestTemplate restTemplate = new RestTemplate(); + private static ObjectMapper objectMapper = new ObjectMapper(); + + public static String getRealAddressByIP(String ip, boolean isAddressEnabled) { + // 内网不查询 + if (IpUtils.internalIp(ip)) { + return "内网IP"; + } + if (isAddressEnabled) { + String rspStr = restTemplate.getForEntity(IP_URL + "?ip=" + ip + "&json=true", String.class).getBody(); + if (StringUtils.isBlank(rspStr)) { + LOGGER.error("获取地理位置异常 {}", ip); + return UNKNOWN; + } + try { + JsonNode obj = objectMapper.readTree(rspStr); + return obj == null ? UNKNOWN : (obj.get("pro").asText() + " " + obj.get("city").asText()); + } catch (JsonProcessingException e) { + LOGGER.error("获取地理位置异常 {}", ip); + return UNKNOWN; + } + } + return UNKNOWN; + } + + /** + * 获取客户端IP + * + * @param request 请求对象 + * @return IP地址 + */ + public static String getIpAddr(HttpServletRequest request) { + if (request == null) { + return "unknown"; + } + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Forwarded-For"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Real-IP"); + } + + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + + return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip); + } + + /** + * 检查是否为内部IP地址 + * + * @param ip IP地址 + * @return 结果 + */ + public static boolean internalIp(String ip) { + byte[] addr = textToNumericFormatV4(ip); + if (null != addr) { + return internalIp(addr) || "127.0.0.1".equals(ip); + } + return false; + } + + /** + * 检查是否为内部IP地址 + * + * @param addr byte地址 + * @return 结果 + */ + private static boolean internalIp(byte[] addr) { + final byte b0 = addr[0]; + final byte b1 = addr[1]; + // 10.x.x.x/8 + final byte SECTION_1 = 0x0A; + // 172.16.x.x/12 + final byte SECTION_2 = (byte) 0xAC; + final byte SECTION_3 = (byte) 0x10; + final byte SECTION_4 = (byte) 0x1F; + // 192.168.x.x/16 + final byte SECTION_5 = (byte) 0xC0; + final byte SECTION_6 = (byte) 0xA8; + switch (b0) { + case SECTION_1: + return true; + case SECTION_2: + return b1 >= SECTION_3 && b1 <= SECTION_4; + case SECTION_5: + return b1 == SECTION_6; + default: + return false; + } + } + + /** + * 将IPv4地址转换成字节 + * + * @param text IPv4地址 + * @return byte 字节 + */ + public static byte[] textToNumericFormatV4(String text) { + if (StringUtils.isBlank(text)) { + return null; + } + + byte[] bytes = new byte[4]; + String[] elements = text.split("\\.", -1); + try { + long l; + int i; + switch (elements.length) { + case 1: + l = Long.parseLong(elements[0]); + if ((l < 0L) || (l > 4294967295L)) { + return null; + } + bytes[0] = (byte) (int) (l >> 24 & 0xFF); + bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 2: + l = Integer.parseInt(elements[0]); + if ((l < 0L) || (l > 255L)) { + return null; + } + bytes[0] = (byte) (int) (l & 0xFF); + l = Integer.parseInt(elements[1]); + if ((l < 0L) || (l > 16777215L)) { + return null; + } + bytes[1] = (byte) (int) (l >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 3: + for (i = 0; i < 2; ++i) { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) { + return null; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + l = Integer.parseInt(elements[2]); + if ((l < 0L) || (l > 65535L)) { + return null; + } + bytes[2] = (byte) (int) (l >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 4: + for (i = 0; i < 4; ++i) { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) { + return null; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + break; + default: + return null; + } + } catch (NumberFormatException e) { + return null; + } + return bytes; + } + + /** + * 从多级反向代理中获得第一个非unknown IP地址 + * + * @param ip 获得的IP地址 + * @return 第一个非unknown IP地址 + */ + public static String getMultistageReverseProxyIp(String ip) { + // 多级反向代理检测 + if (ip != null && ip.contains(",")) { + final String[] ips = ip.trim().split(","); + for (String subIp : ips) { + if (!isUnknown(subIp)) { + ip = subIp; + break; + } + } + } + return ip; + } + + /** + * 检测给定字符串是否为未知,多用于检测HTTP请求相关 + * + * @param checkString 被检测的字符串 + * @return 是否未知 + */ + public static boolean isUnknown(String checkString) { + return StringUtils.isBlank(checkString) || "unknown".equalsIgnoreCase(checkString); + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/utils/ServletUtils.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/utils/ServletUtils.java new file mode 100644 index 00000000..765a5518 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/utils/ServletUtils.java @@ -0,0 +1,51 @@ +package com.jiuyv.sptccc.agile.common.utils; + +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +/** + * 客户端工具类 + * + * @author admin + */ +public class ServletUtils { + + /** + * 获取request + */ + public static HttpServletRequest getRequest() { + ServletRequestAttributes requestAttributes = getRequestAttributes(); + assert requestAttributes != null; + return requestAttributes.getRequest(); + } + + + /** + * 获取response + */ + public static HttpServletResponse getResponse() { + ServletRequestAttributes requestAttributes = getRequestAttributes(); + assert requestAttributes != null; + return requestAttributes.getResponse(); + } + + public static ServletRequestAttributes getRequestAttributes() { + RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); + return (ServletRequestAttributes) attributes; + } + + + /** + * 获取session + */ + public static HttpSession getSession() { + HttpServletRequest request = getRequest(); + return request.getSession(); + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/utils/StringUtil.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/utils/StringUtil.java new file mode 100644 index 00000000..877d6366 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/common/utils/StringUtil.java @@ -0,0 +1,120 @@ +package com.jiuyv.sptccc.agile.common.utils; + +import org.apache.commons.lang3.StringUtils; + +import java.security.SecureRandom; +import java.util.UUID; + +/** + * 字符串工具类 + * + * @author admin + */ +public class StringUtil { + private static final SecureRandom random = new SecureRandom(); + /** + * 空字符串 + */ + private static final String BLANK_STR = ""; + /** + * 空字符串 + */ + private static final String MINUS_STR = "-"; + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @param end 结束 + * @return 结果 + */ + public static String substring(final String str, int start, int end) { + if (str == null) { + return BLANK_STR; + } + + if (end < 0) { + end = str.length() + end; + } + if (start < 0) { + start = str.length() + start; + } + + if (end > str.length()) { + end = str.length(); + } + + if (start > end) { + return BLANK_STR; + } + + if (start < 0) { + start = 0; + } + if (end < 0) { + end = 0; + } + + return str.substring(start, end); + } + + public static String getFileExtension(String fileName) { + if (StringUtils.isBlank(fileName)) { + return BLANK_STR; + } + String[] split = fileName.split("\\."); + int length = split.length; + if (length < 2) { + return BLANK_STR; + } + return split[length - 1]; + } + + /** + * 没有横杠的UUID + * + */ + public static String getSimpleUUID() { + return UUID.randomUUID().toString().replace(MINUS_STR, BLANK_STR); + } + + /** + * 获取RecToken + * + */ + public static String getRecToken() { + return getSimpleUUID().substring(0, 10); + } + + + /** + * 敏感数据脱敏 + * + */ + public static String strHide(String str) { + if (str == null || str.length() <= 2) { + return str; + } + if (str.length() <= 7) { + return str.substring(0, 2) + "***"; + } + return str.substring(0, 3) + "****" + str.substring(str.length() - 4); + } + + /** + * 指定长度的字符串,比如给手机验证码 + * + */ + public static String randomNumber(int length) { + if (length < 4) { + length = 4; + } + StringBuilder bld = new StringBuilder(); + for (int i = 0; i < length; i++) { + bld.append(random.nextInt(10)); + } + return bld.toString(); + } + +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/domain/TableDataPage.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/domain/TableDataPage.java new file mode 100644 index 00000000..4d5c74b4 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/domain/TableDataPage.java @@ -0,0 +1,57 @@ +package com.jiuyv.sptccc.agile.domain; + +import java.io.Serializable; +import java.util.List; + +/** + * 分页response + * + * @author ren_chao + */ +public class TableDataPage implements Serializable { + private static final long serialVersionUID = 1L; + private Integer total; + private List rows; + private Integer code; + private String msg; + + public TableDataPage() { + } + + public TableDataPage(List list, Integer total) { + this.rows = list; + this.total = total; + } + + public Integer getTotal() { + return this.total; + } + + public void setTotal(Integer total) { + this.total = total; + } + + public List getRows() { + return this.rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMsg() { + return this.msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerApplyReviewDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerApplyReviewDTO.java new file mode 100644 index 00000000..92a88e3e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerApplyReviewDTO.java @@ -0,0 +1,144 @@ +package com.jiuyv.sptccc.agile.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * 注入申请单DTO + * + * @author ren_chao + */ +public class DockerApplyReviewDTO implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 【 申请主键ID】 + */ + private Long reviewId; + + /** + * 【 申请原因】 + */ + private String applyRemark; + + /** + * 【 实验室编号】 + */ + private Long applyId; + + /** + * 【实验室名称】允许用户自定义名称,反之默认生成 + */ + private String labTitle; + + /** + * 【 备注】 + */ + private String remarks; + + /** + * 【 审核状态】 + */ + private String reviewStatus; + + /** + * 【 驳回原因】 + */ + private String reviewDesc; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + private List reviewDtlList; + + public Long getReviewId() { + return reviewId; + } + + public void setReviewId(Long reviewId) { + this.reviewId = reviewId; + } + + public String getApplyRemark() { + return applyRemark; + } + + public void setApplyRemark(String applyRemark) { + this.applyRemark = applyRemark; + } + + public Long getApplyId() { + return applyId; + } + + public void setApplyId(Long applyId) { + this.applyId = applyId; + } + + public String getLabTitle() { + return labTitle; + } + + public void setLabTitle(String labTitle) { + this.labTitle = labTitle; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public String getReviewStatus() { + return reviewStatus; + } + + public void setReviewStatus(String reviewStatus) { + this.reviewStatus = reviewStatus; + } + + public String getReviewDesc() { + return reviewDesc; + } + + public void setReviewDesc(String reviewDesc) { + this.reviewDesc = reviewDesc; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public List getReviewDtlList() { + return reviewDtlList; + } + + public void setReviewDtlList(List reviewDtlList) { + this.reviewDtlList = reviewDtlList; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerApplyReviewDtlDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerApplyReviewDtlDTO.java new file mode 100644 index 00000000..be007624 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerApplyReviewDtlDTO.java @@ -0,0 +1,115 @@ +package com.jiuyv.sptccc.agile.dto; + +import java.io.Serializable; + +/** + * 注入申请单明细DTO + * + * @author ren_chao + */ +public class DockerApplyReviewDtlDTO implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 【申请明细id】 + */ + private Long reviewDtlId; + + /** + * 【 申请单ID】 + */ + private Long reviewId; + + /** + * 组件类型 + */ + private String libType; + + /** + * 【内容说明】 + */ + private String libDesc; + + /** + * 【 文件id】 + */ + private Long fileId; + + /** + * 文件名 + */ + private String fileName; + + /** + * 【 审核状态】 + */ + private String reviewStatus; + + /** + * 【 驳回原因】 + */ + private String reviewDesc; + + public Long getReviewDtlId() { + return reviewDtlId; + } + + public void setReviewDtlId(Long reviewDtlId) { + this.reviewDtlId = reviewDtlId; + } + + public Long getReviewId() { + return reviewId; + } + + public void setReviewId(Long reviewId) { + this.reviewId = reviewId; + } + + public String getLibType() { + return libType; + } + + public void setLibType(String libType) { + this.libType = libType; + } + + public String getLibDesc() { + return libDesc; + } + + public void setLibDesc(String libDesc) { + this.libDesc = libDesc; + } + + public Long getFileId() { + return fileId; + } + + public void setFileId(Long fileId) { + this.fileId = fileId; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getReviewStatus() { + return reviewStatus; + } + + public void setReviewStatus(String reviewStatus) { + this.reviewStatus = reviewStatus; + } + + public String getReviewDesc() { + return reviewDesc; + } + + public void setReviewDesc(String reviewDesc) { + this.reviewDesc = reviewDesc; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerDownloadApplyDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerDownloadApplyDTO.java new file mode 100644 index 00000000..c10d8df7 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerDownloadApplyDTO.java @@ -0,0 +1,179 @@ +package com.jiuyv.sptccc.agile.dto; + +import java.io.Serializable; +import java.util.Date; + +public class DockerDownloadApplyDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 【 申请主键ID】 + */ + private Long downloadApplyId; + + /** + * 【 随机码】 + */ + private String recToken; + + /** + * 【 关联主键ID】 + */ + private Long applyId; + + /** + * 【实验室名称】允许用户自定义名称,反之默认生成 + */ + private String labTitle; + + /** + * 【 申请原因】 + */ + private String applyDesc; + + /** + * 【文件名】 + */ + private String fileName; + + /** + * 【 备注】 + */ + private String remarks; + + /** + * 【 审核状态】 + */ + private String reviewStatus; + + /** + * 【 驳回原因】 + */ + private String reviewDesc; + + /** + * 【 业务状态】 + */ + private String busStatus; + + /** + * 【 数据状态】 + */ + private String dataStatus; + + + /** + * 【 创建时间】 + */ + private Date createTime; + + /** + * 【 更新时间】 + */ + private Date updateTime; + + + public Long getDownloadApplyId() { + return downloadApplyId; + } + + public void setDownloadApplyId(Long downloadApplyId) { + this.downloadApplyId = downloadApplyId; + } + + public String getRecToken() { + return recToken; + } + + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + public Long getApplyId() { + return applyId; + } + + public void setApplyId(Long applyId) { + this.applyId = applyId; + } + + public String getLabTitle() { + return labTitle; + } + + public void setLabTitle(String labTitle) { + this.labTitle = labTitle; + } + + public String getApplyDesc() { + return applyDesc; + } + + public void setApplyDesc(String applyDesc) { + this.applyDesc = applyDesc; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public String getReviewStatus() { + return reviewStatus; + } + + public void setReviewStatus(String reviewStatus) { + this.reviewStatus = reviewStatus; + } + + public String getReviewDesc() { + return reviewDesc; + } + + public void setReviewDesc(String reviewDesc) { + this.reviewDesc = reviewDesc; + } + + public String getBusStatus() { + return busStatus; + } + + public void setBusStatus(String busStatus) { + this.busStatus = busStatus; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerFileDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerFileDTO.java new file mode 100644 index 00000000..7d0ce992 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerFileDTO.java @@ -0,0 +1,27 @@ +package com.jiuyv.sptccc.agile.dto; + +import java.io.Serializable; + +public class DockerFileDTO implements Serializable { + private static final long serialVersionUID = 1L; + + private String fileName; + + private String fileSize; + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFileSize() { + return fileSize; + } + + public void setFileSize(String fileSize) { + this.fileSize = fileSize; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerLibDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerLibDTO.java new file mode 100644 index 00000000..821b9402 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerLibDTO.java @@ -0,0 +1,136 @@ +package com.jiuyv.sptccc.agile.dto; + +import java.io.Serializable; + +public class DockerLibDTO implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 组件id + */ + private Long applyLibId; + + /** + * 随机码 + */ + private String recToken; + + /** + * 组件类型 + */ + private String libType; + + /** + * 【系统类型】 + */ + private String sysType; + + /** + * 业务状态 + */ + private String busStatus; + + /** + * 文件id + */ + private Long fileId; + + /** + * 文件名称 + */ + private String fileName; + + /** + * 【文件大小】 + */ + private String fileSize; + + /** + * 【 数据状态】 + */ + private String dataStatus; + + /** + * 内容说明 + */ + private String libDesc; + + public Long getApplyLibId() { + return applyLibId; + } + + public void setApplyLibId(Long applyLibId) { + this.applyLibId = applyLibId; + } + + public String getRecToken() { + return recToken; + } + + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + public String getLibType() { + return libType; + } + + public void setLibType(String libType) { + this.libType = libType; + } + + public String getSysType() { + return sysType; + } + + public void setSysType(String sysType) { + this.sysType = sysType; + } + + public String getBusStatus() { + return busStatus; + } + + public void setBusStatus(String busStatus) { + this.busStatus = busStatus; + } + + public Long getFileId() { + return fileId; + } + + public void setFileId(Long fileId) { + this.fileId = fileId; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFileSize() { + return fileSize; + } + + public void setFileSize(String fileSize) { + this.fileSize = fileSize; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getLibDesc() { + return libDesc; + } + + public void setLibDesc(String libDesc) { + this.libDesc = libDesc; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerWithUserDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerWithUserDTO.java new file mode 100644 index 00000000..9d27501f --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/DockerWithUserDTO.java @@ -0,0 +1,335 @@ +package com.jiuyv.sptccc.agile.dto; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +public class DockerWithUserDTO implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 【 申请主键ID】 + */ + private Long applyId; + + /** + * 【 版本号】 + */ + private Object versionNum; + + /** + * 【 随机码】 + */ + private String recToken; + + /** + * 【实验室名称】允许用户自定义名称,反之默认生成 + */ + private String labTitle; + + /** + * 【 用户id】 + */ + private String applyUserId; + + /** + * 【 用户】 + */ + private String applyUserName; + + /** + * 【 容器id】 + */ + private String dockerContainerId; + + /** + * 【 备注】 + */ + private String remarks; + + /** + * 【 业务状态】 + */ + private String busStatus; + + /** + * 【 服务类型】 + */ + private String serviceType; + + /** + * 访问地址 + */ + private String loginUrl; + + /** + * 账户 + */ + private String loginUsername; + + /** + * 申请原因[实验室申请信息] + */ + private String applyDesc; + + /** + * 使用镜像[实验室申请信息] + */ + private String dockerImageName; + + /** + * 申请时效[实验室申请信息] + */ + private String usageTime; + + /** + * 时间单位[实验室申请信息] + */ + private String usageTimeUnit; + + /** + * 开始时间[实验室申请信息] + */ + private Date startDate; + + /** + * 结束时间[实验室申请信息] + */ + private Date endDate; + + /** + * 延期次数[实验室申请信息] + */ + private String delayTimes; + + /** + * cpu数量[实验室申请信息] + */ + private String cpuLimits; + + /** + * 内存大小[实验室申请信息] + */ + private String memoryLimits; + + /** + * 磁盘大小[实验室申请信息] + */ + private String discLimits; + + + /** + * 管控台组件 + */ + private List libList; + + /** + * 申请组件 + */ + private List applyLibList; + + /** + * 容器文件 + */ + private List dockerFileList; + + + public Long getApplyId() { + return applyId; + } + + public void setApplyId(Long applyId) { + this.applyId = applyId; + } + + public Object getVersionNum() { + return versionNum; + } + + public void setVersionNum(Object versionNum) { + this.versionNum = versionNum; + } + + public String getRecToken() { + return recToken; + } + + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + public String getLabTitle() { + return labTitle; + } + + public void setLabTitle(String labTitle) { + this.labTitle = labTitle; + } + + public String getApplyUserId() { + return applyUserId; + } + + public void setApplyUserId(String applyUserId) { + this.applyUserId = applyUserId; + } + + public String getApplyUserName() { + return applyUserName; + } + + public void setApplyUserName(String applyUserName) { + this.applyUserName = applyUserName; + } + + public String getDockerContainerId() { + return dockerContainerId; + } + + public void setDockerContainerId(String dockerContainerId) { + this.dockerContainerId = dockerContainerId; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public String getBusStatus() { + return busStatus; + } + + public void setBusStatus(String busStatus) { + this.busStatus = busStatus; + } + + public String getServiceType() { + return serviceType; + } + + public void setServiceType(String serviceType) { + this.serviceType = serviceType; + } + + public String getLoginUrl() { + return loginUrl; + } + + public void setLoginUrl(String loginUrl) { + this.loginUrl = loginUrl; + } + + public String getLoginUsername() { + return loginUsername; + } + + public void setLoginUsername(String loginUsername) { + this.loginUsername = loginUsername; + } + + public String getApplyDesc() { + return applyDesc; + } + + public void setApplyDesc(String applyDesc) { + this.applyDesc = applyDesc; + } + + public String getDockerImageName() { + return dockerImageName; + } + + public void setDockerImageName(String dockerImageName) { + this.dockerImageName = dockerImageName; + } + + public String getUsageTime() { + return usageTime; + } + + public void setUsageTime(String usageTime) { + this.usageTime = usageTime; + } + + public String getUsageTimeUnit() { + return usageTimeUnit; + } + + public void setUsageTimeUnit(String usageTimeUnit) { + this.usageTimeUnit = usageTimeUnit; + } + + public Date getStartDate() { + return startDate; + } + + public void setStartDate(Date startDate) { + this.startDate = startDate; + } + + public Date getEndDate() { + return endDate; + } + + public void setEndDate(Date endDate) { + this.endDate = endDate; + } + + public String getDelayTimes() { + return delayTimes; + } + + public void setDelayTimes(String delayTimes) { + this.delayTimes = delayTimes; + } + + public String getCpuLimits() { + return cpuLimits; + } + + public void setCpuLimits(String cpuLimits) { + this.cpuLimits = cpuLimits; + } + + public String getMemoryLimits() { + return memoryLimits; + } + + public void setMemoryLimits(String memoryLimits) { + this.memoryLimits = memoryLimits; + } + + public String getDiscLimits() { + return discLimits; + } + + public void setDiscLimits(String discLimits) { + this.discLimits = discLimits; + } + + public List getLibList() { + return libList; + } + + public void setLibList(List libList) { + this.libList = libList; + } + + public List getApplyLibList() { + return applyLibList; + } + + public void setApplyLibList(List applyLibList) { + this.applyLibList = applyLibList; + } + + public List getDockerFileList() { + return dockerFileList; + } + + public void setDockerFileList(List dockerFileList) { + this.dockerFileList = dockerFileList; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/PortalContentDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/PortalContentDTO.java new file mode 100644 index 00000000..0a28c54e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/PortalContentDTO.java @@ -0,0 +1,220 @@ +package com.jiuyv.sptccc.agile.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serializable; +import java.util.Date; + +public class PortalContentDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 【用户ID】 */ + private Long contentId; + + /** 【版本号】 */ + private Long versionNum; + + /** 【随机码】 */ + private String recToken; + + /** 【标题】 */ + private String contentTitle; + + /** 【内容】 */ + private String contentText; + + /** 【类型】 */ + private String contentType; + + /** 【展示类型】 */ + private String showType; + + /** 【文件备注】 */ + private String remarks; + + /** 【业务状态】 */ + private String busStatus; + + /** 【数据状态】 */ + private String dataStatus; + + /** 【 创建用户】 */ + private String createByName; + + /** 【更新用户】 */ + private String updateByName; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + private Integer sort; + + + /** + * 首页播报 0展示 + */ + private String showIndex; + + /** + * 副标题 + */ + private String subtitle; + + /** + * 图片地址 + */ + private String imgUrl; + + public void setContentId(Long contentId) + { + this.contentId = contentId; + } + + public Long getContentId() + { + return contentId; + } + public void setVersionNum(Long versionNum) + { + this.versionNum = versionNum; + } + + public Long getVersionNum() + { + return versionNum; + } + public void setRecToken(String recToken) + { + this.recToken = recToken; + } + + public String getRecToken() + { + return recToken; + } + public void setContentTitle(String contentTitle) + { + this.contentTitle = contentTitle; + } + + public String getContentTitle() + { + return contentTitle; + } + public void setContentText(String contentText) + { + this.contentText = contentText; + } + + public String getContentText() + { + return contentText; + } + public void setContentType(String contentType) + { + this.contentType = contentType; + } + + public String getContentType() + { + return contentType; + } + public void setShowType(String showType) + { + this.showType = showType; + } + + public String getShowType() + { + return showType; + } + public void setRemarks(String remarks) + { + this.remarks = remarks; + } + + public String getRemarks() + { + return remarks; + } + public void setBusStatus(String busStatus) + { + this.busStatus = busStatus; + } + + public String getBusStatus() + { + return busStatus; + } + public void setDataStatus(String dataStatus) + { + this.dataStatus = dataStatus; + } + + public String getDataStatus() + { + return dataStatus; + } + public void setCreateByName(String createByName) + { + this.createByName = createByName; + } + + public String getCreateByName() + { + return createByName; + } + public void setUpdateByName(String updateByName) + { + this.updateByName = updateByName; + } + + public String getUpdateByName() + { + return updateByName; + } + + public Integer getSort() { + return sort; + } + + public void setSort(Integer sort) { + this.sort = sort; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getShowIndex() { + return showIndex; + } + + public void setShowIndex(String showIndex) { + this.showIndex = showIndex; + } + + public String getSubtitle() { + return subtitle; + } + + public void setSubtitle(String subtitle) { + this.subtitle = subtitle; + } + + public String getImgUrl() { + return imgUrl; + } + + public void setImgUrl(String imgUrl) { + this.imgUrl = imgUrl; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/PortalMessageDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/PortalMessageDTO.java new file mode 100644 index 00000000..745724b1 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/PortalMessageDTO.java @@ -0,0 +1,95 @@ +package com.jiuyv.sptccc.agile.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serializable; +import java.util.Date; + +/** + * 门户消息DTO + * + * @author ren_chao + */ +public class PortalMessageDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long msgId; + + /** + * 消息标题 + */ + private String msgTitle; + + /** + * 消息内容 + */ + private String msgText; + + /** + * 消息类型 + */ + private String msgType; + + /** + * 消息状态 + */ + private String msgStatus; + + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + public Long getMsgId() { + return msgId; + } + + public void setMsgId(Long msgId) { + this.msgId = msgId; + } + + public String getMsgTitle() { + return msgTitle; + } + + public void setMsgTitle(String msgTitle) { + this.msgTitle = msgTitle; + } + + public String getMsgText() { + return msgText; + } + + public void setMsgText(String msgText) { + this.msgText = msgText; + } + + public String getMsgType() { + return msgType; + } + + public void setMsgType(String msgType) { + this.msgType = msgType; + } + + public String getMsgStatus() { + return msgStatus; + } + + public void setMsgStatus(String msgStatus) { + this.msgStatus = msgStatus; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/PortalUserDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/PortalUserDTO.java new file mode 100644 index 00000000..be117d82 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/PortalUserDTO.java @@ -0,0 +1,472 @@ +package com.jiuyv.sptccc.agile.dto; + +import java.io.Serializable; +import java.util.Date; + +public class PortalUserDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 用户id + */ + private Long userId; + + /** + * 随机码 + */ + private String recToken; + + /** + * 所属机构 + */ + private Long deptId; + + /** + * 用户账号 + */ + private String userName; + + /** + * 用户姓名 + */ + private String nickName; + + /** + * 用户类型 + */ + private String userType; + + /** + * 用户邮箱 + */ + private String email; + + /** + * 手机号码 + */ + private String phonenumber; + + /** + * 用户性别 + */ + private String sex; + + /** + * 头像地址 + */ + private String avatar; + + /** + * 密码 + */ + private String password; + + /** + * 企业名称 + */ + private String enterpriseName; + + /** + * 行业类别 + */ + private String industryCategory; + + /** + * 社会统一信用代码 + */ + private String socialCreditCode; + + /** + * 企业行业 + */ + private String enterpriseIndustry; + + /** + * 企业地址 + */ + private String enterpriseAddress; + + /** + * 帐号状态 + */ + private String status; + + /** + * 删除标志 + */ + private String delFlag; + + /** + * 最后登录ip + */ + private String loginIp; + + /** + * 最后登录时间 + */ + private Date loginDate; + + /** + * 锁定状态 + */ + private String isLocked; + + /** + * 登陆错误次数 + */ + private Integer loginErrorCount; + + /** + * 登陆错误时间 + */ + private Date lastLoginErrorTime; + + /** + * 首次登录标志 + */ + private String firstFlag; + + /** + * 密码过期剩余天数 + */ + private Integer pwdRemainderDate; + + /** + * Get用户id + */ + public Long getUserId() { + return userId; + } + + /** + * Set用户id + */ + public void setUserId(Long userId) { + this.userId = userId; + } + + /** + * Get随机码 + */ + public String getRecToken() { + return recToken; + } + + /** + * Set随机码 + */ + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + /** + * Get所属机构 + */ + public Long getDeptId() { + return deptId; + } + + /** + * Set所属机构 + */ + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + /** + * Get用户账号 + */ + public String getUserName() { + return userName; + } + + /** + * Set用户账号 + */ + public void setUserName(String userName) { + this.userName = userName; + } + + /** + * Get用户姓名 + */ + public String getNickName() { + return nickName; + } + + /** + * Set用户姓名 + */ + public void setNickName(String nickName) { + this.nickName = nickName; + } + + /** + * Get用户类型 + */ + public String getUserType() { + return userType; + } + + /** + * Set用户类型 + */ + public void setUserType(String userType) { + this.userType = userType; + } + + /** + * Get用户邮箱 + */ + public String getEmail() { + return email; + } + + /** + * Set用户邮箱 + */ + public void setEmail(String email) { + this.email = email; + } + + /** + * Get手机号码 + */ + public String getPhonenumber() { + return phonenumber; + } + + /** + * Set手机号码 + */ + public void setPhonenumber(String phonenumber) { + this.phonenumber = phonenumber; + } + + /** + * Get用户性别 + */ + public String getSex() { + return sex; + } + + /** + * Set用户性别 + */ + public void setSex(String sex) { + this.sex = sex; + } + + /** + * Get头像地址 + */ + public String getAvatar() { + return avatar; + } + + /** + * Set头像地址 + */ + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + /** + * Get密码 + */ + public String getPassword() { + return password; + } + + /** + * Set密码 + */ + public void setPassword(String password) { + this.password = password; + } + + /** + * Get企业名称 + */ + public String getEnterpriseName() { + return enterpriseName; + } + + /** + * Set企业名称 + */ + public void setEnterpriseName(String enterpriseName) { + this.enterpriseName = enterpriseName; + } + + /** + * Get行业类别 + */ + public String getIndustryCategory() { + return industryCategory; + } + + /** + * Set行业类别 + */ + public void setIndustryCategory(String industryCategory) { + this.industryCategory = industryCategory; + } + + /** + * Get社会统一信用代码 + */ + public String getSocialCreditCode() { + return socialCreditCode; + } + + /** + * Set社会统一信用代码 + */ + public void setSocialCreditCode(String socialCreditCode) { + this.socialCreditCode = socialCreditCode; + } + + /** + * Get企业行业 + */ + public String getEnterpriseIndustry() { + return enterpriseIndustry; + } + + /** + * Set企业行业 + */ + public void setEnterpriseIndustry(String enterpriseIndustry) { + this.enterpriseIndustry = enterpriseIndustry; + } + + /** + * Get企业地址 + */ + public String getEnterpriseAddress() { + return enterpriseAddress; + } + + /** + * Set企业地址 + */ + public void setEnterpriseAddress(String enterpriseAddress) { + this.enterpriseAddress = enterpriseAddress; + } + + /** + * Get帐号状态 + */ + public String getStatus() { + return status; + } + + /** + * Set帐号状态 + */ + public void setStatus(String status) { + this.status = status; + } + + /** + * Get删除标志 + */ + public String getDelFlag() { + return delFlag; + } + + /** + * Set删除标志 + */ + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + /** + * Get最后登录ip + */ + public String getLoginIp() { + return loginIp; + } + + /** + * Set最后登录ip + */ + public void setLoginIp(String loginIp) { + this.loginIp = loginIp; + } + + /** + * Get最后登录时间 + */ + public Date getLoginDate() { + return loginDate; + } + + /** + * Set最后登录时间 + */ + public void setLoginDate(Date loginDate) { + this.loginDate = loginDate; + } + + /** + * Get锁定状态 + */ + public String getIsLocked() { + return isLocked; + } + + /** + * Set锁定状态 + */ + public void setIsLocked(String isLocked) { + this.isLocked = isLocked; + } + + /** + * Get登陆错误次数 + */ + public Integer getLoginErrorCount() { + return loginErrorCount; + } + + /** + * Set登陆错误次数 + */ + public void setLoginErrorCount(Integer loginErrorCount) { + this.loginErrorCount = loginErrorCount; + } + + /** + * Get登陆错误时间 + */ + public Date getLastLoginErrorTime() { + return lastLoginErrorTime; + } + + /** + * Set登陆错误时间 + */ + public void setLastLoginErrorTime(Date lastLoginErrorTime) { + this.lastLoginErrorTime = lastLoginErrorTime; + } + + public String getFirstFlag() { + return firstFlag; + } + + public void setFirstFlag(String firstFlag) { + this.firstFlag = firstFlag; + } + + public Integer getPwdRemainderDate() { + return pwdRemainderDate; + } + + public void setPwdRemainderDate(Integer pwdRemainderDate) { + this.pwdRemainderDate = pwdRemainderDate; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/PortalUserMsgDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/PortalUserMsgDTO.java new file mode 100644 index 00000000..447813c8 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/PortalUserMsgDTO.java @@ -0,0 +1,220 @@ +package com.jiuyv.sptccc.agile.dto; + +import java.io.Serializable; +import java.util.Date; + +public class PortalUserMsgDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 主键id */ + private Long msgId; + + /** 用户id */ + private Long userId; + + /** 消息标题 */ + private String msgTitle; + + /** 消息内容 */ + private String msgText; + + /** 消息类型 */ + private String msgType; + + /** 消息状态 */ + private String msgStatus; + + /** 数据状态 */ + private String dataStatus; + + /** 创建者 */ + private String createBy; + + /** 创建用户 */ + private String createByName; + + /** 创建时间 */ + private Date createTime; + + /** 更新者 */ + private String updateBy; + + /** 更新用户 */ + private String updateByName; + + /** 更新时间 */ + private Date updateTime; + + + + /** + * Get主键id + */ + public Long getMsgId(){ + return msgId; + } + /** + * Set主键id + */ + public void setMsgId(Long msgId){ + this.msgId = msgId; + } + + /** + * Get用户id + */ + public Long getUserId(){ + return userId; + } + /** + * Set用户id + */ + public void setUserId(Long userId){ + this.userId = userId; + } + + /** + * Get消息标题 + */ + public String getMsgTitle(){ + return msgTitle; + } + /** + * Set消息标题 + */ + public void setMsgTitle(String msgTitle){ + this.msgTitle = msgTitle; + } + + /** + * Get消息内容 + */ + public String getMsgText(){ + return msgText; + } + /** + * Set消息内容 + */ + public void setMsgText(String msgText){ + this.msgText = msgText; + } + + /** + * Get消息类型 + */ + public String getMsgType(){ + return msgType; + } + /** + * Set消息类型 + */ + public void setMsgType(String msgType){ + this.msgType = msgType; + } + + /** + * Get消息状态 + */ + public String getMsgStatus(){ + return msgStatus; + } + /** + * Set消息状态 + */ + public void setMsgStatus(String msgStatus){ + this.msgStatus = msgStatus; + } + + /** + * Get数据状态 + */ + public String getDataStatus(){ + return dataStatus; + } + /** + * Set数据状态 + */ + public void setDataStatus(String dataStatus){ + this.dataStatus = dataStatus; + } + + /** + * Get创建者 + */ + public String getCreateBy(){ + return createBy; + } + /** + * Set创建者 + */ + public void setCreateBy(String createBy){ + this.createBy = createBy; + } + + /** + * Get创建用户 + */ + public String getCreateByName(){ + return createByName; + } + /** + * Set创建用户 + */ + public void setCreateByName(String createByName){ + this.createByName = createByName; + } + + /** + * Get创建时间 + */ + public Date getCreateTime(){ + return createTime; + } + /** + * Set创建时间 + */ + public void setCreateTime(Date createTime){ + this.createTime = createTime; + } + + /** + * Get更新者 + */ + public String getUpdateBy(){ + return updateBy; + } + /** + * Set更新者 + */ + public void setUpdateBy(String updateBy){ + this.updateBy = updateBy; + } + + /** + * Get更新用户 + */ + public String getUpdateByName(){ + return updateByName; + } + /** + * Set更新用户 + */ + public void setUpdateByName(String updateByName){ + this.updateByName = updateByName; + } + + /** + * Get更新时间 + */ + public Date getUpdateTime(){ + return updateTime; + } + /** + * Set更新时间 + */ + public void setUpdateTime(Date updateTime){ + this.updateTime = updateTime; + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqDockerApplyPageDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqDockerApplyPageDTO.java new file mode 100644 index 00000000..c8192f74 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqDockerApplyPageDTO.java @@ -0,0 +1,83 @@ +package com.jiuyv.sptccc.agile.dto; + +public class ReqDockerApplyPageDTO extends ReqPageDTO { + + private static final long serialVersionUID = 1L; + /** + * 【 申请单ID】 + */ + private Long reviewId; + + /** + * 申请主键id + */ + private Long applyId; + + /** + * 申请用户id + */ + private String applyUserId; + + /** + * 实验室名称 + */ + private String labTitle; + + /** + * 服务类型 + */ + private String serviceType; + + /** + * 审核状态 + */ + private String reviewStatus; + + public Long getReviewId() { + return reviewId; + } + + public void setReviewId(Long reviewId) { + this.reviewId = reviewId; + } + + public Long getApplyId() { + return applyId; + } + + public void setApplyId(Long applyId) { + this.applyId = applyId; + } + + public String getApplyUserId() { + return applyUserId; + } + + public void setApplyUserId(String applyUserId) { + this.applyUserId = applyUserId; + } + + public String getLabTitle() { + return labTitle; + } + + public void setLabTitle(String labTitle) { + this.labTitle = labTitle; + } + + public String getServiceType() { + return serviceType; + } + + public void setServiceType(String serviceType) { + this.serviceType = serviceType; + } + + public String getReviewStatus() { + return reviewStatus; + } + + public void setReviewStatus(String reviewStatus) { + this.reviewStatus = reviewStatus; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqDockerDownApplyDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqDockerDownApplyDTO.java new file mode 100644 index 00000000..6b2db83a --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqDockerDownApplyDTO.java @@ -0,0 +1,52 @@ +package com.jiuyv.sptccc.agile.dto; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.io.Serializable; + +/** + * 文件下载申请 请求体 + */ +public class ReqDockerDownApplyDTO implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 实验室ID + */ + @NotNull(message = "实验室ID不能为空") + private Long applyId; + + /** + * 文件名 + */ + private String fileName; + + /** + * 申请说明 + */ + @Size(max = 1000, message = "长度不能超过1000") + private String applyDesc; + + public Long getApplyId() { + return applyId; + } + + public void setApplyId(Long applyId) { + this.applyId = applyId; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getApplyDesc() { + return applyDesc; + } + + public void setApplyDesc(String applyDesc) { + this.applyDesc = applyDesc; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqDockerDownApplyPageDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqDockerDownApplyPageDTO.java new file mode 100644 index 00000000..f956b821 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqDockerDownApplyPageDTO.java @@ -0,0 +1,88 @@ +package com.jiuyv.sptccc.agile.dto; + +/** + * 文件下载申请 请求 + */ +public class ReqDockerDownApplyPageDTO extends ReqPageDTO{ + + private static final long serialVersionUID = 1L; + + /** + * 【 申请主键ID】 + */ + private Long downloadApplyId; + + /** + * 申请用户id + */ + private String applyUserId; + + /** + * 实验室申请id + */ + private Long applyId; + + /** + * 实验室名称 + */ + private String labTitle; + + /** + * 【文件名】 + */ + private String fileName; + + /** + * 审核状态 + */ + private String reviewStatus; + + public Long getDownloadApplyId() { + return downloadApplyId; + } + + public void setDownloadApplyId(Long downloadApplyId) { + this.downloadApplyId = downloadApplyId; + } + + public String getApplyUserId() { + return applyUserId; + } + + public void setApplyUserId(String applyUserId) { + this.applyUserId = applyUserId; + } + + public Long getApplyId() { + return applyId; + } + + public void setApplyId(Long applyId) { + this.applyId = applyId; + } + + public String getLabTitle() { + return labTitle; + } + + public void setLabTitle(String labTitle) { + this.labTitle = labTitle; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getReviewStatus() { + return reviewStatus; + } + + public void setReviewStatus(String reviewStatus) { + this.reviewStatus = reviewStatus; + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqDockerWithUserDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqDockerWithUserDTO.java new file mode 100644 index 00000000..76d6cf72 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqDockerWithUserDTO.java @@ -0,0 +1,63 @@ +package com.jiuyv.sptccc.agile.dto; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.io.Serializable; +import java.util.List; + +public class ReqDockerWithUserDTO implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 【 申请主键ID】 + */ + @NotNull(message = "申请主键ID不能为空") + private Long applyId; + + /** + * 【 随机码】 + */ + private String recToken; + + /** + * 申请原因 + */ + @Size(max = 1000, message = "长度不能超过1000") + private String applyDesc; + + /** + * 文件列表 + */ + private List fileIds; + + public Long getApplyId() { + return applyId; + } + + public void setApplyId(Long applyId) { + this.applyId = applyId; + } + + public String getRecToken() { + return recToken; + } + + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + public String getApplyDesc() { + return applyDesc; + } + + public void setApplyDesc(String applyDesc) { + this.applyDesc = applyDesc; + } + + public List getFileIds() { + return fileIds; + } + + public void setFileIds(List fileIds) { + this.fileIds = fileIds; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqDockerWithUserPageDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqDockerWithUserPageDTO.java new file mode 100644 index 00000000..8cc8d5ef --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqDockerWithUserPageDTO.java @@ -0,0 +1,58 @@ +package com.jiuyv.sptccc.agile.dto; + +public class ReqDockerWithUserPageDTO extends ReqPageDTO { + + private static final long serialVersionUID = 1L; + + /** + * 申请主键id + */ + private Long applyId; + + /** + * 用户 + */ + private String applyUserId; + + /** + * 实验室名称 + */ + private String labTitle; + + /** + * 业务状态 + */ + private String busStatus; + + public Long getApplyId() { + return applyId; + } + + public void setApplyId(Long applyId) { + this.applyId = applyId; + } + + public String getApplyUserId() { + return applyUserId; + } + + public void setApplyUserId(String applyUserId) { + this.applyUserId = applyUserId; + } + + public String getLabTitle() { + return labTitle; + } + + public void setLabTitle(String labTitle) { + this.labTitle = labTitle; + } + + public String getBusStatus() { + return busStatus; + } + + public void setBusStatus(String busStatus) { + this.busStatus = busStatus; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqFileDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqFileDTO.java new file mode 100644 index 00000000..88a4573f --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqFileDTO.java @@ -0,0 +1,44 @@ +package com.jiuyv.sptccc.agile.dto; + +public class ReqFileDTO extends ReqPageDTO { + private static final long serialVersionUID = 1L; + + /** + * 文件名称 + */ + private String fileName; + + /** + * 【文件类型】 + */ + private String fileType; + + /** + * 文件后缀名 + */ + private String fileExtension; + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFileType() { + return fileType; + } + + public void setFileType(String fileType) { + this.fileType = fileType; + } + + public String getFileExtension() { + return fileExtension; + } + + public void setFileExtension(String fileExtension) { + this.fileExtension = fileExtension; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqLogDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqLogDTO.java new file mode 100644 index 00000000..1d388672 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqLogDTO.java @@ -0,0 +1,103 @@ +package com.jiuyv.sptccc.agile.dto; + +import java.io.Serializable; + +/** + * 登录日志DTO + * + * @author ren_chao + */ +public class ReqLogDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 用户账号 + */ + private String userName; + + /** + * 登录状态 0成功 1失败 + */ + private String status; + + /** + * 登录IP地址 + */ + private String ipaddr; + + /** + * 登录地点 + */ + private String loginLocation; + + /** + * 浏览器类型 + */ + private String browser; + + /** + * 操作系统 + */ + private String os; + + /** + * 提示消息 + */ + private String msg; + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getIpaddr() { + return ipaddr; + } + + public void setIpaddr(String ipaddr) { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) { + this.loginLocation = loginLocation; + } + + public String getBrowser() { + return browser; + } + + public void setBrowser(String browser) { + this.browser = browser; + } + + public String getOs() { + return os; + } + + public void setOs(String os) { + this.os = os; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqPageDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqPageDTO.java new file mode 100644 index 00000000..ccda6c54 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ReqPageDTO.java @@ -0,0 +1,70 @@ +package com.jiuyv.sptccc.agile.dto; + +import java.io.Serializable; +import java.util.Objects; + +public class ReqPageDTO implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 页码 + */ + private Integer pageNum = 1; + /** + * 每页大小 + */ + private Integer pageSize = 10; + /** + * 排序字段 + */ + private String orderByColumn; + /** + * 是否升序 + */ + private String isAsc; + + + public Integer getPageNum() { + return pageNum; + } + + public void setPageNum(Integer pageNum) { + this.pageNum = pageNum; + } + + public Integer getPageSize() { + return pageSize; + } + + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + public String getOrderByColumn() { + return orderByColumn; + } + + public void setOrderByColumn(String orderByColumn) { + this.orderByColumn = orderByColumn; + } + + public String getIsAsc() { + return isAsc; + } + + public void setIsAsc(String isAsc) { + this.isAsc = isAsc; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ReqPageDTO that = (ReqPageDTO) o; + return pageNum.equals(that.pageNum) && pageSize.equals(that.pageSize) && Objects.equals(orderByColumn, that.orderByColumn) && Objects.equals(isAsc, that.isAsc); + } + + @Override + public int hashCode() { + return Objects.hash(pageNum, pageSize, orderByColumn, isAsc); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ResUserPasswordDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ResUserPasswordDTO.java new file mode 100644 index 00000000..0f90170a --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/ResUserPasswordDTO.java @@ -0,0 +1,37 @@ +package com.jiuyv.sptccc.agile.dto; + +import java.io.Serializable; + +public class ResUserPasswordDTO implements Serializable { + private static final long serialVersionUID = 1L; + + private Long userId; + + private String password; + + private String oldPassword; + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getOldPassword() { + return oldPassword; + } + + public void setOldPassword(String oldPassword) { + this.oldPassword = oldPassword; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/UploadFileDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/UploadFileDTO.java new file mode 100644 index 00000000..8b0db3c9 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/main/java/com/jiuyv/sptccc/agile/dto/UploadFileDTO.java @@ -0,0 +1,147 @@ +package com.jiuyv.sptccc.agile.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serializable; +import java.util.Date; + +public class UploadFileDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 文件主键id */ + private Long fileId; + + /** 随机码 */ + private String recToken; + + /** uuid */ + private String uuid; + + /** 文件名称 */ + private String fileName; + + /** 文件后缀名 */ + private String fileExtension; + + /** + * 【文件大小】 + */ + private String fileSize; + + /** 文件分类路径 */ + private String fileCategoryPath; + + /** 文件类型 */ + private String fileType; + + /** 文件来源 */ + private String fileSourceType; + + /** 系统类型 */ + private String sysType; + + /** 文件备注 */ + private String remarks; + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + public Long getFileId() { + return fileId; + } + + public void setFileId(Long fileId) { + this.fileId = fileId; + } + + public String getRecToken() { + return recToken; + } + + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFileExtension() { + return fileExtension; + } + + public void setFileExtension(String fileExtension) { + this.fileExtension = fileExtension; + } + + public String getFileSize() { + return fileSize; + } + + public void setFileSize(String fileSize) { + this.fileSize = fileSize; + } + + public String getFileCategoryPath() { + return fileCategoryPath; + } + + public void setFileCategoryPath(String fileCategoryPath) { + this.fileCategoryPath = fileCategoryPath; + } + + public String getFileType() { + return fileType; + } + + public void setFileType(String fileType) { + this.fileType = fileType; + } + + public String getFileSourceType() { + return fileSourceType; + } + + public void setFileSourceType(String fileSourceType) { + this.fileSourceType = fileSourceType; + } + + public String getSysType() { + return sysType; + } + + public void setSysType(String sysType) { + this.sysType = sysType; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/test/java/com/jiuyv/sptccc/agile/common/utils/IpUtilsTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/test/java/com/jiuyv/sptccc/agile/common/utils/IpUtilsTest.java new file mode 100644 index 00000000..6de798a0 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/test/java/com/jiuyv/sptccc/agile/common/utils/IpUtilsTest.java @@ -0,0 +1,108 @@ +package com.jiuyv.sptccc.agile.common.utils; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; + +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Field; + +import static com.jiuyv.sptccc.agile.common.utils.IpUtils.UNKNOWN; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +/** + * IpUtils单元测试 + * + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class IpUtilsTest { + + @Mock + private RestTemplate restTemplate; + + @Mock + private ObjectMapper objectMapper; + + @Mock + private ResponseEntity response; + + @BeforeEach + void setUp() throws ReflectiveOperationException { + + Field restTemplateField = IpUtils.class.getDeclaredField("restTemplate"); + restTemplateField.setAccessible(true); + restTemplateField.set(null, restTemplate); + + Field objectMapperField = IpUtils.class.getDeclaredField("objectMapper"); + objectMapperField.setAccessible(true); + objectMapperField.set(null, objectMapper); + } + + @Test + void getRealAddressByIP() throws JsonProcessingException { + String json = "{}"; + assertEquals("内网IP", IpUtils.getRealAddressByIP("192.168.0.1", true)); + + when(restTemplate.getForEntity(anyString(), eq(String.class))).thenReturn(response); + assertEquals(UNKNOWN, IpUtils.getRealAddressByIP("localhost", true)); + + when(response.getBody()).thenReturn(json); + assertEquals(UNKNOWN, IpUtils.getRealAddressByIP("localhost", true)); + + when(objectMapper.readTree(anyString())).thenThrow(JsonProcessingException.class); + assertEquals(UNKNOWN, IpUtils.getRealAddressByIP("localhost", true)); + + assertEquals("内网IP", IpUtils.getRealAddressByIP("10.0.0.1", false)); + assertEquals("内网IP", IpUtils.getRealAddressByIP("172.16.0.1", false)); + assertEquals(UNKNOWN, IpUtils.getRealAddressByIP("1", false)); + + } + + @Test + void getIpAddr() { + assertEquals("unknown", IpUtils.getIpAddr(null)); + + HttpServletRequest request = mock(HttpServletRequest.class); + assertNull(IpUtils.getIpAddr(request)); + } + + @Test + void textToNumericFormatV4() { + try { + IpUtils.textToNumericFormatV4("127"); + IpUtils.textToNumericFormatV4("127.0"); + IpUtils.textToNumericFormatV4("127.0.0"); + IpUtils.textToNumericFormatV4("127.0.0.1"); + IpUtils.textToNumericFormatV4("127.0.0.1.1"); + + IpUtils.textToNumericFormatV4("-1"); + IpUtils.textToNumericFormatV4("-1.0"); + IpUtils.textToNumericFormatV4("-1.0.0"); + IpUtils.textToNumericFormatV4("-1.0.0.1"); + + IpUtils.textToNumericFormatV4("127.-1"); + IpUtils.textToNumericFormatV4("127.0.-1"); + IpUtils.textToNumericFormatV4(""); + } catch (Exception e) { + fail(); + } + } + + @Test + void getMultistageReverseProxyIp() { + String ip = "127.0.0.1,localhost"; + assertEquals("127.0.0.1", IpUtils.getMultistageReverseProxyIp(ip)); + } + +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/test/java/com/jiuyv/sptccc/agile/common/utils/ServletUtilsTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/test/java/com/jiuyv/sptccc/agile/common/utils/ServletUtilsTest.java new file mode 100644 index 00000000..249214a4 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/test/java/com/jiuyv/sptccc/agile/common/utils/ServletUtilsTest.java @@ -0,0 +1,71 @@ +package com.jiuyv.sptccc.agile.common.utils; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.when; + +/** + * ServletUtils单元测试 + * + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class ServletUtilsTest { + @Mock + private MockedStatic mockStatic; + @Mock + private ServletRequestAttributes attributes; + @Mock + private HttpServletRequest request; + @Mock + private HttpServletResponse response; + @Mock + private HttpSession session; + + @BeforeEach + void setUp() { + mockStatic.when(RequestContextHolder::getRequestAttributes).thenReturn(attributes); + } + + @AfterEach + void tearDown() { + mockStatic.close(); + } + + @Test + void getRequest() { + when(attributes.getRequest()).thenReturn(request); + assertEquals(request, ServletUtils.getRequest()); + } + + @Test + void getResponse() { + when(attributes.getResponse()).thenReturn(response); + assertEquals(response, ServletUtils.getResponse()); + } + + @Test + void getRequestAttributes() { + assertEquals(attributes, ServletUtils.getRequestAttributes()); + } + + @Test + void getSession() { + when(attributes.getRequest()).thenReturn(request); + when(request.getSession()).thenReturn(session); + assertEquals(session, ServletUtils.getSession()); + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/test/java/com/jiuyv/sptccc/agile/common/utils/StringUtilTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/test/java/com/jiuyv/sptccc/agile/common/utils/StringUtilTest.java new file mode 100644 index 00000000..b8af3eb9 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/test/java/com/jiuyv/sptccc/agile/common/utils/StringUtilTest.java @@ -0,0 +1,48 @@ +package com.jiuyv.sptccc.agile.common.utils; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * StringUtil单元测试 + * + * @author ren_chao + */ +class StringUtilTest { + + @Test + void substring() { + String str = "testSubstring"; + assertEquals("", StringUtil.substring(str, -1, -1)); + assertEquals("g", StringUtil.substring(str, -1, 20)); + assertEquals("", StringUtil.substring(str, 1, 0)); + assertEquals("", StringUtil.substring(str, -20, -20)); + assertEquals("", StringUtil.substring(null, 0, 0)); + } + + @Test + void getFileExtension() { + assertEquals("", StringUtil.getFileExtension("")); + assertEquals("", StringUtil.getFileExtension("a")); + assertEquals("txt", StringUtil.getFileExtension("a.txt")); + } + + @Test + void getRecToken() { + assertEquals(10, StringUtil.getRecToken().length()); + } + + @Test + void strHide() { + assertEquals("1", StringUtil.strHide("1")); + assertEquals("13***", StringUtil.strHide("1333333")); + assertEquals("133****3333", StringUtil.strHide("13333333")); + } + + @Test + void randomNumber() { + assertEquals(4, StringUtil.randomNumber(2).length()); + } + +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/test/java/com/jiuyv/sptccc/agile/domain/TblDomainTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/test/java/com/jiuyv/sptccc/agile/domain/TblDomainTest.java new file mode 100644 index 00000000..53c5840f --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/test/java/com/jiuyv/sptccc/agile/domain/TblDomainTest.java @@ -0,0 +1,56 @@ +package com.jiuyv.sptccc.agile.domain; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.platform.commons.util.ReflectionUtils; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; + +/** + * Domain测试类 + * + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class TblDomainTest { + + @Test + void domainTest() { + String packageName = "com.jiuyv.sptccc.agile.domain"; + try { + invoke(packageName); + } catch (Exception e) { + Assertions.fail(); + } + } + + private void invoke(String packageName) throws InstantiationException, IllegalAccessException, InvocationTargetException { + List> classList = ReflectionUtils.findAllClassesInPackage(packageName, aClass -> true, s -> !s.endsWith("Test")); + + for (Class aClass : classList) { + Method[] methods = aClass.getDeclaredMethods(); + Object o = aClass.newInstance(); + for (Method method : methods) { + String name = method.getName(); + if (name.startsWith("get")) { + method.invoke(o); + } else if (name.startsWith("set")) { + Class[] parameterTypes = method.getParameterTypes(); + Object[] objects = Arrays.stream(parameterTypes).map(p -> { + try { + return p.newInstance(); + } catch (ReflectiveOperationException e) { + return null; + } + }).toArray(); + method.invoke(o, objects); + } + } + } + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/test/java/com/jiuyv/sptccc/agile/dto/PortalDTOTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/test/java/com/jiuyv/sptccc/agile/dto/PortalDTOTest.java new file mode 100644 index 00000000..39a1c271 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-api/src/test/java/com/jiuyv/sptccc/agile/dto/PortalDTOTest.java @@ -0,0 +1,57 @@ +package com.jiuyv.sptccc.agile.dto; + + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.platform.commons.util.ReflectionUtils; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; + +/** + * DTO测试类 + * + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class PortalDTOTest { + + @Test + void dtoTest() { + String packageName = "com.jiuyv.sptccc.agile.dto"; + try { + invoke(packageName); + } catch (Exception e) { + Assertions.fail(); + } + } + + private void invoke(String packageName) throws InstantiationException, IllegalAccessException, InvocationTargetException { + List> classList = ReflectionUtils.findAllClassesInPackage(packageName, aClass -> true, s -> !s.endsWith("Test")); + + for (Class aClass : classList) { + Method[] methods = aClass.getDeclaredMethods(); + Object o = aClass.newInstance(); + for (Method method : methods) { + String name = method.getName(); + if (name.startsWith("get")) { + method.invoke(o); + } else if (name.startsWith("set")) { + Class[] parameterTypes = method.getParameterTypes(); + Object[] objects = Arrays.stream(parameterTypes).map(p -> { + try { + return p.newInstance(); + } catch (ReflectiveOperationException e) { + return null; + } + }).toArray(); + method.invoke(o, objects); + } + } + } + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/pom.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/pom.xml new file mode 100644 index 00000000..0460f0c0 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/pom.xml @@ -0,0 +1,252 @@ + + 4.0.0 + + com.jiuyv.sptcc.agile + agile-portal + 0.2.8 + + agile-portal-gateway + + + + com.jiuyv.sptcc.agile + agile-portal-api + + + + com.jiuyv.sptcc.agile + agile-mobile-message-api + + + + com.jiuyv.sptcc.agile + agile-data-api + + + + + eu.bitwalker + UserAgentUtils + + + + + com.github.vladimir-bukhtoyarov + bucket4j-core + 7.6.0 + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.apache.commons + commons-pool2 + + + + com.jcraft + jsch + ${jsch.version} + + + + + commons-io + commons-io + + + + + net.logstash.logback + logstash-logback-encoder + 6.4 + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-security + + + + + org.apache.commons + commons-lang3 + + + + commons-codec + commons-codec + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + org.springframework.boot + spring-boot-starter-cache + + + + com.github.ben-manes.caffeine + caffeine + + + + com.anji-plus + captcha + + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-registry-prometheus + + + + org.springframework.cloud + spring-cloud-starter-sleuth + + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + com.squareup.okhttp3 + okhttp + + + io.github.openfeign + feign-okhttp + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.mockito + mockito-inline + test + + + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.10 + + + default-prepare-agent + + prepare-agent + + + + default-report + prepare-package + + report + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + org.springframework.boot + spring-boot-maven-plugin + 2.1.1.RELEASE + + + + repackage + + + + + + + com.github.shalousun + smart-doc-maven-plugin + 2.6.9 + + + ./src/main/resources/smart-doc.json + + com.jiuyv.sptcc.portal:agile-portal-gateway + + + + + + + + org.apache.maven.plugins + maven-clean-plugin + + + + src/main/resources/view + + + + + + org.apache.maven.plugins + maven-resources-plugin + 3.1.0 + + + copy static + generate-resources + + copy-resources + + + src/main/resources/view + true + + + + ${project.parent.basedir}/agile-portal-ui/dist + + + + + + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/PortalGatewayApplication.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/PortalGatewayApplication.java new file mode 100644 index 00000000..fa73fba3 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/PortalGatewayApplication.java @@ -0,0 +1,37 @@ +package com.jiuyv.sptccc.agile; + + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * 启动程序 + * + * @author admin + */ +@EnableFeignClients +@EnableCaching +@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) +public class PortalGatewayApplication { + private static final Logger LOGGER = LoggerFactory.getLogger(PortalGatewayApplication.class); + + public static void main(String[] args) { + SpringApplication.run(PortalGatewayApplication.class, args); + LOGGER.info("(♥◠‿◠)ノ゙ 模块启动成功゙ \n" + + " ___ ___ ___ \n" + + " |\\ \\ |\\ \\ / /| \n" + + " \\ \\ \\ \\ \\ \\/ / / \n" + + " __ \\ \\ \\ \\ \\ / / \n" + + " |\\ \\\\_\\ \\ \\/ / / \n" + + " \\ \\________\\ __/ / / \n" + + " \\|________| |\\___/ / \n" + + " \\|___|/ \n" + ); + } +} + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/DockerApplyFeign.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/DockerApplyFeign.java new file mode 100644 index 00000000..26fb4d44 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/DockerApplyFeign.java @@ -0,0 +1,10 @@ +package com.jiuyv.sptccc.agile.feign.portal; + +import com.jiuyv.sptccc.agile.api.DockerApplyFeignApi; +import org.springframework.cloud.openfeign.FeignClient; + +import static com.jiuyv.sptccc.agile.api.DockerApplyFeignApi.API_PATH_PREFIX; + +@FeignClient(name = "dockerApplyFeign", url = "${remoteUrl.gateway}", path = API_PATH_PREFIX) +public interface DockerApplyFeign extends DockerApplyFeignApi { +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/DockerDownloadApplyFeign.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/DockerDownloadApplyFeign.java new file mode 100644 index 00000000..07692e33 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/DockerDownloadApplyFeign.java @@ -0,0 +1,16 @@ +package com.jiuyv.sptccc.agile.feign.portal; + +import com.jiuyv.sptccc.agile.api.DockerDownloadApplyFeignApi; +import feign.Response; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +import static com.jiuyv.sptccc.agile.api.DockerDownloadApplyFeignApi.API_PATH_PREFIX; + +@FeignClient(name = "dockerDownloadApplyFeign", url = "${remoteUrl.gateway}", path = API_PATH_PREFIX) +public interface DockerDownloadApplyFeign extends DockerDownloadApplyFeignApi { + + @GetMapping("/download/{downloadApplyId}/{isQuery}") + Response download(@PathVariable("downloadApplyId") Long downloadApplyId, @PathVariable("isQuery") Boolean isQuery); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/DockerWithUserFeign.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/DockerWithUserFeign.java new file mode 100644 index 00000000..6be222e1 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/DockerWithUserFeign.java @@ -0,0 +1,10 @@ +package com.jiuyv.sptccc.agile.feign.portal; + +import com.jiuyv.sptccc.agile.api.DockerWithUserFeignApi; +import org.springframework.cloud.openfeign.FeignClient; + +import static com.jiuyv.sptccc.agile.api.DockerWithUserFeignApi.API_PATH_PREFIX; + +@FeignClient(name = "dockerWithUserFeign", url = "${remoteUrl.gateway}", path = API_PATH_PREFIX) +public interface DockerWithUserFeign extends DockerWithUserFeignApi { +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/ExternalInterfaceFeign.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/ExternalInterfaceFeign.java new file mode 100644 index 00000000..4b739dfa --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/ExternalInterfaceFeign.java @@ -0,0 +1,9 @@ +package com.jiuyv.sptccc.agile.feign.portal; + + +import com.jiuyv.sptccc.agile.feign.portal.transit.ExternalInterface; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "externalInterfaceFeign", url = "${remoteUrl.gateway}") +public interface ExternalInterfaceFeign extends ExternalInterface { +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/PortalContentFeign.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/PortalContentFeign.java new file mode 100644 index 00000000..6738a082 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/PortalContentFeign.java @@ -0,0 +1,22 @@ +package com.jiuyv.sptccc.agile.feign.portal; + +import com.jiuyv.sptccc.agile.api.ContentFeignApi; +import feign.Response; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +import static com.jiuyv.sptccc.agile.api.ContentFeignApi.API_PATH_PREFIX; + +@FeignClient(name = "PortalContentFeign", url = "${remoteUrl.gateway}", path = API_PATH_PREFIX) +public interface PortalContentFeign extends ContentFeignApi { + + @GetMapping("/sdkDownload") + Response sdkDownload(); + + @GetMapping("/wordDownload") + Response wordDownload(); + + @GetMapping("/images/{imageName}") + Response getImage(@PathVariable("imageName") String imageName); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/PortalLogFeign.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/PortalLogFeign.java new file mode 100644 index 00000000..d8248adc --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/PortalLogFeign.java @@ -0,0 +1,10 @@ +package com.jiuyv.sptccc.agile.feign.portal; + +import com.jiuyv.sptccc.agile.api.PortalLogFeignApi; +import org.springframework.cloud.openfeign.FeignClient; + +import static com.jiuyv.sptccc.agile.api.PortalLogFeignApi.API_PATH_PREFIX; + +@FeignClient(name = "portalLogFeign", url = "${remoteUrl.gateway}", path = API_PATH_PREFIX) +public interface PortalLogFeign extends PortalLogFeignApi { +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/PortalMessageFeign.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/PortalMessageFeign.java new file mode 100644 index 00000000..ecc08a0b --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/PortalMessageFeign.java @@ -0,0 +1,15 @@ +package com.jiuyv.sptccc.agile.feign.portal; + +import com.jiuyv.sptccc.agile.api.PortalMessageApi; +import org.springframework.cloud.openfeign.FeignClient; + +import static com.jiuyv.sptccc.agile.api.PortalMessageApi.API_PATH_PREFIX; + +/** + * 用户消息 + * + * @author ren_chao + */ +@FeignClient(name = "portalMessageFeign", url = "${remoteUrl.gateway}", path = API_PATH_PREFIX) +public interface PortalMessageFeign extends PortalMessageApi { +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/PortalUserFeign.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/PortalUserFeign.java new file mode 100644 index 00000000..23520b3c --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/PortalUserFeign.java @@ -0,0 +1,10 @@ +package com.jiuyv.sptccc.agile.feign.portal; + +import com.jiuyv.sptccc.agile.api.PortalUserFeignApi; +import org.springframework.cloud.openfeign.FeignClient; + +import static com.jiuyv.sptccc.agile.api.PortalUserFeignApi.API_PATH_PREFIX; + +@FeignClient(name = "portalUserFeign", url = "${remoteUrl.gateway}", path = API_PATH_PREFIX) +public interface PortalUserFeign extends PortalUserFeignApi { +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/ResourceFeign.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/ResourceFeign.java new file mode 100644 index 00000000..ddf271ce --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/ResourceFeign.java @@ -0,0 +1,11 @@ +package com.jiuyv.sptccc.agile.feign.portal; + +import com.jiuyv.sptccc.agile.api.FileFeignApi; +import org.springframework.cloud.openfeign.FeignClient; + +import static com.jiuyv.sptccc.agile.api.FileFeignApi.API_PATH_PREFIX; + + +@FeignClient(name = "resourceFeign", url = "${remoteUrl.gateway}", path = API_PATH_PREFIX) +public interface ResourceFeign extends FileFeignApi { +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/config/FeignConfig.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/config/FeignConfig.java new file mode 100644 index 00000000..c6c68b38 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/config/FeignConfig.java @@ -0,0 +1,66 @@ +package com.jiuyv.sptccc.agile.feign.portal.config; + +import com.anji.captcha.util.MD5Util; +import com.jiuyv.sptccc.agile.common.constant.FeignApiConstant; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.portal.domain.LoginUser; +import com.jiuyv.sptccc.agile.portal.utils.SecurityUtils; +import feign.RequestInterceptor; +import feign.Target; +import feign.codec.ErrorDecoder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; + +@Configuration +public class FeignConfig { + public final static Logger LOGGER = LoggerFactory.getLogger(FeignConfig.class); + + public final static String FEIGN_CLIENT_FLAG="gateway-source"; + public final static String FEIGN_CLIENT_VAL="cabcc6d21b22a06d1"; + /** + * 用户信息添加到请求头 + * + */ + @Value("${spring.application.name}") + private String name; + + @Bean + public RequestInterceptor requestInterceptor() { + return template -> { + Target target = template.feignTarget(); + template.header(FEIGN_CLIENT_FLAG, FEIGN_CLIENT_VAL); + template.header("token",name.concat(":").concat(MD5Util.md5(name))); + // 门户服务请求头 + if (target.url().contains("portal-service")) { + try { + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (loginUser != null) { + template.header(FeignApiConstant.USER_ID, loginUser.getUserId().toString()); + String nickName = URLEncoder.encode(loginUser.getUser().getNickName(), "UTF-8"); + template.header(FeignApiConstant.USER_NAME, nickName); + } + } catch (ServiceException e) { + LOGGER.debug("用户未登录,没有获取到用户信息", e); + } catch (UnsupportedEncodingException e) { + LOGGER.error("编码用户名称出错", e); + } + } + }; + } + + /** + * 统一异常处理 + * + */ + @Bean + public ErrorDecoder errorDecoder() { + return (methodKey, response) -> new ServiceException("系统服务调用异常"); + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/transit/ExternalInterface.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/transit/ExternalInterface.java new file mode 100644 index 00000000..f3daba9a --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/feign/portal/transit/ExternalInterface.java @@ -0,0 +1,13 @@ +package com.jiuyv.sptccc.agile.feign.portal.transit; + +import com.jiuyv.sptcc.agile.dataservice.api.console.DataApiFeign; +import com.jiuyv.sptcc.agile.dataservice.api.console.OrgStcsConsoleApi; +import com.jiuyv.sptcc.agile.dataservice.api.portal.DataApiFeignApi; +import com.jiuyv.sptccc.agile.api.fegin.PublicPhoneMsgLogFeignApi; + +/** + * 调用外部服务桥梁,因为Feign接口只能单继承 ExternalInterface + * 所有FeignApi通过Gateway调用,并且没有前缀路径的,都需要通过这个接口调用 + */ +public interface ExternalInterface extends DataApiFeignApi, DataApiFeign, OrgStcsConsoleApi, PublicPhoneMsgLogFeignApi { +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/aspectj/GatewayGlobalLogAspect.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/aspectj/GatewayGlobalLogAspect.java new file mode 100644 index 00000000..f6a4fb83 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/aspectj/GatewayGlobalLogAspect.java @@ -0,0 +1,195 @@ +package com.jiuyv.sptccc.agile.framework.aspectj; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.common.utils.IpUtils; +import com.jiuyv.sptccc.agile.common.utils.ServletUtils; +import com.jiuyv.sptccc.agile.portal.domain.LoginUser; +import com.jiuyv.sptccc.agile.portal.utils.SecurityUtils; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpMethod; +import org.springframework.stereotype.Component; +import org.springframework.validation.BindingResult; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.HandlerMapping; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.Map; + +/** + * 全局请求日志,这个日志就不记录到表里面了 + * + * @author zhouliang + */ +@Aspect +@Component +public class GatewayGlobalLogAspect { + private static final Logger LOGGER = LoggerFactory.getLogger(GatewayGlobalLogAspect.class); + private static final ThreadLocal timeTreadLocal = new ThreadLocal<>(); + private static final double THOUSAND = 1000.0; + + private final ObjectMapper objectMapper; + + public GatewayGlobalLogAspect(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } + + //请求Controller输出日志 + @Pointcut("execution(* *..*.*Controller.*(..)) && !@annotation(com.jiuyv.sptccc.agile.common.annotation.LogIgnore)") + public void controllerAspect() {} + + //请求日志记录 + @Before(value = "controllerAspect()") + public void before(JoinPoint joinPoint) { + timeTreadLocal.set(System.currentTimeMillis()); + // 接收请求,记录完整请求内容 + //获取请求的request + HttpServletRequest request = ServletUtils.getRequest(); + String methodName = getMethodName(joinPoint); + // 请求的地址 + String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); + String userName = "none"; + try { + LoginUser loginuser = SecurityUtils.getLoginUser(); + if (loginuser != null) { + userName = loginuser.getUserId() + "/" + loginuser.getUser().getUserName() + "/" + loginuser.getUser().getNickName(); + } + } catch (ServiceException e) { + LOGGER.debug("获取用户信息失败:{}", e.getMessage(), e); + //不报错 + } + String keyValue = setRequestValue(joinPoint, request.getMethod()); + LOGGER.info("{}-req:User={},Ip={},Uri={},Method={},ContentType={}", methodName, userName, ip, request.getRequestURI(), request.getMethod(), request.getContentType()); + LOGGER.info("{}-req:Params={}", methodName, keyValue); + } + + //后置返回 + @AfterReturning(pointcut = "controllerAspect() && !@annotation(com.jiuyv.sptccc.agile.common.annotation.LogSimpleResult)" + , returning = "result") + public void doAfterReturning(JoinPoint joinPoint, Object result) { + long startTime = timeTreadLocal.get(); + double callTime = (System.currentTimeMillis() - startTime) / THOUSAND; + String methodName = getMethodName(joinPoint); + String returnstr = null; + if (result != null) { + try { + returnstr = objectMapper.writeValueAsString(result); + } catch (JsonProcessingException e) { + LOGGER.debug("返回转换异常", e); + returnstr = "返回转换异常"; + } + } + LOGGER.info("{}-res:Success,Time={}s,Data={}", methodName, callTime, returnstr); + timeTreadLocal.remove(); + } + + //后置返回(不输出返回内容) + @AfterReturning(pointcut = "controllerAspect() && @annotation(com.jiuyv.sptccc.agile.common.annotation.LogSimpleResult)") + public void doAfterReturningSimple(JoinPoint joinPoint) { + long startTime = timeTreadLocal.get(); + double callTime = (System.currentTimeMillis() - startTime) / THOUSAND; + String methodName = getMethodName(joinPoint); + LOGGER.info("{}-res:Success,Time={}s,Data=omitting content...", methodName, callTime); + timeTreadLocal.remove(); + } + + //后置异常返回 + @AfterThrowing(pointcut = "controllerAspect()", throwing = "e") + public void doAfterThrowing(JoinPoint joinPoint, Throwable e) { + long startTime = timeTreadLocal.get(); + double callTime = (System.currentTimeMillis() - startTime) / THOUSAND; + String methodName = getMethodName(joinPoint); + LOGGER.info("{}-res:Failure,Time={}s,Error={}", methodName, callTime, e.getMessage()); + timeTreadLocal.remove(); + } + + /** + * 获取方法名称 + */ + private String getMethodName(JoinPoint joinPoint) { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + //获取被拦截的方法 + Method method = methodSignature.getMethod(); + String className = method.getDeclaringClass().getCanonicalName(); + return className.substring(className.lastIndexOf(".") + 1) + "." + method.getName(); + } + + /** + * 获取请求的参数 + */ + private String setRequestValue(JoinPoint joinPoint, String requestMethod) { + if (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod)) { + return argsArrayToString(joinPoint.getArgs()); + } else { + Map paramsMap = (Map) ServletUtils.getRequest().getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE); + return paramsMap.toString(); + } + } + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + StringBuilder params = new StringBuilder(); + if (paramsArray != null && paramsArray.length > 0) { + for (Object o : paramsArray) { + if (o != null && !isFilterObject(o)) { + try { + Object jsonObj = objectMapper.writeValueAsString(o); + params.append(jsonObj.toString()).append(" "); + } catch (JsonProcessingException e) { + LOGGER.debug("参数拼装出错:{}", e.getMessage(), e); + } + } + } + } + return params.toString().trim(); + } + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + @SuppressWarnings("rawtypes") + public boolean isFilterObject(final Object o) { + Class clazz = o.getClass(); + if (clazz.isArray()) { + return clazz.getComponentType().isAssignableFrom(MultipartFile.class); + } else if (Collection.class.isAssignableFrom(clazz)) { + Collection collection = (Collection) o; + for (Object value : collection) { + if (value instanceof MultipartFile) { + return true; + } + } + return false; + } else if (Map.class.isAssignableFrom(clazz)) { + Map map = (Map) o; + + for (Object value : map.entrySet()) { + Map.Entry entry = (Map.Entry) value; + if (entry.getValue() instanceof MultipartFile) { + return true; + } + } + return false; + } else { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse + || o instanceof BindingResult; + } + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/aspectj/RepeatSubmitAspect.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/aspectj/RepeatSubmitAspect.java new file mode 100644 index 00000000..3f8d1f7d --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/aspectj/RepeatSubmitAspect.java @@ -0,0 +1,89 @@ +package com.jiuyv.sptccc.agile.framework.aspectj; + +import com.jiuyv.sptccc.agile.common.constant.CacheNames; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.common.utils.ServletUtils; +import com.jiuyv.sptccc.agile.framework.config.LocalCache; +import com.jiuyv.sptccc.agile.portal.domain.LoginUser; +import com.jiuyv.sptccc.agile.portal.utils.SecurityUtils; +import org.apache.commons.lang3.StringUtils; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.Order; +import org.springframework.http.HttpMethod; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; + +/** + * 同方法快速连续提交限制,不用精确到参数,系统场景没必要 + * 无论成功失败都会释放,最久锁定只有总缓存时间,接口一般不会超过30秒 + * + * @author zhouliang + */ +@Aspect +@Order(2) +@Component +public class RepeatSubmitAspect { + private static final Logger LOGGER = LoggerFactory.getLogger(RepeatSubmitAspect.class); + + private static final ThreadLocal repeatSubmitTreadLocal = new ThreadLocal<>(); + + @Autowired + private LocalCache localCache; + + @Pointcut("execution(* *..*.*Controller.*(..)) && !@annotation(com.jiuyv.sptccc.agile.common.annotation.NoRepeatSubmit)") + public void controllerAspect() {} + + //请求日志记录 + @Before("controllerAspect()") + public void before() { + //获取请求的request + HttpServletRequest request = ServletUtils.getRequest(); + if (HttpMethod.GET.name().equals(request.getMethod())) { + return; + } + String userName = "none"; + try { + LoginUser loginuser = SecurityUtils.getLoginUser(); + if (loginuser != null) { + userName = loginuser.getUserId().toString(); + } + } catch (Exception e) { + //没有用户的直接跳过 + return; + } + String repeatSubmitKey = userName + "_" + request.getMethod() + "_" + request.getRequestURI(); + String lockFlag = localCache.getValueOfCacheName(CacheNames.CACHE_30S, repeatSubmitKey, String.class); + if (StringUtils.isNotBlank(lockFlag)) { + LOGGER.info("RepeatSubmitAspect={}", repeatSubmitKey); + throw new ServiceException("请勿连续提交,请求正在处理中..."); + } + repeatSubmitTreadLocal.set(repeatSubmitKey); + localCache.setValueOfCacheName(CacheNames.CACHE_30S, repeatSubmitKey, "1"); + } + + //后置返回 + @AfterReturning("controllerAspect()") + public void doAfterReturning() { + if (repeatSubmitTreadLocal.get() != null) { + localCache.removeValueOfCacheName(CacheNames.CACHE_30S, repeatSubmitTreadLocal.get()); + repeatSubmitTreadLocal.remove(); + } + } + + //后置异常返回 + @AfterThrowing("controllerAspect()") + public void doAfterThrowing() { + if (repeatSubmitTreadLocal.get() != null) { + localCache.removeValueOfCacheName(CacheNames.CACHE_30S, repeatSubmitTreadLocal.get()); + repeatSubmitTreadLocal.remove(); + } + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/AjCaptchaConfig.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/AjCaptchaConfig.java new file mode 100644 index 00000000..a1079c00 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/AjCaptchaConfig.java @@ -0,0 +1,98 @@ +package com.jiuyv.sptccc.agile.framework.config; + +import com.anji.captcha.model.common.Const; +import com.anji.captcha.service.CaptchaCacheService; +import com.anji.captcha.service.CaptchaService; +import com.anji.captcha.service.impl.CaptchaServiceFactory; +import com.anji.captcha.util.ImageUtils; +import com.anji.captcha.util.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.core.io.support.ResourcePatternResolver; +import org.springframework.util.Base64Utils; +import org.springframework.util.FileCopyUtils; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +@Configuration +@EnableConfigurationProperties(AjCaptchaProperties.class) +public class AjCaptchaConfig { + private static final Logger LOGGER = LoggerFactory.getLogger(AjCaptchaConfig.class); + + @Bean(name = "AjCaptchaCacheService") + public CaptchaCacheService captchaCacheService(AjCaptchaProperties ajCaptchaProperties){ + //缓存类型redis/local/.... + return CaptchaServiceFactory.getCache(ajCaptchaProperties.getCacheType()); + } + + public static Map getResourcesImagesFile(String path) { + Map imgMap = new HashMap<>(); + ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + try { + Resource[] resources = resolver.getResources(path); + for (Resource resource : resources) { + byte[] bytes = FileCopyUtils.copyToByteArray(resource.getInputStream()); + String string = Base64Utils.encodeToString(bytes); + String filename = resource.getFilename(); + imgMap.put(filename, string); + } + } catch (IOException e) { + LOGGER.error("获取资源图像文件时发送错误:{}", e.getMessage(), e); + } + return imgMap; + } + + private static void initializeBaseMap(String jigsaw, String picClick) { + ImageUtils.cacheBootImage(getResourcesImagesFile(jigsaw + "/original/*.png"), + getResourcesImagesFile(jigsaw + "/slidingBlock/*.png"), + getResourcesImagesFile(picClick + "/*.png")); + } + + @Bean + @ConditionalOnMissingBean + public CaptchaService captchaService(AjCaptchaProperties prop) { + Properties config = new Properties(); + config.put(Const.CAPTCHA_CACHETYPE, prop.getCacheType()); + config.put(Const.CAPTCHA_WATER_MARK, prop.getWaterMark()); + config.put(Const.CAPTCHA_FONT_TYPE, prop.getFontType()); + config.put(Const.CAPTCHA_TYPE, prop.getType().getCodeValue()); + config.put(Const.CAPTCHA_INTERFERENCE_OPTIONS, prop.getInterferenceOptions()); + config.put(Const.ORIGINAL_PATH_JIGSAW, prop.getJigsaw()); + config.put(Const.ORIGINAL_PATH_PIC_CLICK, prop.getPicClick()); + config.put(Const.CAPTCHA_SLIP_OFFSET, prop.getSlipOffset()); + config.put(Const.CAPTCHA_AES_STATUS, String.valueOf(prop.getAesStatus())); + config.put(Const.CAPTCHA_WATER_FONT, prop.getWaterFont()); + config.put(Const.CAPTCHA_CACAHE_MAX_NUMBER, prop.getCacheNumber()); + config.put(Const.CAPTCHA_TIMING_CLEAR_SECOND, prop.getTimingClear()); + + config.put(Const.HISTORY_DATA_CLEAR_ENABLE, prop.isHistoryDataClearEnable() ? "1" : "0"); + + config.put(Const.REQ_FREQUENCY_LIMIT_ENABLE, prop.isReqFrequencyLimitEnable() ? "1" : "0"); + config.put(Const.REQ_GET_LOCK_LIMIT, prop.getReqGetLockLimit() + ""); + config.put(Const.REQ_GET_LOCK_SECONDS, prop.getReqGetLockSeconds() + ""); + config.put(Const.REQ_GET_MINUTE_LIMIT, prop.getReqGetMinuteLimit() + ""); + config.put(Const.REQ_CHECK_MINUTE_LIMIT, prop.getReqCheckMinuteLimit() + ""); + config.put(Const.REQ_VALIDATE_MINUTE_LIMIT, prop.getReqVerifyMinuteLimit() + ""); + + config.put(Const.CAPTCHA_FONT_SIZE, prop.getFontSize() + ""); + config.put(Const.CAPTCHA_FONT_STYLE, prop.getFontStyle() + ""); + config.put(Const.CAPTCHA_WORD_COUNT, prop.getClickWordCount() + ""); + + if ((StringUtils.isNotBlank(prop.getJigsaw()) && prop.getJigsaw().startsWith("classpath:")) + || (StringUtils.isNotBlank(prop.getPicClick()) && prop.getPicClick().startsWith("classpath:"))) { + //自定义resources目录下初始化底图 + config.put(Const.CAPTCHA_INIT_ORIGINAL, "true"); + initializeBaseMap(prop.getJigsaw(), prop.getPicClick()); + } + return CaptchaServiceFactory.getInstance(config); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/AjCaptchaProperties.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/AjCaptchaProperties.java new file mode 100644 index 00000000..ba960fee --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/AjCaptchaProperties.java @@ -0,0 +1,302 @@ +package com.jiuyv.sptccc.agile.framework.config; + +import com.anji.captcha.model.common.CaptchaTypeEnum; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.awt.Font; + + +@ConfigurationProperties("aj.captcha") +public class AjCaptchaProperties { + public static final String PREFIX = "aj.captcha"; + /** + * 默认配置 + */ + private static final int LOCK_LIMIT = 5; + private static final int LOCK_SECONDS = 300; + private static final int MINUTE_LIMIT = 100; + private static final int FONT_SIZE = 25; + private static final int WORD_COUNT = 4; + + /** + * 验证码类型. + */ + private CaptchaTypeEnum type = CaptchaTypeEnum.DEFAULT; + + /** + * 滑动拼图底图路径. + */ + private String jigsaw = ""; + + /** + * 点选文字底图路径. + */ + private String picClick = ""; + + + /** + * 右下角水印文字(我的水印). + */ + private String waterMark = "我的水印"; + + /** + * 右下角水印字体(文泉驿正黑). + */ + private String waterFont = "WenQuanZhengHei.ttf"; + + /** + * 点选文字验证码的文字字体(文泉驿正黑). + */ + private String fontType = "WenQuanZhengHei.ttf"; + + /** + * 校验滑动拼图允许误差偏移量(默认5像素). + */ + private String slipOffset = "5"; + + /** + * aes加密坐标开启或者禁用(true|false). + */ + private Boolean aesStatus = true; + + /** + * 滑块干扰项(0/1/2) + */ + private String interferenceOptions = "0"; + + /** + * local缓存的阈值 + */ + private String cacheNumber = "1000"; + + /** + * 定时清理过期local缓存(单位秒) + */ + private String timingClear = "180"; + + /** + * 缓存类型redis/local/.... + */ + private String cacheType = "local"; + /** + * 历史数据清除开关 + */ + private boolean historyDataClearEnable = false; + + /** + * 一分钟内接口请求次数限制 开关 + */ + private boolean reqFrequencyLimitEnable = false; + + /*** + * 一分钟内check接口失败次数 + */ + private int reqGetLockLimit = LOCK_LIMIT; + /** + * + */ + private int reqGetLockSeconds = LOCK_SECONDS; + + /*** + * get接口一分钟内限制访问数 + */ + private int reqGetMinuteLimit = MINUTE_LIMIT; + private int reqCheckMinuteLimit = MINUTE_LIMIT; + private int reqVerifyMinuteLimit = MINUTE_LIMIT; + + /** + * 点选字体样式 + */ + private int fontStyle = Font.BOLD; + + /** + * 点选字体大小 + */ + private int fontSize = FONT_SIZE; + + /** + * 点选文字个数,存在问题,暂不要使用 + */ + private int clickWordCount = WORD_COUNT; + + public int getFontStyle() { + return fontStyle; + } + + public void setFontStyle(int fontStyle) { + this.fontStyle = fontStyle; + } + + public int getFontSize() { + return fontSize; + } + + public void setFontSize(int fontSize) { + this.fontSize = fontSize; + } + + public int getClickWordCount() { + return clickWordCount; + } + + public void setClickWordCount(int clickWordCount) { + this.clickWordCount = clickWordCount; + } + + public boolean isHistoryDataClearEnable() { + return historyDataClearEnable; + } + + public void setHistoryDataClearEnable(boolean historyDataClearEnable) { + this.historyDataClearEnable = historyDataClearEnable; + } + + public boolean isReqFrequencyLimitEnable() { + return reqFrequencyLimitEnable; + } + + public void setReqFrequencyLimitEnable(boolean reqFrequencyLimitEnable) { + this.reqFrequencyLimitEnable = reqFrequencyLimitEnable; + } + + public int getReqGetLockLimit() { + return reqGetLockLimit; + } + + public void setReqGetLockLimit(int reqGetLockLimit) { + this.reqGetLockLimit = reqGetLockLimit; + } + + public int getReqGetLockSeconds() { + return reqGetLockSeconds; + } + + public void setReqGetLockSeconds(int reqGetLockSeconds) { + this.reqGetLockSeconds = reqGetLockSeconds; + } + + public int getReqGetMinuteLimit() { + return reqGetMinuteLimit; + } + + public void setReqGetMinuteLimit(int reqGetMinuteLimit) { + this.reqGetMinuteLimit = reqGetMinuteLimit; + } + + public int getReqCheckMinuteLimit() { + return reqCheckMinuteLimit; + } + + public void setReqCheckMinuteLimit(int reqCheckMinuteLimit) { + this.reqCheckMinuteLimit = reqCheckMinuteLimit; + } + + public int getReqVerifyMinuteLimit() { + return reqVerifyMinuteLimit; + } + + public void setReqVerifyMinuteLimit(int reqVerifyMinuteLimit) { + this.reqVerifyMinuteLimit = reqVerifyMinuteLimit; + } + + public static String getPrefix() { + return PREFIX; + } + + public CaptchaTypeEnum getType() { + return type; + } + + public void setType(CaptchaTypeEnum type) { + this.type = type; + } + + public String getJigsaw() { + return jigsaw; + } + + public void setJigsaw(String jigsaw) { + this.jigsaw = jigsaw; + } + + public String getPicClick() { + return picClick; + } + + public void setPicClick(String picClick) { + this.picClick = picClick; + } + + public String getWaterMark() { + return waterMark; + } + + public void setWaterMark(String waterMark) { + this.waterMark = waterMark; + } + + public String getWaterFont() { + return waterFont; + } + + public void setWaterFont(String waterFont) { + this.waterFont = waterFont; + } + + public String getFontType() { + return fontType; + } + + public void setFontType(String fontType) { + this.fontType = fontType; + } + + public String getSlipOffset() { + return slipOffset; + } + + public void setSlipOffset(String slipOffset) { + this.slipOffset = slipOffset; + } + + public Boolean getAesStatus() { + return aesStatus; + } + + public void setAesStatus(Boolean aesStatus) { + this.aesStatus = aesStatus; + } + + public String getCacheType() { + return cacheType; + } + + public void setCacheType(String cacheType) { + this.cacheType = cacheType; + } + + public String getInterferenceOptions() { + return interferenceOptions; + } + + public void setInterferenceOptions(String interferenceOptions) { + this.interferenceOptions = interferenceOptions; + } + + public String getCacheNumber() { + return cacheNumber; + } + + public void setCacheNumber(String cacheNumber) { + this.cacheNumber = cacheNumber; + } + + public String getTimingClear() { + return timingClear; + } + + public void setTimingClear(String timingClear) { + this.timingClear = timingClear; + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/ApplicationConfig.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/ApplicationConfig.java new file mode 100644 index 00000000..a94259fd --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/ApplicationConfig.java @@ -0,0 +1,39 @@ +package com.jiuyv.sptccc.agile.framework.config; + +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import org.apache.tomcat.util.http.Rfc6265CookieProcessor; +import org.apache.tomcat.util.http.SameSiteCookies; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.boot.web.embedded.tomcat.TomcatContextCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.TimeZone; + +/** + * 程序注解配置 + * + * @author admin + */ +@Configuration +public class ApplicationConfig { + /** + * 时区配置,long类型解决 + */ + @Bean + public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() { + return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault()) + .serializerByType(Long.class, ToStringSerializer.instance) + .serializerByType(Long.TYPE, ToStringSerializer.instance); + } + + @Bean + public TomcatContextCustomizer sameSiteCookiesConfig() { + return context -> { + Rfc6265CookieProcessor cookieProcessor = new Rfc6265CookieProcessor(); + cookieProcessor.setSameSiteCookies(SameSiteCookies.LAX.getValue()); + context.setCookieProcessor(cookieProcessor); + }; + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/LocalCache.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/LocalCache.java new file mode 100644 index 00000000..fe6125fd --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/LocalCache.java @@ -0,0 +1,79 @@ +package com.jiuyv.sptccc.agile.framework.config; + +import com.github.benmanes.caffeine.cache.Caffeine; +import com.jiuyv.sptccc.agile.common.constant.CacheNames; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; +import org.springframework.cache.caffeine.CaffeineCacheManager; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +/** + * 缓存工具类,Caffeine LocalCache + * + */ +@Component +public class LocalCache { + private final CacheManager cacheManager; + + public LocalCache(CaffeineCacheManager cacheManager) { + // 5s缓存,主要用于防重提交, + cacheManager.registerCustomCache(CacheNames.CACHE_5S, + Caffeine.newBuilder().expireAfterWrite(5, TimeUnit.SECONDS).build()); + // 30s缓存,主要用于防重提交(有些方法周期长5s不够的话) + cacheManager.registerCustomCache(CacheNames.CACHE_30S, + Caffeine.newBuilder().expireAfterWrite(30, TimeUnit.SECONDS).build()); + // 1分钟,主要用于验证码 + cacheManager.registerCustomCache(CacheNames.CACHE_1MIN, + Caffeine.newBuilder().expireAfterWrite(1, TimeUnit.MINUTES).build()); + // 5分钟 + cacheManager.registerCustomCache(CacheNames.CACHE_5MIN, + Caffeine.newBuilder().expireAfterWrite(5, TimeUnit.MINUTES).build()); + // 30分钟 + cacheManager.registerCustomCache(CacheNames.CACHE_30MIN, + Caffeine.newBuilder().expireAfterWrite(30, TimeUnit.MINUTES).build()); + // 1天缓存 + cacheManager.registerCustomCache(CacheNames.CACHE_1DAY, + Caffeine.newBuilder().expireAfterWrite(1, TimeUnit.DAYS).maximumSize(10000).build()); + // 30天缓存,放置一些系统字典、配置 + cacheManager.registerCustomCache(CacheNames.CACHE_30DAY, + Caffeine.newBuilder().expireAfterAccess(30, TimeUnit.DAYS).maximumSize(2000).build()); + this.cacheManager = cacheManager; + } + + /** + * 往指定缓存放入一个键值 + * + */ + public void setValueOfCacheName(final String cacheName, final String key, final T value) { + Cache cache = cacheManager.getCache(cacheName); + if (cache == null) { + throw new ServiceException("Cache does not exist!"); + } + cache.put(key, value); + } + + + public T getValueOfCacheName(final String cacheName, final String key, Class clazz) { + Cache cache = cacheManager.getCache(cacheName); + if (cache == null) { + throw new ServiceException("Cache does not exist!"); + } + return cache.get(key, clazz); + } + + /** + * 移除指定缓存的某个键值 + * + */ + public void removeValueOfCacheName(final String cacheName, final String key) { + Cache cache = cacheManager.getCache(cacheName); + if (cache == null) { + throw new ServiceException("Cache does not exist!"); + } + cache.evict(key); + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/SecurityConfig.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/SecurityConfig.java new file mode 100644 index 00000000..e0ef53dc --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/SecurityConfig.java @@ -0,0 +1,130 @@ +package com.jiuyv.sptccc.agile.framework.config; + +import com.jiuyv.sptccc.agile.common.constant.FrontConstant; +import com.jiuyv.sptccc.agile.framework.config.properties.PermitAllUrlProperties; +import com.jiuyv.sptccc.agile.framework.filter.LoginFilter; +import com.jiuyv.sptccc.agile.framework.web.service.SysLoginService; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.http.HttpStatus; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.builders.WebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.csrf.CookieCsrfTokenRepository; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +import static com.jiuyv.sptccc.agile.portal.controller.BaseController.BASE_PREFIX; + +/** + * spring security配置 + * + * @author admin + */ +@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) +public class SecurityConfig extends WebSecurityConfigurerAdapter { + + /** + * 自定义登录 + */ + @Autowired + private LoginFilter loginFilter; + + @Autowired + private SysLoginService sysLoginService; + + /** + * 加载用户 + */ + @Autowired + private UserDetailsService userDetailsService; + + /** + * 允许匿名访问的地址 + */ + @Autowired + private PermitAllUrlProperties permitAllUrl; + + + /** + * 解决 无法直接注入 AuthenticationManager + * + */ + @Bean + @Override + public AuthenticationManager authenticationManagerBean() throws Exception { + return super.authenticationManagerBean(); + } + + @Override + protected void configure(HttpSecurity httpSecurity) throws Exception { + CookieCsrfTokenRepository csrfTokenRepository = CookieCsrfTokenRepository.withHttpOnlyFalse(); + csrfTokenRepository.setSecure(true); + httpSecurity + .addFilterBefore(loginFilter, UsernamePasswordAuthenticationFilter.class) + .exceptionHandling() + .authenticationEntryPoint((req, resp, ex) + -> AjaxResult.error(resp, HttpStatus.UNAUTHORIZED.value(), "拒绝访问")) + .and() + .logout() + .logoutUrl(BASE_PREFIX + "/logout") + .logoutSuccessHandler((req, resp, auth) -> signOut(resp, auth)) + .and() + .csrf() + .csrfTokenRepository(csrfTokenRepository) + ; + + httpSecurity.authorizeRequests() + // 注解标记允许匿名访问的接口,只需要在接口上加@Anonymous注解 + .antMatchers(permitAllUrl.getUrls().toArray(new String[0])).permitAll() + .antMatchers(BASE_PREFIX + "/captcha/get", BASE_PREFIX + "/captcha/check").permitAll() + .and() + .authorizeRequests() + .antMatchers(BASE_PREFIX + "/changePassword", BASE_PREFIX + "/getInfo") + .hasAuthority(FrontConstant.AUTHORITY_BASE) + .anyRequest().hasAuthority(FrontConstant.AUTHORITY_ALL); + } + + @Override + public void configure(WebSecurity web) { + web.ignoring().antMatchers("/public", "/public/", "/public/*.html", "/public/static/**", "/public/favicon.**", "/actuator/**"); + } + + /** + * 强散列哈希加密实现 + */ + @Bean + public BCryptPasswordEncoder bCryptPasswordEncoder() { + return new BCryptPasswordEncoder(); + } + + /** + * 身份认证接口 + */ + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { + auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder()); + } + + /** + * 退出后操作 + * + */ + private void signOut(HttpServletResponse response, Authentication authentication) throws IOException { + if (authentication != null) { + UserDetails userDetails = (UserDetails) authentication.getPrincipal(); + sysLoginService.saveLoginLog(userDetails.getUsername(), FrontConstant.SUCCESS, "退出登录"); + } + AjaxResult.success(response, "退出成功"); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/WebConfig.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/WebConfig.java new file mode 100644 index 00000000..499cc4a4 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/WebConfig.java @@ -0,0 +1,15 @@ +package com.jiuyv.sptccc.agile.framework.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/public/").setViewName("forward:/public/index.html"); + registry.addViewController("/public").setViewName("redirect:/public/"); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/properties/ConsoleProperties.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/properties/ConsoleProperties.java new file mode 100644 index 00000000..bd3dba48 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/properties/ConsoleProperties.java @@ -0,0 +1,66 @@ +package com.jiuyv.sptccc.agile.framework.config.properties; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 读取项目相关配置 + * + * @author admin + */ +@Component +@ConfigurationProperties(prefix = "conosle") +public class ConsoleProperties { + /** + * 获取地址开关 + */ + private boolean addressEnabled; + + /** + * RSA加密算法填充方案,默认RSA/None/NoPadding + */ + private String encryptionAlgorithm = "RSA"; + + /** + * 手机验证码测试开关 + */ + private boolean captchaTest = false; + + /** + * 限制IP每分钟的请求数 + */ + private int rateCapacity = 100; + + public boolean isAddressEnabled() { + return addressEnabled; + } + + public void setAddressEnabled(boolean addressEnabled) { + this.addressEnabled = addressEnabled; + } + + public String getEncryptionAlgorithm() { + return encryptionAlgorithm; + } + + public void setEncryptionAlgorithm(String encryptionAlgorithm) { + this.encryptionAlgorithm = encryptionAlgorithm; + } + + public boolean isCaptchaTest() { + return captchaTest; + } + + public void setCaptchaTest(boolean captchaTest) { + this.captchaTest = captchaTest; + } + + public int getRateCapacity() { + return rateCapacity; + } + + public void setRateCapacity(int rateCapacity) { + this.rateCapacity = rateCapacity; + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/properties/PermitAllUrlProperties.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/properties/PermitAllUrlProperties.java new file mode 100644 index 00000000..7f2e52f5 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/properties/PermitAllUrlProperties.java @@ -0,0 +1,69 @@ +package com.jiuyv.sptccc.agile.framework.config.properties; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; + +import org.apache.commons.lang3.RegExUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.web.servlet.mvc.condition.PathPatternsRequestCondition; +import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; + +import com.jiuyv.sptccc.agile.common.annotation.Anonymous; + +/** + * 设置Anonymous注解允许匿名访问的url + * + * @author admin + */ +@Configuration +public class PermitAllUrlProperties implements InitializingBean, ApplicationContextAware { + private static final Pattern PATTERN = Pattern.compile("\\{(.*?)\\}"); + + private ApplicationContext applicationContext; + + private List urls = new ArrayList<>(); + + public String ASTERISK = "*"; + + @Override + public void afterPropertiesSet() { + RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class); + mapping.getHandlerMethods().forEach((info, handlerMethod) -> { + // 获取方法和类上的注解 替代path variable 为 * + if (AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Anonymous.class) == null && + AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), Anonymous.class) == null) { + return; + } + PatternsRequestCondition patternsCondition = info.getPatternsCondition(); + if (patternsCondition != null) { + patternsCondition.getPatterns().forEach(url -> urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK))); + return; + } + PathPatternsRequestCondition pathPatternsCondition = info.getPathPatternsCondition(); + if (pathPatternsCondition != null) { + pathPatternsCondition.getPatterns().forEach(pattern -> + urls.add(RegExUtils.replaceAll(pattern.getPatternString(), PATTERN, ASTERISK))); + } + }); + } + + @Override + public void setApplicationContext(ApplicationContext context) throws BeansException { + this.applicationContext = context; + } + + public List getUrls() { + return urls; + } + + public void setUrls(List urls) { + this.urls = urls; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/sentinel/SentinelBlockExceptionHandler.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/sentinel/SentinelBlockExceptionHandler.java new file mode 100644 index 00000000..1b616c4f --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/sentinel/SentinelBlockExceptionHandler.java @@ -0,0 +1,23 @@ +package com.jiuyv.sptccc.agile.framework.config.sentinel; + +import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler; +import com.alibaba.csp.sentinel.slots.block.BlockException; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * 限流处理逻辑 + * @author ren_chao + */ +@Component +@ConditionalOnProperty(name = "spring.cloud.sentinel.enabled", matchIfMissing = true) +public class SentinelBlockExceptionHandler implements BlockExceptionHandler { + @Override + public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, BlockException e) throws Exception { + AjaxResult.error(httpServletResponse, 429, "服务忙,请稍后再试"); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/sentinel/SftpPool.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/sentinel/SftpPool.java new file mode 100644 index 00000000..3ae6c3b0 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/sentinel/SftpPool.java @@ -0,0 +1,138 @@ +package com.jiuyv.sptccc.agile.framework.config.sentinel; + +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.Session; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import org.apache.commons.pool2.BasePooledObjectFactory; +import org.apache.commons.pool2.PooledObject; +import org.apache.commons.pool2.impl.DefaultPooledObject; +import org.apache.commons.pool2.impl.GenericObjectPool; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +import java.time.Duration; + +/** + * sftp服务器连接池 + * @author ren_chao + */ +@Component +@ConfigurationProperties(prefix = "sentinel-sftp") +@ConditionalOnProperty(name = "spring.cloud.sentinel.enabled", matchIfMissing = true) +public class SftpPool { + private static final Logger LOGGER = LoggerFactory.getLogger(SftpPool.class); + private static final int PORT = 22; + private static final int MAX_TOTAL = 1; + private static final int MAX_IDLE = 1; + private static final int MIN_IDLE = 1; + + private final GenericObjectPool pool; + + private String host; + private String username; + private String password; + + public SftpPool() { + this.pool = createPool(); + + } + + public ChannelSftp getPool() { + try { + return pool.borrowObject(); + } catch (Exception e) { + LOGGER.error("系统错误,Sftp服务器异常", e); + throw new ServiceException("系统错误,Sftp服务器异常"); + } + + } + + /** + * 关闭默认sftp + * + */ + public void close(ChannelSftp channelSftp) { + pool.returnObject(channelSftp); + } + + + private GenericObjectPool createPool() { + GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig<>(); + poolConfig.setMaxIdle(MAX_IDLE); + poolConfig.setMaxTotal(MAX_TOTAL); + poolConfig.setMinIdle(MIN_IDLE); + // 10分钟清理一次无效连接 + poolConfig.setTimeBetweenEvictionRuns(Duration.ofMinutes(10)); + // 获取连接前进行连接可用性校验 + poolConfig.setTestOnBorrow(true); + GenericObjectPool pool = new GenericObjectPool<>(new SftpChannelFactory(), poolConfig); + // 异步初始化连接池 + new Thread(() -> { + try { + pool.preparePool(); + } catch (Exception e) { + LOGGER.error("Sftp服务器异常,连接池初始化失败", e); + } + }).start(); + return pool; + } + + public void setHost(String host) { + this.host = host; + } + + public void setUsername(String username) { + this.username = username; + } + + public void setPassword(String password) { + this.password = password; + } + + private class SftpChannelFactory extends BasePooledObjectFactory { + + @Override + public ChannelSftp create() throws Exception { + JSch jSch = new JSch(); + Session session = jSch.getSession(username, host, PORT); + session.setPassword(password); + session.setConfig("StrictHostKeyChecking", "no"); // 忽略主机密钥检查 + session.connect(); + ChannelSftp sftpChannel= (ChannelSftp) session.openChannel("sftp"); + sftpChannel.connect(); + LOGGER.debug("创建sftp连接成功。"); + return sftpChannel; + } + + @Override + public PooledObject wrap(ChannelSftp channelSftp) { + return new DefaultPooledObject<>(channelSftp); + } + + /** + * 销毁连接 + */ + @Override + public void destroyObject(PooledObject p) throws Exception { + ChannelSftp channelSftp = p.getObject(); + Session session = channelSftp.getSession(); + LOGGER.debug("销毁连接[{}]", session.getHost()); + channelSftp.disconnect(); + session.disconnect(); + } + + /** + * 检查通道是否正常 + */ + @Override + public boolean validateObject(PooledObject p) { + ChannelSftp channelSftp = p.getObject(); + return channelSftp.isConnected() && !channelSftp.isClosed(); + } + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/sentinel/SftpRefreshDataSource.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/sentinel/SftpRefreshDataSource.java new file mode 100644 index 00000000..f0261af3 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/sentinel/SftpRefreshDataSource.java @@ -0,0 +1,68 @@ +package com.jiuyv.sptccc.agile.framework.config.sentinel; + +import com.alibaba.csp.sentinel.datasource.AutoRefreshDataSource; +import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; +import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.SftpATTRS; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.SmartInitializingSingleton; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; + +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.List; + +/** + * Sentinel 从sftp上面刷新配置 + * + * @author ren_chao + */ +@Component +@ConditionalOnProperty(name = "spring.cloud.sentinel.enabled", matchIfMissing = true) +public class SftpRefreshDataSource extends AutoRefreshDataSource> implements SmartInitializingSingleton { + private static final Logger LOGGER = LoggerFactory.getLogger(SftpRefreshDataSource.class); + private static final int BUF_SIZE = 4194304; + private final byte[] buf = new byte[BUF_SIZE]; + + private final SftpPool sftpPool; + + @Value("${sentinel-sftp.path}") + private String filePath; + + public SftpRefreshDataSource(SftpPool sftpPool) { + super(source -> JSON.parseObject(source, new TypeReference>() { + })); + this.sftpPool = sftpPool; + } + + @Override + public String readSource() throws Exception { + LOGGER.debug("从Sftp服务器读取规则"); + ChannelSftp channelSftp = sftpPool.getPool(); + try { + SftpATTRS stat = channelSftp.stat(filePath); + if (stat.getSize() > BUF_SIZE) { + String msg = "配置文件大小超过4M限制,当前文件大小:" + stat.getSize(); + LOGGER.error(msg); + throw new IllegalStateException(msg); + } + try (InputStream is = channelSftp.get(filePath)) { + int len = is.read(buf); + return new String(buf, 0, len, StandardCharsets.UTF_8); + } + } finally { + sftpPool.close(channelSftp); + } + } + + @Override + public void afterSingletonsInstantiated() { + FlowRuleManager.register2Property(this.getProperty()); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/sentinel/SftpWritableDataSource.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/sentinel/SftpWritableDataSource.java new file mode 100644 index 00000000..7b8c1867 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/config/sentinel/SftpWritableDataSource.java @@ -0,0 +1,72 @@ +package com.jiuyv.sptccc.agile.framework.config.sentinel; + +import com.alibaba.csp.sentinel.datasource.WritableDataSource; +import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; +import com.alibaba.csp.sentinel.transport.util.WritableDataSourceRegistry; +import com.alibaba.fastjson.JSON; +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.SftpException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.SmartInitializingSingleton; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; + +import java.io.ByteArrayInputStream; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +/** + * 配置信息写入Sftp + * + * @author ren_chao + */ +@Component +@ConditionalOnProperty(name = "spring.cloud.sentinel.enabled", matchIfMissing = true) +public class SftpWritableDataSource implements WritableDataSource>, SmartInitializingSingleton { + private static final Logger LOGGER = LoggerFactory.getLogger(SftpWritableDataSource.class); + + private final Lock lock = new ReentrantLock(true); + private final SftpPool sftpPool; + + @Value("${sentinel-sftp.path}") + private String filePath; + + public SftpWritableDataSource(SftpPool sftpPool) { + this.sftpPool = sftpPool; + } + + @Override + public void write(List value) throws Exception { + lock.lock(); + try { + String convertResult = JSON.toJSONString(value); + LOGGER.debug("更新Sftp规则文件:{}。规则:{}", filePath, convertResult); + ChannelSftp channelSftp = sftpPool.getPool(); + try (ByteArrayInputStream arrayInputStream + = new ByteArrayInputStream(convertResult.getBytes(StandardCharsets.UTF_8))) { + channelSftp.put(arrayInputStream, filePath); + } catch (SftpException e) { + LOGGER.error("写入Sftp失败:{}", e.getMessage(), e); + throw e; + } finally { + sftpPool.close(channelSftp); + } + } finally { + lock.unlock(); + } + } + + @Override + public void close() throws Exception { + // 什么都不做 + } + + @Override + public void afterSingletonsInstantiated() { + WritableDataSourceRegistry.registerFlowDataSource(this); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/filter/IndexFilter.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/filter/IndexFilter.java new file mode 100644 index 00000000..413542a9 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/filter/IndexFilter.java @@ -0,0 +1,36 @@ +package com.jiuyv.sptccc.agile.framework.filter; + +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Map; + +/** + * 解决 AppScan 扫描的安全问题 + * @author ren_chao + */ +@Component +public class IndexFilter implements Filter { + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + Map parameterMap = request.getParameterMap(); + HttpServletResponse httpResponse = (HttpServletResponse) response; + HttpServletRequest httpRequest = (HttpServletRequest) request; + if ("/public/".equals(httpRequest.getServletPath()) && !parameterMap.isEmpty() || "OPTIONS".equals(httpRequest.getMethod())) { + httpResponse.getWriter().write("Access Denied"); + httpResponse.setContentType("text/plain"); + httpResponse.setStatus(HttpStatus.FORBIDDEN.value()); + return; + } + chain.doFilter(request, response); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/filter/LoginFilter.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/filter/LoginFilter.java new file mode 100644 index 00000000..5b85e19e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/filter/LoginFilter.java @@ -0,0 +1,93 @@ +package com.jiuyv.sptccc.agile.framework.filter; + + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.jiuyv.sptccc.agile.common.constant.CacheNames; +import com.jiuyv.sptccc.agile.common.constant.FrontConstant; +import com.jiuyv.sptccc.agile.framework.config.LocalCache; +import com.jiuyv.sptccc.agile.framework.web.service.SysLoginService; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import com.jiuyv.sptccc.agile.portal.domain.LoginBody; +import com.jiuyv.sptccc.agile.portal.domain.LoginUser; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Lazy; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.AuthenticationServiceException; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +import static com.jiuyv.sptccc.agile.portal.controller.BaseController.BASE_PREFIX; + +@Component +public class LoginFilter extends UsernamePasswordAuthenticationFilter { + private static final Logger LOGGER = LoggerFactory.getLogger(LoginFilter.class); + + private final LocalCache localCache; + + private final ObjectMapper objectMapper; + + private final SysLoginService loginService; + + public LoginFilter(@Lazy AuthenticationManager authenticationManager, LocalCache localCache, + ObjectMapper objectMapper, SysLoginService loginService) { + super(authenticationManager); + this.localCache = localCache; + this.objectMapper = objectMapper; + this.loginService = loginService; + // 验证成功 + super.setAuthenticationSuccessHandler((req, resp, auth) -> AjaxResult.success(resp)); + // 验证失败 + super.setAuthenticationFailureHandler((req, resp, ex) -> AjaxResult.error(resp, ex.getMessage())); + super.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(BASE_PREFIX + "/login", "POST")); + } + + @Override + public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException { + if (!"POST".equals(request.getMethod())) { + throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod()); + } + LoginBody loginBody; + try { + loginBody = objectMapper.readValue(request.getInputStream(), LoginBody.class); + } catch (IOException e) { + LOGGER.info("请求参数异常", e); + throw new BadCredentialsException("请求参数异常"); + } + String code = loginBody.getCode(); + if (StringUtils.isBlank(code)) { + throw new BadCredentialsException("验证码不能为空"); + } + LoginUser user = (LoginUser) request.getSession().getAttribute(FrontConstant.LOGIN_USER_INFO); + if (user == null) { + throw new BadCredentialsException("非法操作"); + } + String phone = user.getUser().getPhonenumber(); + String captcha = localCache.getValueOfCacheName(CacheNames.CACHE_5MIN, phone, String.class); + if (!code.equals(captcha)) { + loginService.saveLoginLog(user.getUsername(), FrontConstant.FAIL, "验证码错误"); + throw new BadCredentialsException("验证码错误"); + } + + + + localCache.removeValueOfCacheName(CacheNames.CACHE_5MIN, phone); + request.getSession().removeAttribute(FrontConstant.LOGIN_USER_INFO); + UsernamePasswordAuthenticationToken result = new UsernamePasswordAuthenticationToken(user, + null, user.getAuthorities()); + setDetails(request, result); + loginService.saveLoginLog(user.getUsername(), FrontConstant.SUCCESS, "登录成功"); + return result; + + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/filter/RateLimiterFilter.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/filter/RateLimiterFilter.java new file mode 100644 index 00000000..aacc4997 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/filter/RateLimiterFilter.java @@ -0,0 +1,60 @@ +package com.jiuyv.sptccc.agile.framework.filter; + +import com.jiuyv.sptccc.agile.common.constant.CacheNames; +import com.jiuyv.sptccc.agile.common.utils.IpUtils; +import com.jiuyv.sptccc.agile.framework.config.LocalCache; +import com.jiuyv.sptccc.agile.framework.config.properties.ConsoleProperties; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import io.github.bucket4j.Bandwidth; +import io.github.bucket4j.Bucket; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.time.Duration; + +/** + * 速率限制器过滤器 + * + */ +@Order(1) +@Component +public class RateLimiterFilter implements Filter { + + private final LocalCache localCache; + + private final ConsoleProperties consoleProperties; + + public RateLimiterFilter(LocalCache localCache, ConsoleProperties consoleProperties) { + this.localCache = localCache; + this.consoleProperties = consoleProperties; + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + String host = IpUtils.getIpAddr((HttpServletRequest) request); + if (!allowRequest(host)) { + AjaxResult.error((HttpServletResponse) response, "请求频繁,请稍后再试"); + return; + } + chain.doFilter(request, response); + } + + private boolean allowRequest(String key) { + Bucket bucket = localCache.getValueOfCacheName(CacheNames.CACHE_30S, key, Bucket.class); + if (bucket == null) { + bucket = Bucket.builder() + .addLimit(Bandwidth.simple(consoleProperties.getRateCapacity(), Duration.ofMinutes(1))).build(); + localCache.setValueOfCacheName(CacheNames.CACHE_30S, key, bucket); + } + return bucket.tryConsume(1); + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/web/exception/GlobalExceptionHandler.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/web/exception/GlobalExceptionHandler.java new file mode 100644 index 00000000..731b5f67 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/web/exception/GlobalExceptionHandler.java @@ -0,0 +1,124 @@ +package com.jiuyv.sptccc.agile.framework.web.exception; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.validation.BindException; +import org.springframework.validation.BindingResult; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Map; + +/** + * 全局异常处理器 + * + * @author admin + */ +@RestControllerAdvice +public class GlobalExceptionHandler { + private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); + + private final ObjectMapper objectMapper; + + public GlobalExceptionHandler(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } + + /** + * 权限校验异常 + */ + @ExceptionHandler(AccessDeniedException.class) + public AjaxResult handleAccessDeniedException(AccessDeniedException e, HttpServletRequest request, HttpServletResponse response) { + response.setStatus(301); + + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',权限校验失败'{}'", requestURI, e.getMessage()); + return AjaxResult.error(HttpStatus.FORBIDDEN.value(), "没有权限,请联系管理员授权"); + } + + /** + * 请求方式不支持 + */ + @ExceptionHandler(HttpRequestMethodNotSupportedException.class) + public AjaxResult handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e, + HttpServletRequest request, HttpServletResponse response) { + response.setStatus(301); + + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod()); + return AjaxResult.error(e.getMessage()); + } + + /** + * 业务异常 + */ + @ExceptionHandler({ServiceException.class}) + public AjaxResult handleServiceException(ServiceException e) { + log.error(e.getMessage(), e); + Integer code = e.getCode(); + return code != null ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage()); + } + + /** + * 自定义验证异常 + */ + @ExceptionHandler(BindException.class) + public AjaxResult handleBindException(BindException e) { + log.error(e.getMessage(), e); + String message = e.getAllErrors().get(0).getDefaultMessage(); + return AjaxResult.error(message); + } + + /** + * 自定义验证异常 + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { + log.error("数据校验出现问题{},异常类型:{}", e.getMessage(), e.getClass()); + BindingResult bindingResult = e.getBindingResult(); + + Map errorMap = new HashMap<>(); + bindingResult.getFieldErrors().forEach((fieldError) -> errorMap.put(fieldError.getField(), fieldError.getDefaultMessage())); + String msg; + try { + msg = objectMapper.writeValueAsString(errorMap); + } catch (JsonProcessingException ex) { + log.info("errorMap解析错误", ex); + msg = null; + } + return msg == null ? AjaxResult.error() : AjaxResult.error(msg); + } + + /** + * 拦截未知的运行时异常 + */ + @ExceptionHandler({RuntimeException.class}) + public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request) { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',发生未知异常.", requestURI, e); + return AjaxResult.error("系统忙,请稍后再试"); + } + + /** + * 系统异常 + */ + @ExceptionHandler(Exception.class) + public AjaxResult handleException(Exception e, HttpServletRequest request, HttpServletResponse response) { + response.setStatus(301); + + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',发生系统异常.", requestURI, e); + return AjaxResult.error(e.getMessage()); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/web/service/SysLoginService.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/web/service/SysLoginService.java new file mode 100644 index 00000000..42660738 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/web/service/SysLoginService.java @@ -0,0 +1,351 @@ +package com.jiuyv.sptccc.agile.framework.web.service; + + +import com.anji.captcha.model.common.ResponseModel; +import com.anji.captcha.model.vo.CaptchaVO; +import com.anji.captcha.service.CaptchaService; +import com.jiuyv.sptccc.agile.api.fegin.dto.publicPhoneMsgLog.ReqPublicPhoneMsgSendDTO; +import com.jiuyv.sptccc.agile.common.constant.BaseResultCode; +import com.jiuyv.sptccc.agile.common.constant.CacheNames; +import com.jiuyv.sptccc.agile.common.constant.FeignApiConstant; +import com.jiuyv.sptccc.agile.common.constant.FrontConstant; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.common.utils.IpUtils; +import com.jiuyv.sptccc.agile.common.utils.ServletUtils; +import com.jiuyv.sptccc.agile.common.utils.StringUtil; +import com.jiuyv.sptccc.agile.dto.PortalUserDTO; +import com.jiuyv.sptccc.agile.dto.ReqLogDTO; +import com.jiuyv.sptccc.agile.dto.ResUserPasswordDTO; +import com.jiuyv.sptccc.agile.feign.portal.ExternalInterfaceFeign; +import com.jiuyv.sptccc.agile.feign.portal.PortalLogFeign; +import com.jiuyv.sptccc.agile.feign.portal.PortalUserFeign; +import com.jiuyv.sptccc.agile.framework.config.LocalCache; +import com.jiuyv.sptccc.agile.framework.config.properties.ConsoleProperties; +import com.jiuyv.sptccc.agile.portal.domain.LoginBody; +import com.jiuyv.sptccc.agile.portal.domain.LoginUser; +import com.jiuyv.sptccc.agile.portal.domain.TblPortalUser; +import com.jiuyv.sptccc.agile.portal.dto.RePasswordDTO; +import com.jiuyv.sptccc.agile.portal.utils.SecurityUtils; +import eu.bitwalker.useragentutils.UserAgent; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Lazy; +import org.springframework.core.task.TaskExecutor; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpSession; +import java.util.Date; +import java.util.Map; + +/** + * 登录校验方法 + * + * @author admin + */ +@Component +public class SysLoginService { + private static final Logger LOGGER = LoggerFactory.getLogger(SysLoginService.class); + + private static final String CAPTCHA_CODE_KEY = "code"; + private static final String CAPTCHA_TIME_KEY = "time"; + private static final String CAPTCHA_OVERTIME = "5分钟"; + + private final LocalCache localCache; + private final PortalUserFeign userService; + private final PortalLogFeign logFeign; + private final UserDetailsService userDetailsService; + private final SysSecretService secretService; + private final PasswordEncoder passwordEncoder; + private final CaptchaService captchaService; + private final ExternalInterfaceFeign externalInterfaceFeign; + private final ConsoleProperties consoleProperties; + private final TaskExecutor taskExecutor; + + public SysLoginService(LocalCache localCache, PortalUserFeign userService, PortalLogFeign logFeign, + UserDetailsService userDetailsService, SysSecretService secretService, + @Lazy PasswordEncoder passwordEncoder, CaptchaService captchaService, + ExternalInterfaceFeign externalInterfaceFeign, ConsoleProperties consoleProperties, + @Lazy TaskExecutor taskExecutor) { + this.localCache = localCache; + this.userService = userService; + this.logFeign = logFeign; + this.userDetailsService = userDetailsService; + this.secretService = secretService; + this.passwordEncoder = passwordEncoder; + this.captchaService = captchaService; + this.externalInterfaceFeign = externalInterfaceFeign; + this.consoleProperties = consoleProperties; + this.taskExecutor = taskExecutor; + } + + /** + * 登录 校验用户 + */ + public String verifyUser(LoginBody loginBody) { + CaptchaVO captchaVO = new CaptchaVO(); + captchaVO.setCaptchaVerification(loginBody.getCaptchaVerification()); + ResponseModel response = captchaService.verification(captchaVO); + if (!response.isSuccess()) { + throw new ServiceException(response.getRepMsg()); + } + LoginUser user = (LoginUser) userDetailsService.loadUserByUsername(loginBody.getUsername()); + // 检查用户锁定状态 + checkLock(user.getUser()); + String phone = user.getUser().getPhonenumber(); + if (StringUtils.isBlank(phone)) { + saveLoginLog(user.getUsername(), FrontConstant.FAIL, "该用户没有绑定手机号"); + throw new ServiceException("该用户没有绑定手机号"); + } + if (!passwordEncoder.matches(secretService.decodePassword(loginBody.getPassword()), user.getPassword())) { + // 更新用户锁定状态 + saveLoginLog(user.getUsername(), FrontConstant.FAIL, "用户名或密码错误"); + userLocked(user.getUser()); + } + // 记录登录信息 + recordLoginInfo(user.getUserId()); + ServletUtils.getSession().setAttribute(FrontConstant.LOGIN_USER_INFO, user); + return StringUtil.strHide(phone); + } + + /** + * 发送登录验证码 + * + */ + public String loginVerifyCode() { + LoginUser user = (LoginUser) ServletUtils.getSession().getAttribute(FrontConstant.LOGIN_USER_INFO); + if (user == null) { + throw new ServiceException("非法操作,用户未验证"); + } + return sendPhoneCode(user.getUser().getPhonenumber(), FrontConstant.LOGIN_VERIFY_CODE_TEMPLATE); + } + + /** + * 找回密码验证码 + * + */ + public String rePasswordVerifyCode() { + RePasswordDTO rePasswordDTO = (RePasswordDTO) ServletUtils.getSession().getAttribute(FrontConstant.RE_PASSWORD_USER_INFO); + if (rePasswordDTO == null) { + throw new ServiceException("非法操作"); + } + return sendPhoneCode(rePasswordDTO.getPhoneNumber(), FrontConstant.RE_PASSWORD_VERIFY_CODE_TEMPLATE); + } + + + /** + * 发送手机验证码 + */ + private String sendPhoneCode(String phone, String msgTemplate) { + String captcha = localCache.getValueOfCacheName(CacheNames.CACHE_1MIN, phone, String.class); + if (StringUtils.isNotBlank(captcha)) { + throw new ServiceException("请1分钟以后再试"); + } + captcha = StringUtil.randomNumber(6); + localCache.setValueOfCacheName(CacheNames.CACHE_1MIN, phone, captcha); + localCache.setValueOfCacheName(CacheNames.CACHE_5MIN, phone, captcha); + LOGGER.info("手机{}验证码:{}", StringUtil.strHide(phone), captcha); + + if (consoleProperties.isCaptchaTest()) { + return captcha; + } + ReqPublicPhoneMsgSendDTO msgLog = new ReqPublicPhoneMsgSendDTO(); + msgLog.setPhoneNumber(phone); + msgLog.setMsgTemplateCode(msgTemplate); + Map msgParams = msgLog.getMsgMapParams(); + msgLog.setSysType(FeignApiConstant.SYS_TYPE); + msgParams.put(CAPTCHA_CODE_KEY, captcha); + msgParams.put(CAPTCHA_TIME_KEY, CAPTCHA_OVERTIME); + try { + R r = externalInterfaceFeign.sendPhoneMsg(msgLog); + if (!r.isSuccess()) { + throw new ServiceException(r.getMsg()); + } + } catch (Exception e) { + LOGGER.error("远程服务调用失败", e); + throw new ServiceException(e.getMessage()); + } + return null; + } + + /** + * 记录登录信息 + * + * @param userId 用户ID + */ + private void recordLoginInfo(Long userId) { + PortalUserDTO tblSysUser = new PortalUserDTO(); + tblSysUser.setUserId(userId); + tblSysUser.setLoginIp(IpUtils.getIpAddr(ServletUtils.getRequest())); + tblSysUser.setLoginDate(new Date()); + + //密码错次清零及用户状态恢复正常 + tblSysUser.setLoginErrorCount(0); + tblSysUser.setIsLocked("0"); + userService.resetUserError(tblSysUser); + } + + /** + * 检查用户的锁定状态 + * + */ + private void checkLock(TblPortalUser user) { + Integer errorCount = user.getLoginErrorCount(); + if (errorCount == null || errorCount < 5) { + return; + } + Date errorTime = user.getLastLoginErrorTime(); + String msg; + long timeSlot = 0; + if (errorTime == null || (timeSlot = System.currentTimeMillis() - errorTime.getTime()) < 1800000) { + msg = "您的账户已被锁定,请" + (30 - (timeSlot / 60000)) + "分钟之后再次尝试"; + LOGGER.error(msg); + throw new ServiceException(msg); + } + } + + /** + * 更新用户的锁定状态 + * + */ + private void userLocked(TblPortalUser user) { + Integer errorCount = user.getLoginErrorCount(); + errorCount = errorCount == null ? 0 : errorCount; + PortalUserDTO userDTO = new PortalUserDTO(); + userDTO.setUserId(user.getUserId()); + String msg; + if (errorCount < 4) { + userDTO.setLoginErrorCount(errorCount + 1); + userDTO.setLastLoginErrorTime(new Date()); + userService.resetUserError(userDTO);// 修改用户 + msg = "账户或密码错误,您还有" + (5 - userDTO.getLoginErrorCount()) + "次登录机会"; + LOGGER.error(msg); + throw new ServiceException(msg); + } + userDTO.setLoginErrorCount(errorCount + 1); + userDTO.setLastLoginErrorTime(new Date()); + userService.resetUserError(userDTO);// 修改用户 + msg = "您的账户已被锁定,请30分钟之后再次尝试登录"; + LOGGER.error(msg); + throw new ServiceException(msg); + } + + /** + * 找回密码,根据用户名查询手机号 + * + */ + public String getPhoneByUser(String username) { + LoginUser user = (LoginUser) userDetailsService.loadUserByUsername(username); + String phone = user.getUser().getPhonenumber(); + if (StringUtils.isBlank(phone)) { + throw new ServiceException("该用户没有绑定手机号"); + } + RePasswordDTO rePasswordDTO = new RePasswordDTO(); + rePasswordDTO.setPhoneNumber(phone); + rePasswordDTO.setUserId(user.getUserId()); + ServletUtils.getSession().setAttribute(FrontConstant.RE_PASSWORD_USER_INFO, rePasswordDTO); + return StringUtil.strHide(phone); + } + + /** + * 找回密码 - 验证手机验证码 + * + */ + public void verifyPhoneCode(String phoneCode) { + RePasswordDTO rePasswordDTO = (RePasswordDTO) ServletUtils.getSession() + .getAttribute(FrontConstant.RE_PASSWORD_USER_INFO); + + if (rePasswordDTO == null) { + throw new ServiceException("非法操作"); + } + String phone = rePasswordDTO.getPhoneNumber(); + String captcha = localCache.getValueOfCacheName(CacheNames.CACHE_5MIN, phone, String.class); + if (!phoneCode.equals(captcha)) { + throw new ServiceException("验证码错误"); + } + localCache.removeValueOfCacheName(CacheNames.CACHE_5MIN, phone); + rePasswordDTO.setCheckPassed(true); + } + + /** + * 找回密码 - 密码重置 + * + */ + public void resetPassword(ResUserPasswordDTO userPasswordDTO) { + HttpSession session = ServletUtils.getSession(); + RePasswordDTO rePasswordDTO = (RePasswordDTO) session.getAttribute(FrontConstant.RE_PASSWORD_USER_INFO); + if (rePasswordDTO == null || !rePasswordDTO.isCheckPassed()) { + throw new ServiceException("非法操作,手机未验证"); + } + userPasswordDTO.setUserId(rePasswordDTO.getUserId()); + String password = secretService.decodePassword(userPasswordDTO.getPassword()); + userPasswordDTO.setPassword(passwordEncoder.encode(password)); + R r = userService.resetUserPwd(userPasswordDTO); + if (!BaseResultCode.SUCCESS.getCode().equals(r.getCode())) { + LOGGER.error("密码重置失败:{}", r.getMsg()); + throw new ServiceException("密码重置失败。" + r.getMsg()); + } + session.removeAttribute(FrontConstant.RE_PASSWORD_USER_INFO); + session.invalidate(); + } + + /** + * 用户中心修改密码 + * + */ + public void changePassword(ResUserPasswordDTO userPasswordDTO) { + String oldPassword = secretService.decodePassword(userPasswordDTO.getOldPassword()); + TblPortalUser user = SecurityUtils.getLoginUser().getUser(); + if (!passwordEncoder.matches(oldPassword, user.getPassword())) { + throw new ServiceException("原密码错误"); + } + String password = secretService.decodePassword(userPasswordDTO.getPassword()); + if (password.equals(oldPassword)) { + throw new ServiceException("新密码不能与原密码相同"); + } + String encodePassword = passwordEncoder.encode(password); + userPasswordDTO.setPassword(encodePassword); + userPasswordDTO.setUserId(user.getUserId()); + R r = userService.resetUserPwd(userPasswordDTO); + if (!BaseResultCode.SUCCESS.getCode().equals(r.getCode())) { + LOGGER.error("修改密码失败:{}", r.getMsg()); + throw new ServiceException("修改密码失败。" + r.getMsg()); + } + ServletUtils.getSession().invalidate(); + } + + /** + * 保存登录日志 + * + */ + public void saveLoginLog(String username, String status, String msg) { + UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); + String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); + taskExecutor.execute(()->{ + ReqLogDTO logDTO = new ReqLogDTO(); + logDTO.setUserName(username); + logDTO.setMsg(msg); + logDTO.setStatus(status); + logDTO.setIpaddr(ip); + logDTO.setLoginLocation(IpUtils.getRealAddressByIP(ip, consoleProperties.isAddressEnabled())); + logDTO.setOs(userAgent.getOperatingSystem().getName()); + logDTO.setBrowser(userAgent.getBrowser().getName()); + try { + R r = logFeign.recordLoginInfo(logDTO); + if (!r.isSuccess()) { + LOGGER.error(r.getMsg()); + } + } catch (ServiceException e) { + LOGGER.error("登录日志保存失败:{}", e.getMessage(), e); + } + }); + + + + } + + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/web/service/SysSecretService.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/web/service/SysSecretService.java new file mode 100644 index 00000000..6e40e70e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/web/service/SysSecretService.java @@ -0,0 +1,62 @@ +package com.jiuyv.sptccc.agile.framework.web.service; + +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.framework.config.properties.ConsoleProperties; +import org.apache.commons.codec.binary.Base64; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.crypto.Cipher; +import java.nio.charset.StandardCharsets; +import java.security.GeneralSecurityException; +import java.security.KeyPair; +import java.security.KeyPairGenerator; + +/** + * 处理密钥服务 + */ +@Service +public class SysSecretService { + private static final Logger LOG = LoggerFactory.getLogger(SysSecretService.class); + private static final int KEY_SIZE = 1024; + // 密码超时时间,7天(单位ms) + private static final long TIME_OUT = 604800000; + private final KeyPair keyPair; + private final Cipher cipher; + + public SysSecretService(ConsoleProperties consoleProperties) throws GeneralSecurityException { + // 初始化生成密钥对 + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); + keyPairGenerator.initialize(KEY_SIZE); + this.keyPair = keyPairGenerator.generateKeyPair(); + this.cipher = Cipher.getInstance(consoleProperties.getEncryptionAlgorithm()); + this.cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate()); + } + + /** + * 获取公钥 + */ + public String getPublicKey() { + return Base64.encodeBase64String(keyPair.getPublic().getEncoded()); + } + + /** + * 对前端密码解密 + */ + public synchronized String decodePassword(String password) { + try { + byte[] bytes = cipher.doFinal(Base64.decodeBase64(password)); + String[] ps = new String(bytes, StandardCharsets.UTF_8).split(","); + if (System.currentTimeMillis() - Long.parseLong(ps[1]) > TIME_OUT) { + LOG.info(">>>>>密码过期>>>>>"); + throw new ServiceException("密码超时"); + } + return ps[0]; + } catch (GeneralSecurityException e) { + LOG.info(">>>>>密码无效>>>>>", e); + throw new ServiceException("密码无效"); + } + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/web/service/UserDetailsServiceImpl.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/web/service/UserDetailsServiceImpl.java new file mode 100644 index 00000000..8ab48249 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/framework/web/service/UserDetailsServiceImpl.java @@ -0,0 +1,68 @@ +package com.jiuyv.sptccc.agile.framework.web.service; + +import com.jiuyv.sptccc.agile.common.constant.FrontConstant; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.common.enums.UserStatus; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.dto.PortalUserDTO; +import com.jiuyv.sptccc.agile.feign.portal.PortalUserFeign; +import com.jiuyv.sptccc.agile.portal.domain.LoginUser; +import com.jiuyv.sptccc.agile.portal.domain.TblPortalUser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 用户验证处理 + * + * @author admin + */ +@Service +public class UserDetailsServiceImpl implements UserDetailsService { + private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class); + + @Autowired + private PortalUserFeign userService; + + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + R userRes = userService.selectUserByUserName(username); + if (!userRes.isSuccess()) { + throw new ServiceException(userRes.getMsg()); + } + PortalUserDTO userDTO = userRes.getData(); + if (userDTO == null) { + log.info("登录用户:{} 不存在.", username); + throw new ServiceException("用户不存在"); + } + if (UserStatus.DELETED.getCode().equals(userDTO.getDelFlag())) { + log.info("登录用户:{} 已被删除.", username); + throw new ServiceException("用户不存在"); + } + if (UserStatus.DISABLE.getCode().equals(userDTO.getStatus())) { + log.info("登录用户:{} 已被停用.", username); + throw new ServiceException("用户已被停用"); + } + TblPortalUser user = new TblPortalUser(); + BeanUtils.copyProperties(userDTO, user); + // 第一次登录,只有基本权限,修改密码后获取所有权限 + List authorities = new ArrayList<>(); + authorities.add(new SimpleGrantedAuthority(FrontConstant.AUTHORITY_BASE)); + Integer pwdUpdateTime = userDTO.getPwdRemainderDate(); + if (userDTO.getFirstFlag() != null && (pwdUpdateTime == null || pwdUpdateTime >= 0)) { + authorities.add(new SimpleGrantedAuthority(FrontConstant.AUTHORITY_ALL)); + } + return new LoginUser(user.getUserId(), user.getDeptId(), user, authorities); + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/BaseController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/BaseController.java new file mode 100644 index 00000000..a5fa9a3a --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/BaseController.java @@ -0,0 +1,46 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.common.constant.BaseResultCode; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import feign.Response; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; + +import java.util.Collection; +import java.util.Optional; + +/** + * web层通用数据处理 + * + */ +public abstract class BaseController { + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + public static final String BASE_PREFIX = "/public"; + + protected AjaxResult successResult(R r) { + if (!BaseResultCode.SUCCESS.getCode().equals(r.getCode())) { + throw new ServiceException(r.getMsg()); + } + return AjaxResult.success(r.getData()); + } + + protected TableDataPage successResult(TableDataPage tableDataPage) { + if (tableDataPage.getCode() != HttpStatus.OK.value()) { + throw new ServiceException(tableDataPage.getMsg()); + } + return tableDataPage; + } + + + protected String getResponseHeader(Response feignResponse, String key) { + Collection header = feignResponse.headers().get(key); + Optional first = header.stream().findFirst(); + return first.orElse(""); + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/CaptchaController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/CaptchaController.java new file mode 100644 index 00000000..a8a4a5b5 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/CaptchaController.java @@ -0,0 +1,72 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.anji.captcha.model.common.ResponseModel; +import com.anji.captcha.model.vo.CaptchaVO; +import com.anji.captcha.service.CaptchaService; +import com.anji.captcha.util.StringUtils; +import com.jiuyv.sptccc.agile.common.annotation.LogSimpleResult; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +import static com.jiuyv.sptccc.agile.portal.controller.BaseController.BASE_PREFIX; + +/** + * 登录行为验证码 + * + */ +@RestController +@RequestMapping(BASE_PREFIX + "/captcha") +public class CaptchaController { + + private final CaptchaService captchaService; + + public CaptchaController(CaptchaService captchaService) { + this.captchaService = captchaService; + } + + /** + * 获取验证码图片 + * + */ + @LogSimpleResult + @PostMapping("/get") + public AjaxResult get(@RequestBody CaptchaVO data, HttpServletRequest request) { + assert request.getRemoteHost()!=null; + data.setBrowserInfo(getRemoteId(request)); + return AjaxResult.success(captchaService.get(data)); + } + + /** + * 校验验证码 + * + */ + @PostMapping("/check") + public AjaxResult check(@RequestBody CaptchaVO data, HttpServletRequest request) { + data.setBrowserInfo(getRemoteId(request)); + return AjaxResult.success(captchaService.check(data)); + } + + private static String getRemoteId(HttpServletRequest request) { + String xfwd = request.getHeader("X-Forwarded-For"); + String ip = getRemoteIpFromXfwd(xfwd); + String ua = request.getHeader("user-agent"); + if (StringUtils.isNotBlank(ip)) { + return ip + ua; + } + return request.getRemoteAddr() + ua; + } + + private static String getRemoteIpFromXfwd(String xfwd) { + if (StringUtils.isNotBlank(xfwd)) { + String[] ipList = xfwd.split(","); + return StringUtils.trim(ipList[0]); + } + return null; + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/ContentController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/ContentController.java new file mode 100644 index 00000000..83d192ad --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/ContentController.java @@ -0,0 +1,143 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.common.annotation.Anonymous; +import com.jiuyv.sptccc.agile.common.annotation.LogSimpleResult; +import com.jiuyv.sptccc.agile.common.enums.ContentShowType; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.PortalContentDTO; +import com.jiuyv.sptccc.agile.dto.ReqPageDTO; +import com.jiuyv.sptccc.agile.feign.portal.PortalContentFeign; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import feign.Response; +import org.apache.commons.io.IOUtils; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.List; + +import static com.jiuyv.sptccc.agile.portal.controller.BaseController.BASE_PREFIX; + +/** + * 内容获取 + */ +@RestController +@RequestMapping(BASE_PREFIX + "/content") +public class ContentController extends BaseController { + private final PortalContentFeign portalContentFeign; + + public ContentController(PortalContentFeign portalContentFeign) { + this.portalContentFeign = portalContentFeign; + } + + /** + * 最新动态列表 + * + * @return 分页数据 + */ + @LogSimpleResult + @GetMapping("/list") + @Anonymous + public TableDataPage list(ReqPageDTO pageDTO) { + return successResult(portalContentFeign.getInformationList(pageDTO)); + } + + /** + * 获取首页banner + * + * @return banner列表 + */ + @LogSimpleResult + @GetMapping("/banner") + @Anonymous + public AjaxResult> banner() { + return successResult(portalContentFeign.getContentList(ContentShowType.BANNER.getValue())); + } + + /** + * 获取内容详情 + * + * @param contentId 内容id + * @return 内容详情 + */ + @LogSimpleResult + @GetMapping("/contentInfo") + @Anonymous + public AjaxResult contentInfo(@RequestParam("contentId") Long contentId) { + return successResult(portalContentFeign.contentInfo(contentId)); + } + + + /** + * 获取应用场景列表 + * + * @return 内容列表 + */ + @LogSimpleResult + @GetMapping("/scenesList") + @Anonymous + public AjaxResult> scenesList() { + return successResult(portalContentFeign.getContentList(ContentShowType.SCENES.getValue())); + } + + /** + * 获取数据产品内容 + * + * @return 内容 + */ + @LogSimpleResult + @GetMapping("/dataProduct") + @Anonymous + public AjaxResult> dataProduct() { + return successResult(portalContentFeign.getContentList(ContentShowType.DATA_PRODUCT.getValue())); + } + + /** + * 处理图片请求 + */ + @GetMapping("/images/{imageName}") + @Anonymous + @LogSimpleResult + public void getImage(@PathVariable("imageName") String imageName, HttpServletResponse response) throws IOException { + Response feignResponse = portalContentFeign.getImage(imageName); + response.setContentType(MediaType.IMAGE_JPEG_VALUE); + IOUtils.copy(feignResponse.body().asInputStream(), response.getOutputStream()); + } + + /** + * sdk 文件下载 + */ + @GetMapping("/sdkDownload") + @Anonymous + @LogSimpleResult + public void sdkDownload(HttpServletResponse response) throws IOException { + Response feignResponse = portalContentFeign.sdkDownload(); + response.addHeader("Content-Length", getResponseHeader(feignResponse,"content-length")); + response.addHeader("Content-Disposition", "attachment;filename=sdk.rar"); + response.addHeader("Content-Type", "text/html; charset=utf-8"); + IOUtils.copy(feignResponse.body().asInputStream(), response.getOutputStream()); + } + + /** + * 文档下载 + */ + @GetMapping("/wordDownload") + @Anonymous + @LogSimpleResult + public void wordDownload(HttpServletResponse response) throws IOException { + Response feignResponse = portalContentFeign.wordDownload(); + response.addHeader("Content-Length", getResponseHeader(feignResponse,"content-length")); + String fileName = URLEncoder.encode("(用户版)实验室使用说明.pdf", "UTF-8"); + response.addHeader("Content-Disposition", "attachment;filename=" + fileName); + response.addHeader("Content-Type", "text/html; charset=utf-8"); + IOUtils.copy(feignResponse.body().asInputStream(), response.getOutputStream()); + } + + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/DataApiController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/DataApiController.java new file mode 100644 index 00000000..30758d2e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/DataApiController.java @@ -0,0 +1,83 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptcc.agile.dataservice.dto.enums.ApiCrypto; +import com.jiuyv.sptcc.agile.dataservice.dto.request.api.ApiPageRequest; +import com.jiuyv.sptcc.agile.dataservice.dto.request.api.ApiUserRequest; +import com.jiuyv.sptcc.agile.dataservice.dto.response.api.ApiResponse; +import com.jiuyv.sptcc.agile.dataservice.dto.response.api.DataApiResponse; +import com.jiuyv.sptcc.agile.dataservice.dto.response.api.DataApiStatisticsResponse; +import com.jiuyv.sptccc.agile.common.annotation.Anonymous; +import com.jiuyv.sptccc.agile.common.constant.BaseResultCode; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.common.core.page.PageResult; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.feign.portal.ExternalInterfaceFeign; +import com.jiuyv.sptccc.agile.portal.utils.SecurityUtils; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import static com.jiuyv.sptccc.agile.portal.controller.BaseController.BASE_PREFIX; + +/** + * 我的应用和数据API + */ +@RestController +@RequestMapping(BASE_PREFIX + "/api") +public class DataApiController extends BaseController { + + private final ExternalInterfaceFeign externalInterfaceFeign; + + public DataApiController(ExternalInterfaceFeign externalInterfaceFeign) { + this.externalInterfaceFeign = externalInterfaceFeign; + } + + /** + * 数据服务 - API列表 + * + */ + @GetMapping("/list") + @Anonymous + public TableDataPage list(ApiPageRequest pageDTO) { + pageDTO.setStatus(ApiCrypto.ApiState.RELEASE.getCode()); + pageDTO.setApiType(null); + return getTableDataInfo(externalInterfaceFeign.getDataApiPage(pageDTO)); + } + + /** + * 我的应用 - API列表 + * + */ + @GetMapping("/userApiList") + public TableDataPage userApiList(ApiUserRequest pageDTO) { + pageDTO.setMemberId(SecurityUtils.getUserId().toString()); + return getTableDataInfo(externalInterfaceFeign.getUserApiList(pageDTO)); + } + + /** + * 我的应用 - 接口调用统计 + * + */ + @GetMapping("/userApiStatisticsList") + public TableDataPage userApiStatisticsList(ApiUserRequest pageDTO) { + pageDTO.setMemberId(SecurityUtils.getUserId().toString()); + return getTableDataInfo(externalInterfaceFeign.getUserApiStatistics(pageDTO)); + } + + /** + * 转换分页,兼容前端 + * + */ + private TableDataPage getTableDataInfo(R> r) { + if (!BaseResultCode.SUCCESS.getCode().equals(r.getCode())) { + throw new ServiceException(r.getMsg()); + } + PageResult pageData = r.getData(); + TableDataPage tableData = new TableDataPage<>(pageData.getRows(), pageData.getTotal().intValue()); + tableData.setCode(HttpStatus.OK.value()); + return tableData; + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/LoginUserController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/LoginUserController.java new file mode 100644 index 00000000..e21a00bc --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/LoginUserController.java @@ -0,0 +1,144 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.common.annotation.Anonymous; +import com.jiuyv.sptccc.agile.common.utils.StringUtil; +import com.jiuyv.sptccc.agile.dto.ResUserPasswordDTO; +import com.jiuyv.sptccc.agile.framework.web.service.SysLoginService; +import com.jiuyv.sptccc.agile.framework.web.service.SysSecretService; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import com.jiuyv.sptccc.agile.portal.domain.LoginBody; +import com.jiuyv.sptccc.agile.portal.domain.TblPortalUser; +import com.jiuyv.sptccc.agile.portal.dto.ResLoginDTO; +import com.jiuyv.sptccc.agile.portal.dto.UserInfoDTO; +import com.jiuyv.sptccc.agile.portal.utils.SecurityUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import static com.jiuyv.sptccc.agile.portal.controller.BaseController.BASE_PREFIX; + +/** + * 用户验证授权 + * + */ +@RestController +@RequestMapping(BASE_PREFIX) +public class LoginUserController { + private final SysLoginService loginService; + private final SysSecretService secretService; + + public LoginUserController(SysLoginService loginService, SysSecretService secretService) { + this.loginService = loginService; + this.secretService = secretService; + } + + /** + * 获取RSA公钥 + * + */ + @GetMapping("/getPublicKey") + @Anonymous + public AjaxResult getPublicKey() { + AjaxResult result = AjaxResult.success(); + result.setData(secretService.getPublicKey()); + return result; + } + + /** + * 登录-验证用户 + */ + @PostMapping("/verifyUser") + @Anonymous + public AjaxResult login(@Validated @RequestBody LoginBody loginBody) { + ResLoginDTO loginDTO = new ResLoginDTO(); + loginDTO.setPhonenumber(loginService.verifyUser(loginBody)); + return AjaxResult.success(loginDTO); + } + + /** + * 发送手机验证码 + * + */ + @GetMapping("/sendPhoneCode") + @Anonymous + public AjaxResult sendPhoneCode() { + ResLoginDTO loginDTO = new ResLoginDTO(); + loginDTO.setCode(loginService.loginVerifyCode()); + return AjaxResult.success(loginDTO); + } + + + /** + * 获取用户信息 + * + */ + @GetMapping("/getInfo") + public AjaxResult getInfo() { + TblPortalUser user = SecurityUtils.getLoginUser().getUser(); + UserInfoDTO userInfoDTO = new UserInfoDTO(); + BeanUtils.copyProperties(user, userInfoDTO); + userInfoDTO.setPhonenumber(StringUtil.strHide(user.getPhonenumber())); + userInfoDTO.setSocialCreditCode(StringUtil.strHide(user.getSocialCreditCode())); + String firstFlag = user.getFirstFlag(); + userInfoDTO.setFirstFlag(firstFlag == null ? "0" : "1"); + return AjaxResult.success(userInfoDTO); + } + + /** + * 用户中心修改密码 + */ + @PostMapping("/changePassword") + public AjaxResult changePassword(@RequestBody ResUserPasswordDTO userPasswordDTO) { + loginService.changePassword(userPasswordDTO); + return AjaxResult.success(); + } + + + /** + * 找回密码 - 填写账号 + */ + @GetMapping("/rePwd/getPhoneByUser") + @Anonymous + public AjaxResult getPhoneByUser(String username) { + ResLoginDTO loginDTO = new ResLoginDTO(); + loginDTO.setPhonenumber(loginService.getPhoneByUser(username)); + return AjaxResult.success(loginDTO); + } + + /** + * 找回密码 - 发送手机验证码 + */ + @GetMapping("/rePwd/sendPhoneCode") + @Anonymous + public AjaxResult rePasswordSendPhoneCode() { + ResLoginDTO loginDTO = new ResLoginDTO(); + loginDTO.setCode(loginService.rePasswordVerifyCode()); + return AjaxResult.success(loginDTO); + } + + /** + * 找回密码 - 验证手机验证码 + * + */ + @GetMapping("/rePwd/verifyPhoneCode") + @Anonymous + public AjaxResult verifyPhoneCode(String phoneCode) { + loginService.verifyPhoneCode(phoneCode); + return AjaxResult.success(); + } + + /** + * 找回密码 - 重置密码 + * + */ + @PostMapping("/rePwd/reset") + @Anonymous + public AjaxResult resetPassword(@RequestBody ResUserPasswordDTO userPasswordDTO) { + loginService.resetPassword(userPasswordDTO); + return AjaxResult.success(); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/MyApplyController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/MyApplyController.java new file mode 100644 index 00000000..14dbfa7e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/MyApplyController.java @@ -0,0 +1,90 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.common.constant.FeignApiConstant; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.DockerApplyReviewDTO; +import com.jiuyv.sptccc.agile.dto.DockerDownloadApplyDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerApplyPageDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerDownApplyPageDTO; +import com.jiuyv.sptccc.agile.feign.portal.DockerApplyFeign; +import com.jiuyv.sptccc.agile.feign.portal.DockerDownloadApplyFeign; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import feign.Response; +import org.apache.commons.io.IOUtils; +import org.springframework.http.HttpStatus; +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.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLDecoder; + +import static com.jiuyv.sptccc.agile.portal.controller.BaseController.BASE_PREFIX; + +/** + * 我的申请 + */ +@RestController +@RequestMapping(BASE_PREFIX + "/myApply") +public class MyApplyController extends BaseController { + private final DockerApplyFeign dockerApplyFeign; + private final DockerDownloadApplyFeign dockerDownloadApplyFeign; + + public MyApplyController(DockerApplyFeign dockerApplyFeign, DockerDownloadApplyFeign dockerDownloadApplyFeign) { + this.dockerApplyFeign = dockerApplyFeign; + this.dockerDownloadApplyFeign = dockerDownloadApplyFeign; + } + + /** + * 实验室上传申请列表 + */ + @GetMapping("/laboratoryList") + public TableDataPage laboratoryList(ReqDockerApplyPageDTO pageDTO) { + return successResult(dockerApplyFeign.getList(pageDTO)); + } + + /** + * 实验室上传申请详情 + * + */ + @GetMapping("/laboratoryDetail") + public AjaxResult detail(@RequestParam("reviewId") Long reviewId) { + return successResult(dockerApplyFeign.detail(reviewId)); + } + + /** + * 数据导出申请列表 + * + */ + @GetMapping("/exportList") + public TableDataPage exportList(ReqDockerDownApplyPageDTO pageDTO) { + return successResult(dockerDownloadApplyFeign.getList(pageDTO)); + } + + + /** + * 数据导出申请 - 下载 + */ + @GetMapping("/download") + public void download(@RequestParam("downloadApplyId") Long downloadApplyId, + @RequestParam(defaultValue = "false") Boolean isQuery, + HttpServletResponse response) throws IOException { + Response feignResponse = dockerDownloadApplyFeign.download(downloadApplyId, isQuery); + if (HttpStatus.OK.value() != feignResponse.status()) { + String msg = getResponseHeader(feignResponse, FeignApiConstant.EXC_MSG_KEY); + throw new ServiceException(URLDecoder.decode(msg, "UTF-8")); + } + if (isQuery) { + AjaxResult.success(response); + return; + } + response.addHeader("Content-Length", getResponseHeader(feignResponse,"Content-Length")); + response.addHeader("Content-Disposition", getResponseHeader(feignResponse, "Content-Disposition")); + IOUtils.copy(feignResponse.body().asInputStream(), response.getOutputStream()); + } + + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/MyLabController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/MyLabController.java new file mode 100644 index 00000000..afea5df2 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/MyLabController.java @@ -0,0 +1,91 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.DockerFileDTO; +import com.jiuyv.sptccc.agile.dto.DockerWithUserDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerDownApplyDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerWithUserDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerWithUserPageDTO; +import com.jiuyv.sptccc.agile.feign.portal.DockerWithUserFeign; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +import static com.jiuyv.sptccc.agile.portal.controller.BaseController.BASE_PREFIX; + +/** + * 我的实验室 + */ +@RestController +@RequestMapping(BASE_PREFIX + "/myLab") +public class MyLabController extends BaseController { + private final DockerWithUserFeign dockerWithUserFeign; + + public MyLabController(DockerWithUserFeign dockerWithUserFeign) { + this.dockerWithUserFeign = dockerWithUserFeign; + } + + /** + * 实验室列表 + */ + @GetMapping("/list") + public TableDataPage list(ReqDockerWithUserPageDTO pageDTO) { + return successResult(dockerWithUserFeign.getList(pageDTO)); + } + + /** + * 详情 + * + */ + @GetMapping("/info") + public AjaxResult getInfo(@RequestParam("applyId") Long applyId) { + return successResult(dockerWithUserFeign.getInfo(applyId)); + } + + + /** + * 重启 + * + */ + @PostMapping("/restart") + public AjaxResult restart(@RequestBody ReqDockerWithUserDTO reqDTO) { + return successResult(dockerWithUserFeign.restart(reqDTO)); + } + + /** + * 数据注入 -> 列表查询接口使用 我的资源 - 列表 + * + */ + @PostMapping("/dataInjection") + public AjaxResult dataInjection(@Validated @RequestBody ReqDockerWithUserDTO reqDTO) { + return successResult(dockerWithUserFeign.fileBind(reqDTO)); + } + + + /** + * 申请下载 - 获取文件列表 + * + */ + @GetMapping("/fileList") + public AjaxResult> getFileList(@RequestParam("applyId") Long applyId) { + return successResult(dockerWithUserFeign.fileList(applyId)); + } + + + /** + * 申请下载 - 申请 + * + */ + @PostMapping("/applyDown") + public AjaxResult applyDown(@Validated @RequestBody ReqDockerDownApplyDTO reqDTO) { + return successResult(dockerWithUserFeign.applyDown(reqDTO)); + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/MyMessageController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/MyMessageController.java new file mode 100644 index 00000000..c9599ba4 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/MyMessageController.java @@ -0,0 +1,55 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.PortalMessageDTO; +import com.jiuyv.sptccc.agile.dto.ReqPageDTO; +import com.jiuyv.sptccc.agile.feign.portal.PortalMessageFeign; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import static com.jiuyv.sptccc.agile.portal.controller.BaseController.BASE_PREFIX; + +/** + * 我的消息 + */ +@RestController +@RequestMapping(BASE_PREFIX + "/myMessage") +public class MyMessageController extends BaseController { + + private final PortalMessageFeign portalMessageFeign; + + public MyMessageController(PortalMessageFeign portalMessageFeign) { + this.portalMessageFeign = portalMessageFeign; + } + + + /** + * 列表 + */ + @GetMapping("/page") + public TableDataPage getList(ReqPageDTO pageDTO) { + return successResult(portalMessageFeign.getMessageList(pageDTO)); + } + + /** + * 用户消息详情 + */ + @PostMapping("/detail") + public AjaxResult detail(@RequestParam("msgId") Long msgId) { + return successResult(portalMessageFeign.detail(msgId)); + } + + /** + * 置为已读【传空列表[]是全部置为已读】 + * + */ + @PostMapping("/markRead") + public AjaxResult markRead(@RequestBody Long[] msgIds) { + return successResult(portalMessageFeign.markRead(msgIds)); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/MyResourcesController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/MyResourcesController.java new file mode 100644 index 00000000..f33579b0 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/controller/MyResourcesController.java @@ -0,0 +1,67 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.ReqFileDTO; +import com.jiuyv.sptccc.agile.dto.UploadFileDTO; +import com.jiuyv.sptccc.agile.feign.portal.ResourceFeign; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import static com.jiuyv.sptccc.agile.portal.controller.BaseController.BASE_PREFIX; + +/** + * 我的资源 + */ +@RestController +@RequestMapping(BASE_PREFIX + "/myResources") +public class MyResourcesController extends BaseController { + + private final ResourceFeign resourceFeign; + + public MyResourcesController(ResourceFeign resourceFeign) { + this.resourceFeign = resourceFeign; + } + + /** + * 上传文件 + * @param file 上传的文件 + * @param remarks 说明 + * + */ + @PostMapping("/uploadFile") + public AjaxResult uploadFile(@RequestParam("file") MultipartFile file, + @RequestParam("fileType") String fileType, + @RequestParam("remarks") String remarks) { + if (remarks.length() > 1000) { + throw new ServiceException("内容说明长度超过最大1000个字符"); + } + return successResult(resourceFeign.uploadFiles(file, fileType, remarks)); + } + + /** + * 列表 && 数据注入列表 + * + */ + @GetMapping("/list") + public TableDataPage getList(ReqFileDTO pageDTO) { + return successResult(resourceFeign.getList(pageDTO)); + } + + + /** + * 删除文件 + * + */ + @DeleteMapping("/delete") + public AjaxResult delete(@RequestParam("fileId") Long fileId) { + return successResult(resourceFeign.delete(fileId)); + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/domain/AjaxResult.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/domain/AjaxResult.java new file mode 100644 index 00000000..3e621abd --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/domain/AjaxResult.java @@ -0,0 +1,227 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.jiuyv.sptccc.agile.portal.utils.SpringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.Serializable; + +/** + * 操作消息提醒 + * + * @author admin + */ +public class AjaxResult implements Serializable { + protected static Logger logger = LoggerFactory.getLogger(AjaxResult.class); + + private static final long serialVersionUID = 1L; + + /** + * 状态码 + */ + private int code; + + /** + * 返回信息 + */ + private String msg; + + /** + * 数据对象 + */ + private T data; + + /** + * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。 + */ + public AjaxResult() { + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + /** + * 初始化一个新创建的 AjaxResult 对象 + * + * @param code 状态码 + * @param msg 返回内容 + */ + public AjaxResult(int code, String msg) { + this.code = code; + this.msg = msg; + } + + /** + * 初始化一个新创建的 AjaxResult 对象 + * + * @param code 状态码 + * @param msg 返回内容 + * @param data 数据对象 + */ + public AjaxResult(int code, String msg, T data) { + this.code = code; + this.msg = msg; + this.data = data; + + } + + /** + * 返回成功消息 + * + * @return 成功消息 + */ + public static AjaxResult success() { + return AjaxResult.success("操作成功"); + } + + /** + * 返回成功数据 + * + * @return 成功消息 + */ + public static AjaxResult success(T data) { + return AjaxResult.success("操作成功", data); + } + + /** + * 返回成功消息 + * + * @param msg 返回内容 + * @return 成功消息 + */ + public static AjaxResult success(String msg) { + return AjaxResult.success(msg, null); + } + + /** + * 返回成功消息 + * + * @param msg 返回内容 + * @param data 数据对象 + * @return 成功消息 + */ + public static AjaxResult success(String msg, T data) { + return new AjaxResult<>(200, msg, data); + } + + + /** + * 通过 HttpServletResponse 返回success结果 + * + */ + public static void success(HttpServletResponse response, String message) throws IOException { + responseResult(response, success(message)); + } + + /** + * 通过 HttpServletResponse 返回success结果 + * + */ + public static void success(HttpServletResponse response) throws IOException { + responseResult(response, success()); + } + + /** + * 返回错误消息 + * + * @return + */ + public static AjaxResult error() { + return AjaxResult.error("操作失败"); + } + + /** + * 返回错误消息 + * + * @param msg 返回内容 + * @return 警告消息 + */ + public static AjaxResult error(String msg) { + return AjaxResult.error(msg, null); + } + + /** + * 返回错误消息 + * + * @param msg 返回内容 + * @param data 数据对象 + * @return 警告消息 + */ + public static AjaxResult error(String msg, T data) { + logger.error("服务报错:" + msg); + if (msg.contains("Exception")) { + return new AjaxResult<>(500, "系统内部错误", data); + } + + if (msg.contains("script")) { + return new AjaxResult<>(500, "系统参数错误", data); + } + return new AjaxResult<>(500, msg, data); + } + + /** + * 返回错误消息 + * + * @param code 状态码 + * @param msg 返回内容 + * @return 警告消息 + */ + public static AjaxResult error(int code, String msg) { + return new AjaxResult<>(code, msg, null); + } + + + + /** + * 通过 HttpServletResponse 返回error结果 + * + */ + public static void error(HttpServletResponse response, String message) throws IOException { + responseResult(response, error(message)); + } + + /** + * 通过 HttpServletResponse 返回error结果 + * + */ + public static void error(HttpServletResponse response, int code, String msg) throws IOException { + responseResult(response, error(code, msg)); + } + + + + /** + * 通过 HttpServletResponse 返回结果 + * + */ + public static void responseResult(HttpServletResponse response, Object result) throws IOException { + response.setContentType("application/json;charset=utf-8"); + ObjectMapper objectMapper = SpringUtils.getBean(ObjectMapper.class); + response.getWriter().print(objectMapper.writeValueAsString(result)); + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/domain/LoginBody.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/domain/LoginBody.java new file mode 100644 index 00000000..8a1c8881 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/domain/LoginBody.java @@ -0,0 +1,78 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +import javax.validation.constraints.NotBlank; + +/** + * 用户登录对象 + * + * @author admin + */ +public class LoginBody { + /** + * 用户名 + */ + @NotBlank(message = "用户名不能为空") + private String username; + + /** + * 用户密码 + */ + @NotBlank(message = "密码不能为空") + private String password; + + /** + * 验证码(这里为手机验证码) + */ + private String code; + + /** + * 交互验证码验证 + */ + private String captchaVerification; + + /** + * 唯一标识 + */ + private String uuid; + + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getCaptchaVerification() { + return captchaVerification; + } + + public void setCaptchaVerification(String captchaVerification) { + this.captchaVerification = captchaVerification; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/domain/LoginUser.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/domain/LoginUser.java new file mode 100644 index 00000000..40758f1e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/domain/LoginUser.java @@ -0,0 +1,147 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Collection; + + +/** + * 登录用户身份权限 + * + * @author admin + */ +public class LoginUser implements UserDetails { + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + private Long userId; + + /** + * 部门ID + */ + private Long deptId; + + /** + * 权限列表 + */ + private final Collection authorities; + + /** + * 用户信息 + */ + private TblPortalUser user; + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public LoginUser(Long userId, Long deptId, TblPortalUser user, Collection authorities) { + this.userId = userId; + this.deptId = deptId; + this.user = user; + this.authorities = authorities; + } + + //需要忽略 + @Override + public String getPassword() { + return user.getPassword(); + } + + @Override + public String getUsername() { + return user.getUserName(); + } + + /** + * 账户是否未过期,过期无法验证 + */ + //需要忽略 + @Override + public boolean isAccountNonExpired() { + return true; + } + + /** + * 指定用户是否解锁,锁定的用户无法进行身份验证 + * + */ + //需要忽略 + @Override + public boolean isAccountNonLocked() { + return true; + } + + /** + * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证 + * + */ + //需要忽略 + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + /** + * 是否可用 ,禁用的用户不能身份验证 + * + */ + //需要忽略 + @Override + public boolean isEnabled() { + return true; + } + + public TblPortalUser getUser() { + return user; + } + + public void setUser(TblPortalUser user) { + this.user = user; + } + + @Override + public Collection getAuthorities() { + return authorities; + } + + @Override + public String toString() { + return user.getUserName(); + } + + @Override + public int hashCode() { + return user.getUserName().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + if (obj == null) { + return false; + } + if (this.getClass() == obj.getClass()) { + return this.toString().equals(obj.toString()); + } + return false; + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalUser.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalUser.java new file mode 100644 index 00000000..57ab2b46 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalUser.java @@ -0,0 +1,648 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@JsonInclude +public class TblPortalUser implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 用户id + */ + private Long userId; + + /** + * 版本号 + */ + private Long versionNum; + + /** + * 随机码 + */ + private String recToken; + + /** + * 所属机构 + */ + private Long deptId; + + /** + * 用户账号 + */ + private String userName; + + /** + * 用户姓名 + */ + private String nickName; + + /** + * 用户类型 + */ + private String userType; + + /** + * 用户邮箱 + */ + private String email; + + /** + * 手机号码 + */ + private String phonenumber; + + /** + * 用户性别 + */ + private String sex; + + /** + * 头像地址 + */ + private String avatar; + + /** + * 密码 + */ + private String password; + + /** + * 企业名称 + */ + private String enterpriseName; + + /** + * 行业类别 + */ + private String industryCategory; + + /** + * 社会统一信用代码 + */ + private String socialCreditCode; + + /** + * 企业行业 + */ + private String enterpriseIndustry; + + /** + * 企业地址 + */ + private String enterpriseAddress; + + /** + * 帐号状态 + */ + private String status; + + /** + * 删除标志 + */ + private String delFlag; + + /** + * 最后登录ip + */ + private String loginIp; + + /** + * 最后登录时间 + */ + private Date loginDate; + + /** + * 锁定状态 + */ + private String isLocked; + + /** + * 登陆错误次数 + */ + private Integer loginErrorCount; + + /** + * 登陆错误时间 + */ + private Date lastLoginErrorTime; + + /** + * 备注 + */ + private String remark; + + /** + * 创建者 + */ + private String createBy; + + /** + * 创建用户 + */ + private String createByName; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 更新者 + */ + private String updateBy; + + /** + * 更新用户 + */ + private String updateByName; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** + * 首次登录标志 + */ + private String firstFlag; + + /** + * 密码过期剩余天数 + */ + private Integer pwdRemainderDate; + + /** + * 请求参数 + */ + private Map params; + + /** + * Get用户id + */ + public Long getUserId() { + return userId; + } + + /** + * Set用户id + */ + public void setUserId(Long userId) { + this.userId = userId; + } + + /** + * Get版本号 + */ + public Long getVersionNum() { + return versionNum; + } + + /** + * Set版本号 + */ + public void setVersionNum(Long versionNum) { + this.versionNum = versionNum; + } + + /** + * Get随机码 + */ + public String getRecToken() { + return recToken; + } + + /** + * Set随机码 + */ + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + /** + * Get所属机构 + */ + public Long getDeptId() { + return deptId; + } + + /** + * Set所属机构 + */ + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + /** + * Get用户账号 + */ + public String getUserName() { + return userName; + } + + /** + * Set用户账号 + */ + public void setUserName(String userName) { + this.userName = userName; + } + + /** + * Get用户姓名 + */ + public String getNickName() { + return nickName; + } + + /** + * Set用户姓名 + */ + public void setNickName(String nickName) { + this.nickName = nickName; + } + + /** + * Get用户类型 + */ + public String getUserType() { + return userType; + } + + /** + * Set用户类型 + */ + public void setUserType(String userType) { + this.userType = userType; + } + + /** + * Get用户邮箱 + */ + public String getEmail() { + return email; + } + + /** + * Set用户邮箱 + */ + public void setEmail(String email) { + this.email = email; + } + + /** + * Get手机号码 + */ + public String getPhonenumber() { + return phonenumber; + } + + /** + * Set手机号码 + */ + public void setPhonenumber(String phonenumber) { + this.phonenumber = phonenumber; + } + + /** + * Get用户性别 + */ + public String getSex() { + return sex; + } + + /** + * Set用户性别 + */ + public void setSex(String sex) { + this.sex = sex; + } + + /** + * Get头像地址 + */ + public String getAvatar() { + return avatar; + } + + /** + * Set头像地址 + */ + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + /** + * Get密码 + */ + public String getPassword() { + return password; + } + + /** + * Set密码 + */ + public void setPassword(String password) { + this.password = password; + } + + /** + * Get企业名称 + */ + public String getEnterpriseName() { + return enterpriseName; + } + + /** + * Set企业名称 + */ + public void setEnterpriseName(String enterpriseName) { + this.enterpriseName = enterpriseName; + } + + /** + * Get行业类别 + */ + public String getIndustryCategory() { + return industryCategory; + } + + /** + * Set行业类别 + */ + public void setIndustryCategory(String industryCategory) { + this.industryCategory = industryCategory; + } + + /** + * Get社会统一信用代码 + */ + public String getSocialCreditCode() { + return socialCreditCode; + } + + /** + * Set社会统一信用代码 + */ + public void setSocialCreditCode(String socialCreditCode) { + this.socialCreditCode = socialCreditCode; + } + + /** + * Get企业行业 + */ + public String getEnterpriseIndustry() { + return enterpriseIndustry; + } + + /** + * Set企业行业 + */ + public void setEnterpriseIndustry(String enterpriseIndustry) { + this.enterpriseIndustry = enterpriseIndustry; + } + + /** + * Get企业地址 + */ + public String getEnterpriseAddress() { + return enterpriseAddress; + } + + /** + * Set企业地址 + */ + public void setEnterpriseAddress(String enterpriseAddress) { + this.enterpriseAddress = enterpriseAddress; + } + + /** + * Get帐号状态 + */ + public String getStatus() { + return status; + } + + /** + * Set帐号状态 + */ + public void setStatus(String status) { + this.status = status; + } + + /** + * Get删除标志 + */ + public String getDelFlag() { + return delFlag; + } + + /** + * Set删除标志 + */ + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + /** + * Get最后登录ip + */ + public String getLoginIp() { + return loginIp; + } + + /** + * Set最后登录ip + */ + public void setLoginIp(String loginIp) { + this.loginIp = loginIp; + } + + /** + * Get最后登录时间 + */ + public Date getLoginDate() { + return loginDate; + } + + /** + * Set最后登录时间 + */ + public void setLoginDate(Date loginDate) { + this.loginDate = loginDate; + } + + /** + * Get锁定状态 + */ + public String getIsLocked() { + return isLocked; + } + + /** + * Set锁定状态 + */ + public void setIsLocked(String isLocked) { + this.isLocked = isLocked; + } + + /** + * Get登陆错误次数 + */ + public Integer getLoginErrorCount() { + return loginErrorCount; + } + + /** + * Set登陆错误次数 + */ + public void setLoginErrorCount(Integer loginErrorCount) { + this.loginErrorCount = loginErrorCount; + } + + /** + * Get登陆错误时间 + */ + public Date getLastLoginErrorTime() { + return lastLoginErrorTime; + } + + /** + * Set登陆错误时间 + */ + public void setLastLoginErrorTime(Date lastLoginErrorTime) { + this.lastLoginErrorTime = lastLoginErrorTime; + } + + /** + * Get备注 + */ + public String getRemark() { + return remark; + } + + /** + * Set备注 + */ + public void setRemark(String remark) { + this.remark = remark; + } + + /** + * Get创建者 + */ + public String getCreateBy() { + return createBy; + } + + /** + * Set创建者 + */ + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + /** + * Get创建用户 + */ + public String getCreateByName() { + return createByName; + } + + /** + * Set创建用户 + */ + public void setCreateByName(String createByName) { + this.createByName = createByName; + } + + /** + * Get创建时间 + */ + public Date getCreateTime() { + return createTime; + } + + /** + * Set创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * Get更新者 + */ + public String getUpdateBy() { + return updateBy; + } + + /** + * Set更新者 + */ + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + /** + * Get更新用户 + */ + public String getUpdateByName() { + return updateByName; + } + + /** + * Set更新用户 + */ + public void setUpdateByName(String updateByName) { + this.updateByName = updateByName; + } + + /** + * Get更新时间 + */ + public Date getUpdateTime() { + return updateTime; + } + + /** + * Set更新时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getFirstFlag() { + return firstFlag; + } + + public void setFirstFlag(String firstFlag) { + this.firstFlag = firstFlag; + } + + public Integer getPwdRemainderDate() { + return pwdRemainderDate; + } + + public void setPwdRemainderDate(Integer pwdRemainderDate) { + this.pwdRemainderDate = pwdRemainderDate; + } + + public Map getParams() { + if (params == null) { + params = new HashMap<>(); + } + return params; + } + + public void setParams(Map params) { + this.params = params; + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/dto/RePasswordDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/dto/RePasswordDTO.java new file mode 100644 index 00000000..0770f1dc --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/dto/RePasswordDTO.java @@ -0,0 +1,47 @@ +package com.jiuyv.sptccc.agile.portal.dto; + +import java.io.Serializable; + + +public class RePasswordDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + private Long userId; + + /** + * 手机号 + */ + private String phoneNumber; + + /** + * 验证码是否校验通过 + */ + private Boolean checkPassed = false; + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public Boolean isCheckPassed() { + return checkPassed; + } + + public void setCheckPassed(Boolean checkPassed) { + this.checkPassed = checkPassed; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/dto/ResLoginDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/dto/ResLoginDTO.java new file mode 100644 index 00000000..8d87b35b --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/dto/ResLoginDTO.java @@ -0,0 +1,28 @@ +package com.jiuyv.sptccc.agile.portal.dto; + +public class ResLoginDTO { + /** + * 手机号 + */ + private String phonenumber; + /** + * 手机验证码(测试期间会返回给前端) + */ + private String code; + + public String getPhonenumber() { + return phonenumber; + } + + public void setPhonenumber(String phonenumber) { + this.phonenumber = phonenumber; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/dto/UserInfoDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/dto/UserInfoDTO.java new file mode 100644 index 00000000..01d1c378 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/dto/UserInfoDTO.java @@ -0,0 +1,242 @@ +package com.jiuyv.sptccc.agile.portal.dto; + +import java.io.Serializable; + +public class UserInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 用户id + */ + private Long userId; + + /** + * 随机码 + */ + private String recToken; + + /** + * 用户账号 + */ + private String userName; + + /** + * 用户姓名 + */ + private String nickName; + + /** + * 用户类型 + */ + private String userType; + + /** + * 用户邮箱 + */ + private String email; + + /** + * 手机号码 + */ + private String phonenumber; + + /** + * 用户性别 + */ + private String sex; + + /** + * 头像地址 + */ + private String avatar; + + /** + * 企业名称 + */ + private String enterpriseName; + + /** + * 行业类别 + */ + private String industryCategory; + + /** + * 社会统一信用代码 + */ + private String socialCreditCode; + + /** + * 企业行业 + */ + private String enterpriseIndustry; + + /** + * 企业地址 + */ + private String enterpriseAddress; + + /** + * 帐号状态 + */ + private String status; + + /** + * 备注 + */ + private String remark; + + /** + * 首次登录标志 + */ + private String firstFlag; + + /** + * 密码过期剩余天数 + */ + private Integer pwdRemainderDate; + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getRecToken() { + return recToken; + } + + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getUserType() { + return userType; + } + + public void setUserType(String userType) { + this.userType = userType; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPhonenumber() { + return phonenumber; + } + + public void setPhonenumber(String phonenumber) { + this.phonenumber = phonenumber; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + public String getEnterpriseName() { + return enterpriseName; + } + + public void setEnterpriseName(String enterpriseName) { + this.enterpriseName = enterpriseName; + } + + public String getIndustryCategory() { + return industryCategory; + } + + public void setIndustryCategory(String industryCategory) { + this.industryCategory = industryCategory; + } + + public String getSocialCreditCode() { + return socialCreditCode; + } + + public void setSocialCreditCode(String socialCreditCode) { + this.socialCreditCode = socialCreditCode; + } + + public String getEnterpriseIndustry() { + return enterpriseIndustry; + } + + public void setEnterpriseIndustry(String enterpriseIndustry) { + this.enterpriseIndustry = enterpriseIndustry; + } + + public String getEnterpriseAddress() { + return enterpriseAddress; + } + + public void setEnterpriseAddress(String enterpriseAddress) { + this.enterpriseAddress = enterpriseAddress; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getFirstFlag() { + return firstFlag; + } + + public void setFirstFlag(String firstFlag) { + this.firstFlag = firstFlag; + } + + public Integer getPwdRemainderDate() { + return pwdRemainderDate; + } + + public void setPwdRemainderDate(Integer pwdRemainderDate) { + this.pwdRemainderDate = pwdRemainderDate; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/utils/SecurityUtils.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/utils/SecurityUtils.java new file mode 100644 index 00000000..53c1191f --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/utils/SecurityUtils.java @@ -0,0 +1,55 @@ +package com.jiuyv.sptccc.agile.portal.utils; + +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.portal.domain.LoginUser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; + +/** + * 安全服务工具类 + * + * @author admin + */ +public final class SecurityUtils { + private static final Logger LOGGER = LoggerFactory.getLogger(SecurityUtils.class); + + private SecurityUtils() {} + + /** + * 用户ID + **/ + public static Long getUserId() { + return getLoginUser().getUserId(); + } + + /** + * 获取用户账户 + **/ + public static String getUsername() { + return getLoginUser().getUsername(); + } + + + /** + * 获取用户 + **/ + public static LoginUser getLoginUser() { + try { + return (LoginUser) getAuthentication().getPrincipal(); + } catch (RuntimeException e) { + LOGGER.debug("获取用户信息异常", e); + throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED.value()); + } + } + + /** + * 获取Authentication + */ + public static Authentication getAuthentication() { + return SecurityContextHolder.getContext().getAuthentication(); + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/utils/SpringUtils.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/utils/SpringUtils.java new file mode 100644 index 00000000..61fd87bd --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/java/com/jiuyv/sptccc/agile/portal/utils/SpringUtils.java @@ -0,0 +1,38 @@ +package com.jiuyv.sptccc.agile.portal.utils; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.stereotype.Component; + + +/** + * spring工具类 方便在非spring管理环境中获取bean + * + * @author admin + */ +@Component +public final class SpringUtils implements BeanFactoryPostProcessor { + /** + * Spring应用上下文环境 + */ + private static ConfigurableListableBeanFactory beanFactory; + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + setBeanFactory(beanFactory); + } + + public static void setBeanFactory(ConfigurableListableBeanFactory beanFactory) { + SpringUtils.beanFactory = beanFactory; + } + + /** + * 获取类型为requiredType的对象 + * + */ + public static T getBean(Class clz) throws BeansException { + return beanFactory.getBean(clz); + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/application.yaml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/application.yaml new file mode 100644 index 00000000..1a996a79 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/application.yaml @@ -0,0 +1,137 @@ +# 开发环境配置 +server: + port: 18081 #本地 + servlet: + # session超时时间 + session: + timeout: 1800 + cookie: + secure: true + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # 连接数满后的排队数,默认为100 + accept-count: 1000 + threads: + # tomcat最大线程数,默认为200 + max: 800 + # Tomcat启动初始化的线程数,默认值10 + min-spare: 100 +# 日志配置 +logging: + level: + com.jiuyv.sptccc.agile: info + org.springframework: warn + + +spring: + application: + name: portal-gateway + mvc: + static-path-pattern: /public/** + web: + resources: + staticLocations: + - 'classpath:/view/' + # 文件上传 + servlet: + multipart: + # 单个文件大小 + max-file-size: 100MB + # 设置总上传的文件大小 + max-request-size: 100MB + jackson: + date-format: yyyy-MM-dd HH:mm:ss # 常用的时间格式 + #default-property-inclusion: non_null # 忽略空对象 + serialization: + fail-on-empty-beans: false # 序列化空对象时不抛出异常 + indent-output: true # 输出格式化为缩进的JSON + write-dates-as-timestamps: false # 日期序列化为时间戳而不是ISO-8601格式 + deserialization: + fail-on-unknown-properties: false # 反序列化时忽略未知的属性 + cache: + type: caffeine + caffeine.spec: maximumSize=2000,expireAfterWrite=1h + + +feign: + okhttp: + enabled: true + client: + config: + default: + connectTimeout: 10000 + readTimeout: 20000 + loggerLevel: basic + compression: + request: + enabled: true # 开启请求压缩 + mime-types: text/html,application/xml,application/json #设置压缩的数据类型 + min-request-size: 2048 # 设置触发压缩的大小下 + response: + enabled: true # 开启请求压缩 + +management: + security: + enabled: false + metrics: + export: + prometheus: + enabled: true + endpoint: + metrics: + enabled: true + prometheus: + enabled: true + pause: + enabled: true + restart: + enabled: true + endpoints: + web: + exposure: + include: pause,restart,refresh,prometheus,health,service-registry,metrics + +aj: + captcha: + # 缓存类型,此处为本地缓存 + cache-type: local + # 本地缓存的最大值,超过这个值会清除缓存 + cache-number: 5000 + # 定时清除过期缓存(单位:秒),设置为0代表不执行 + timing-clear: 180 + # 滑动拼图验证码的图片路径 + jigsaw: classpath:images/jigsaw + # 点选文字验证码的图片路径 + pic-click: classpath:images/pic-click + # 验证码类型,默认实例化两种验证码 + type: default + # 水印文字,使用Unicode编码,此处为“我的水印” + water-mark: + # 水印字体,使用Unicode编码,此处为文泉驿正黑 + water-font: WenQuanZhengHei.ttf + # 点选文字验证码的文字字体,使用Unicode编码,此处为文泉驿正黑 + font-type: WenQuanZhengHei.ttf + # 校验滑动拼图允许误差偏移量,单位为像素(默认为5) + slip-offset: 5 + # 是否启用AES加密坐标(true表示启用,false表示禁用) + aes-status: false + # 滑动干扰项,可选值为0、1、2 + interference-options: 0 + +# 项目相关配置 +conosle: + # 手机验证码测试开关,true为测试 + captchaTest: true + # 限制IP每分钟的请求数 + rateCapacity: 2000000 + +#远程微服务地址 +remoteUrl: + gateway: http://localhost:18084 + +sentinel-sftp: + host: 172.16.12.108 + username: flink + password: flink123 + path: /home/flink/sysfile/sentinel.json diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/banner.txt b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/banner.txt new file mode 100644 index 00000000..3b5fdcc1 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/banner.txt @@ -0,0 +1,6 @@ +Application Version: ${conosle.version} +Spring Boot Version: ${spring-boot.version} +//////////////////////////////////////////////////////////////////// +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // +// 永不宕机 永无BUG // +//////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/fonts/WenQuanZhengHei.ttf b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/fonts/WenQuanZhengHei.ttf new file mode 100644 index 00000000..f84e9feb Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/fonts/WenQuanZhengHei.ttf differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/fonts/license.txt b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/fonts/license.txt new file mode 100644 index 00000000..719f68f0 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/fonts/license.txt @@ -0,0 +1,55 @@ +文泉驿是一个开源汉字字体项目 + +由旅美学者房骞骞(FangQ) + +于2004年10月创建 + +集中力量解决GNU/Linux + +高质量中文字体匮乏的状况 + +目前,文泉驿已经开发并发布了 + +第一个完整覆盖GB18030汉字 + +(包含27000多个汉字) + +的多规格点阵汉字字型文件 + +第一个覆盖GBK字符集的 + +开源矢量字型文件(文泉驿正黑) + +并提供了目前包含字符数目最多的 + +开源字体——GNU Unifont——中 + +绝大多数中日韩文相关的符号 + +这些字型文件已经逐渐成为 + +主流Linux/Unix发行版 + +中文桌面的首选中文字体 + +目前Ubuntu、Fedora、Slackware + +Magic Linux、CDLinux + +使用文泉驿作为默认中文字体 + +Debian、Gentoo、Mandriva + +ArchLinux、Frugalware + +则提供了官方源支持 + +而FreeBSD则在其ports中有提供 + +所以,今天我们所要分享的就是 + +文泉驿正黑体 + +可在Linux/UNIX,Windows + +Mac OS和嵌入式操作系统中使用 \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/i18n/messages.properties b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/i18n/messages.properties new file mode 100644 index 00000000..b0227e51 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/i18n/messages.properties @@ -0,0 +1,43 @@ +#错误消息 +not.null=* 必须填写 +user.jcaptcha.error=验证码错误 +user.jcaptcha.expire=验证码已失效 +user.not.exists=用户不存在/密码错误 +user.password.not.match=用户不存在/密码错误 +user.secret.key.error=用户密钥无效 +user.login.error=用户登陆信息非法 +user.again.login.error=当前用户已在另一台机器登录,您被迫下线 +user.login.invalid=登陆信息过期,请重新登陆 +user.jcaptcha.frequent.requests=请勿频繁获取验证码 +user.jcaptcha.ponit.error=图形验证码已失效 +user.password.retry.limit.count=密码输入错误,您还有{0}次登录机会 +user.password.retry.limit.exceed=密码输入错误{0}次,用户已被锁定,请10分钟之后再尝试登录 +user.locked=用户已被锁定,请10分钟之后再尝试登录 +user.password.delete=对不起,您的账号已被删除 +user.blocked=用户已封禁,请联系管理员 +role.blocked=角色已封禁,请联系管理员 +user.logout.success=退出成功 +length.not.valid=长度必须在{min}到{max}个字符之间 +user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头 +user.password.not.valid=* 5-50个字符 +user.email.not.valid=邮箱格式错误 +user.mobile.phone.number.not.valid=手机号格式错误 +user.login.success=登录成功 +user.register.success=注册成功 +user.notfound=请重新登录 +user.forcelogout=管理员强制退出,请重新登录 +user.unknown.error=未知错误,请重新登录 +##文件上传消息 +upload.exceed.maxSize=上传的文件大小超出限制的文件大小!
允许的文件最大大小是:{0}MB! +upload.filename.exceed.length=上传的文件名最长{0}个字符 +upload.filename.is.required=文件名称不能为空 +upload.type.is.valid=上传文件分类非法 +##权限 +no.permission=您没有数据的权限,请联系管理员添加权限 [{0}] +no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}] +no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}] +no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}] +no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}] +no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}] +data.not.exist=数据不存在 +data.is.expired=数据已过期,请重新加载 \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/original/bg1.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/original/bg1.png new file mode 100644 index 00000000..93b70d4c Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/original/bg1.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/original/bg2.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/original/bg2.png new file mode 100644 index 00000000..f60f7b73 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/original/bg2.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/original/bg3.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/original/bg3.png new file mode 100644 index 00000000..13585062 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/original/bg3.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/original/bg4.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/original/bg4.png new file mode 100644 index 00000000..8c05e9c3 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/original/bg4.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/original/bg5.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/original/bg5.png new file mode 100644 index 00000000..bcd00c73 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/original/bg5.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/slidingBlock/1.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/slidingBlock/1.png new file mode 100644 index 00000000..d6b975b5 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/slidingBlock/1.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/slidingBlock/2.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/slidingBlock/2.png new file mode 100644 index 00000000..b1482d48 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/slidingBlock/2.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/slidingBlock/3.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/slidingBlock/3.png new file mode 100644 index 00000000..cdbb0b18 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/slidingBlock/3.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/slidingBlock/4.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/slidingBlock/4.png new file mode 100644 index 00000000..bc69c962 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/jigsaw/slidingBlock/4.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg1.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg1.png new file mode 100644 index 00000000..51573a0c Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg1.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg10.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg10.png new file mode 100644 index 00000000..f633aeed Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg10.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg2.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg2.png new file mode 100644 index 00000000..909dc39e Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg2.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg3.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg3.png new file mode 100644 index 00000000..59bc59c0 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg3.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg4.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg4.png new file mode 100644 index 00000000..c856f4d9 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg4.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg5.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg5.png new file mode 100644 index 00000000..4594fcf6 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg5.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg6.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg6.png new file mode 100644 index 00000000..0f28d820 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg6.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg7.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg7.png new file mode 100644 index 00000000..1e044929 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg7.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg8.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg8.png new file mode 100644 index 00000000..f11545fd Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg8.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg9.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg9.png new file mode 100644 index 00000000..2f3a86da Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/images/pic-click/bg9.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/logback-spring.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/logback-spring.xml new file mode 100644 index 00000000..aa1b950d --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/logback-spring.xml @@ -0,0 +1,96 @@ + + + + + + + + + + System.out + + %d{HH:mm:ss.SSS} %X{spanId:-} %X{traceId:-} [%thread] %-5level %logger{36} - %msg%n + UTF-8 + + + + + ${LOG_HOME}/${APP_NAME}.log + + + ${LOG_HOME}/${APP_NAME}.log.%d{yyyy-MM-dd}.%i.log.zip + + + 100MB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} %X{traceId:-} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + ${LOG_HOME}/${APP_NAME}.log.%d{yyyy-MM-dd}.%i.log + 7 + + + 100MB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} %X{traceId:-} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + ${JSON_LOG_HOME}/${APP_NAME}.json.%d{yyyy-MM-dd}.%i.log + 7 + + + 100MB + + + + + + + { + "timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}", + "severity": "%level", + "service": "${APP_NAME:-}", + "trace": "%X{traceId:-}", + "span": "%X{spanId:-}", + "parent": "%X{X-B3-ParentSpanId:-}", + "exportable": "%X{X-Span-Export:-}", + "pid": "${PID:-}", + "thread": "%thread", + "class": "%logger{40}", + "rest": "%message" + } + + + + + + + + System.err + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/smart-doc.json b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/smart-doc.json new file mode 100644 index 00000000..f98af60e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/main/resources/smart-doc.json @@ -0,0 +1,3 @@ +{ + "outPath": "target\\word" +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/PortalGatewayApplicationTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/PortalGatewayApplicationTest.java new file mode 100644 index 00000000..a6f48ea2 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/PortalGatewayApplicationTest.java @@ -0,0 +1,16 @@ +package com.jiuyv.sptccc.agile; + +import com.jiuyv.sptccc.agile.portal.utils.SpringUtils; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@SpringBootTest +class PortalGatewayApplicationTest { + + @Test + void testConfig() { + assertNotNull(SpringUtils.getBean(PortalGatewayApplication.class)); + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/framework/web/service/SysLoginServiceTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/framework/web/service/SysLoginServiceTest.java new file mode 100644 index 00000000..88fd7b80 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/framework/web/service/SysLoginServiceTest.java @@ -0,0 +1,349 @@ +package com.jiuyv.sptccc.agile.framework.web.service; + +import com.anji.captcha.model.common.ResponseModel; +import com.anji.captcha.service.CaptchaService; +import com.jiuyv.sptccc.agile.common.constant.FrontConstant; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.common.utils.ServletUtils; +import com.jiuyv.sptccc.agile.dto.ResUserPasswordDTO; +import com.jiuyv.sptccc.agile.feign.portal.ExternalInterfaceFeign; +import com.jiuyv.sptccc.agile.feign.portal.PortalLogFeign; +import com.jiuyv.sptccc.agile.feign.portal.PortalUserFeign; +import com.jiuyv.sptccc.agile.framework.config.LocalCache; +import com.jiuyv.sptccc.agile.framework.config.properties.ConsoleProperties; +import com.jiuyv.sptccc.agile.portal.domain.LoginBody; +import com.jiuyv.sptccc.agile.portal.domain.LoginUser; +import com.jiuyv.sptccc.agile.portal.domain.TblPortalUser; +import com.jiuyv.sptccc.agile.portal.dto.RePasswordDTO; +import com.jiuyv.sptccc.agile.portal.utils.SecurityUtils; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.core.task.TaskExecutor; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.test.util.ReflectionTestUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +/** + * SysLoginService单元测试 + * + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class SysLoginServiceTest { + + @Mock + MockedStatic servletUtilsMockedStatic; + @Mock + MockedStatic securityUtilsMockedStatic; + @Spy + @InjectMocks + private SysLoginService sysLoginService; + @Mock + private LocalCache localCache; + @Mock + private PortalUserFeign userService; + @Mock + private PortalLogFeign logFeign; + @Mock + private UserDetailsService userDetailsService; + @Mock + private SysSecretService secretService; + @Mock + private PasswordEncoder passwordEncoder; + @Mock + private CaptchaService captchaService; + @Mock + private ExternalInterfaceFeign externalInterfaceFeign; + @Mock + private ConsoleProperties consoleProperties; + @Mock + private TaskExecutor taskExecutor; + + @Test + void verifyUser() { + LoginBody loginBody = mock(LoginBody.class); + ResponseModel response = mock(ResponseModel.class); + when(captchaService.verification(any())).thenReturn(response); + when(response.isSuccess()).thenReturn(false); + try { + sysLoginService.verifyUser(loginBody); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + when(response.isSuccess()).thenReturn(true); + LoginUser loginUser = mock(LoginUser.class); + when(userDetailsService.loadUserByUsername(any())).thenReturn(loginUser); + TblPortalUser portalUser = mock(TblPortalUser.class); + when(loginUser.getUser()).thenReturn(portalUser); + doNothing().when(sysLoginService).saveLoginLog(any(), any(), any()); + try { + sysLoginService.verifyUser(loginBody); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + when(portalUser.getPhonenumber()).thenReturn("133"); + when(passwordEncoder.matches(any(), any())).thenReturn(true); + + servletUtilsMockedStatic.when(ServletUtils::getSession).thenReturn(mock(HttpSession.class)); + try { + sysLoginService.verifyUser(loginBody); + } catch (Exception e) { + fail(); + } + + when(passwordEncoder.matches(any(), any())).thenReturn(false); + try { + sysLoginService.verifyUser(loginBody); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + when(portalUser.getLoginErrorCount()).thenReturn(4); + try { + sysLoginService.verifyUser(loginBody); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + when(portalUser.getLoginErrorCount()).thenReturn(5); + try { + sysLoginService.verifyUser(loginBody); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + } + + @Test + void loginVerifyCode() { + HttpSession session = mock(HttpSession.class); + servletUtilsMockedStatic.when(ServletUtils::getSession).thenReturn(session); + try { + sysLoginService.loginVerifyCode(); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + LoginUser loginUser = mock(LoginUser.class); + when(session.getAttribute(FrontConstant.LOGIN_USER_INFO)).thenReturn(loginUser); + TblPortalUser portalUser = mock(TblPortalUser.class); + when(loginUser.getUser()).thenReturn(portalUser); + try { + sysLoginService.loginVerifyCode(); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + try { + when(externalInterfaceFeign.sendPhoneMsg(any())).thenReturn(R.fail()); + sysLoginService.loginVerifyCode(); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + try { + when(externalInterfaceFeign.sendPhoneMsg(any())).thenReturn(R.ok()); + sysLoginService.loginVerifyCode(); + + when(consoleProperties.isCaptchaTest()).thenReturn(true); + sysLoginService.loginVerifyCode(); + } catch (Exception e) { + fail(); + } + } + + @Test + void rePasswordVerifyCode() { + HttpSession session = mock(HttpSession.class); + servletUtilsMockedStatic.when(ServletUtils::getSession).thenReturn(session); + try { + sysLoginService.rePasswordVerifyCode(); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + RePasswordDTO rePasswordDTO = mock(RePasswordDTO.class); + when(session.getAttribute(FrontConstant.RE_PASSWORD_USER_INFO)).thenReturn(rePasswordDTO); + when(localCache.getValueOfCacheName(any(), any(), any())).thenReturn("captcha"); + try { + sysLoginService.rePasswordVerifyCode(); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + } + + @Test + void getPhoneByUser() { + String username = "username"; + LoginUser loginUser = mock(LoginUser.class); + TblPortalUser portalUser = mock(TblPortalUser.class); + when(userDetailsService.loadUserByUsername(username)).thenReturn(loginUser); + when(loginUser.getUser()).thenReturn(portalUser); + try { + sysLoginService.getPhoneByUser(username); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + when(portalUser.getPhonenumber()).thenReturn("133"); + servletUtilsMockedStatic.when(ServletUtils::getSession).thenReturn(mock(HttpSession.class)); + try { + sysLoginService.getPhoneByUser(username); + } catch (Exception e) { + fail(); + } + } + + @Test + void verifyPhoneCode() { + String phoneCode = "1111"; + HttpSession session = mock(HttpSession.class); + servletUtilsMockedStatic.when(ServletUtils::getSession).thenReturn(session); + try { + sysLoginService.verifyPhoneCode(phoneCode); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + RePasswordDTO rePasswordDTO = mock(RePasswordDTO.class); + when(session.getAttribute(FrontConstant.RE_PASSWORD_USER_INFO)).thenReturn(rePasswordDTO); + try { + sysLoginService.verifyPhoneCode(phoneCode); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + when(localCache.getValueOfCacheName(any(), any(), any())).thenReturn(phoneCode); + try { + sysLoginService.verifyPhoneCode(phoneCode); + } catch (Exception e) { + fail(); + } + } + + @Test + void resetPassword() { + ResUserPasswordDTO userPasswordDTO = mock(ResUserPasswordDTO.class); + HttpSession session = mock(HttpSession.class); + servletUtilsMockedStatic.when(ServletUtils::getSession).thenReturn(session); + try { + sysLoginService.resetPassword(userPasswordDTO); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + RePasswordDTO rePasswordDTO = mock(RePasswordDTO.class); + when(session.getAttribute(FrontConstant.RE_PASSWORD_USER_INFO)).thenReturn(rePasswordDTO); + when(rePasswordDTO.isCheckPassed()).thenReturn(true); + when(userService.resetUserPwd(userPasswordDTO)).thenReturn(R.fail()); + try { + sysLoginService.resetPassword(userPasswordDTO); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + when(userService.resetUserPwd(userPasswordDTO)).thenReturn(R.ok()); + try { + sysLoginService.resetPassword(userPasswordDTO); + } catch (Exception e) { + fail(); + } + } + + @Test + void changePassword() { + ResUserPasswordDTO userPasswordDTO = mock(ResUserPasswordDTO.class); + when(userPasswordDTO.getPassword()).thenReturn("a"); + when(userPasswordDTO.getOldPassword()).thenReturn("a"); + when(secretService.decodePassword("a")).thenReturn("A"); + when(secretService.decodePassword("b")).thenReturn("B"); + LoginUser loginUser = mock(LoginUser.class); + securityUtilsMockedStatic.when(SecurityUtils::getLoginUser).thenReturn(loginUser); + TblPortalUser portalUser = mock(TblPortalUser.class); + when(loginUser.getUser()).thenReturn(portalUser); + try { + sysLoginService.changePassword(userPasswordDTO); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + + when(passwordEncoder.matches(any(), any())).thenReturn(true); + when(userService.resetUserPwd(userPasswordDTO)).thenReturn(R.fail()); + try { + sysLoginService.changePassword(userPasswordDTO); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + when(userPasswordDTO.getOldPassword()).thenReturn("b"); + try { + sysLoginService.changePassword(userPasswordDTO); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + when(userService.resetUserPwd(userPasswordDTO)).thenReturn(R.ok()); + servletUtilsMockedStatic.when(ServletUtils::getSession).thenReturn(mock(HttpSession.class)); + try { + sysLoginService.changePassword(userPasswordDTO); + } catch (Exception e) { + fail(); + } + } + + @Test + void saveLoginLog() { + String username = "username"; + String status = "status"; + String msg = "msg"; + HttpServletRequest request = mock(HttpServletRequest.class); + servletUtilsMockedStatic.when(ServletUtils::getRequest).thenReturn(request); + TaskExecutor executor = Runnable::run; + ReflectionTestUtils.setField(sysLoginService, "taskExecutor", executor); + when(logFeign.recordLoginInfo(any())).thenReturn(R.fail()); + sysLoginService.saveLoginLog(username, status, msg); + + when(logFeign.recordLoginInfo(any())).thenThrow(ServiceException.class); + sysLoginService.saveLoginLog(username, status, msg); + } + + @AfterEach + void tearDown() { + servletUtilsMockedStatic.close(); + securityUtilsMockedStatic.close(); + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/framework/web/service/SysSecretServiceTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/framework/web/service/SysSecretServiceTest.java new file mode 100644 index 00000000..4c22ad73 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/framework/web/service/SysSecretServiceTest.java @@ -0,0 +1,83 @@ +package com.jiuyv.sptccc.agile.framework.web.service; + +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.framework.config.properties.ConsoleProperties; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.util.ReflectionTestUtils; + +import javax.crypto.Cipher; +import java.security.GeneralSecurityException; +import java.security.KeyFactory; +import java.security.PublicKey; +import java.security.spec.KeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +/** + * SysSecretService单元测试 + * + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class SysSecretServiceTest { + + private SysSecretService sysSecretService; + + private Cipher cipher; + + @BeforeEach + void setUp() throws GeneralSecurityException { + ConsoleProperties properties = mock(ConsoleProperties.class); + when(properties.getEncryptionAlgorithm()).thenReturn("RSA"); + this.sysSecretService = new SysSecretService(properties); + + KeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(sysSecretService.getPublicKey())); + PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(keySpec); + cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + } + + @Test + void getPublicKey() { + try { + sysSecretService.getPublicKey(); + } catch (Exception e) { + fail(); + } + } + + @Test + void decodePassword() throws GeneralSecurityException { + String pws = "Hello RSA"; + try { + sysSecretService.decodePassword(pws); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + Long timeOut = (Long) ReflectionTestUtils.getField(sysSecretService, "TIME_OUT"); + try { + sysSecretService.decodePassword(getEncryptStr(pws, System.currentTimeMillis() - (timeOut == null ? 0 : timeOut) - 1)); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + assertEquals(pws, sysSecretService.decodePassword(getEncryptStr(pws, System.currentTimeMillis()))); + + } + + private String getEncryptStr(String pws, Long time) throws GeneralSecurityException { + String str = pws + "," + time; + byte[] encryptedMessage = cipher.doFinal(str.getBytes()); + return Base64.getEncoder().encodeToString(encryptedMessage); + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/framework/web/service/UserDetailsServiceImplTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/framework/web/service/UserDetailsServiceImplTest.java new file mode 100644 index 00000000..3765240d --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/framework/web/service/UserDetailsServiceImplTest.java @@ -0,0 +1,83 @@ +package com.jiuyv.sptccc.agile.framework.web.service; + +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.common.enums.UserStatus; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.dto.PortalUserDTO; +import com.jiuyv.sptccc.agile.feign.portal.PortalUserFeign; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +/** + * UserDetailsService单元测试 + * + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class UserDetailsServiceImplTest { + + @Spy + @InjectMocks + private UserDetailsServiceImpl userDetailsService; + + @Mock + private PortalUserFeign userService; + + @SuppressWarnings("unchecked") + @Test + void loadUserByUsername() { + String username = "username"; + R r = mock(R.class); + when(userService.selectUserByUserName(username)).thenReturn(r); + try { + userDetailsService.loadUserByUsername(username); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + when(r.isSuccess()).thenReturn(true); + try { + userDetailsService.loadUserByUsername(username); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + PortalUserDTO userDTO = mock(PortalUserDTO.class); + when(r.getData()).thenReturn(userDTO); + when(userDTO.getFirstFlag()).thenReturn("1"); + try { + userDetailsService.loadUserByUsername(username); + } catch (Exception e) { + fail(); + } + + when(userDTO.getStatus()).thenReturn(UserStatus.DISABLE.getCode()); + try { + userDetailsService.loadUserByUsername(username); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + when(userDTO.getDelFlag()).thenReturn(UserStatus.DELETED.getCode()); + try { + userDetailsService.loadUserByUsername(username); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + + + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/CaptchaControllerTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/CaptchaControllerTest.java new file mode 100644 index 00000000..8a2c9d33 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/CaptchaControllerTest.java @@ -0,0 +1,63 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.anji.captcha.model.common.ResponseModel; +import com.anji.captcha.model.vo.CaptchaVO; +import com.anji.captcha.service.CaptchaService; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import javax.servlet.http.HttpServletRequest; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +/** + * CaptchaController单元测试 + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class CaptchaControllerTest { + + @Spy + @InjectMocks + private CaptchaController captchaController; + + @Mock + private CaptchaService captchaService; + + @Test + void get() { + HttpServletRequest request = mock(HttpServletRequest.class); + CaptchaVO captchaVO = mock(CaptchaVO.class); + + ResponseModel model = mock(ResponseModel.class); + when(captchaService.get(captchaVO)).thenReturn(model); + + when(request.getRemoteHost()).thenReturn("localhost"); + AjaxResult result = captchaController.get(captchaVO, request); + Assertions.assertEquals(model, result.getData()); + + when(request.getHeader("X-Forwarded-For")).thenReturn("xfwd"); + when(request.getHeader("user-agent")).thenReturn("ua"); + result = captchaController.get(captchaVO, request); + Assertions.assertEquals(model, result.getData()); + } + + @Test + void check() { + HttpServletRequest request = mock(HttpServletRequest.class); + CaptchaVO captchaVO = mock(CaptchaVO.class); + + ResponseModel model = mock(ResponseModel.class); + when(captchaService.check(captchaVO)).thenReturn(model); + + AjaxResult result = captchaController.check(captchaVO, request); + Assertions.assertEquals(model, result.getData()); + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/ContentControllerTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/ContentControllerTest.java new file mode 100644 index 00000000..38650282 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/ContentControllerTest.java @@ -0,0 +1,174 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.PortalContentDTO; +import com.jiuyv.sptccc.agile.dto.ReqPageDTO; +import com.jiuyv.sptccc.agile.feign.portal.PortalContentFeign; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import feign.Response; +import org.apache.commons.io.IOUtils; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.HttpStatus; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +/** + * ContentController单元测试 + * + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class ContentControllerTest { + + @Spy + @InjectMocks + private ContentController contentController; + + @Mock + private PortalContentFeign portalContentFeign; + + @Test + void list() { + TableDataPage page = new TableDataPage<>(); + ReqPageDTO pageDTO = new ReqPageDTO(); + when(portalContentFeign.getInformationList(pageDTO)).thenReturn(page); + doReturn(page).when(contentController).successResult(page); + Assertions.assertEquals(page, contentController.list(pageDTO)); + } + + @Test + void contentInfo() { + Long contentId = 1L; + AjaxResult ajaxResult = AjaxResult.success(); + R r = R.ok(); + when(portalContentFeign.contentInfo(contentId)).thenReturn(r); + doReturn(ajaxResult).when(contentController).successResult(r); + Assertions.assertEquals(ajaxResult, contentController.contentInfo(contentId)); + } + + @Test + void scenesList() { + AjaxResult> ajaxResult = AjaxResult.success(); + R> r = R.ok(); + when(portalContentFeign.getContentList(anyString())).thenReturn(r); + doReturn(ajaxResult).when(contentController).successResult(r); + Assertions.assertEquals(ajaxResult, contentController.scenesList()); + Assertions.assertEquals(ajaxResult, contentController.banner()); + Assertions.assertEquals(ajaxResult, contentController.dataProduct()); + } + + @Test + void getImage() { + String imageName = "aa"; + Response feignResponse = mock(Response.class); + when(feignResponse.body()).thenReturn(mock(Response.Body.class)); + when(portalContentFeign.getImage(imageName)).thenReturn(feignResponse); + + try (MockedStatic ioUtilsMockedStatic = mockStatic(IOUtils.class)) { + contentController.getImage(imageName, mock(HttpServletResponse.class)); + } catch (IOException e) { + Assertions.fail(); + } + + } + + @Test + void sdkDownload() { + Response feignResponse = mock(Response.class); + when(feignResponse.body()).thenReturn(mock(Response.Body.class)); + doReturn("").when(contentController).getResponseHeader(any(), any()); + when(portalContentFeign.sdkDownload()).thenReturn(feignResponse); + + try (MockedStatic ioUtilsMockedStatic = mockStatic(IOUtils.class)) { + contentController.sdkDownload(mock(HttpServletResponse.class)); + } catch (IOException e) { + Assertions.fail(); + } + + } + + @Test + void wordDownload() { + Response feignResponse = mock(Response.class); + when(feignResponse.body()).thenReturn(mock(Response.Body.class)); + doReturn("").when(contentController).getResponseHeader(any(), any()); + when(portalContentFeign.wordDownload()).thenReturn(feignResponse); + + try (MockedStatic ioUtilsMockedStatic = mockStatic(IOUtils.class)) { + contentController.wordDownload(mock(HttpServletResponse.class)); + } catch (IOException e) { + Assertions.fail(); + } + + } + + @Test + void successResultR() { + try { + contentController.successResult(R.fail()); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + + try { + contentController.successResult(R.ok()); + } catch (Exception e) { + Assertions.fail(); + } + } + + @SuppressWarnings("unchecked") + @Test + void successResultPage() { + TableDataPage page = mock(TableDataPage.class); + try { + contentController.successResult(page); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + + when(page.getCode()).thenReturn(HttpStatus.OK.value()); + try { + contentController.successResult(page); + } catch (Exception e) { + Assertions.fail(); + } + } + + + @SuppressWarnings("unchecked") + @Test + void getResponseHeader() { + String key = "key"; + Response response = mock(Response.class); + Map> map = mock(Map.class); + List list = Collections.singletonList("value"); + when(map.get(key)).thenReturn(list); + when(response.headers()).thenReturn(map); + + String header = contentController.getResponseHeader(response, key); + Assertions.assertEquals("value", header); + + } + + +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/DataApiControllerTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/DataApiControllerTest.java new file mode 100644 index 00000000..8e7962a4 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/DataApiControllerTest.java @@ -0,0 +1,93 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptcc.agile.dataservice.dto.request.api.ApiPageRequest; +import com.jiuyv.sptcc.agile.dataservice.dto.request.api.ApiUserRequest; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.common.core.page.PageResult; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.feign.portal.ExternalInterfaceFeign; +import com.jiuyv.sptccc.agile.portal.utils.SecurityUtils; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.fail; +import static org.mockito.Mockito.*; + +/** + * DataApiController单元测试 + * + * @author ren_chao + */ +@SuppressWarnings("unchecked") +@ExtendWith(MockitoExtension.class) +class DataApiControllerTest { + + @Spy + @InjectMocks + private DataApiController dataApiController; + + @Mock + private ExternalInterfaceFeign externalInterfaceFeign; + + private MockedStatic securityUtilsMockedStatic; + + @BeforeEach + void setUp() { + this.securityUtilsMockedStatic = mockStatic(SecurityUtils.class); + when(SecurityUtils.getUserId()).thenReturn(1L); + } + + @AfterEach + void tearDown() { + this.securityUtilsMockedStatic.close(); + } + + @Test + void list() { + ApiPageRequest pageRequest = mock(ApiPageRequest.class); + when(externalInterfaceFeign.getDataApiPage(pageRequest)).thenReturn(R.ok(mock(PageResult.class))); + try { + dataApiController.list(pageRequest); + } catch (Exception e) { + Assertions.fail(); + } + } + + @Test + void userApiList() { + ApiUserRequest userRequest = mock(ApiUserRequest.class); + when(externalInterfaceFeign.getUserApiStatistics(userRequest)).thenReturn(R.ok(mock(PageResult.class))); + try { + dataApiController.userApiStatisticsList(userRequest); + } catch (Exception e) { + Assertions.fail(); + } + } + + @Test + void userApiStatisticsList() { + ApiUserRequest userRequest = mock(ApiUserRequest.class); + when(externalInterfaceFeign.getUserApiList(userRequest)).thenReturn(R.ok(mock(PageResult.class))); + try { + dataApiController.userApiList(userRequest); + } catch (Exception e) { + Assertions.fail(); + } + + when(externalInterfaceFeign.getUserApiList(userRequest)).thenReturn(R.fail()); + try { + dataApiController.userApiList(userRequest); + fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/LoginUserControllerTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/LoginUserControllerTest.java new file mode 100644 index 00000000..8d8d4193 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/LoginUserControllerTest.java @@ -0,0 +1,123 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.dto.ResUserPasswordDTO; +import com.jiuyv.sptccc.agile.framework.web.service.SysLoginService; +import com.jiuyv.sptccc.agile.framework.web.service.SysSecretService; +import com.jiuyv.sptccc.agile.portal.domain.LoginBody; +import com.jiuyv.sptccc.agile.portal.domain.LoginUser; +import com.jiuyv.sptccc.agile.portal.domain.TblPortalUser; +import com.jiuyv.sptccc.agile.portal.utils.SecurityUtils; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.mockito.Mockito.*; + +/** + * LoginUserController单元测试 + * + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class LoginUserControllerTest { + + @Spy + @InjectMocks + private LoginUserController loginUserController; + + @Mock + private SysLoginService loginService; + @Mock + private SysSecretService secretService; + + @Test + void getPublicKey() { + String publicKey = "PublicKey"; + when(secretService.getPublicKey()).thenReturn(publicKey); + Assertions.assertEquals(publicKey, loginUserController.getPublicKey().getData()); + } + + @Test + void login() { + try { + loginUserController.login(new LoginBody()); + } catch (Exception e) { + Assertions.fail(); + } + } + + @Test + void sendPhoneCode() { + try { + loginUserController.sendPhoneCode(); + } catch (Exception e) { + Assertions.fail(); + } + } + + @Test + void getInfo() { + try (MockedStatic mockedStatic = mockStatic(SecurityUtils.class)) { + LoginUser loginUser = mock(LoginUser.class); + TblPortalUser user = mock(TblPortalUser.class); + when(loginUser.getUser()).thenReturn(user); + mockedStatic.when(SecurityUtils::getLoginUser).thenReturn(loginUser); + try { + loginUserController.getInfo(); + } catch (Exception e) { + Assertions.fail(); + } + } + + } + + @Test + void changePassword() { + try { + loginUserController.changePassword(mock(ResUserPasswordDTO.class)); + } catch (Exception e) { + Assertions.fail(); + } + } + + @Test + void getPhoneByUser() { + try { + loginUserController.getPhoneByUser("username"); + } catch (Exception e) { + Assertions.fail(); + } + } + + @Test + void rePasswordSendPhoneCode() { + try { + loginUserController.rePasswordSendPhoneCode(); + } catch (Exception e) { + Assertions.fail(); + } + } + + @Test + void verifyPhoneCode() { + try { + loginUserController.verifyPhoneCode("1"); + } catch (Exception e) { + Assertions.fail(); + } + } + + @Test + void resetPassword() { + try { + loginUserController.resetPassword(mock(ResUserPasswordDTO.class)); + } catch (Exception e) { + Assertions.fail(); + } + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/MyApplyControllerTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/MyApplyControllerTest.java new file mode 100644 index 00000000..1bd2830d --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/MyApplyControllerTest.java @@ -0,0 +1,106 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.DockerApplyReviewDTO; +import com.jiuyv.sptccc.agile.dto.DockerDownloadApplyDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerApplyPageDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerDownApplyPageDTO; +import com.jiuyv.sptccc.agile.feign.portal.DockerApplyFeign; +import com.jiuyv.sptccc.agile.feign.portal.DockerDownloadApplyFeign; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import feign.Response; +import org.apache.commons.io.IOUtils; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.HttpStatus; + +import javax.servlet.http.HttpServletResponse; + +import static org.mockito.Mockito.*; + +/** + * MyApplyController单元测试 + * + * @author ren_chao + */ +// @SuppressWarnings({"unchecked", "rawtypes"}) +@ExtendWith(MockitoExtension.class) +class MyApplyControllerTest { + + @Spy + @InjectMocks + private MyApplyController myApplyController; + + @Mock + private DockerApplyFeign dockerApplyFeign; + @Mock + private DockerDownloadApplyFeign dockerDownloadApplyFeign; + + @SuppressWarnings({"unchecked"}) + @Test + void laboratoryList() { + TableDataPage page = mock(TableDataPage.class); + ReqDockerApplyPageDTO reqDTO = mock(ReqDockerApplyPageDTO.class); + when(dockerApplyFeign.getList(reqDTO)).thenReturn(page); + doReturn(page).when(myApplyController).successResult(page); + Assertions.assertEquals(page, myApplyController.laboratoryList(reqDTO)); + } + + @SuppressWarnings({"unchecked"}) + @Test + void detail() { + Long reviewId = 1L; + R r = mock(R.class); + when(dockerApplyFeign.detail(reviewId)).thenReturn(r); + AjaxResult ajaxResult = mock(AjaxResult.class); + doReturn(ajaxResult).when(myApplyController).successResult(r); + Assertions.assertEquals(ajaxResult, myApplyController.detail(reviewId)); + } + + @SuppressWarnings({"unchecked"}) + @Test + void exportList() { + TableDataPage page = mock(TableDataPage.class); + ReqDockerDownApplyPageDTO reqDTO = mock(ReqDockerDownApplyPageDTO.class); + when(dockerDownloadApplyFeign.getList(reqDTO)).thenReturn(page); + doReturn(page).when(myApplyController).successResult(page); + Assertions.assertEquals(page, myApplyController.exportList(reqDTO)); + } + + @SuppressWarnings({"rawtypes"}) + @Test + void download() { + doReturn("ResponseHeader").when(myApplyController).getResponseHeader(any(), any()); + Long downloadApplyId = 1L; + HttpServletResponse response = mock(HttpServletResponse.class); + Response feignResponse = mock(Response.class); + when(dockerDownloadApplyFeign.download(eq(downloadApplyId), any())).thenReturn(feignResponse); + try { + myApplyController.download(downloadApplyId, true, response); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + + when(feignResponse.status()).thenReturn(HttpStatus.OK.value()); + try (MockedStatic resultMockedStatic = mockStatic(AjaxResult.class); + MockedStatic utilsMockedStatic = mockStatic(IOUtils.class)) { + myApplyController.download(downloadApplyId, true, response); + + when(feignResponse.body()).thenReturn(mock(Response.Body.class)); + myApplyController.download(downloadApplyId, false, response); + } catch (Exception e) { + e.printStackTrace(); + Assertions.fail(); + } + + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/MyLabControllerTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/MyLabControllerTest.java new file mode 100644 index 00000000..5924ee5a --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/MyLabControllerTest.java @@ -0,0 +1,98 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.DockerFileDTO; +import com.jiuyv.sptccc.agile.dto.DockerWithUserDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerDownApplyDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerWithUserDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerWithUserPageDTO; +import com.jiuyv.sptccc.agile.feign.portal.DockerWithUserFeign; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; + +/** + * MyLabController单元测试 + * + * @author ren_chao + */ +@SuppressWarnings("unchecked") +@ExtendWith(MockitoExtension.class) +class MyLabControllerTest { + + @Spy + @InjectMocks + private MyLabController myLabController; + + @Mock + private DockerWithUserFeign dockerWithUserFeign; + + @Test + void list() { + TableDataPage page = mock(TableDataPage.class); + doReturn(page).when(myLabController).successResult(page); + ReqDockerWithUserPageDTO pageDTO = mock(ReqDockerWithUserPageDTO.class); + when(dockerWithUserFeign.getList(pageDTO)).thenReturn(page); + assertEquals(page, myLabController.list(pageDTO)); + } + + @Test + void getInfo() { + R r = mock(R.class); + AjaxResult ajaxResult = mock(AjaxResult.class); + doReturn(ajaxResult).when(myLabController).successResult(r); + Long applyId = 1L; + when(dockerWithUserFeign.getInfo(applyId)).thenReturn(r); + assertEquals(ajaxResult, myLabController.getInfo(applyId)); + } + + @Test + void restart() { + R r = mock(R.class); + AjaxResult ajaxResult = mock(AjaxResult.class); + doReturn(ajaxResult).when(myLabController).successResult(r); + ReqDockerWithUserDTO withUserDTO = mock(ReqDockerWithUserDTO.class); + when(dockerWithUserFeign.restart(withUserDTO)).thenReturn(r); + assertEquals(ajaxResult, myLabController.restart(withUserDTO)); + } + + @Test + void dataInjection() { + R r = mock(R.class); + AjaxResult ajaxResult = mock(AjaxResult.class); + doReturn(ajaxResult).when(myLabController).successResult(r); + ReqDockerWithUserDTO withUserDTO = mock(ReqDockerWithUserDTO.class); + when(dockerWithUserFeign.fileBind(withUserDTO)).thenReturn(r); + assertEquals(ajaxResult, myLabController.dataInjection(withUserDTO)); + } + + @Test + void getFileList() { + R> r = mock(R.class); + AjaxResult> ajaxResult = mock(AjaxResult.class); + doReturn(ajaxResult).when(myLabController).successResult(r); + Long applyId = 1L; + when(dockerWithUserFeign.fileList(applyId)).thenReturn(r); + assertEquals(ajaxResult, myLabController.getFileList(applyId)); + } + + @Test + void applyDown() { + R r = mock(R.class); + AjaxResult ajaxResult = mock(AjaxResult.class); + doReturn(ajaxResult).when(myLabController).successResult(r); + ReqDockerDownApplyDTO reqDTO = mock(ReqDockerDownApplyDTO.class); + when(dockerWithUserFeign.applyDown(reqDTO)).thenReturn(r); + assertEquals(ajaxResult, myLabController.applyDown(reqDTO)); + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/MyMessageControllerTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/MyMessageControllerTest.java new file mode 100644 index 00000000..a5c219e2 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/MyMessageControllerTest.java @@ -0,0 +1,63 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.PortalMessageDTO; +import com.jiuyv.sptccc.agile.dto.ReqPageDTO; +import com.jiuyv.sptccc.agile.feign.portal.PortalMessageFeign; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; + +/** + * MyMessageController单元测试 + * + * @author ren_chao + */ +@SuppressWarnings("unchecked") +@ExtendWith(MockitoExtension.class) +class MyMessageControllerTest { + + @Spy + @InjectMocks + private MyMessageController myMessageController; + + @Mock + private PortalMessageFeign portalMessageFeign; + + @Test + void getList() { + TableDataPage page = mock(TableDataPage.class); + doReturn(page).when(myMessageController).successResult(page); + ReqPageDTO pageDTO = mock(ReqPageDTO.class); + when(portalMessageFeign.getMessageList(pageDTO)).thenReturn(page); + assertEquals(page, myMessageController.getList(pageDTO)); + } + + @Test + void detail() { + R r = mock(R.class); + AjaxResult ajaxResult = mock(AjaxResult.class); + doReturn(ajaxResult).when(myMessageController).successResult(r); + Long msgId = 1L; + when(portalMessageFeign.detail(msgId)).thenReturn(r); + assertEquals(ajaxResult, myMessageController.detail(msgId)); + } + + @Test + void markRead() { + R r = mock(R.class); + AjaxResult ajaxResult = mock(AjaxResult.class); + doReturn(ajaxResult).when(myMessageController).successResult(r); + Long[] msgIds = new Long[0]; + when(portalMessageFeign.markRead(msgIds)).thenReturn(r); + assertEquals(ajaxResult, myMessageController.markRead(msgIds)); + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/MyResourcesControllerTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/MyResourcesControllerTest.java new file mode 100644 index 00000000..c04eb809 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/controller/MyResourcesControllerTest.java @@ -0,0 +1,75 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.ReqFileDTO; +import com.jiuyv.sptccc.agile.dto.UploadFileDTO; +import com.jiuyv.sptccc.agile.feign.portal.ResourceFeign; +import com.jiuyv.sptccc.agile.portal.domain.AjaxResult; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.web.multipart.MultipartFile; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * MyResourcesController单元测试 + * + * @author ren_chao + */ +@SuppressWarnings("unchecked") +@ExtendWith(MockitoExtension.class) +class MyResourcesControllerTest { + + @Spy + @InjectMocks + private MyResourcesController myResourcesController; + + @Mock + private ResourceFeign resourceFeign; + + @Test + void uploadFile() { + MultipartFile file = mock(MultipartFile.class); + String fileType = "fileType"; + String remarks = "remarks"; + R r = mock(R.class); + AjaxResult ajaxResult = mock(AjaxResult.class); + doReturn(ajaxResult).when(myResourcesController).successResult(r); + when(resourceFeign.uploadFiles(eq(file), eq(fileType), anyString())).thenReturn(r); + assertEquals(ajaxResult, myResourcesController.uploadFile(file, fileType, remarks)); + + remarks = new String(new byte[1001]); + try { + myResourcesController.uploadFile(file, fileType, remarks); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + } + + @Test + void getList() { + TableDataPage page = mock(TableDataPage.class); + doReturn(page).when(myResourcesController).successResult(page); + ReqFileDTO pageDTO = mock(ReqFileDTO.class); + when(resourceFeign.getList(pageDTO)).thenReturn(page); + assertEquals(page, myResourcesController.getList(pageDTO)); + } + + @Test + void delete() { + R r = mock(R.class); + AjaxResult ajaxResult = mock(AjaxResult.class); + doReturn(ajaxResult).when(myResourcesController).successResult(r); + Long fileId = 1L; + when(resourceFeign.delete(fileId)).thenReturn(r); + assertEquals(ajaxResult, myResourcesController.delete(fileId)); + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/domain/TblDomainTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/domain/TblDomainTest.java new file mode 100644 index 00000000..a2ed8d26 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/domain/TblDomainTest.java @@ -0,0 +1,59 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.platform.commons.util.ReflectionUtils; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; + +/** + * Domain测试类 + * + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class TblDomainTest { + + @Test + void domainTest() { + String packageName = "com.jiuyv.sptccc.agile.portal.domain"; + try { + invoke(packageName); + } catch (Exception e) { + e.printStackTrace(); + Assertions.fail(); + } + } + + private void invoke(String packageName) throws InstantiationException, IllegalAccessException, InvocationTargetException { + List> classList = ReflectionUtils.findAllClassesInPackage(packageName, aClass -> true, + s -> !s.endsWith("Test") && !s.contains("AjaxResult") && !s.contains("LoginUser")); + + for (Class aClass : classList) { + Method[] methods = aClass.getDeclaredMethods(); + Object o = aClass.newInstance(); + for (Method method : methods) { + String name = method.getName(); + if (name.startsWith("get")) { + method.invoke(o); + } else if (name.startsWith("set")) { + Class[] parameterTypes = method.getParameterTypes(); + Object[] objects = Arrays.stream(parameterTypes).map(p -> { + try { + return p.newInstance(); + } catch (ReflectiveOperationException e) { + return null; + } + }).toArray(); + method.invoke(o, objects); + } + } + } + } + +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/dto/PortalDTOTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/dto/PortalDTOTest.java new file mode 100644 index 00000000..061f09d9 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/dto/PortalDTOTest.java @@ -0,0 +1,58 @@ +package com.jiuyv.sptccc.agile.portal.dto; + + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.platform.commons.util.ReflectionUtils; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; + +/** + * DTO测试类 + * + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class PortalDTOTest { + + @Test + void dtoTest() { + String packageName = "com.jiuyv.sptccc.agile.portal.dto"; + try { + invoke(packageName); + } catch (Exception e) { + Assertions.fail(); + } + } + + private void invoke(String packageName) throws InstantiationException, IllegalAccessException, InvocationTargetException { + List> classList = ReflectionUtils.findAllClassesInPackage(packageName, aClass -> true, s -> !s.endsWith("Test")); + + for (Class aClass : classList) { + Method[] methods = aClass.getDeclaredMethods(); + Object o = aClass.newInstance(); + for (Method method : methods) { + String name = method.getName(); + if (name.startsWith("get")) { + method.invoke(o); + } else if (name.startsWith("set")) { + Class[] parameterTypes = method.getParameterTypes(); + Object[] objects = Arrays.stream(parameterTypes).map(p -> { + try { + return p.newInstance(); + } catch (ReflectiveOperationException e) { + return null; + } + }).toArray(); + method.invoke(o, objects); + } + } + } + } + +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/utils/SecurityUtilsTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/utils/SecurityUtilsTest.java new file mode 100644 index 00000000..8ac1bf07 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/utils/SecurityUtilsTest.java @@ -0,0 +1,85 @@ +package com.jiuyv.sptccc.agile.portal.utils; + +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.portal.domain.LoginUser; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.when; + +/** + * SecurityUtils单元测试 + * + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class SecurityUtilsTest { + private static final String username = "username"; + private static final Long userId = 1L; + + @Mock + private MockedStatic mockedStatic; + + @Mock + private SecurityContext context; + + @Mock + private Authentication authentication; + + @Mock + private LoginUser loginUser; + + @BeforeEach + void setUp() { + mockedStatic.when(SecurityContextHolder::getContext).thenReturn(context); + } + + @AfterEach + void tearDown() { + mockedStatic.close(); + } + + @Test + void getUserId() { + when(context.getAuthentication()).thenReturn(authentication); + when(authentication.getPrincipal()).thenReturn(loginUser); + when(loginUser.getUserId()).thenReturn(userId); + assertEquals(userId, SecurityUtils.getUserId()); + } + + @Test + void getUsername() { + when(context.getAuthentication()).thenReturn(authentication); + when(authentication.getPrincipal()).thenReturn(loginUser); + when(loginUser.getUsername()).thenReturn(username); + assertEquals(username, SecurityUtils.getUsername()); + } + + @Test + void getLoginUser() { + try { + SecurityUtils.getLoginUser(); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + } + + @Test + void getAuthentication() { + try { + SecurityUtils.getAuthentication(); + } catch (Exception e) { + fail(); + } + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/utils/SpringUtilsTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/utils/SpringUtilsTest.java new file mode 100644 index 00000000..201d1567 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gateway/src/test/java/com/jiuyv/sptccc/agile/portal/utils/SpringUtilsTest.java @@ -0,0 +1,38 @@ +package com.jiuyv.sptccc.agile.portal.utils; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; + +import static org.junit.jupiter.api.Assertions.fail; + +/** + * SpringUtils单元测试 + * + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class SpringUtilsTest { + + @Mock + private ConfigurableListableBeanFactory beanFactory; + + @BeforeEach + void setUp() { + SpringUtils springUtils = new SpringUtils(); + springUtils.postProcessBeanFactory(beanFactory); + } + + @Test + void getBean() { + try { + SpringUtils.getBean(SpringUtils.class); + } catch (BeansException e) { + fail(); + } + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/pom.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/pom.xml new file mode 100644 index 00000000..8d40aa15 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/pom.xml @@ -0,0 +1,93 @@ + + + + agile-portal + com.jiuyv.sptcc.agile + 0.2.8 + + 4.0.0 + + agile-portal-gw + + + + + org.springframework.cloud + spring-cloud-starter-gateway + + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-registry-prometheus + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + org.springframework.boot + spring-boot-starter-security + + + + + org.springframework.boot + spring-boot-starter-webflux + + + org.springframework.cloud + spring-cloud-starter-config + + + + net.logstash.logback + logstash-logback-encoder + ${logstash.version} + + + + commons-io + commons-io + + + org.springframework.cloud + spring-cloud-starter-sleuth + + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + org.springframework.boot + spring-boot-maven-plugin + 2.1.1.RELEASE + + + + repackage + + + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/GWApplication.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/GWApplication.java new file mode 100644 index 00000000..f2f31b26 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/GWApplication.java @@ -0,0 +1,11 @@ +package com.jiuyv.sptcc.agile; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class GWApplication { + public static void main(String[] args) { + SpringApplication.run(GWApplication.class, args); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/config/MyAccessConfig.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/config/MyAccessConfig.java new file mode 100644 index 00000000..c20cc9e9 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/config/MyAccessConfig.java @@ -0,0 +1,101 @@ +package com.jiuyv.sptcc.agile.config; + +import com.jiuyv.sptcc.agile.util.JsonUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpHeaders; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.security.authorization.AuthorizationDecision; +import org.springframework.security.authorization.ReactiveAuthorizationManager; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.server.authorization.AuthorizationContext; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +import javax.annotation.PostConstruct; +import java.util.Base64; +import java.util.Base64.Encoder; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +/** + * @ClassName MyAccessConfig + * @Description MyAccessConfig + * @Author Spark + * @Date 2022/8/3 10:04 + **/ +@Component +public class MyAccessConfig implements ReactiveAuthorizationManager { + + private static final Logger LOGGER = LoggerFactory.getLogger(MyAccessConfig.class); + + private Set permitAll = new HashSet<>(); + private Set uriPermit = new HashSet<>(); + public ConcurrentMap authorMap = new ConcurrentHashMap<>(); + + @Value("${spring.security.user.name}") + private String name; + @Value("${spring.security.user.password}") + private String password; + + @PostConstruct + public void init() { + String authorization = getAuthorization(name, password); + authorMap.put("author", "Basic "+authorization); + permitAll.add("/actuator/shutdown"); + permitAll.add("/actuator/serviceregistry"); + permitAll.add("/actuator/refresh"); + permitAll.add("/actuator/gateway/routes"); + uriPermit.add("localhost"); + uriPermit.add("127.0.0.1"); + } + + + @Override + public Mono check(Mono authentication, AuthorizationContext authorizationContext) { + ServerWebExchange exchange = authorizationContext.getExchange(); + //请求资源 + ServerHttpRequest request = exchange.getRequest(); + String requestPath = request.getURI().getPath(); + HttpHeaders headers = request.getHeaders(); + String host = request.getURI().getHost(); + //actuator目录下进行权限认证 + if(requestPath.startsWith("/actuator/")) { + //放行本地ip的某些路径 + if(permitAll.contains(requestPath)) { + if(uriPermit.contains(host)) { + return Mono.just(new AuthorizationDecision(true)); + } + } + String authorization = authorMap.get("author"); + boolean containsKey = headers.containsKey("Authorization"); + if(containsKey) { + LOGGER.info(JsonUtil.convertToJson(headers)); + List list = headers.get("Authorization"); + //"Authorization":["Basic c3B0Y2M6MTIzNDU2"] + for(String auth:list) { + //认证权限 + LOGGER.info(authorization); + if(authorization.equals(auth)) { + return Mono.just(new AuthorizationDecision(true)); + } + } + } + return Mono.just(new AuthorizationDecision(false)); + } + return Mono.just(new AuthorizationDecision(true)); + } + + + public static String getAuthorization(String username,String password) { + Encoder encoder = Base64.getEncoder(); + byte[] data = encoder.encode((username+":"+password).getBytes()); + String str = new String(data); + return str; + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/config/SecurityConfig.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/config/SecurityConfig.java new file mode 100644 index 00000000..1a51dd1a --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/config/SecurityConfig.java @@ -0,0 +1,31 @@ +package com.jiuyv.sptcc.agile.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.security.config.annotation.method.configuration.EnableReactiveMethodSecurity; +import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity; +import org.springframework.security.config.web.server.ServerHttpSecurity; +import org.springframework.security.web.server.SecurityWebFilterChain; + +/** + * @ClassName SecurityConfig + * @Description SecurityConfig + * @Author Spark + * @Date 2022/8/3 10:04 + **/ +@EnableWebFluxSecurity +@EnableReactiveMethodSecurity +public class SecurityConfig { + + @Autowired + private MyAccessConfig myAccessConfig; + + @Bean + public SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http) { + http.csrf().disable(); + http.httpBasic().disable().authorizeExchange() + .pathMatchers("/actuator/**").permitAll() + .pathMatchers("/**").access(myAccessConfig).anyExchange().authenticated(); + return http.build(); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/filter/AuthorizeFilter.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/filter/AuthorizeFilter.java new file mode 100644 index 00000000..c716e915 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/filter/AuthorizeFilter.java @@ -0,0 +1,81 @@ +package com.jiuyv.sptcc.agile.filter; + +import com.jiuyv.sptcc.agile.util.MD5; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.cloud.gateway.route.Route; +import org.springframework.core.annotation.Order; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +import java.net.URI; +import java.time.LocalDateTime; +import java.util.LinkedHashSet; +import java.util.Objects; + +import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.*; + + +@Order(-1) // 这个注解可以替代下面的getOrder方法 +@Component +public class AuthorizeFilter implements GlobalFilter { + private static final Logger log = LoggerFactory.getLogger(AuthorizeFilter.class); + + private static final String TOKEN_HEAR = "token"; + + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + // 1.获取请求参数 + ServerHttpRequest request = exchange.getRequest(); + ServerHttpResponse response = exchange.getResponse(); + + printLog(exchange); + // 2.获取参数中的 authorization 参数 + HttpHeaders headers = request.getHeaders(); + String token = headers.getFirst(TOKEN_HEAR); + if (StringUtils.isEmpty(token)) { + response.setStatusCode(HttpStatus.UNAUTHORIZED); + return response.setComplete(); + } + + // 3.令牌存在,验证令牌有效性 + log.info("verify token: {} ", token); + String[] split = token.split(":"); + String module = MD5.md5(split[0]); + String encryptStr = split[1]; + if (!Objects.equals(module, encryptStr)) { + response.setStatusCode(HttpStatus.FORBIDDEN); + return response.setComplete(); + } + return chain.filter(exchange); + } + + private void printLog(ServerWebExchange exchange) { + URI url = exchange.getAttribute(GATEWAY_REQUEST_URL_ATTR); + Route route = exchange.getAttribute(GATEWAY_ROUTE_ATTR); + LinkedHashSet uris = exchange.getAttribute(GATEWAY_ORIGINAL_REQUEST_URL_ATTR); + URI originUri = null; + if (uris != null) { + originUri = uris.stream().findFirst().orElse(null); + } + if (url != null && route != null && originUri != null) { + if (log.isDebugEnabled()) { + log.debug("转发请求:{}://{}{} --> 目标服务:{},目标地址:{}://{}{},转发时间:{}", + originUri.getScheme(), originUri.getAuthority(), originUri.getPath(), + route.getId(), url.getScheme(), url.getAuthority(), url.getPath(), LocalDateTime.now() + ); + } else { + log.info("目标服务:{},目标地址:{}://{}{}", route.getId(), url.getScheme(), url.getAuthority(), url.getPath()); + } + + } + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/util/JsonUtil.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/util/JsonUtil.java new file mode 100644 index 00000000..f6b03809 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/util/JsonUtil.java @@ -0,0 +1,113 @@ +package com.jiuyv.sptcc.agile.util; + +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; + +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; + +/** + * The Class JsonUtil. + * + * @author + * @version 1.0.0 + * @since 2016-12-6 + * @company Shanghai JiuYv Software Systems CO.,LTD. + */ +public abstract class JsonUtil { + + /** The object mapper. */ + private static ObjectMapper objectMapper = new ObjectMapper(); + + private static JavaTimeModule timeModule = new JavaTimeModule(); + + static { + timeModule.addSerializer(LocalDateTime.class, + new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + timeModule.addSerializer(LocalDate.class, + new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + timeModule.addDeserializer(LocalDateTime.class, + new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + timeModule.addDeserializer(LocalDate.class, + new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false) + .setSerializationInclusion(Include.NON_NULL) + .registerModule(timeModule); + } + + /** + * Convert to json. + * + * @param object the object + * @return the string + */ + public static String convertToJson( Object object ) { + try { + return objectMapper.writeValueAsString(object); + } catch (Exception e) { + return ""; + } + } + + public static T json2Bean(String json, Class T) { + try { + T obj = objectMapper.readValue(json, T); + return obj; + } catch (Exception e) { + + return null; + } + } + + public static List json2List(String json, Class T) { + JavaType javaType = getCollectionType(ArrayList.class, T); + List lst; + try { + lst = objectMapper.readValue(json, javaType); + } catch (Exception e) { + return null; + } + return lst; + } + + public static Map json2Map(String json, Class T) { + JavaType javaType = getCollectionType(HashMap.class, String.class, T); + Map map = new HashMap(); + try { + map = objectMapper.readValue(json,javaType); + } catch (Exception e) { + + return null; + } + return map; + } + /** + * 获取泛型的Collection Type + * @param collectionClass 泛型的Collection + * @param elementClasses 元素类 + * @return JavaType Java类型 + * @since 1.0 + */ + private static JavaType getCollectionType(Class collectionClass, Class... elementClasses) { + return objectMapper.getTypeFactory().constructParametricType(collectionClass, elementClasses); + } + + private JsonUtil() { + //for sonar to provide the private constructor + } +} + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/util/MD5.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/util/MD5.java new file mode 100644 index 00000000..8d218d78 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/java/com/jiuyv/sptcc/agile/util/MD5.java @@ -0,0 +1,63 @@ +package com.jiuyv.sptcc.agile.util; + +import org.apache.commons.codec.digest.DigestUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +/** + * Description: md5加密解密 + */ +public class MD5 { + private static final Logger LOGGER = LoggerFactory.getLogger(MD5.class); + + public static String md5(String dateString) { + try { + byte[] digest = MessageDigest.getInstance("md5").digest(dateString.getBytes(StandardCharsets.UTF_8)); + String md5code = new BigInteger(1, digest).toString(16); + // 如果生成数字未满32位,需要前面补0 + for (int i = 0; i < 32 - md5code.length(); i++) { + md5code = "0" + md5code; + } + return md5code; + } catch (NoSuchAlgorithmException e) { + LOGGER.error("md5出错:{}", e.getMessage(), e); + return dateString; + } + } + + // ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。 + //(1)0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符), + // 如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字 符:SOH(文头)、EOT(文尾)、ACK(确认)等; + // ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的 应用程序,而对文本显示有不同的影响。 + // 2)32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。 + //(3)65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。 + public static String md5PlusSalt(String keyword) { + // md5加密 + String md5 = DigestUtils.md5Hex(keyword); + // md5+盐 + return getString(md5); + + } + private static String getString(String md5) { + char[] cArray = md5.toCharArray(); + for (int i = 0; i < cArray.length; i++) { + if (cArray[i] >= 48 && cArray[i] <= 57) { + cArray[i] = (char) (105 - cArray[i]); + + } + } + // 都可以使用 + return String.valueOf(cArray); + } + + // 解密+盐 + public static String md5MinusSalt(String md5) { + return getString(md5); + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/resources/application.yml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/resources/application.yml new file mode 100644 index 00000000..587a64d8 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/resources/application.yml @@ -0,0 +1,25 @@ +#启用metrics,prometheus监控 +management: + metrics: + export: + prometheus: + enabled: true + endpoint: + health: + show-details: always + metrics: + enabled: true + prometheus: + enabled: true + # 启用pause端点 + pause: + enabled: true + # 启用restart端点,之所以要启用restart端点,是因为pause端点的启用依赖restart端点的启用 + restart: + enabled: true + shutdown: + enabled: true + endpoints: + web: + exposure: + include: '*' diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/resources/bootstrap.yml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/resources/bootstrap.yml new file mode 100644 index 00000000..7ebdc86c --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/resources/bootstrap.yml @@ -0,0 +1,33 @@ +spring: + application: + name: core-gateway + cloud: + config: + discovery: + service-id: CONFIG-SERVICE #告诉当前客户端 统一配置中心的服务端服务id + enabled: true #开启客户端,根据服务id到注册中心获取配置信息 + label: dev # 指定分支 + name: ${spring.application.name} # 指定应用名称 + profile: dev # 指定激活环境 + sleuth: + reactor: + instrumentation-type: decorate_on_each + +# 配置eureka客户端信息 +# 配置eureka客户端信息 +eureka: + instance: + appname: ${spring.application.name} + lease-expiration-duration-in-seconds: 90 + lease-renewal-interval-in-seconds: 10 + prefer-ip-address: true + instance-id: ${spring.cloud.client.ip-address}:${server.port} + metadata-map: + user.name: ${spring.security.user.name} + user.password: ${spring.security.user.password} + client: + enabled: true + register-with-eureka: true + fetch-registry: true + service-url: + defaultZone: http://172.16.12.104:8761/eureka/ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/resources/logback-boot.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/resources/logback-boot.xml new file mode 100644 index 00000000..aa1b950d --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-gw/src/main/resources/logback-boot.xml @@ -0,0 +1,96 @@ + + + + + + + + + + System.out + + %d{HH:mm:ss.SSS} %X{spanId:-} %X{traceId:-} [%thread] %-5level %logger{36} - %msg%n + UTF-8 + + + + + ${LOG_HOME}/${APP_NAME}.log + + + ${LOG_HOME}/${APP_NAME}.log.%d{yyyy-MM-dd}.%i.log.zip + + + 100MB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} %X{traceId:-} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + ${LOG_HOME}/${APP_NAME}.log.%d{yyyy-MM-dd}.%i.log + 7 + + + 100MB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} %X{traceId:-} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + ${JSON_LOG_HOME}/${APP_NAME}.json.%d{yyyy-MM-dd}.%i.log + 7 + + + 100MB + + + + + + + { + "timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}", + "severity": "%level", + "service": "${APP_NAME:-}", + "trace": "%X{traceId:-}", + "span": "%X{spanId:-}", + "parent": "%X{X-B3-ParentSpanId:-}", + "exportable": "%X{X-Span-Export:-}", + "pid": "${PID:-}", + "thread": "%thread", + "class": "%logger{40}", + "rest": "%message" + } + + + + + + + + System.err + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/pom.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/pom.xml new file mode 100644 index 00000000..957a21b8 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/pom.xml @@ -0,0 +1,191 @@ + + 4.0.0 + + com.jiuyv.sptcc.agile + agile-portal + 0.2.8 + + agile-portal-service + + + + com.jiuyv.sptcc.agile + agile-portal-api + + + + + eu.bitwalker + UserAgentUtils + + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + + + + + commons-io + commons-io + + + + + net.logstash.logback + logstash-logback-encoder + ${logstash.version} + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-validation + + + + + org.apache.commons + commons-lang3 + + + + + org.apache.commons + commons-pool2 + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + org.springframework.boot + spring-boot-starter-cache + + + + com.github.ben-manes.caffeine + caffeine + + + + org.postgresql + postgresql + + + + com.jcraft + jsch + ${jsch.version} + + + + org.bouncycastle + bcpkix-jdk15on + ${bcpkix.version} + + + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-registry-prometheus + + + org.springframework.cloud + spring-cloud-starter-config + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + org.springframework.cloud + spring-cloud-starter-sleuth + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.mockito + mockito-inline + test + + + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.10 + + + default-prepare-agent + + prepare-agent + + + + default-report + prepare-package + + report + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + org.springframework.boot + spring-boot-maven-plugin + 2.1.1.RELEASE + + + + repackage + + + + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/PortalConsoleApplication.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/PortalConsoleApplication.java new file mode 100644 index 00000000..87aad301 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/PortalConsoleApplication.java @@ -0,0 +1,35 @@ +package com.jiuyv.sptccc.agile; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.scheduling.annotation.EnableScheduling; + +/** + * 启动程序 + * + * @author admin + */ +@EnableScheduling +@SpringBootApplication +@EnableCaching +public class PortalConsoleApplication { + private static final Logger LOGGER = LoggerFactory.getLogger(PortalConsoleApplication.class); + + public static void main(String[] args) { + SpringApplication.run(PortalConsoleApplication.class, args); + LOGGER.info("(♥◠‿◠)ノ゙ 模块启动成功゙ \n" + + " ___ ___ ___ \n" + + " |\\ \\ |\\ \\ / /| \n" + + " \\ \\ \\ \\ \\ \\/ / / \n" + + " __ \\ \\ \\ \\ \\ / / \n" + + " |\\ \\\\_\\ \\ \\/ / / \n" + + " \\ \\________\\ __/ / / \n" + + " \\|________| |\\___/ / \n" + + " \\|___|/ \n" + ); + } +} + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/aspectj/LogAspect.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/aspectj/LogAspect.java new file mode 100644 index 00000000..0e786d5c --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/aspectj/LogAspect.java @@ -0,0 +1,174 @@ +package com.jiuyv.sptccc.agile.framework.aspectj; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.jiuyv.sptccc.agile.common.annotation.Log; +import com.jiuyv.sptccc.agile.common.enums.BusinessStatus; +import com.jiuyv.sptccc.agile.common.utils.IpUtils; +import com.jiuyv.sptccc.agile.common.utils.ServletUtils; +import com.jiuyv.sptccc.agile.common.utils.StringUtil; +import com.jiuyv.sptccc.agile.framework.config.ConsoleProperties; +import com.jiuyv.sptccc.agile.portal.domain.TblPortalOperLog; +import com.jiuyv.sptccc.agile.portal.service.IPortalOperLogService; +import com.jiuyv.sptccc.agile.portal.utils.UserUtils; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpMethod; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerMapping; + +import java.util.Map; + +/** + * 操作日志记录处理 + * + * @author admin + */ +@Aspect +@Component +public class LogAspect { + private static final Logger LOGGER = LoggerFactory.getLogger(LogAspect.class); + + private final ThreadPoolTaskExecutor taskExecutor; + private final IPortalOperLogService portalOperLogService; + private final ConsoleProperties consoleProperties; + private final ObjectMapper objectMapper; + + public LogAspect(ThreadPoolTaskExecutor taskExecutor, + IPortalOperLogService portalOperLogService, + ConsoleProperties consoleProperties, + ObjectMapper objectMapper) { + this.taskExecutor = taskExecutor; + this.portalOperLogService = portalOperLogService; + this.consoleProperties = consoleProperties; + this.objectMapper = objectMapper; + } + + /** + * 处理完请求后执行 + * + * @param joinPoint 切点 + */ + @AfterReturning(pointcut = "@annotation(controllerLog)", returning = "jsonResult") + public void doAfterReturning(JoinPoint joinPoint, Log controllerLog, Object jsonResult) { + handleLog(joinPoint, controllerLog, null, jsonResult); + } + + /** + * 拦截异常操作 + * + * @param joinPoint 切点 + * @param e 异常 + */ + @AfterThrowing(value = "@annotation(controllerLog)", throwing = "e") + public void doAfterThrowing(JoinPoint joinPoint, Log controllerLog, Exception e) { + handleLog(joinPoint, controllerLog, e, null); + } + + protected void handleLog(final JoinPoint joinPoint, Log controllerLog, final Exception e, Object jsonResult) { + try { + // *========数据库日志=========*// + TblPortalOperLog operLog = new TblPortalOperLog(); + operLog.setStatus(BusinessStatus.SUCCESS.ordinal()); + // 请求的地址 + String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); + operLog.setOperIp(ip); + operLog.setOperUrl(ServletUtils.getRequest().getRequestURI()); + operLog.setOperName(UserUtils.getUserName()); + + + if (e != null) { + operLog.setStatus(BusinessStatus.FAIL.ordinal()); + operLog.setErrorMsg(StringUtil.substring(e.getMessage(), 0, 2000)); + } + // 设置方法名称 + String className = joinPoint.getTarget().getClass().getName(); + String methodName = joinPoint.getSignature().getName(); + operLog.setMethod(className + "." + methodName + "()"); + // 设置请求方式 + operLog.setRequestMethod(ServletUtils.getRequest().getMethod()); + // 处理设置注解上的参数 + getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult); + // 保存数据库 + taskExecutor.execute(() -> record(operLog)); + } catch (Exception exp) { + // 记录本地异常日志 + LOGGER.error("==前置通知异常==", exp); + } + } + + /** + * 获取注解中对方法的描述信息 用于Controller层注解 + * + * @param log 日志 + * @param operLog 操作日志 + */ + public void getControllerMethodDescription(JoinPoint joinPoint, Log log, TblPortalOperLog operLog, Object jsonResult) { + // 设置action动作 + operLog.setBusinessType(log.businessType().ordinal()); + // 设置标题 + operLog.setTitle(log.title()); + // 设置操作人类别 + operLog.setOperatorType(log.operatorType().ordinal()); + // 是否需要保存request,参数和值 + if (log.isSaveRequestData()) { + // 获取参数的信息,传入到数据库中。 + setRequestValue(joinPoint, operLog); + } + // 是否需要保存response,参数和值 + if (log.isSaveResponseData() && jsonResult != null) { + operLog.setJsonResult(StringUtil.substring(objectToJSONString(jsonResult), 0, 2000)); + } + } + + /** + * 获取请求的参数,放到log中 + * + * @param operLog 操作日志 + */ + private void setRequestValue(JoinPoint joinPoint, TblPortalOperLog operLog) { + String requestMethod = operLog.getRequestMethod(); + if (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod)) { + String params = argsArrayToString(joinPoint.getArgs()); + operLog.setOperParam(StringUtil.substring(params, 0, 2000)); + } else { + Map paramsMap = (Map) ServletUtils.getRequest().getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE); + operLog.setOperParam(StringUtil.substring(paramsMap.toString(), 0, 2000)); + } + } + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + StringBuilder params = new StringBuilder(); + if (paramsArray != null && paramsArray.length > 0) { + for (Object o : paramsArray) { + if (o != null && !ServiceGlobalLogAspect.isFilterObject(o)) { + params.append(objectToJSONString(o)).append(" "); + } + } + } + return params.toString().trim(); + } + + private void record(TblPortalOperLog operLog) { + operLog.setOperLocation(IpUtils.getRealAddressByIP(operLog.getOperIp(), consoleProperties.isAddressEnabled())); + portalOperLogService.insertOperlog(operLog); + } + + + private String objectToJSONString(Object o) { + try { + return objectMapper.writeValueAsString(o); + } catch (JsonProcessingException e) { + LOGGER.error("转为字符串失败", e); + return ""; + } + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/aspectj/ServiceGlobalLogAspect.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/aspectj/ServiceGlobalLogAspect.java new file mode 100644 index 00000000..356853d6 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/aspectj/ServiceGlobalLogAspect.java @@ -0,0 +1,189 @@ +package com.jiuyv.sptccc.agile.framework.aspectj; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.jiuyv.sptccc.agile.common.utils.IpUtils; +import com.jiuyv.sptccc.agile.common.utils.ServletUtils; +import com.jiuyv.sptccc.agile.portal.utils.UserUtils; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpMethod; +import org.springframework.stereotype.Component; +import org.springframework.validation.BindingResult; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.HandlerMapping; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.Map; + +/** + * 全局请求日志,这个日志就不记录到表里面了 + * + * @author zhouliang + */ +@Aspect +@Component +public class ServiceGlobalLogAspect { + private static final Logger LOGGER = LoggerFactory.getLogger(ServiceGlobalLogAspect.class); + + private static final ThreadLocal timeTreadLocal = new ThreadLocal<>(); + + private final ObjectMapper objectMapper; + + public ServiceGlobalLogAspect(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } + + //请求Controller输出日志 + @Pointcut("execution(* *..*.*Controller.*(..)) && !@annotation(com.jiuyv.sptccc.agile.common.annotation.LogIgnore)") + public void controllerAspect() { + } + + //请求日志记录 + @Before("controllerAspect()") + public void before(JoinPoint joinPoint) { + timeTreadLocal.set(System.currentTimeMillis()); + // 接收请求,记录完整请求内容 + //获取请求的request + HttpServletRequest request = ServletUtils.getRequest(); + String methodName = getMethodName(joinPoint); + // 请求的地址 + String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); + String userName = "none"; + try { + userName = UserUtils.getUserId() + "/" + UserUtils.getUserName(); + } catch (Exception e) { + //不报错 + } + String keyValue = setRequestValue(joinPoint, request.getMethod()); + LOGGER.info("{}-req:User={},Ip={},Uri={},Method={},ContentType={}", methodName, userName, ip, request.getRequestURI(), request.getMethod(), request.getContentType()); + LOGGER.info("{}-req:Params={}", methodName, keyValue); + } + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + @SuppressWarnings("rawtypes") + public static boolean isFilterObject(final Object o) { + Class clazz = o.getClass(); + if (clazz.isArray()) { + return clazz.getComponentType().isAssignableFrom(MultipartFile.class); + } else if (Collection.class.isAssignableFrom(clazz)) { + Collection collection = (Collection) o; + for (Object value : collection) { + if (value instanceof MultipartFile) { + return true; + } + } + return false; + } else if (Map.class.isAssignableFrom(clazz)) { + Map map = (Map) o; + + for (Object value : map.entrySet()) { + Map.Entry entry = (Map.Entry) value; + if (entry.getValue() instanceof MultipartFile) { + return true; + } + } + return false; + } else { + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse + || o instanceof BindingResult; + } + } + + //后置返回(不输出返回内容) + @AfterReturning(pointcut = "controllerAspect() && @annotation(com.jiuyv.sptccc.agile.common.annotation.LogSimpleResult)") + public void doAfterReturningSimple(JoinPoint joinPoint) { + long startTime = timeTreadLocal.get(); + double callTime = (System.currentTimeMillis() - startTime) / 1000.0; + String methodName = getMethodName(joinPoint); + LOGGER.info("{}-res:Success,Time={}s,Data=omitting content...", methodName, callTime); + timeTreadLocal.remove(); + } + + //后置异常返回 + @AfterThrowing(pointcut = "controllerAspect()", throwing = "e") + public void doAfterThrowing(JoinPoint joinPoint, Throwable e) { + long startTime = timeTreadLocal.get(); + double callTime = (System.currentTimeMillis() - startTime) / 1000.0; + String methodName = getMethodName(joinPoint); + LOGGER.info("{}-res:Failure,Time={}s,Error={}", methodName, callTime, e.getMessage()); + timeTreadLocal.remove(); + } + + /** + * 获取方法名称 + */ + private String getMethodName(JoinPoint joinPoint) { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + //获取被拦截的方法 + Method method = methodSignature.getMethod(); + String className = method.getDeclaringClass().getCanonicalName(); + return className.substring(className.lastIndexOf(".") + 1) + "." + method.getName(); + } + + /** + * 获取请求的参数 + */ + private String setRequestValue(JoinPoint joinPoint, String requestMethod) { + if (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod)) { + return argsArrayToString(joinPoint.getArgs()); + } else { + Map paramsMap = (Map) ServletUtils.getRequest().getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE); + return paramsMap.toString(); + } + } + + //后置返回 + @AfterReturning(pointcut = "controllerAspect() && !@annotation(com.jiuyv.sptccc.agile.common.annotation.LogSimpleResult)" + , returning = "result") + public void doAfterReturning(JoinPoint joinPoint, Object result) { + long startTime = timeTreadLocal.get(); + double callTime = (System.currentTimeMillis() - startTime) / 1000.0; + String methodName = getMethodName(joinPoint); + String returnstr = null; + if (result != null) { + try { + returnstr = objectMapper.writeValueAsString(result); + } catch (JsonProcessingException e) { + returnstr = "return convert error"; + } + } + LOGGER.info("{}-res:Success,Time={}s,Data={}", methodName, callTime, returnstr); + timeTreadLocal.remove(); + } + + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + StringBuilder params = new StringBuilder(); + if (paramsArray != null && paramsArray.length > 0) { + for (Object o : paramsArray) { + if (o != null && !isFilterObject(o)) { + try { + Object jsonObj = objectMapper.writeValueAsString(o); + params.append(jsonObj.toString()).append(" "); + } catch (JsonProcessingException e) { + LOGGER.debug("参数拼装出错:{}", e.getMessage(), e); + } + } + } + } + return params.toString().trim(); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/config/ApplicationConfig.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/config/ApplicationConfig.java new file mode 100644 index 00000000..142f4da1 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/config/ApplicationConfig.java @@ -0,0 +1,49 @@ +package com.jiuyv.sptccc.agile.framework.config; + +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.TimeZone; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * 程序注解配置 + * + * @author admin + */ +@Configuration +public class ApplicationConfig { + // 核心线程池大小 + private static final int CORE_POOL_SIZE = 50; + // 最大可创建的线程数 + private static final int MAX_POOL_SIZE = 200; + // 队列最大长度 + private static final int QUEUE_CAPACITY = 1000; + // 线程池维护线程所允许的空闲时间 + private static final int KEEP_ALIVE_SECONDS = 300; + + @Bean(name = "threadPoolTaskExecutor") + public ThreadPoolTaskExecutor threadPoolTaskExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setMaxPoolSize(MAX_POOL_SIZE); + executor.setCorePoolSize(CORE_POOL_SIZE); + executor.setQueueCapacity(QUEUE_CAPACITY); + executor.setKeepAliveSeconds(KEEP_ALIVE_SECONDS); + // 线程池对拒绝任务(无线程可用)的处理策略 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + return executor; + } + + /** + * 时区配置,long类型解决 + */ + @Bean + public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() { + return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault()) + .serializerByType(Long.class, ToStringSerializer.instance) + .serializerByType(Long.TYPE, ToStringSerializer.instance); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/config/ConsoleProperties.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/config/ConsoleProperties.java new file mode 100644 index 00000000..f6e12076 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/config/ConsoleProperties.java @@ -0,0 +1,120 @@ +package com.jiuyv.sptccc.agile.framework.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 读取项目相关配置 + * + * @author admin + */ +@Component +@ConfigurationProperties(prefix = "conosle") +public class ConsoleProperties { + + /** + * 获取地址开关 + */ + private boolean addressEnabled; + + /** + * sftp上传路径 + */ + private String uploadPath; + + /** + * 文档下载文件名 + */ + private String wordFileName = "word.docx"; + + /** + * sdk下载文件名 + */ + private String sdkFileName = "sdk.rar"; + + + /** + * 实验室挂载卷主目录 + */ + private String dockerDataPath; + + /** + * 文件下载最大限制 默认100M + */ + private long downloadMaxFile = 100L; + + /** + * 密码过期时间,默认1年 + */ + private int passwordExpirationDates = 60; + + /** + * 密码快过期时间提醒,默认提前7天 + */ + private int passwordExpirationWarnDates = 15; + + + public boolean isAddressEnabled() { + return addressEnabled; + } + + public void setAddressEnabled(boolean addressEnabled) { + this.addressEnabled = addressEnabled; + } + + public String getUploadPath() { + return uploadPath; + } + + public void setUploadPath(String uploadPath) { + this.uploadPath = uploadPath; + } + + public String getWordFileName() { + return wordFileName; + } + + public void setWordFileName(String wordFileName) { + this.wordFileName = wordFileName; + } + + public String getSdkFileName() { + return sdkFileName; + } + + public void setSdkFileName(String sdkFileName) { + this.sdkFileName = sdkFileName; + } + + public String getDockerDataPath() { + return dockerDataPath; + } + + public void setDockerDataPath(String dockerDataPath) { + this.dockerDataPath = dockerDataPath; + } + + public long getDownloadMaxFile() { + return downloadMaxFile; + } + + public void setDownloadMaxFile(long downloadMaxFile) { + this.downloadMaxFile = downloadMaxFile; + } + + public int getPasswordExpirationDates() { + return passwordExpirationDates; + } + + public void setPasswordExpirationDates(int passwordExpirationDates) { + this.passwordExpirationDates = passwordExpirationDates; + } + + public int getPasswordExpirationWarnDates() { + return passwordExpirationWarnDates; + } + + public void setPasswordExpirationWarnDates(int passwordExpirationWarnDates) { + this.passwordExpirationWarnDates = passwordExpirationWarnDates; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/config/sftp/SftpChannelFactory.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/config/sftp/SftpChannelFactory.java new file mode 100644 index 00000000..12298c1e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/config/sftp/SftpChannelFactory.java @@ -0,0 +1,62 @@ +package com.jiuyv.sptccc.agile.framework.config.sftp; + +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.Session; +import org.apache.commons.pool2.BasePooledObjectFactory; +import org.apache.commons.pool2.PooledObject; +import org.apache.commons.pool2.impl.DefaultPooledObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * ChannelSftp 工厂 + * @author ren_chao + */ +public class SftpChannelFactory extends BasePooledObjectFactory { + private static final Logger LOGGER = LoggerFactory.getLogger(SftpChannelFactory.class); + private final SftpProperties sftpProperties; + + public SftpChannelFactory(SftpProperties sftpProperties) { + this.sftpProperties = sftpProperties; + } + + @Override + public ChannelSftp create() throws Exception { + JSch jSch = new JSch(); + Session session = jSch.getSession(sftpProperties.getUsername(), sftpProperties.getHost(), sftpProperties.getPort()); + session.setPassword(sftpProperties.getPassword()); + session.setConfig("StrictHostKeyChecking", "no"); // 忽略主机密钥检查 + session.connect(); + ChannelSftp sftpChannel= (ChannelSftp) session.openChannel("sftp"); + sftpChannel.connect(); + LOGGER.debug("创建sftp连接[{}]成功。", sftpProperties.getHost()); + return sftpChannel; + } + + @Override + public PooledObject wrap(ChannelSftp channelSftp) { + return new DefaultPooledObject<>(channelSftp); + } + + /** + * 销毁连接 + */ + @Override + public void destroyObject(PooledObject p) throws Exception { + ChannelSftp channelSftp = p.getObject(); + Session session = channelSftp.getSession(); + LOGGER.debug("销毁连接[{}]", session.getHost()); + channelSftp.disconnect(); + session.disconnect(); + } + + /** + * 检查通道是否正常 + */ + @Override + public boolean validateObject(PooledObject p) { + ChannelSftp channelSftp = p.getObject(); + return channelSftp.isConnected() && !channelSftp.isClosed(); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/config/sftp/SftpPool.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/config/sftp/SftpPool.java new file mode 100644 index 00000000..d808d7f9 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/config/sftp/SftpPool.java @@ -0,0 +1,114 @@ +package com.jiuyv.sptccc.agile.framework.config.sftp; + +import com.jcraft.jsch.ChannelSftp; +import com.jiuyv.sptccc.agile.common.constant.ServiceConstant; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerClientInfo; +import com.jiuyv.sptccc.agile.portal.mapper.DockerClientInfoMapper; +import com.jiuyv.sptccc.agile.portal.utils.Sm4Util; +import org.apache.commons.codec.DecoderException; +import org.apache.commons.pool2.impl.GenericObjectPool; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Component; + +import java.security.GeneralSecurityException; +import java.time.Duration; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 存放多个sftp服务器连接池 + * @author ren_chao + */ +@Component +public class SftpPool { + private static final Logger LOGGER = LoggerFactory.getLogger(SftpPool.class); + private static final Long DEFAULT_KEY = -1L; + + private final Map> map = new HashMap<>(); + private final ThreadPoolTaskExecutor taskExecutor; + + public SftpPool(ThreadPoolTaskExecutor taskExecutor,SftpProperties sftpProperties, + DockerClientInfoMapper dockerClientInfoMapper) { + this.taskExecutor = taskExecutor; + // 默认sftp + map.put(DEFAULT_KEY, createPool(sftpProperties)); + + // 实验室SFTP + List clientInfoList = dockerClientInfoMapper.selectAllList(); + for (TblDockerClientInfo clientInfo : clientInfoList) { + SftpProperties properties = new SftpProperties(); + properties.setHost(clientInfo.getDockerServerIp()); + properties.setPort(Integer.parseInt(clientInfo.getDockerServerPort())); + properties.setUsername(clientInfo.getDockerServerUsername()); + properties.setPassword(decryptPassword(clientInfo.getDockerServerPassword())); + map.put(clientInfo.getDockerServerId(), createPool(properties)); + } + } + + public ChannelSftp getDefault() { + return get(DEFAULT_KEY); + + } + + public ChannelSftp get(Long serverId) { + try { + return map.get(serverId).borrowObject(); + } catch (Exception e) { + LOGGER.error("系统错误,Sftp服务器异常", e); + throw new ServiceException("系统错误,Sftp服务器异常"); + } + } + + + + /** + * 关闭默认sftp + * + */ + public void closeDefault(ChannelSftp channelSftp) { + map.get(DEFAULT_KEY).returnObject(channelSftp); + } + + /** + * 关闭指定sftp + * + */ + public void close(Long serverId, ChannelSftp channelSftp) { + map.get(serverId).returnObject(channelSftp); + } + + private String decryptPassword(String password) { + try { + return Sm4Util.decryptEcb(ServiceConstant.SM4_SECERT_KEY, password); + } catch (GeneralSecurityException | DecoderException e) { + LOGGER.error("密码解析出错。"); + return ""; + } + } + + private GenericObjectPool createPool(SftpProperties sftpProperties) { + GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig<>(); + poolConfig.setMaxIdle(sftpProperties.getMaxIdle()); + poolConfig.setMaxTotal(sftpProperties.getMaxTotal()); + poolConfig.setMinIdle(sftpProperties.getMinIdle()); + // 10分钟清理一次无效连接 + poolConfig.setTimeBetweenEvictionRuns(Duration.ofMinutes(10)); + // 获取连接前进行连接可用性校验 + poolConfig.setTestOnBorrow(true); + GenericObjectPool pool = new GenericObjectPool<>(new SftpChannelFactory(sftpProperties), poolConfig); + // 异步初始化连接池 + taskExecutor.execute(() -> { + try { + pool.preparePool(); + } catch (Exception e) { + LOGGER.error("Sftp服务器异常,[{}]连接池初始化失败", sftpProperties.getHost(), e); + } + }); + return pool; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/config/sftp/SftpProperties.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/config/sftp/SftpProperties.java new file mode 100644 index 00000000..44349d8d --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/config/sftp/SftpProperties.java @@ -0,0 +1,86 @@ +package com.jiuyv.sptccc.agile.framework.config.sftp; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 上传文件SFTP + * + * @author ren_chao + */ +@Component +@ConfigurationProperties(prefix = "sftp") +public class SftpProperties { + private String host; + private int port = 22; + private String username; + private String password; + /** + * 连接池最大实例数 + */ + private int maxTotal = 10; + /** + * 连接池最大空闲数 + */ + private int maxIdle = 10; + /** + * 连接池最小空闲数 + */ + private int minIdle = 5; + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public int getPort() { + return port; + } + + public void setPort(int port) { + this.port = port; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public int getMaxTotal() { + return maxTotal; + } + + public void setMaxTotal(int maxTotal) { + this.maxTotal = maxTotal; + } + + public int getMaxIdle() { + return maxIdle; + } + + public void setMaxIdle(int maxIdle) { + this.maxIdle = maxIdle; + } + + public int getMinIdle() { + return minIdle; + } + + public void setMinIdle(int minIdle) { + this.minIdle = minIdle; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/web/exception/GlobalExceptionHandler.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/web/exception/GlobalExceptionHandler.java new file mode 100644 index 00000000..f6e4b241 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/framework/web/exception/GlobalExceptionHandler.java @@ -0,0 +1,125 @@ +package com.jiuyv.sptccc.agile.framework.web.exception; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.jiuyv.sptccc.agile.common.constant.BaseResultCode; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.validation.BindException; +import org.springframework.validation.BindingResult; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.nio.file.AccessDeniedException; +import java.util.HashMap; +import java.util.Map; + +/** + * 全局异常处理器 + * + * @author admin + */ +@RestControllerAdvice +public class GlobalExceptionHandler { + private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); + + private final ObjectMapper objectMapper; + + public GlobalExceptionHandler(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } + /** + * 权限校验异常 + */ + @ExceptionHandler(AccessDeniedException.class) + public R handleAccessDeniedException(AccessDeniedException e, HttpServletRequest request, HttpServletResponse response) { + response.setStatus(301); + + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',权限校验失败'{}'", requestURI, e.getMessage()); + return R.fail(BaseResultCode.FAILED.getCode(), "没有权限,请联系管理员授权"); + } + + /** + * 请求方式不支持 + */ + @ExceptionHandler(HttpRequestMethodNotSupportedException.class) + public R handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e, + HttpServletRequest request, HttpServletResponse response) { + response.setStatus(301); + + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod()); + return R.fail(e.getMessage()); + } + + /** + * 业务异常 + */ + @ExceptionHandler({ServiceException.class}) + public R handleServiceException(ServiceException e) { + log.error(e.getMessage(), e); + Integer code = e.getCode(); + + return code != null ? R.fail(code.toString(), e.getMessage()) : R.fail(e.getMessage()); + } + + /** + * 自定义验证异常 + */ + @ExceptionHandler(BindException.class) + public R handleBindException(BindException e) { + log.error(e.getMessage(), e); + String message = e.getAllErrors().get(0).getDefaultMessage(); + return R.fail(message); + } + + /** + * 自定义验证异常 + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public R handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { + log.error("数据校验出现问题{},异常类型:{}", e.getMessage(), e.getClass()); + BindingResult bindingResult = e.getBindingResult(); + + Map errorMap = new HashMap<>(); + bindingResult.getFieldErrors().forEach((fieldError) -> errorMap.put(fieldError.getField(), fieldError.getDefaultMessage())); + String msg; + try { + msg = objectMapper.writeValueAsString(errorMap); + } catch (JsonProcessingException ex) { + log.info("errorMap解析错误", ex); + msg = null; + } + return msg == null ? R.fail() : R.fail(msg); + } + + /** + * 拦截未知的运行时异常 + */ + @ExceptionHandler({RuntimeException.class}) + public R handleRuntimeException(RuntimeException e, HttpServletRequest request) { + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',发生未知异常.", requestURI, e); + + return R.fail("系统忙,请稍后再试"); + } + + /** + * 系统异常 + */ + @ExceptionHandler(Exception.class) + public R handleException(Exception e, HttpServletRequest request, HttpServletResponse response) { + response.setStatus(301); + + String requestURI = request.getRequestURI(); + log.error("请求地址'{}',发生系统异常.", requestURI, e); + return R.fail(e.getMessage()); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/BaseController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/BaseController.java new file mode 100644 index 00000000..8ee8ce2c --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/BaseController.java @@ -0,0 +1,75 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.ReqPageDTO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; +import org.springframework.http.HttpStatus; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * web层通用数据处理 + * + * @author admin + */ +public abstract class BaseController { + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + /** + * 响应请求分页数据 + */ + protected TableDataPage getDataTable(List list) { + TableDataPage rspData = new TableDataPage<>(); + rspData.setCode(HttpStatus.OK.value()); + rspData.setMsg("查询成功"); + rspData.setRows(list); + rspData.setTotal((int) ((Page) list).getTotal()); + return rspData; + } + + protected T transformDTO(Object source, Class clazz) { + T contentDTO = newInstance(clazz); + BeanUtils.copyProperties(source, contentDTO); + return contentDTO; + } + + /** + * 转换为DTOList + * + */ + protected ListtransformDTOList(List list, Class clazz) { + if (list instanceof Page) { + Page page = new Page<>(); + page.setTotal(((Page) list).getTotal()); + page.addAll(list.stream().map(info -> transformDTO(info, clazz)).collect(Collectors.toList())); + return page; + } + return list.stream().map(info -> transformDTO(info, clazz)).collect(Collectors.toList()); + } + + /** + * 根据Class获取对应的实例 + */ + private T newInstance(Class clazz) { + try { + return clazz.newInstance(); + } catch (ReflectiveOperationException e) { + logger.error("系统异常", e); + throw new ServiceException("系统异常"); + } + } + + /** + * 分页 + * + */ + protected void startPage(ReqPageDTO pageDTO) { + PageHelper.startPage(pageDTO.getPageNum(), pageDTO.getPageSize()).setReasonable(true); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/DockerApplyController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/DockerApplyController.java new file mode 100644 index 00000000..dad25006 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/DockerApplyController.java @@ -0,0 +1,38 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.api.DockerApplyFeignApi; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.DockerApplyReviewDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerApplyPageDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyReview; +import com.jiuyv.sptccc.agile.portal.service.IDockerApplyInfoService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +import static com.jiuyv.sptccc.agile.api.DockerApplyFeignApi.API_PATH_PREFIX; + +@RestController +@RequestMapping(API_PATH_PREFIX) +public class DockerApplyController extends BaseController implements DockerApplyFeignApi { + + private final IDockerApplyInfoService dockerApplyInfoService; + + public DockerApplyController(IDockerApplyInfoService dockerApplyInfoService) { + this.dockerApplyInfoService = dockerApplyInfoService; + } + + @Override + public TableDataPage getList(ReqDockerApplyPageDTO reqDTO) { + startPage(reqDTO); + List list = dockerApplyInfoService.getPage(reqDTO); + return getDataTable(transformDTOList(list, DockerApplyReviewDTO.class)); + } + + @Override + public R detail(Long reviewId) { + return R.ok(dockerApplyInfoService.getInfo(reviewId)); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/DockerDownloadApplyController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/DockerDownloadApplyController.java new file mode 100644 index 00000000..a9b917d9 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/DockerDownloadApplyController.java @@ -0,0 +1,41 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.api.DockerDownloadApplyFeignApi; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.DockerDownloadApplyDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerDownApplyPageDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerDownloadApply; +import com.jiuyv.sptccc.agile.portal.service.IDockerDownloadApplyService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +import static com.jiuyv.sptccc.agile.api.DockerDownloadApplyFeignApi.API_PATH_PREFIX; + +@RestController +@RequestMapping(API_PATH_PREFIX) +public class DockerDownloadApplyController extends BaseController implements DockerDownloadApplyFeignApi { + private final IDockerDownloadApplyService dockerDownloadApplyService; + + public DockerDownloadApplyController(IDockerDownloadApplyService dockerDownloadApplyService) { + this.dockerDownloadApplyService = dockerDownloadApplyService; + } + + @Override + public TableDataPage getList(ReqDockerDownApplyPageDTO reqDTO) { + startPage(reqDTO); + List list = dockerDownloadApplyService.list(reqDTO); + return getDataTable(transformDTOList(list, DockerDownloadApplyDTO.class)); + } + + @GetMapping("/download/{downloadApplyId}/{isQuery}") + public void download(@PathVariable("downloadApplyId") Long downloadApplyId, + @PathVariable("isQuery") Boolean isQuery, + HttpServletResponse response) { + dockerDownloadApplyService.downloadFile(downloadApplyId, isQuery, response); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/DockerWithUserController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/DockerWithUserController.java new file mode 100644 index 00000000..12b5b5c6 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/DockerWithUserController.java @@ -0,0 +1,69 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.api.DockerWithUserFeignApi; +import com.jiuyv.sptccc.agile.common.annotation.Log; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.common.enums.BusinessType; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.DockerFileDTO; +import com.jiuyv.sptccc.agile.dto.DockerWithUserDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerDownApplyDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerWithUserDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerWithUserPageDTO; +import com.jiuyv.sptccc.agile.portal.service.IDockerWithUserService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +import static com.jiuyv.sptccc.agile.api.DockerWithUserFeignApi.API_PATH_PREFIX; + +@RestController +@RequestMapping(API_PATH_PREFIX) +public class DockerWithUserController extends BaseController implements DockerWithUserFeignApi { + + private final IDockerWithUserService dockerWithUserService; + + public DockerWithUserController(IDockerWithUserService dockerWithUserService) { + this.dockerWithUserService = dockerWithUserService; + } + + @Override + public TableDataPage getList(ReqDockerWithUserPageDTO reqDTO) { + startPage(reqDTO); + return getDataTable(dockerWithUserService.list(reqDTO)); + } + + @Override + public R getInfo(Long applyId) { + DockerWithUserDTO dockerWithUserDTO = dockerWithUserService.getInfo(applyId); + return R.ok(dockerWithUserDTO); + } + + @Override + @Log(title = "实验室-数据注入申请", businessType = BusinessType.INSERT) + public R fileBind(ReqDockerWithUserDTO reqDTO) { + dockerWithUserService.injectApply(reqDTO); + return R.ok(); + } + + @Override + @Log(title = "实验室-重启", businessType = BusinessType.UPDATE) + public R restart(ReqDockerWithUserDTO reqDTO) { + dockerWithUserService.restart(reqDTO); + return R.ok(); + } + + @Override + public R> fileList(Long applyId) { + List list = dockerWithUserService.fileList(applyId); + return R.ok(list); + } + + @Override + @Log(title = "实验室-申请下载", businessType = BusinessType.INSERT) + public R applyDown(ReqDockerDownApplyDTO reqDTO) { + dockerWithUserService.applyDown(reqDTO.getApplyId(), reqDTO.getFileName(), reqDTO.getApplyDesc()); + return R.ok(); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/FileController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/FileController.java new file mode 100644 index 00000000..3e2659ca --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/FileController.java @@ -0,0 +1,59 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.api.FileFeignApi; +import com.jiuyv.sptccc.agile.common.annotation.Log; +import com.jiuyv.sptccc.agile.common.constant.ServiceConstant; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.common.enums.BusinessType; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.ReqFileDTO; +import com.jiuyv.sptccc.agile.dto.UploadFileDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblPublicFiles; +import com.jiuyv.sptccc.agile.portal.service.IFileService; +import com.jiuyv.sptccc.agile.portal.utils.UserUtils; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +import static com.jiuyv.sptccc.agile.api.FileFeignApi.API_PATH_PREFIX; + +@RestController +@RequestMapping(API_PATH_PREFIX) +public class FileController extends BaseController implements FileFeignApi { + + private final IFileService fileService; + + public FileController(IFileService fileService) { + this.fileService = fileService; + } + + @Override + @Log(title = "我的资源-上传文件", businessType = BusinessType.INSERT) + public R uploadFiles(MultipartFile file, String fileType, String remarks) { + fileService.saveFile(file, fileType, remarks); + return R.ok(); + } + + @Override + public TableDataPage getList(ReqFileDTO pageDTO) { + startPage(pageDTO); + TblPublicFiles publicFile = new TblPublicFiles(); + publicFile.setFileName(pageDTO.getFileName()); + publicFile.setFileExtension(pageDTO.getFileExtension()); + publicFile.setFileType(pageDTO.getFileType()); + publicFile.setCreateBy(UserUtils.getUserId()); + publicFile.setSysType(ServiceConstant.SYS_TYPE); + publicFile.setFileSourceType(ServiceConstant.FILE_SOURCE_TYPE); + List list = fileService.getList(publicFile); + return getDataTable(transformDTOList(list, UploadFileDTO.class)); + } + + @Override + @Log(title = "我的资源-删除文件", businessType = BusinessType.DELETE) + public R delete(Long fileId) { + fileService.deleteByFileId(fileId); + return R.ok(); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/PortalContentController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/PortalContentController.java new file mode 100644 index 00000000..e0a8ec8d --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/PortalContentController.java @@ -0,0 +1,98 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.api.ContentFeignApi; +import com.jiuyv.sptccc.agile.common.annotation.LogSimpleResult; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.common.enums.ContentShowType; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.PortalContentDTO; +import com.jiuyv.sptccc.agile.dto.ReqPageDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblPortalContent; +import com.jiuyv.sptccc.agile.portal.service.IPortalContentService; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +import static com.jiuyv.sptccc.agile.api.ContentFeignApi.API_PATH_PREFIX; + +@RestController +@RequestMapping(API_PATH_PREFIX) +public class PortalContentController extends BaseController implements ContentFeignApi { + + private final IPortalContentService portalContentService; + + public PortalContentController(IPortalContentService portalContentService) { + this.portalContentService = portalContentService; + } + + /** + * 获取内容列表 + * + */ + @LogSimpleResult + @Override + @Cacheable("contentList") + public R> getContentList(String showType) { + List list = portalContentService.getContentList(showType); + return R.ok(transformDTOList(list, PortalContentDTO.class)); + } + + /** + * 获取资讯列表 + * + */ + @LogSimpleResult + @Override + @Cacheable("informationList") + public TableDataPage getInformationList(ReqPageDTO pageDTO) { + startPage(pageDTO); + List list = portalContentService.getContentList(ContentShowType.INFORMATION.getValue()); + return getDataTable(transformDTOList(list, PortalContentDTO.class)); + } + + /** + * 获取内容详情 + * + */ + @LogSimpleResult + @Override + @Cacheable("contentInfo") + public R contentInfo(Long contentId) { + TblPortalContent portalContent = portalContentService.getContentInfo(contentId); + return R.ok(transformDTO(portalContent, PortalContentDTO.class)); + } + + /** + * 图片请求 + * + */ + @GetMapping("/images/{imageName}") + public void getImage(@PathVariable("imageName") String imageName, HttpServletResponse response) { + portalContentService.getImage(imageName, response); + } + + /** + * 文档下载 + * + */ + @GetMapping("/wordDownload") + public void wordDownload(HttpServletResponse response) { + portalContentService.wordDownload(response); + } + + /** + * sdk下载 + * + */ + @GetMapping("/sdkDownload") + public void sdkDownload(HttpServletResponse response) { + portalContentService.sdkDownload(response); + } + + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/PortalLogController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/PortalLogController.java new file mode 100644 index 00000000..fca3f157 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/PortalLogController.java @@ -0,0 +1,36 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.api.PortalLogFeignApi; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.dto.ReqLogDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblPortalLogininfor; +import com.jiuyv.sptccc.agile.portal.service.IPortalLogininforService; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import static com.jiuyv.sptccc.agile.api.PortalLogFeignApi.API_PATH_PREFIX; + +/** + * 日志 + * @author ren_chao + */ +@RestController +@RequestMapping(API_PATH_PREFIX) +public class PortalLogController implements PortalLogFeignApi { + + private final IPortalLogininforService portalLogininforService; + + public PortalLogController(IPortalLogininforService portalLogininforService) { + this.portalLogininforService = portalLogininforService; + } + + @Override + public R recordLoginInfo(ReqLogDTO logDTO) { + TblPortalLogininfor loginInfo = new TblPortalLogininfor(); + BeanUtils.copyProperties(logDTO, loginInfo); + portalLogininforService.insertLogininfor(loginInfo); + return R.ok(); + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/PortalLogininforController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/PortalLogininforController.java new file mode 100644 index 00000000..d8b9bbc1 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/PortalLogininforController.java @@ -0,0 +1,36 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.portal.domain.TblPortalLogininfor; +import com.jiuyv.sptccc.agile.portal.dto.ReqPortalLogininforAddDTO; +import com.jiuyv.sptccc.agile.portal.service.IPortalLogininforService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 系统访问记录 + * + * @author admin + */ +@RestController +@RequestMapping("/logininfor") +public class PortalLogininforController extends BaseController { + @Autowired + private IPortalLogininforService logininforService; + + @PostMapping("/insert") + public void insert(@Validated @RequestBody ReqPortalLogininforAddDTO req) { + TblPortalLogininfor logininfor = new TblPortalLogininfor(); + logininfor.setUserName(req.getUserName()); + logininfor.setIpaddr(req.getIpaddr()); + logininfor.setLoginLocation(req.getLoginLocation()); + logininfor.setBrowser(req.getBrowser()); + logininfor.setOs(req.getOs()); + logininfor.setStatus(req.getStatus()); + logininfor.setMsg(req.getMsg()); + logininforService.insertLogininfor(logininfor); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/PortalMessageController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/PortalMessageController.java new file mode 100644 index 00000000..dbf17f40 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/PortalMessageController.java @@ -0,0 +1,53 @@ +package com.jiuyv.sptccc.agile.portal.controller; + +import com.jiuyv.sptccc.agile.api.PortalMessageApi; +import com.jiuyv.sptccc.agile.common.annotation.Log; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.common.enums.BusinessType; +import com.jiuyv.sptccc.agile.domain.TableDataPage; +import com.jiuyv.sptccc.agile.dto.PortalMessageDTO; +import com.jiuyv.sptccc.agile.dto.ReqPageDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblPortalMsg; +import com.jiuyv.sptccc.agile.portal.service.IPortalMessageService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +import static com.jiuyv.sptccc.agile.api.PortalMessageApi.API_PATH_PREFIX; + +/** + * 门户消息 + * + * @author ren_chao + */ +@RestController +@RequestMapping(API_PATH_PREFIX) +public class PortalMessageController extends BaseController implements PortalMessageApi { + + private final IPortalMessageService portalMessageService; + + public PortalMessageController(IPortalMessageService portalMessageService) { + this.portalMessageService = portalMessageService; + } + + @Override + public TableDataPage getMessageList(ReqPageDTO pageDTO) { + startPage(pageDTO); + List list = portalMessageService.getList(); + return getDataTable(transformDTOList(list, PortalMessageDTO.class)); + } + + @Override + @Log(title = "我的消息-查看消息", businessType = BusinessType.UPDATE) + public R detail(Long msgId) { + return R.ok(transformDTO(portalMessageService.getDetail(msgId), PortalMessageDTO.class)); + } + + @Override + @Log(title = "我的消息-置为已读", businessType = BusinessType.UPDATE) + public R markRead(Long[] msgIds) { + portalMessageService.markRead(msgIds); + return R.ok(); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/PortalUserController.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/PortalUserController.java new file mode 100644 index 00000000..12d7b900 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/controller/PortalUserController.java @@ -0,0 +1,89 @@ +package com.jiuyv.sptccc.agile.portal.controller; + + +import com.jiuyv.sptccc.agile.api.PortalUserFeignApi; +import com.jiuyv.sptccc.agile.common.annotation.Log; +import com.jiuyv.sptccc.agile.common.core.domain.R; +import com.jiuyv.sptccc.agile.common.enums.BusinessType; +import com.jiuyv.sptccc.agile.dto.PortalUserDTO; +import com.jiuyv.sptccc.agile.dto.ResUserPasswordDTO; +import com.jiuyv.sptccc.agile.framework.config.ConsoleProperties; +import com.jiuyv.sptccc.agile.portal.domain.TblPortalUser; +import com.jiuyv.sptccc.agile.portal.service.IPortalUserService; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Date; + +import static com.jiuyv.sptccc.agile.api.PortalUserFeignApi.API_PATH_PREFIX; + + +/** + * 用户信息 + * + * @author admin + */ +@RestController +@RequestMapping(API_PATH_PREFIX) +public class PortalUserController implements PortalUserFeignApi { + + private final IPortalUserService userService; + private final ConsoleProperties consoleProperties; + + public PortalUserController(IPortalUserService userService, ConsoleProperties consoleProperties) { + this.userService = userService; + this.consoleProperties = consoleProperties; + } + + /** + * 获取用户 + */ + @Override + public R selectUserByUserName(String username) { + TblPortalUser user = userService.selectUserByUserName(username); + if (user == null) { + return R.ok(); + } + PortalUserDTO userDTO = new PortalUserDTO(); + BeanUtils.copyProperties(user, userDTO); + String avatar = user.getAvatar(); + if (avatar != null) { + String[] split = avatar.split("/"); + userDTO.setAvatar("content/images/" + split[split.length - 1]); + } + // 计算密码过期时间 + Date pwdUpdateTime = user.getPwdUpdateTime(); + long diff = consoleProperties.getPasswordExpirationDates() + - (System.currentTimeMillis() - pwdUpdateTime.getTime()) / 1000 / 60 / 60 / 24; + if (diff <= consoleProperties.getPasswordExpirationWarnDates()) { + userDTO.setPwdRemainderDate((int) diff); + } + return R.ok(userDTO); + } + + /** + * 系统重置登陆状态等信息 + */ + @Override + public R resetUserError(@RequestBody PortalUserDTO req) { + TblPortalUser user = new TblPortalUser(); + user.setUserId(req.getUserId()); + user.setLoginIp(req.getLoginIp()); + user.setLastLoginErrorTime(req.getLastLoginErrorTime()); + user.setLoginErrorCount(req.getLoginErrorCount()); + user.setIsLocked(req.getIsLocked()); + user.setLoginDate(req.getLoginDate()); + userService.updateUserProfileNoVersion(user); + return R.ok(); + } + + @Override + @Log(title = "个人信息-重置密码", businessType = BusinessType.UPDATE) + public R resetUserPwd(ResUserPasswordDTO passwordDTO) { + userService.resetUserPwd(passwordDTO); + return R.ok(); + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/BaseEntity.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/BaseEntity.java new file mode 100644 index 00000000..f5ee434e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/BaseEntity.java @@ -0,0 +1,179 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * Entity基类 + * + * @author admin + */ +public class BaseEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 【 数据状态】 + */ + private String dataStatus; + + + /** + * 创建者姓名 + */ + private String createByName; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 创建者id(或账户) + */ + private String createBy; + + /** + * 更新者姓名 + */ + private String updateByName; + + /** + * 更新者id(或账户) + */ + private String updateBy; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + + /** + * 备注 + */ + private String remark; + + /** + * 请求参数 + */ + private Map params; + + /** + * 【随机码】 + */ + private String recToken; + + /** + * 【随机码】 + */ + private String recTokenC; + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + /** + * @return the createByName + */ + public String getCreateByName() { + return createByName; + } + + /** + * @param createByName the createByName to set + */ + public void setCreateByName(String createByName) { + this.createByName = createByName; + } + + /** + * @return the updateByName + */ + public String getUpdateByName() { + return updateByName; + } + + /** + * @param updateByName the updateByName to set + */ + public void setUpdateByName(String updateByName) { + this.updateByName = updateByName; + } + + public String getCreateBy() { + return createBy == null ? "" : createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getUpdateBy() { + return updateBy == null ? "" : updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getRemark() { + return remark == null ? "" : remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public Map getParams() { + if (params == null) { + params = new HashMap<>(); + } + return params; + } + + public void setParams(Map params) { + this.params = params; + } + + public String getRecToken() { + return recToken; + } + + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + public String getRecTokenC() { + return recTokenC; + } + + public void setRecTokenC(String recTokenC) { + this.recTokenC = recTokenC; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerApplyInfo.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerApplyInfo.java new file mode 100644 index 00000000..b0b2ae89 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerApplyInfo.java @@ -0,0 +1,466 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +import java.io.Serializable; +import java.util.Date; + +/** + * 【 容器申请】 + * + */ +public class TblDockerApplyInfo implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 【 申请主键ID】 + */ + private Long applyId; + + /** + * 【 版本号】 + */ + private Integer versionNum; + + /** + * 【 随机码】 + */ + private String recToken; + + /** + * 【 服务器id】 + */ + private Long dockerServerId; + + /** + * 【 申请用户id】 + */ + private String applyUserId; + + /** + * 【 申请用户】 + */ + private String applyUserName; + + /** + * 【 申请原因】 + */ + private String applyDesc; + + /** + * 【实验室名称】允许用户自定义名称,反之默认生成 + */ + private String labTitle; + + /** + * 【 服务类型】 + */ + private String serviceType; + + /** + * 【 使用镜像】 + */ + private String dockerImageName; + + /** + * 【 申请时效】 + */ + private String usageTime; + + /** + * 【 时间单位】 + */ + private String usageTimeUnit; + + /** + * 【开始时间】系统计算,到小时吧 + */ + private Date startDate; + + /** + * 【结束时间】系统计算,到小时吧 + */ + private Date endDate; + + /** + * 【延期次数】系统计算 + */ + private String delayTimes; + + /** + * 【 CPU数量】 + */ + private String cpuLimits; + + /** + * 【cpu序号】绝对分配时固定内核,比如只能用0,1内核 + */ + private String cpuSeq; + + /** + * 【 内存大小】 + */ + private String memoryLimits; + + /** + * 【 磁盘大小】 + */ + private String discLimits; + + /** + * 【 备注】 + */ + private String remarks; + + /** + * 【 排序】 + */ + private Object orderNum; + + /** + * 【 审核状态】 + */ + private String reviewStatus; + + /** + * 【 驳回原因】 + */ + private String reviewDesc; + + /** + * 【是否发布】 + */ + private String releaseFlag; + + /** + * 【 业务状态】 + */ + private String busStatus; + + /** + * 【 数据状态】 + */ + private String dataStatus; + + /** + * 【 创建用户ID】 + */ + private String createBy; + + /** + * 【 创建用户】 + */ + private String createByName; + + /** + * 【 创建时间】 + */ + private Date createTime; + + /** + * 【 更新用户ID】 + */ + private String updateBy; + + /** + * 【 更新用户】 + */ + private String updateByName; + + /** + * 【 更新时间】 + */ + private Date updateTime; + + /** + * 【备用字段1】 + */ + private String rsv1; + + /** + * 【备用字段2】 + */ + private String rsv2; + + /** + * 【备用字段3】 + */ + private String rsv3; + + public Long getApplyId() { + return applyId; + } + + public void setApplyId(Long applyId) { + this.applyId = applyId; + } + + public Integer getVersionNum() { + return versionNum; + } + + public void setVersionNum(Integer versionNum) { + this.versionNum = versionNum; + } + + public String getRecToken() { + return recToken; + } + + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + public Long getDockerServerId() { + return dockerServerId; + } + + public void setDockerServerId(Long dockerServerId) { + this.dockerServerId = dockerServerId; + } + + public String getApplyUserId() { + return applyUserId; + } + + public void setApplyUserId(String applyUserId) { + this.applyUserId = applyUserId; + } + + public String getApplyUserName() { + return applyUserName; + } + + public void setApplyUserName(String applyUserName) { + this.applyUserName = applyUserName; + } + + public String getApplyDesc() { + return applyDesc; + } + + public void setApplyDesc(String applyDesc) { + this.applyDesc = applyDesc; + } + + public String getLabTitle() { + return labTitle; + } + + public void setLabTitle(String labTitle) { + this.labTitle = labTitle; + } + + public String getServiceType() { + return serviceType; + } + + public void setServiceType(String serviceType) { + this.serviceType = serviceType; + } + + public String getDockerImageName() { + return dockerImageName; + } + + public void setDockerImageName(String dockerImageName) { + this.dockerImageName = dockerImageName; + } + + public String getUsageTime() { + return usageTime; + } + + public void setUsageTime(String usageTime) { + this.usageTime = usageTime; + } + + public String getUsageTimeUnit() { + return usageTimeUnit; + } + + public void setUsageTimeUnit(String usageTimeUnit) { + this.usageTimeUnit = usageTimeUnit; + } + + public Date getStartDate() { + return startDate; + } + + public void setStartDate(Date startDate) { + this.startDate = startDate; + } + + public Date getEndDate() { + return endDate; + } + + public void setEndDate(Date endDate) { + this.endDate = endDate; + } + + public String getDelayTimes() { + return delayTimes; + } + + public void setDelayTimes(String delayTimes) { + this.delayTimes = delayTimes; + } + + public String getCpuLimits() { + return cpuLimits; + } + + public void setCpuLimits(String cpuLimits) { + this.cpuLimits = cpuLimits; + } + + public String getCpuSeq() { + return cpuSeq; + } + + public void setCpuSeq(String cpuSeq) { + this.cpuSeq = cpuSeq; + } + + public String getMemoryLimits() { + return memoryLimits; + } + + public void setMemoryLimits(String memoryLimits) { + this.memoryLimits = memoryLimits; + } + + public String getDiscLimits() { + return discLimits; + } + + public void setDiscLimits(String discLimits) { + this.discLimits = discLimits; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public Object getOrderNum() { + return orderNum; + } + + public void setOrderNum(Object orderNum) { + this.orderNum = orderNum; + } + + public String getReviewStatus() { + return reviewStatus; + } + + public void setReviewStatus(String reviewStatus) { + this.reviewStatus = reviewStatus; + } + + public String getReviewDesc() { + return reviewDesc; + } + + public void setReviewDesc(String reviewDesc) { + this.reviewDesc = reviewDesc; + } + + public String getReleaseFlag() { + return releaseFlag; + } + + public void setReleaseFlag(String releaseFlag) { + this.releaseFlag = releaseFlag; + } + + public String getBusStatus() { + return busStatus; + } + + public void setBusStatus(String busStatus) { + this.busStatus = busStatus; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public String getCreateByName() { + return createByName; + } + + public void setCreateByName(String createByName) { + this.createByName = createByName; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public String getUpdateByName() { + return updateByName; + } + + public void setUpdateByName(String updateByName) { + this.updateByName = updateByName; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getRsv1() { + return rsv1; + } + + public void setRsv1(String rsv1) { + this.rsv1 = rsv1; + } + + public String getRsv2() { + return rsv2; + } + + public void setRsv2(String rsv2) { + this.rsv2 = rsv2; + } + + public String getRsv3() { + return rsv3; + } + + public void setRsv3(String rsv3) { + this.rsv3 = rsv3; + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerApplyLib.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerApplyLib.java new file mode 100644 index 00000000..2f5ba2e2 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerApplyLib.java @@ -0,0 +1,295 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +import java.util.Date; + +/** + * 【容器使用自传组件】包含组件和数据 + */ +public class TblDockerApplyLib extends BaseEntity { + private static final long serialVersionUID = 1L; + /** + * 【申请组件id】 + */ + private Long applyLibId; + + /** + * 【 版本号】 + */ + private Object versionNum; + + /** + * 【 随机码】 + */ + private String recToken; + + /** + * 【 申请主键ID】 + */ + private Long applyId; + + /** + * 【 申请主键ID】 + */ + private String libType; + + /** + * 【内容说明】 + */ + private String libDesc; + + /** + * 【 文件id】 + */ + private Long fileId; + + /** + * 【数据来源】1用户自己的,2系统提供的 + */ + private String dataSourceType; + + /** + * 【 排序】 + */ + private Object orderNum; + + /** + * 【 审核状态】 + */ + private String reviewStatus; + + /** + * 【 驳回原因】 + */ + private String reviewDesc; + + /** + * 【 业务状态】 + */ + private String busStatus; + + /** + * 【 数据状态】 + */ + private String dataStatus; + + /** + * 【 创建用户ID】 + */ + private String createBy; + + /** + * 【 创建用户】 + */ + private String createByName; + + /** + * 【 创建时间】 + */ + private Date createTime; + + /** + * 【 更新用户ID】 + */ + private String updateBy; + + /** + * 【 更新用户】 + */ + private String updateByName; + + /** + * 【 更新时间】 + */ + private Date updateTime; + + /** + * 【备用字段1】 + */ + private String rsv1; + + /** + * 【备用字段2】 + */ + private String rsv2; + + /** + * 【备用字段3】 + */ + private String rsv3; + + public Long getApplyLibId() { + return applyLibId; + } + + public void setApplyLibId(Long applyLibId) { + this.applyLibId = applyLibId; + } + + public Object getVersionNum() { + return versionNum; + } + + public void setVersionNum(Object versionNum) { + this.versionNum = versionNum; + } + + public String getRecToken() { + return recToken; + } + + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + public Long getApplyId() { + return applyId; + } + + public void setApplyId(Long applyId) { + this.applyId = applyId; + } + + public String getLibType() { + return libType; + } + + public void setLibType(String libType) { + this.libType = libType; + } + + public String getLibDesc() { + return libDesc; + } + + public void setLibDesc(String libDesc) { + this.libDesc = libDesc; + } + + public Long getFileId() { + return fileId; + } + + public void setFileId(Long fileId) { + this.fileId = fileId; + } + + public String getDataSourceType() { + return dataSourceType; + } + + public void setDataSourceType(String dataSourceType) { + this.dataSourceType = dataSourceType; + } + + public Object getOrderNum() { + return orderNum; + } + + public void setOrderNum(Object orderNum) { + this.orderNum = orderNum; + } + + public String getReviewStatus() { + return reviewStatus; + } + + public void setReviewStatus(String reviewStatus) { + this.reviewStatus = reviewStatus; + } + + public String getReviewDesc() { + return reviewDesc; + } + + public void setReviewDesc(String reviewDesc) { + this.reviewDesc = reviewDesc; + } + + public String getBusStatus() { + return busStatus; + } + + public void setBusStatus(String busStatus) { + this.busStatus = busStatus; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public String getCreateByName() { + return createByName; + } + + public void setCreateByName(String createByName) { + this.createByName = createByName; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public String getUpdateByName() { + return updateByName; + } + + public void setUpdateByName(String updateByName) { + this.updateByName = updateByName; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getRsv1() { + return rsv1; + } + + public void setRsv1(String rsv1) { + this.rsv1 = rsv1; + } + + public String getRsv2() { + return rsv2; + } + + public void setRsv2(String rsv2) { + this.rsv2 = rsv2; + } + + public String getRsv3() { + return rsv3; + } + + public void setRsv3(String rsv3) { + this.rsv3 = rsv3; + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerApplyReview.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerApplyReview.java new file mode 100644 index 00000000..3cea706a --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerApplyReview.java @@ -0,0 +1,205 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +/** + * 【 数据注入申请审核表】 + * tbl_docker_apply_review + */ +public class TblDockerApplyReview extends BaseEntity { + private static final long serialVersionUID = 1L; + /** + * 【 申请主键ID】 + */ + private Long reviewId; + + /** + * 【 版本号】 + */ + private Long versionNum; + + /** + * 【 随机码】 + */ + private String recToken; + + /** + * 【 申请原因】 + */ + private String applyRemark; + + /** + * 【 实验室编号】 + */ + private Long applyId; + + /** + * 【实验室名称】允许用户自定义名称,反之默认生成 + */ + private String labTitle; + + /** + * 【 申请用户id】 + */ + private String applyUserId; + + /** + * 【 申请用户】 + */ + private String applyUserName; + + /** + * 【 备注】 + */ + private String remarks; + + /** + * 【 排序】 + */ + private Integer orderNum; + + /** + * 【 审核状态】 + */ + private String reviewStatus; + + /** + * 【 驳回原因】 + */ + private String reviewDesc; + + /** + * 【备用字段1】 + */ + private String rsv1; + + /** + * 【备用字段2】 + */ + private String rsv2; + + /** + * 【备用字段3】 + */ + private String rsv3; + + public Long getReviewId() { + return reviewId; + } + + public void setReviewId(Long reviewId) { + this.reviewId = reviewId; + } + + public Long getVersionNum() { + return versionNum; + } + + public void setVersionNum(Long versionNum) { + this.versionNum = versionNum; + } + + @Override + public String getRecToken() { + return recToken; + } + + @Override + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + public String getApplyRemark() { + return applyRemark; + } + + public void setApplyRemark(String applyRemark) { + this.applyRemark = applyRemark; + } + + public Long getApplyId() { + return applyId; + } + + public void setApplyId(Long applyId) { + this.applyId = applyId; + } + + public String getLabTitle() { + return labTitle; + } + + public void setLabTitle(String labTitle) { + this.labTitle = labTitle; + } + + public String getApplyUserId() { + return applyUserId; + } + + public void setApplyUserId(String applyUserId) { + this.applyUserId = applyUserId; + } + + public String getApplyUserName() { + return applyUserName; + } + + public void setApplyUserName(String applyUserName) { + this.applyUserName = applyUserName; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public Integer getOrderNum() { + return orderNum; + } + + public void setOrderNum(Integer orderNum) { + this.orderNum = orderNum; + } + + public String getReviewStatus() { + return reviewStatus; + } + + public void setReviewStatus(String reviewStatus) { + this.reviewStatus = reviewStatus; + } + + public String getReviewDesc() { + return reviewDesc; + } + + public void setReviewDesc(String reviewDesc) { + this.reviewDesc = reviewDesc; + } + + public String getRsv1() { + return rsv1; + } + + public void setRsv1(String rsv1) { + this.rsv1 = rsv1; + } + + public String getRsv2() { + return rsv2; + } + + public void setRsv2(String rsv2) { + this.rsv2 = rsv2; + } + + public String getRsv3() { + return rsv3; + } + + public void setRsv3(String rsv3) { + this.rsv3 = rsv3; + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerApplyReviewDtl.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerApplyReviewDtl.java new file mode 100644 index 00000000..1ed58778 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerApplyReviewDtl.java @@ -0,0 +1,177 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +/** + * 【数据注入申请明细】包含组件和数据 + * tbl_docker_apply_review_dtl + */ +public class TblDockerApplyReviewDtl extends BaseEntity { + private static final long serialVersionUID = 1L; + /** + * 【申请明细id】 + */ + private Long reviewDtlId; + + /** + * 【 版本号】 + */ + private Long versionNum; + + /** + * 【 申请主键ID】 + */ + private Long reviewId; + + /** + * 【 申请主键ID】 + */ + private String libType; + + /** + * 【内容说明】 + */ + private String libDesc; + + /** + * 【 文件id】 + */ + private Long fileId; + + /** + * 【数据来源】1用户自己的,2系统提供的 + */ + private String dataSourceType; + + /** + * 【 排序】 + */ + private Integer orderNum; + + /** + * 【 审核状态】 + */ + private String reviewStatus; + + /** + * 【 驳回原因】 + */ + private String reviewDesc; + + /** + * 【备用字段1】 + */ + private String rsv1; + + /** + * 【备用字段2】 + */ + private String rsv2; + + /** + * 【备用字段3】 + */ + private String rsv3; + + public Long getReviewDtlId() { + return reviewDtlId; + } + + public void setReviewDtlId(Long reviewDtlId) { + this.reviewDtlId = reviewDtlId; + } + + public Long getVersionNum() { + return versionNum; + } + + public void setVersionNum(Long versionNum) { + this.versionNum = versionNum; + } + + public Long getReviewId() { + return reviewId; + } + + public void setReviewId(Long reviewId) { + this.reviewId = reviewId; + } + + public String getLibType() { + return libType; + } + + public void setLibType(String libType) { + this.libType = libType; + } + + public String getLibDesc() { + return libDesc; + } + + public void setLibDesc(String libDesc) { + this.libDesc = libDesc; + } + + public Long getFileId() { + return fileId; + } + + public void setFileId(Long fileId) { + this.fileId = fileId; + } + + public String getDataSourceType() { + return dataSourceType; + } + + public void setDataSourceType(String dataSourceType) { + this.dataSourceType = dataSourceType; + } + + public Integer getOrderNum() { + return orderNum; + } + + public void setOrderNum(Integer orderNum) { + this.orderNum = orderNum; + } + + public String getReviewStatus() { + return reviewStatus; + } + + public void setReviewStatus(String reviewStatus) { + this.reviewStatus = reviewStatus; + } + + public String getReviewDesc() { + return reviewDesc; + } + + public void setReviewDesc(String reviewDesc) { + this.reviewDesc = reviewDesc; + } + + public String getRsv1() { + return rsv1; + } + + public void setRsv1(String rsv1) { + this.rsv1 = rsv1; + } + + public String getRsv2() { + return rsv2; + } + + public void setRsv2(String rsv2) { + this.rsv2 = rsv2; + } + + public String getRsv3() { + return rsv3; + } + + public void setRsv3(String rsv3) { + this.rsv3 = rsv3; + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerClientInfo.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerClientInfo.java new file mode 100644 index 00000000..ab9936d7 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerClientInfo.java @@ -0,0 +1,232 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +/** + * 【 服务器清单】 tbl_docker_client_info + */ +public class TblDockerClientInfo extends BaseEntity { + private static final long serialVersionUID = 1L; + /** + * 【 服务器主键ID】 + */ + private Long dockerServerId; + + /** + * 【 版本号】 + */ + private Integer versionNum; + + /** + * 【 随机码】 + */ + private String recToken; + + /** + * 【 服务器名称】 + */ + private String dockerServerName; + + /** + * 【 服务器IP】 + */ + private String dockerServerIp; + + /** + * 【 服务器port】 + */ + private String dockerServerPort; + + /** + * 【 服务器账户】 + */ + private String dockerServerUsername; + + /** + * 【 服务器密码】 + */ + private String dockerServerPassword; + + /** + * 【 CPU数量】 + */ + private String cpuLimits; + + /** + * 【 内存大小】 + */ + private String memoryLimits; + + /** + * 【 磁盘大小】 + */ + private String discLimits; + + /** + * 【 使用CPU大小】 + */ + private String usedCpuLimits; + + /** + * 【 使用内存大小】 + */ + private String usedMemoryLimits; + + /** + * 【 使用磁盘大小】 + */ + private String usedDiscLimits; + + /** + * 【 备注】 + */ + private String remarks; + + /** + * 【 排序】 + */ + private Long orderNum; + + /** + * 【 数据状态】 + */ + private String dataStatus; + + public Long getDockerServerId() { + return dockerServerId; + } + + public void setDockerServerId(Long dockerServerId) { + this.dockerServerId = dockerServerId; + } + + public Integer getVersionNum() { + return versionNum; + } + + public void setVersionNum(Integer versionNum) { + this.versionNum = versionNum; + } + + @Override + public String getRecToken() { + return recToken; + } + + @Override + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + public String getDockerServerName() { + return dockerServerName; + } + + public void setDockerServerName(String dockerServerName) { + this.dockerServerName = dockerServerName; + } + + public String getDockerServerIp() { + return dockerServerIp; + } + + public void setDockerServerIp(String dockerServerIp) { + this.dockerServerIp = dockerServerIp; + } + + public String getDockerServerPort() { + return dockerServerPort; + } + + public void setDockerServerPort(String dockerServerPort) { + this.dockerServerPort = dockerServerPort; + } + + public String getDockerServerUsername() { + return dockerServerUsername; + } + + public void setDockerServerUsername(String dockerServerUsername) { + this.dockerServerUsername = dockerServerUsername; + } + + public String getDockerServerPassword() { + return dockerServerPassword; + } + + public void setDockerServerPassword(String dockerServerPassword) { + this.dockerServerPassword = dockerServerPassword; + } + + public String getCpuLimits() { + return cpuLimits; + } + + public void setCpuLimits(String cpuLimits) { + this.cpuLimits = cpuLimits; + } + + public String getMemoryLimits() { + return memoryLimits; + } + + public void setMemoryLimits(String memoryLimits) { + this.memoryLimits = memoryLimits; + } + + public String getDiscLimits() { + return discLimits; + } + + public void setDiscLimits(String discLimits) { + this.discLimits = discLimits; + } + + public String getUsedCpuLimits() { + return usedCpuLimits; + } + + public void setUsedCpuLimits(String usedCpuLimits) { + this.usedCpuLimits = usedCpuLimits; + } + + public String getUsedMemoryLimits() { + return usedMemoryLimits; + } + + public void setUsedMemoryLimits(String usedMemoryLimits) { + this.usedMemoryLimits = usedMemoryLimits; + } + + public String getUsedDiscLimits() { + return usedDiscLimits; + } + + public void setUsedDiscLimits(String usedDiscLimits) { + this.usedDiscLimits = usedDiscLimits; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public Long getOrderNum() { + return orderNum; + } + + public void setOrderNum(Long orderNum) { + this.orderNum = orderNum; + } + + @Override + public String getDataStatus() { + return dataStatus; + } + + @Override + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerDownloadApply.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerDownloadApply.java new file mode 100644 index 00000000..9ef4e7da --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerDownloadApply.java @@ -0,0 +1,350 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +import java.util.Date; + +/** + * 【 下载文件申请】容器内的文件下载 + * tbl_docker_download_apply + */ +public class TblDockerDownloadApply extends BaseEntity { + private static final long serialVersionUID = 1L; + + + /** + * 【 申请主键ID】 + */ + private Long downloadApplyId; + + /** + * 【 版本号】 + */ + private Long versionNum; + + /** + * 【 随机码】 + */ + private String recToken; + + /** + * 【 关联主键ID】 + */ + private Long applyId; + + /** + * 【实验室名称】允许用户自定义名称,反之默认生成 + */ + private String labTitle; + + /** + * 【 申请用户id】 + */ + private String applyUserId; + + /** + * 【 申请用户】 + */ + private String applyUserName; + + /** + * 【 申请原因】 + */ + private String applyDesc; + + /** + * 【文件名】 + */ + private String fileName; + + /** + * 【文件大小】 + */ + private String fileSize; + + /** + * 【文件更新时间】防止修改,最后下载的时候要校验 + */ + private String fileLastTime; + + /** + * 【 备注】 + */ + private String remarks; + + /** + * 【 排序】 + */ + private Long orderNum; + + /** + * 【 审核状态】 + */ + private String reviewStatus; + + /** + * 【 驳回原因】 + */ + private String reviewDesc; + + /** + * 【 业务状态】 + */ + private String busStatus; + + /** + * 【 数据状态】 + */ + private String dataStatus; + + /** + * 【 创建用户ID】 + */ + private String createBy; + + /** + * 【 创建用户】 + */ + private String createByName; + + /** + * 【 创建时间】 + */ + private Date createTime; + + /** + * 【 更新用户ID】 + */ + private String updateBy; + + /** + * 【 更新用户】 + */ + private String updateByName; + + /** + * 【 更新时间】 + */ + private Date updateTime; + + /** + * 【备用字段1】 + */ + private String rsv1; + + /** + * 【备用字段2】 + */ + private String rsv2; + + /** + * 【备用字段2】 + */ + private String rsv3; + + public Long getDownloadApplyId() { + return downloadApplyId; + } + + public void setDownloadApplyId(Long downloadApplyId) { + this.downloadApplyId = downloadApplyId; + } + + public Long getVersionNum() { + return versionNum; + } + + public void setVersionNum(Long versionNum) { + this.versionNum = versionNum; + } + + public String getRecToken() { + return recToken; + } + + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + public Long getApplyId() { + return applyId; + } + + public void setApplyId(Long applyId) { + this.applyId = applyId; + } + + public String getLabTitle() { + return labTitle; + } + + public void setLabTitle(String labTitle) { + this.labTitle = labTitle; + } + + public String getApplyUserId() { + return applyUserId; + } + + public void setApplyUserId(String applyUserId) { + this.applyUserId = applyUserId; + } + + public String getApplyUserName() { + return applyUserName; + } + + public void setApplyUserName(String applyUserName) { + this.applyUserName = applyUserName; + } + + public String getApplyDesc() { + return applyDesc; + } + + public void setApplyDesc(String applyDesc) { + this.applyDesc = applyDesc; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFileSize() { + return fileSize; + } + + public void setFileSize(String fileSize) { + this.fileSize = fileSize; + } + + public String getFileLastTime() { + return fileLastTime; + } + + public void setFileLastTime(String fileLastTime) { + this.fileLastTime = fileLastTime; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public Long getOrderNum() { + return orderNum; + } + + public void setOrderNum(Long orderNum) { + this.orderNum = orderNum; + } + + public String getReviewStatus() { + return reviewStatus; + } + + public void setReviewStatus(String reviewStatus) { + this.reviewStatus = reviewStatus; + } + + public String getReviewDesc() { + return reviewDesc; + } + + public void setReviewDesc(String reviewDesc) { + this.reviewDesc = reviewDesc; + } + + public String getBusStatus() { + return busStatus; + } + + public void setBusStatus(String busStatus) { + this.busStatus = busStatus; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public String getCreateByName() { + return createByName; + } + + public void setCreateByName(String createByName) { + this.createByName = createByName; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public String getUpdateByName() { + return updateByName; + } + + public void setUpdateByName(String updateByName) { + this.updateByName = updateByName; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getRsv1() { + return rsv1; + } + + public void setRsv1(String rsv1) { + this.rsv1 = rsv1; + } + + public String getRsv2() { + return rsv2; + } + + public void setRsv2(String rsv2) { + this.rsv2 = rsv2; + } + + public String getRsv3() { + return rsv3; + } + + public void setRsv3(String rsv3) { + this.rsv3 = rsv3; + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerPortainerUser.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerPortainerUser.java new file mode 100644 index 00000000..925753e9 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerPortainerUser.java @@ -0,0 +1,218 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +import java.io.Serializable; +import java.util.Date; + +/** + * 【portainer管理账户信息】tbl_docker_portainer_user + */ +public class TblDockerPortainerUser implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 【 账户主键id】 + */ + private Long dockerAccountId; + + /** + * 【 版本号】 + */ + private Integer versionNum; + + /** + * 【 随机码】 + */ + private String recToken; + + /** + * 【 API地址】 + */ + private String apiHttp; + + /** + * 【 API密钥】 + */ + private String apiKey; + + /** + * 【 账户】 + */ + private String adminUsername; + + /** + * 【 密码】 + */ + private String adminPassword; + + /** + * 【 备注】 + */ + private String remarks; + + /** + * 【 排序】 + */ + private Integer orderNum; + + /** + * 【 数据状态】 + */ + private String dataStatus; + + /** + * 【 创建用户ID】 + */ + private String createBy; + + /** + * 【 创建用户】 + */ + private String createByName; + + /** + * 【 创建时间】 + */ + private Date createTime; + + /** + * 【 更新用户ID】 + */ + private String updateBy; + + /** + * 【 更新用户】 + */ + private String updateByName; + + /** + * 【 更新时间】 + */ + private Date updateTime; + + public Long getDockerAccountId() { + return dockerAccountId; + } + + public void setDockerAccountId(Long dockerAccountId) { + this.dockerAccountId = dockerAccountId; + } + + public Integer getVersionNum() { + return versionNum; + } + + public void setVersionNum(Integer versionNum) { + this.versionNum = versionNum; + } + + public String getRecToken() { + return recToken; + } + + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + public String getApiHttp() { + return apiHttp; + } + + public void setApiHttp(String apiHttp) { + this.apiHttp = apiHttp; + } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public String getAdminUsername() { + return adminUsername; + } + + public void setAdminUsername(String adminUsername) { + this.adminUsername = adminUsername; + } + + public String getAdminPassword() { + return adminPassword; + } + + public void setAdminPassword(String adminPassword) { + this.adminPassword = adminPassword; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public Integer getOrderNum() { + return orderNum; + } + + public void setOrderNum(Integer orderNum) { + this.orderNum = orderNum; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public String getCreateByName() { + return createByName; + } + + public void setCreateByName(String createByName) { + this.createByName = createByName; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public String getUpdateByName() { + return updateByName; + } + + public void setUpdateByName(String updateByName) { + this.updateByName = updateByName; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerWithUser.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerWithUser.java new file mode 100644 index 00000000..a492d2b7 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerWithUser.java @@ -0,0 +1,283 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +import java.util.Date; + +/** + * 【 用户与容器信息】 + * + */ +public class TblDockerWithUser extends BaseEntity { + private static final long serialVersionUID = 1L; + /** + * 【 申请主键ID】 + */ + private Long applyId; + + /** + * 【 版本号】 + */ + private Object versionNum; + + /** + * 【 随机码】 + */ + private String recToken; + + /** + * 【实验室名称】允许用户自定义名称,反之默认生成 + */ + private String labTitle; + + /** + * 【 用户id】 + */ + private String applyUserId; + + /** + * 【 用户】 + */ + private String applyUserName; + + /** + * 【 容器id】 + */ + private String dockerContainerId; + + /** + * 【 服务器id】 + */ + private Long dockerServerId; + + /** + * 【 备注】 + */ + private String remarks; + + /** + * 【 排序】 + */ + private Object orderNum; + + /** + * 【 业务状态】 + */ + private String busStatus; + + /** + * 【 数据状态】 + */ + private String dataStatus; + + /** + * 【 创建用户ID】 + */ + private String createBy; + + /** + * 【 创建用户】 + */ + private String createByName; + + /** + * 【 创建时间】 + */ + private Date createTime; + + /** + * 【 更新用户ID】 + */ + private String updateBy; + + /** + * 【 更新用户】 + */ + private String updateByName; + + /** + * 【 更新时间】 + */ + private Date updateTime; + + /** + * 【备用字段1】 + */ + private String rsv1; + + /** + * 【备用字段2】 + */ + private String rsv2; + + /** + * 【备用字段2】 + */ + private String rsv3; + + public Long getApplyId() { + return applyId; + } + + public void setApplyId(Long applyId) { + this.applyId = applyId; + } + + public Object getVersionNum() { + return versionNum; + } + + public void setVersionNum(Object versionNum) { + this.versionNum = versionNum; + } + + public String getRecToken() { + return recToken; + } + + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + public String getLabTitle() { + return labTitle; + } + + public void setLabTitle(String labTitle) { + this.labTitle = labTitle; + } + + public String getApplyUserId() { + return applyUserId; + } + + public void setApplyUserId(String applyUserId) { + this.applyUserId = applyUserId; + } + + public String getApplyUserName() { + return applyUserName; + } + + public void setApplyUserName(String applyUserName) { + this.applyUserName = applyUserName; + } + + public String getDockerContainerId() { + return dockerContainerId; + } + + public void setDockerContainerId(String dockerContainerId) { + this.dockerContainerId = dockerContainerId; + } + + public Long getDockerServerId() { + return dockerServerId; + } + + public void setDockerServerId(Long dockerServerId) { + this.dockerServerId = dockerServerId; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public Object getOrderNum() { + return orderNum; + } + + public void setOrderNum(Object orderNum) { + this.orderNum = orderNum; + } + + public String getBusStatus() { + return busStatus; + } + + public void setBusStatus(String busStatus) { + this.busStatus = busStatus; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public String getCreateByName() { + return createByName; + } + + public void setCreateByName(String createByName) { + this.createByName = createByName; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public String getUpdateByName() { + return updateByName; + } + + public void setUpdateByName(String updateByName) { + this.updateByName = updateByName; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getRsv1() { + return rsv1; + } + + public void setRsv1(String rsv1) { + this.rsv1 = rsv1; + } + + public String getRsv2() { + return rsv2; + } + + public void setRsv2(String rsv2) { + this.rsv2 = rsv2; + } + + public String getRsv3() { + return rsv3; + } + + public void setRsv3(String rsv3) { + this.rsv3 = rsv3; + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerWithUserAccount.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerWithUserAccount.java new file mode 100644 index 00000000..0529d57f --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblDockerWithUserAccount.java @@ -0,0 +1,297 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +import java.io.Serializable; +import java.util.Date; + +/** + * 【 容器用户账户信息】设计成允许多个服务 + * + */ +public class TblDockerWithUserAccount implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 【 账户主键id】 + */ + private Long accountId; + + /** + * 【 版本号】 + */ + private Integer versionNum; + + /** + * 【 随机码】 + */ + private String recToken; + + /** + * 【 申请主键ID】 + */ + private Long applyId; + + /** + * 【 服务类型】 + */ + private String serviceType; + + /** + * 【 访问地址】 + */ + private String loginUrl; + + /** + * 【 账户】 + */ + private String loginUsername; + + /** + * 【 密码】 + */ + private String loginPassword; + + /** + * 【 端口主键ID】 + */ + private Long dockerPortId; + + /** + * 【 备注】 + */ + private String remarks; + + /** + * 【 排序】 + */ + private Object orderNum; + + /** + * 【 业务状态】 + */ + private String busStatus; + + /** + * 【 数据状态】 + */ + private String dataStatus; + + /** + * 【 创建用户ID】 + */ + private String createBy; + + /** + * 【 创建用户】 + */ + private String createByName; + + /** + * 【 创建时间】 + */ + private Date createTime; + + /** + * 【 更新用户ID】 + */ + private String updateBy; + + /** + * 【 更新用户】 + */ + private String updateByName; + + /** + * 【 更新时间】 + */ + private Date updateTime; + + /** + * 【备用字段1】 + */ + private String rsv1; + + /** + * 【备用字段2】 + */ + private String rsv2; + + /** + * 【备用字段3】 + */ + private String rsv3; + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + public Integer getVersionNum() { + return versionNum; + } + + public void setVersionNum(Integer versionNum) { + this.versionNum = versionNum; + } + + public String getRecToken() { + return recToken; + } + + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + public Long getApplyId() { + return applyId; + } + + public void setApplyId(Long applyId) { + this.applyId = applyId; + } + + public String getServiceType() { + return serviceType; + } + + public void setServiceType(String serviceType) { + this.serviceType = serviceType; + } + + public String getLoginUrl() { + return loginUrl; + } + + public void setLoginUrl(String loginUrl) { + this.loginUrl = loginUrl; + } + + public String getLoginUsername() { + return loginUsername; + } + + public void setLoginUsername(String loginUsername) { + this.loginUsername = loginUsername; + } + + public String getLoginPassword() { + return loginPassword; + } + + public void setLoginPassword(String loginPassword) { + this.loginPassword = loginPassword; + } + + public Long getDockerPortId() { + return dockerPortId; + } + + public void setDockerPortId(Long dockerPortId) { + this.dockerPortId = dockerPortId; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public Object getOrderNum() { + return orderNum; + } + + public void setOrderNum(Object orderNum) { + this.orderNum = orderNum; + } + + public String getBusStatus() { + return busStatus; + } + + public void setBusStatus(String busStatus) { + this.busStatus = busStatus; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public String getCreateByName() { + return createByName; + } + + public void setCreateByName(String createByName) { + this.createByName = createByName; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public String getUpdateByName() { + return updateByName; + } + + public void setUpdateByName(String updateByName) { + this.updateByName = updateByName; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getRsv1() { + return rsv1; + } + + public void setRsv1(String rsv1) { + this.rsv1 = rsv1; + } + + public String getRsv2() { + return rsv2; + } + + public void setRsv2(String rsv2) { + this.rsv2 = rsv2; + } + + public String getRsv3() { + return rsv3; + } + + public void setRsv3(String rsv3) { + this.rsv3 = rsv3; + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalContent.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalContent.java new file mode 100644 index 00000000..fb5dc116 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalContent.java @@ -0,0 +1,207 @@ +package com.jiuyv.sptccc.agile.portal.domain; + + +/** + * 门户内容对象 tbl_portal_content + * + * @author yulei + * @date 2023-06-25 + */ +public class TblPortalContent extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 【用户ID】 */ + private Long contentId; + + /** 【版本号】 */ + private Long versionNum; + + /** 【随机码】 */ + private String recToken; + + /** 【标题】 */ + private String contentTitle; + + /** 【内容】 */ + private String contentText; + + /** 【类型】 */ + private String contentType; + + /** 【展示类型】 */ + private String showType; + + /** 【文件备注】 */ + private String remarks; + + /** 【业务状态】 */ + private String busStatus; + + /** 【数据状态】 */ + private String dataStatus; + + /** 【 创建用户】 */ + private String createByName; + + /** 【更新用户】 */ + private String updateByName; + + private Integer sort; + + /** + * 首页播报 0展示 + */ + private String showIndex; + + /** + * 副标题 + */ + private String subtitle; + + /** + * 图片地址 + */ + private String imgUrl; + + public void setContentId(Long contentId) + { + this.contentId = contentId; + } + + public Long getContentId() + { + return contentId; + } + public void setVersionNum(Long versionNum) + { + this.versionNum = versionNum; + } + + public Long getVersionNum() + { + return versionNum; + } + public void setRecToken(String recToken) + { + this.recToken = recToken; + } + + public String getRecToken() + { + return recToken; + } + public void setContentTitle(String contentTitle) + { + this.contentTitle = contentTitle; + } + + public String getContentTitle() + { + return contentTitle; + } + public void setContentText(String contentText) + { + this.contentText = contentText; + } + + public String getContentText() + { + return contentText; + } + public void setContentType(String contentType) + { + this.contentType = contentType; + } + + public String getContentType() + { + return contentType; + } + public void setShowType(String showType) + { + this.showType = showType; + } + + public String getShowType() + { + return showType; + } + public void setRemarks(String remarks) + { + this.remarks = remarks; + } + + public String getRemarks() + { + return remarks; + } + public void setBusStatus(String busStatus) + { + this.busStatus = busStatus; + } + + public String getBusStatus() + { + return busStatus; + } + public void setDataStatus(String dataStatus) + { + this.dataStatus = dataStatus; + } + + public String getDataStatus() + { + return dataStatus; + } + public void setCreateByName(String createByName) + { + this.createByName = createByName; + } + + public String getCreateByName() + { + return createByName; + } + public void setUpdateByName(String updateByName) + { + this.updateByName = updateByName; + } + + public String getUpdateByName() + { + return updateByName; + } + + public Integer getSort() { + return sort; + } + + public void setSort(Integer sort) { + this.sort = sort; + } + + public String getShowIndex() { + return showIndex; + } + + public void setShowIndex(String showIndex) { + this.showIndex = showIndex; + } + + public String getSubtitle() { + return subtitle; + } + + public void setSubtitle(String subtitle) { + this.subtitle = subtitle; + } + + public String getImgUrl() { + return imgUrl; + } + + public void setImgUrl(String imgUrl) { + this.imgUrl = imgUrl; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalLogininfor.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalLogininfor.java new file mode 100644 index 00000000..59d91fb1 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalLogininfor.java @@ -0,0 +1,129 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +import java.util.Date; + +/** + * 系统访问记录表 tbl_portal_logininfor + * + * @author admin + */ +public class TblPortalLogininfor extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private Long infoId; + + /** + * 用户账号 + */ + private String userName; + + /** + * 登录状态 0成功 1失败 + */ + private String status; + + /** + * 登录IP地址 + */ + private String ipaddr; + + /** + * 登录地点 + */ + private String loginLocation; + + /** + * 浏览器类型 + */ + private String browser; + + /** + * 操作系统 + */ + private String os; + + /** + * 提示消息 + */ + private String msg; + + /** + * 访问时间 + */ + private Date loginTime; + + public Long getInfoId() { + return infoId; + } + + public void setInfoId(Long infoId) { + this.infoId = infoId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getIpaddr() { + return ipaddr; + } + + public void setIpaddr(String ipaddr) { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) { + this.loginLocation = loginLocation; + } + + public String getBrowser() { + return browser; + } + + public void setBrowser(String browser) { + this.browser = browser; + } + + public String getOs() { + return os; + } + + public void setOs(String os) { + this.os = os; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public Date getLoginTime() { + return loginTime; + } + + public void setLoginTime(Date loginTime) { + this.loginTime = loginTime; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalMsg.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalMsg.java new file mode 100644 index 00000000..ff44d3fa --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalMsg.java @@ -0,0 +1,88 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +/** + * 【用户消息表】 + * tbl_portal_user_msg + */ +public class TblPortalMsg extends BaseEntity { + private static final long serialVersionUID = 1L; + /** + * 【主键id】 + */ + private Long msgId; + + /** + * 【用户ID】 + */ + private Long userId; + + /** + * 【消息标题】 + */ + private String msgTitle; + + /** + * 【消息内容】 + */ + private String msgText; + + /** + * 【消息类型】 + */ + private String msgType; + + /** + * 【消息状态】 + */ + private String msgStatus; + + + public Long getMsgId() { + return msgId; + } + + public void setMsgId(Long msgId) { + this.msgId = msgId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getMsgTitle() { + return msgTitle; + } + + public void setMsgTitle(String msgTitle) { + this.msgTitle = msgTitle; + } + + public String getMsgText() { + return msgText; + } + + public void setMsgText(String msgText) { + this.msgText = msgText; + } + + public String getMsgType() { + return msgType; + } + + public void setMsgType(String msgType) { + this.msgType = msgType; + } + + public String getMsgStatus() { + return msgStatus; + } + + public void setMsgStatus(String msgStatus) { + this.msgStatus = msgStatus; + } + +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalOperLog.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalOperLog.java new file mode 100644 index 00000000..4d9ab4ac --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalOperLog.java @@ -0,0 +1,233 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +import java.util.Date; + +/** + * 操作日志记录表 oper_log + * + * @author admin + */ +public class TblPortalOperLog extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 日志主键 + */ + private Long operId; + + /** + * 操作模块 + */ + private String title; + + /** + * 业务类型(0其它 1新增 2修改 3删除) + */ + private Integer businessType; + + /** + * 业务类型数组 + */ + private Integer[] businessTypes; + + /** + * 请求方法 + */ + private String method; + + /** + * 请求方式 + */ + private String requestMethod; + + /** + * 操作类别(0其它 1后台用户 2手机端用户) + */ + private Integer operatorType; + + /** + * 操作人员 + */ + private String operName; + + /** + * 部门名称 + */ + private String deptName; + + /** + * 请求url + */ + private String operUrl; + + /** + * 操作地址 + */ + private String operIp; + + /** + * 操作地点 + */ + private String operLocation; + + /** + * 请求参数 + */ + private String operParam; + + /** + * 返回参数 + */ + private String jsonResult; + + /** + * 操作状态(0正常 1异常) + */ + private Integer status; + + /** + * 错误消息 + */ + private String errorMsg; + + /** + * 操作时间 + */ + private Date operTime; + + public Long getOperId() { + return operId; + } + + public void setOperId(Long operId) { + this.operId = operId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Integer getBusinessType() { + return businessType; + } + + public void setBusinessType(Integer businessType) { + this.businessType = businessType; + } + + public Integer[] getBusinessTypes() { + return businessTypes; + } + + public void setBusinessTypes(Integer[] businessTypes) { + this.businessTypes = businessTypes; + } + + public String getMethod() { + return method; + } + + public void setMethod(String method) { + this.method = method; + } + + public String getRequestMethod() { + return requestMethod; + } + + public void setRequestMethod(String requestMethod) { + this.requestMethod = requestMethod; + } + + public Integer getOperatorType() { + return operatorType; + } + + public void setOperatorType(Integer operatorType) { + this.operatorType = operatorType; + } + + public String getOperName() { + return operName; + } + + public void setOperName(String operName) { + this.operName = operName; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getOperUrl() { + return operUrl; + } + + public void setOperUrl(String operUrl) { + this.operUrl = operUrl; + } + + public String getOperIp() { + return operIp; + } + + public void setOperIp(String operIp) { + this.operIp = operIp; + } + + public String getOperLocation() { + return operLocation; + } + + public void setOperLocation(String operLocation) { + this.operLocation = operLocation; + } + + public String getOperParam() { + return operParam; + } + + public void setOperParam(String operParam) { + this.operParam = operParam; + } + + public String getJsonResult() { + return jsonResult; + } + + public void setJsonResult(String jsonResult) { + this.jsonResult = jsonResult; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public String getErrorMsg() { + return errorMsg; + } + + public void setErrorMsg(String errorMsg) { + this.errorMsg = errorMsg; + } + + public Date getOperTime() { + return operTime; + } + + public void setOperTime(Date operTime) { + this.operTime = operTime; + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalUser.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalUser.java new file mode 100644 index 00000000..fd90a26f --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPortalUser.java @@ -0,0 +1,631 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +import java.util.Date; + + +/** + * 门户用户信息表 + * + * @author zhouliang + * @date 2023-06-21 + */ +public class TblPortalUser extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 用户id + */ + private Long userId; + + /** + * 版本号 + */ + private Long versionNum; + + /** + * 随机码 + */ + private String recToken; + + /** + * 所属机构 + */ + private Long deptId; + + /** + * 用户账号 + */ + private String userName; + + /** + * 用户姓名 + */ + private String nickName; + + /** + * 用户类型 + */ + private String userType; + + /** + * 用户邮箱 + */ + private String email; + + /** + * 手机号码 + */ + private String phonenumber; + + /** + * 用户性别 + */ + private String sex; + + /** + * 头像地址 + */ + private String avatar; + + /** + * 密码 + */ + private String password; + + /** + * 企业名称 + */ + private String enterpriseName; + + /** + * 行业类别 + */ + private String industryCategory; + + /** + * 社会统一信用代码 + */ + private String socialCreditCode; + + /** + * 企业行业 + */ + private String enterpriseIndustry; + + /** + * 企业地址 + */ + private String enterpriseAddress; + + /** + * 帐号状态 + */ + private String status; + + /** + * 删除标志 + */ + private String delFlag; + + /** + * 最后登录ip + */ + private String loginIp; + + /** + * 最后登录时间 + */ + private Date loginDate; + + /** + * 锁定状态 + */ + private String isLocked; + + /** + * 登陆错误次数 + */ + private Integer loginErrorCount; + + /** + * 登陆错误时间 + */ + private Date lastLoginErrorTime; + + /** + * 备注 + */ + private String remark; + + /** + * 创建者 + */ + private String createBy; + + /** + * 创建用户 + */ + private String createByName; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新者 + */ + private String updateBy; + + /** + * 更新用户 + */ + private String updateByName; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 首次登录标志 + */ + private String firstFlag; + + /** + * 密码更新时间 + */ + private Date pwdUpdateTime; + + + /** + * Get用户id + */ + public Long getUserId() { + return userId; + } + + /** + * Set用户id + */ + public void setUserId(Long userId) { + this.userId = userId; + } + + /** + * Get版本号 + */ + public Long getVersionNum() { + return versionNum; + } + + /** + * Set版本号 + */ + public void setVersionNum(Long versionNum) { + this.versionNum = versionNum; + } + + /** + * Get随机码 + */ + public String getRecToken() { + return recToken; + } + + /** + * Set随机码 + */ + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + /** + * Get所属机构 + */ + public Long getDeptId() { + return deptId; + } + + /** + * Set所属机构 + */ + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + /** + * Get用户账号 + */ + public String getUserName() { + return userName; + } + + /** + * Set用户账号 + */ + public void setUserName(String userName) { + this.userName = userName; + } + + /** + * Get用户姓名 + */ + public String getNickName() { + return nickName; + } + + /** + * Set用户姓名 + */ + public void setNickName(String nickName) { + this.nickName = nickName; + } + + /** + * Get用户类型 + */ + public String getUserType() { + return userType; + } + + /** + * Set用户类型 + */ + public void setUserType(String userType) { + this.userType = userType; + } + + /** + * Get用户邮箱 + */ + public String getEmail() { + return email; + } + + /** + * Set用户邮箱 + */ + public void setEmail(String email) { + this.email = email; + } + + /** + * Get手机号码 + */ + public String getPhonenumber() { + return phonenumber; + } + + /** + * Set手机号码 + */ + public void setPhonenumber(String phonenumber) { + this.phonenumber = phonenumber; + } + + /** + * Get用户性别 + */ + public String getSex() { + return sex; + } + + /** + * Set用户性别 + */ + public void setSex(String sex) { + this.sex = sex; + } + + /** + * Get头像地址 + */ + public String getAvatar() { + return avatar; + } + + /** + * Set头像地址 + */ + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + /** + * Get密码 + */ + public String getPassword() { + return password; + } + + /** + * Set密码 + */ + public void setPassword(String password) { + this.password = password; + } + + /** + * Get企业名称 + */ + public String getEnterpriseName() { + return enterpriseName; + } + + /** + * Set企业名称 + */ + public void setEnterpriseName(String enterpriseName) { + this.enterpriseName = enterpriseName; + } + + /** + * Get行业类别 + */ + public String getIndustryCategory() { + return industryCategory; + } + + /** + * Set行业类别 + */ + public void setIndustryCategory(String industryCategory) { + this.industryCategory = industryCategory; + } + + /** + * Get社会统一信用代码 + */ + public String getSocialCreditCode() { + return socialCreditCode; + } + + /** + * Set社会统一信用代码 + */ + public void setSocialCreditCode(String socialCreditCode) { + this.socialCreditCode = socialCreditCode; + } + + /** + * Get企业行业 + */ + public String getEnterpriseIndustry() { + return enterpriseIndustry; + } + + /** + * Set企业行业 + */ + public void setEnterpriseIndustry(String enterpriseIndustry) { + this.enterpriseIndustry = enterpriseIndustry; + } + + /** + * Get企业地址 + */ + public String getEnterpriseAddress() { + return enterpriseAddress; + } + + /** + * Set企业地址 + */ + public void setEnterpriseAddress(String enterpriseAddress) { + this.enterpriseAddress = enterpriseAddress; + } + + /** + * Get帐号状态 + */ + public String getStatus() { + return status; + } + + /** + * Set帐号状态 + */ + public void setStatus(String status) { + this.status = status; + } + + /** + * Get删除标志 + */ + public String getDelFlag() { + return delFlag; + } + + /** + * Set删除标志 + */ + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + /** + * Get最后登录ip + */ + public String getLoginIp() { + return loginIp; + } + + /** + * Set最后登录ip + */ + public void setLoginIp(String loginIp) { + this.loginIp = loginIp; + } + + /** + * Get最后登录时间 + */ + public Date getLoginDate() { + return loginDate; + } + + /** + * Set最后登录时间 + */ + public void setLoginDate(Date loginDate) { + this.loginDate = loginDate; + } + + /** + * Get锁定状态 + */ + public String getIsLocked() { + return isLocked; + } + + /** + * Set锁定状态 + */ + public void setIsLocked(String isLocked) { + this.isLocked = isLocked; + } + + /** + * Get登陆错误次数 + */ + public Integer getLoginErrorCount() { + return loginErrorCount; + } + + /** + * Set登陆错误次数 + */ + public void setLoginErrorCount(Integer loginErrorCount) { + this.loginErrorCount = loginErrorCount; + } + + /** + * Get登陆错误时间 + */ + public Date getLastLoginErrorTime() { + return lastLoginErrorTime; + } + + /** + * Set登陆错误时间 + */ + public void setLastLoginErrorTime(Date lastLoginErrorTime) { + this.lastLoginErrorTime = lastLoginErrorTime; + } + + /** + * Get备注 + */ + public String getRemark() { + return remark; + } + + /** + * Set备注 + */ + public void setRemark(String remark) { + this.remark = remark; + } + + /** + * Get创建者 + */ + public String getCreateBy() { + return createBy; + } + + /** + * Set创建者 + */ + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + /** + * Get创建用户 + */ + public String getCreateByName() { + return createByName; + } + + /** + * Set创建用户 + */ + public void setCreateByName(String createByName) { + this.createByName = createByName; + } + + /** + * Get创建时间 + */ + public Date getCreateTime() { + return createTime; + } + + /** + * Set创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + /** + * Get更新者 + */ + public String getUpdateBy() { + return updateBy; + } + + /** + * Set更新者 + */ + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + /** + * Get更新用户 + */ + public String getUpdateByName() { + return updateByName; + } + + /** + * Set更新用户 + */ + public void setUpdateByName(String updateByName) { + this.updateByName = updateByName; + } + + /** + * Get更新时间 + */ + public Date getUpdateTime() { + return updateTime; + } + + /** + * Set更新时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getFirstFlag() { + return firstFlag; + } + + public void setFirstFlag(String firstFlag) { + this.firstFlag = firstFlag; + } + + public Date getPwdUpdateTime() { + return pwdUpdateTime; + } + + public void setPwdUpdateTime(Date pwdUpdateTime) { + this.pwdUpdateTime = pwdUpdateTime; + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPublicFiles.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPublicFiles.java new file mode 100644 index 00000000..7d823429 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/domain/TblPublicFiles.java @@ -0,0 +1,231 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +/** + * 【系统文件表】 + * + */ +public class TblPublicFiles extends BaseEntity { + private static final long serialVersionUID = 1L; + /** + * 【文件主键id】 + */ + private Long fileId; + + /** + * 【版本号】 + */ + private Integer versionNum; + + /** + * 【随机码】 + */ + private String recToken; + + /** + * 【UUID】 + */ + private String uuid; + + /** + * 【文件名称】 + */ + private String fileName; + + /** + * 【文件后缀名】 + */ + private String fileExtension; + + /** + * 【文件大小】 + */ + private String fileSize; + + /** + * 【文件分类路径】 + */ + private String fileCategoryPath; + + /** + * 【文件类型】 + */ + private String fileType; + + /** + * 【文件来源】 + */ + private String fileSourceType; + + /** + * 【系统类型】 + */ + private String sysType; + + /** + * 【文件备注】 + */ + private String remarks; + + /** + * 【关联业务ID】 + */ + private String fileBusiId; + + /** + * 【关联业务ID2】 + */ + private String fileBusiId2; + + /** + * 【关联业务ID3】 + */ + private String fileBusiId3; + + /** + * 【已上传大小】如果要续传的话,那么记录上次中断的位置 + */ + private String uploadSize; + + /** + * 【数据状态】上传时可先处理成98临时,方便清理无用文件 + */ + private String dataStatus; + + + public Long getFileId() { + return fileId; + } + + public void setFileId(Long fileId) { + this.fileId = fileId; + } + + public Integer getVersionNum() { + return versionNum; + } + + public void setVersionNum(Integer versionNum) { + this.versionNum = versionNum; + } + + public String getRecToken() { + return recToken; + } + + public void setRecToken(String recToken) { + this.recToken = recToken; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFileExtension() { + return fileExtension; + } + + public void setFileExtension(String fileExtension) { + this.fileExtension = fileExtension; + } + + public String getFileSize() { + return fileSize; + } + + public void setFileSize(String fileSize) { + this.fileSize = fileSize; + } + + public String getFileCategoryPath() { + return fileCategoryPath; + } + + public void setFileCategoryPath(String fileCategoryPath) { + this.fileCategoryPath = fileCategoryPath; + } + + public String getFileType() { + return fileType; + } + + public void setFileType(String fileType) { + this.fileType = fileType; + } + + public String getFileSourceType() { + return fileSourceType; + } + + public void setFileSourceType(String fileSourceType) { + this.fileSourceType = fileSourceType; + } + + public String getSysType() { + return sysType; + } + + public void setSysType(String sysType) { + this.sysType = sysType; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public String getFileBusiId() { + return fileBusiId; + } + + public void setFileBusiId(String fileBusiId) { + this.fileBusiId = fileBusiId; + } + + public String getFileBusiId2() { + return fileBusiId2; + } + + public void setFileBusiId2(String fileBusiId2) { + this.fileBusiId2 = fileBusiId2; + } + + public String getFileBusiId3() { + return fileBusiId3; + } + + public void setFileBusiId3(String fileBusiId3) { + this.fileBusiId3 = fileBusiId3; + } + + public String getUploadSize() { + return uploadSize; + } + + public void setUploadSize(String uploadSize) { + this.uploadSize = uploadSize; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/dto/ReqPortalLogininforAddDTO.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/dto/ReqPortalLogininforAddDTO.java new file mode 100644 index 00000000..28e20b79 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/dto/ReqPortalLogininforAddDTO.java @@ -0,0 +1,103 @@ +package com.jiuyv.sptccc.agile.portal.dto; + +/** + * 系统访问记录_完整返回体 + * + * @author zhouliang + * @date 2023-04-25 + */ +public class ReqPortalLogininforAddDTO implements java.io.Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 用户账号 + */ + private String userName; + + /** + * 登录ip地址 + */ + private String ipaddr; + + /** + * 登录地点 + */ + private String loginLocation; + + /** + * 浏览器类型 + */ + private String browser; + + /** + * 操作系统 + */ + private String os; + + /** + * 登录状态 + */ + private String status; + + /** + * 提示消息 + */ + private String msg; + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getIpaddr() { + return ipaddr; + } + + public void setIpaddr(String ipaddr) { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) { + this.loginLocation = loginLocation; + } + + public String getBrowser() { + return browser; + } + + public void setBrowser(String browser) { + this.browser = browser; + } + + public String getOs() { + return os; + } + + public void setOs(String os) { + this.os = os; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerApplyInfoMapper.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerApplyInfoMapper.java new file mode 100644 index 00000000..db405deb --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerApplyInfoMapper.java @@ -0,0 +1,11 @@ +package com.jiuyv.sptccc.agile.portal.mapper; + +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface DockerApplyInfoMapper { + + TblDockerApplyInfo selectInfoByApplyId(@Param("applyId") Long applyId, @Param("userId") String userId); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerApplyLibMapper.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerApplyLibMapper.java new file mode 100644 index 00000000..b7f26d12 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerApplyLibMapper.java @@ -0,0 +1,15 @@ +package com.jiuyv.sptccc.agile.portal.mapper; + +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyLib; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface DockerApplyLibMapper { + + List selectListByApplyId(@Param("applyId") Long applyId); + + List selectListByFileId(@Param("fileId") Long fileId); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerApplyReviewDtlMapper.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerApplyReviewDtlMapper.java new file mode 100644 index 00000000..9e6f37d4 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerApplyReviewDtlMapper.java @@ -0,0 +1,20 @@ +package com.jiuyv.sptccc.agile.portal.mapper; + +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyReviewDtl; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 针对表【tbl_docker_apply_review_dtl(【数据注入申请明细】包含组件和数据)】的数据库操作Mapper + * + * @author RENCHAO + */ +@Mapper +public interface DockerApplyReviewDtlMapper { + + int insert(TblDockerApplyReviewDtl record); + + List selectListByReviewId(@Param("reviewId") Long reviewId); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerApplyReviewMapper.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerApplyReviewMapper.java new file mode 100644 index 00000000..af0e8dd1 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerApplyReviewMapper.java @@ -0,0 +1,23 @@ +package com.jiuyv.sptccc.agile.portal.mapper; + +import com.jiuyv.sptccc.agile.dto.ReqDockerApplyPageDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyReview; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 针对表【tbl_docker_apply_review(【 数据注入申请审核表】)】的数据库操作Mapper + * + * @author RENCHAO + */ +@Mapper +public interface DockerApplyReviewMapper { + + int insert(TblDockerApplyReview record); + + List selectList(ReqDockerApplyPageDTO reqDTO); + + TblDockerApplyReview selectOneById(@Param("reviewId") Long reviewId, @Param("userId") String userId); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerClientInfoMapper.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerClientInfoMapper.java new file mode 100644 index 00000000..ead64142 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerClientInfoMapper.java @@ -0,0 +1,18 @@ +package com.jiuyv.sptccc.agile.portal.mapper; + +import com.jiuyv.sptccc.agile.portal.domain.TblDockerClientInfo; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 表【tbl_docker_client_info(【 服务器清单】)】Mapper +* @author RENCHAO +* +*/ +@Mapper +public interface DockerClientInfoMapper { + + List selectAllList(); + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerDownloadApplyMapper.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerDownloadApplyMapper.java new file mode 100644 index 00000000..2a6e29e1 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerDownloadApplyMapper.java @@ -0,0 +1,20 @@ +package com.jiuyv.sptccc.agile.portal.mapper; + +import com.jiuyv.sptccc.agile.dto.ReqDockerDownApplyPageDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerDownloadApply; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface DockerDownloadApplyMapper { + + + List selectList(ReqDockerDownApplyPageDTO reqDTO); + + void insert(TblDockerDownloadApply dockerDownloadApply); + + TblDockerDownloadApply selectByDownloadApplyId(@Param("downloadApplyId") Long downloadApplyId, + @Param("userId") String userId); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerPortainerUserMapper.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerPortainerUserMapper.java new file mode 100644 index 00000000..c62f7c5c --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerPortainerUserMapper.java @@ -0,0 +1,15 @@ +package com.jiuyv.sptccc.agile.portal.mapper; + +import com.jiuyv.sptccc.agile.portal.domain.TblDockerPortainerUser; +import org.apache.ibatis.annotations.Mapper; + +/** +* 针对表【tbl_docker_portainer_user(【portainer管理账户信息】)】的数据库操作Mapper +* +*/ +@Mapper +public interface DockerPortainerUserMapper { + + TblDockerPortainerUser selectOne(); + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerWithUserAccountMapper.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerWithUserAccountMapper.java new file mode 100644 index 00000000..51623122 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerWithUserAccountMapper.java @@ -0,0 +1,11 @@ +package com.jiuyv.sptccc.agile.portal.mapper; + +import com.jiuyv.sptccc.agile.portal.domain.TblDockerWithUserAccount; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface DockerWithUserAccountMapper { + + TblDockerWithUserAccount selectOneByApplyId(@Param("applyId") Long applyId); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerWithUserMapper.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerWithUserMapper.java new file mode 100644 index 00000000..d5bd28e0 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/DockerWithUserMapper.java @@ -0,0 +1,20 @@ +package com.jiuyv.sptccc.agile.portal.mapper; + +import com.jiuyv.sptccc.agile.dto.ReqDockerWithUserPageDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerWithUser; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface DockerWithUserMapper { + + List selectList(ReqDockerWithUserPageDTO reqDTO); + + TblDockerWithUser selectByApplyId(@Param("applyId") Long applyId, @Param("userId") String userId); + + int update(TblDockerWithUser dockerWithUser); + + List selectListByApplyIds(List applyIds); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/PortalContentMapper.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/PortalContentMapper.java new file mode 100644 index 00000000..f64f8414 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/PortalContentMapper.java @@ -0,0 +1,22 @@ +package com.jiuyv.sptccc.agile.portal.mapper; + +import com.jiuyv.sptccc.agile.portal.domain.TblPortalContent; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 门户内容 + */ +@Mapper +public interface PortalContentMapper { + + List selectContentList(@Param("showType") String showType); + + /** + * 根据contentId获取内容详情 + * + */ + TblPortalContent selectInfoByContentId(@Param("contentId") Long contentId); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/PublicFilesMapper.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/PublicFilesMapper.java new file mode 100644 index 00000000..055aa90c --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/PublicFilesMapper.java @@ -0,0 +1,27 @@ +package com.jiuyv.sptccc.agile.portal.mapper; + +import com.jiuyv.sptccc.agile.portal.domain.TblPublicFiles; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** +* tbl_public_files(【系统文件表】 +* +*/ +@Mapper +public interface PublicFilesMapper { + + int insert(TblPublicFiles record); + + List selectList(TblPublicFiles publicFile); + + void deleteByFileIdAndUserId(@Param("fileId") Long fileId, @Param("userId") String userId, @Param("userName") String userName); + + TblPublicFiles selectByFileId(@Param("fileId") Long fileId, @Param("userId") String userId); + + List selectListByFileIds(@Param("ids") List ids, @Param("userId") String userId); + + TblPublicFiles selectByUUID(@Param("uuid") String uuid); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/TblPortalLogininforMapper.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/TblPortalLogininforMapper.java new file mode 100644 index 00000000..26dfde27 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/TblPortalLogininforMapper.java @@ -0,0 +1,19 @@ +package com.jiuyv.sptccc.agile.portal.mapper; + +import com.jiuyv.sptccc.agile.portal.domain.TblPortalLogininfor; +import org.apache.ibatis.annotations.Mapper; + +/** + * 系统访问日志情况信息 数据层 + * + * @author admin + */ +@Mapper +public interface TblPortalLogininforMapper { + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + void insertLogininfor(TblPortalLogininfor logininfor); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/TblPortalMsgMapper.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/TblPortalMsgMapper.java new file mode 100644 index 00000000..917df868 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/TblPortalMsgMapper.java @@ -0,0 +1,18 @@ +package com.jiuyv.sptccc.agile.portal.mapper; + +import com.jiuyv.sptccc.agile.portal.domain.TblPortalMsg; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface TblPortalMsgMapper { + TblPortalMsg selectByMsgId(@Param("userId") Long userId, @Param("msgId") Long msgId); + + List selectList(@Param("userId") Long userId); + + void markRead(@Param("userId") Long userId, @Param("userName") String userName, @Param("msgId") Long msgId); + + void markReadAll(@Param("userId") Long userId, @Param("userName") String userName); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/TblPortalOperLogMapper.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/TblPortalOperLogMapper.java new file mode 100644 index 00000000..a4927ca4 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/TblPortalOperLogMapper.java @@ -0,0 +1,19 @@ +package com.jiuyv.sptccc.agile.portal.mapper; + +import com.jiuyv.sptccc.agile.portal.domain.TblPortalOperLog; +import org.apache.ibatis.annotations.Mapper; + +/** + * 操作日志 数据层 + * + * @author admin + */ +@Mapper +public interface TblPortalOperLogMapper { + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + */ + void insertOperlog(TblPortalOperLog operLog); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/TblPortalUserMapper.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/TblPortalUserMapper.java new file mode 100644 index 00000000..e353a70f --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/mapper/TblPortalUserMapper.java @@ -0,0 +1,39 @@ +package com.jiuyv.sptccc.agile.portal.mapper; + +import com.jiuyv.sptccc.agile.portal.domain.TblPortalUser; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 用户表 数据层 + * + * @author admin + */ +@Mapper +public interface TblPortalUserMapper { + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * @return 用户对象信息 + */ + TblPortalUser selectUserByUserName(String userName); + + /** + * 修改用户信息 + * + * @param user 用户信息 + * @return 结果 + */ + int updateUser(TblPortalUser user); + + /** + * 重置用户密码 + * + * @param userId 用户Id + * @param password 密码 + * @return 结果 + */ + int resetUserPwd(@Param("userId") Long userId, @Param("password") String password); + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IDockerApplyInfoService.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IDockerApplyInfoService.java new file mode 100644 index 00000000..ab8488fd --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IDockerApplyInfoService.java @@ -0,0 +1,22 @@ +package com.jiuyv.sptccc.agile.portal.service; + +import com.jiuyv.sptccc.agile.dto.DockerApplyReviewDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerApplyPageDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyReview; + +import java.util.List; + +public interface IDockerApplyInfoService { + + /** + * 获取分页 + * + */ + List getPage(ReqDockerApplyPageDTO reqDTO); + + /** + * 获取详细信息 + * + */ + DockerApplyReviewDTO getInfo(Long applyId); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IDockerApplyLibService.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IDockerApplyLibService.java new file mode 100644 index 00000000..387aa275 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IDockerApplyLibService.java @@ -0,0 +1,11 @@ +package com.jiuyv.sptccc.agile.portal.service; + +import com.jiuyv.sptccc.agile.dto.DockerLibDTO; + +import java.util.List; + +public interface IDockerApplyLibService { + + List getDockerLibList(Long applyId); + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IDockerDownloadApplyService.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IDockerDownloadApplyService.java new file mode 100644 index 00000000..d15880a7 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IDockerDownloadApplyService.java @@ -0,0 +1,34 @@ +package com.jiuyv.sptccc.agile.portal.service; + +import com.jiuyv.sptccc.agile.dto.DockerFileDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerDownApplyPageDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerDownloadApply; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerWithUser; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +public interface IDockerDownloadApplyService { + + /** + * 获取文件申请列表 + * + */ + List list(ReqDockerDownApplyPageDTO reqDTO); + + /** + * 申请文件 + */ + void apply(TblDockerWithUser dockerInfo, String fileName, String remarks); + + /** + * 下载文件 + */ + void downloadFile(Long downloadApplyId, Boolean isQuery, HttpServletResponse response); + + /** + * 获取容器文件列表信息 + * + */ + List dockerFileList(Long applyId); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IDockerWithUserService.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IDockerWithUserService.java new file mode 100644 index 00000000..c7f530ce --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IDockerWithUserService.java @@ -0,0 +1,25 @@ +package com.jiuyv.sptccc.agile.portal.service; + +import com.jiuyv.sptccc.agile.dto.DockerFileDTO; +import com.jiuyv.sptccc.agile.dto.DockerWithUserDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerWithUserDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerWithUserPageDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerWithUser; + +import java.util.List; + +public interface IDockerWithUserService { + List list(ReqDockerWithUserPageDTO reqDTO); + + DockerWithUserDTO getInfo(Long applyId); + + void injectApply(ReqDockerWithUserDTO reqDTO); + + void restart(ReqDockerWithUserDTO reqDTO); + + List fileList(Long applyId); + + void applyDown(Long applyId, String fileName, String remarks); + + TblDockerWithUser getSimpleInfo(Long applyId); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IFileService.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IFileService.java new file mode 100644 index 00000000..810d4e10 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IFileService.java @@ -0,0 +1,19 @@ +package com.jiuyv.sptccc.agile.portal.service; + +import com.jiuyv.sptccc.agile.portal.domain.TblPublicFiles; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +public interface IFileService { + void saveFile(MultipartFile file, String fileType, String remarks); + + List getList(TblPublicFiles publicFile); + + void deleteByFileId(Long fileId); + + void getImage(String uuid, HttpServletResponse response); + + void downloadPublicFile(String fileName, HttpServletResponse response); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IPortalContentService.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IPortalContentService.java new file mode 100644 index 00000000..f7314f47 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IPortalContentService.java @@ -0,0 +1,28 @@ +package com.jiuyv.sptccc.agile.portal.service; + + +import com.jiuyv.sptccc.agile.portal.domain.TblPortalContent; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +public interface IPortalContentService { + + /** + * 获取应用场景列表 + * + */ + List getContentList(String showType); + + /** + * 获取内容详情 + * + */ + TblPortalContent getContentInfo(Long contentId); + + void getImage(String imageName, HttpServletResponse response); + + void wordDownload(HttpServletResponse response); + + void sdkDownload(HttpServletResponse response); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IPortalLogininforService.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IPortalLogininforService.java new file mode 100644 index 00000000..845b4d29 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IPortalLogininforService.java @@ -0,0 +1,17 @@ +package com.jiuyv.sptccc.agile.portal.service; + +import com.jiuyv.sptccc.agile.portal.domain.TblPortalLogininfor; + +/** + * 系统访问日志情况信息 服务层 + * + * @author admin + */ +public interface IPortalLogininforService { + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + public void insertLogininfor(TblPortalLogininfor logininfor); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IPortalMessageService.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IPortalMessageService.java new file mode 100644 index 00000000..697a0470 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IPortalMessageService.java @@ -0,0 +1,18 @@ +package com.jiuyv.sptccc.agile.portal.service; + +import com.jiuyv.sptccc.agile.portal.domain.TblPortalMsg; + +import java.util.List; + +/** + * 门户消息 + * + * @author ren_chao + */ +public interface IPortalMessageService { + List getList(); + + TblPortalMsg getDetail(Long msgId); + + void markRead(Long[] msgIds); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IPortalOperLogService.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IPortalOperLogService.java new file mode 100644 index 00000000..7cfc6779 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IPortalOperLogService.java @@ -0,0 +1,17 @@ +package com.jiuyv.sptccc.agile.portal.service; + +import com.jiuyv.sptccc.agile.portal.domain.TblPortalOperLog; + +/** + * 操作日志 服务层 + * + * @author admin + */ +public interface IPortalOperLogService { + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + */ + public void insertOperlog(TblPortalOperLog operLog); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IPortalUserService.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IPortalUserService.java new file mode 100644 index 00000000..161c14c0 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/IPortalUserService.java @@ -0,0 +1,33 @@ +package com.jiuyv.sptccc.agile.portal.service; + +import com.jiuyv.sptccc.agile.dto.ResUserPasswordDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblPortalUser; + +/** + * 业务层 + * + * @author admin + */ +public interface IPortalUserService { + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * @return 用户对象信息 + */ + TblPortalUser selectUserByUserName(String userName); + + + /** + * 系统修改用户的登陆时相关内容 + * 非常频繁,不变version + * + * @param user 用户信息 + * @return 结果 + */ + int updateUserProfileNoVersion(TblPortalUser user); + + + void resetUserPwd(ResUserPasswordDTO passwordDTO); +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/AbstractSftpFileService.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/AbstractSftpFileService.java new file mode 100644 index 00000000..38687afb --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/AbstractSftpFileService.java @@ -0,0 +1,74 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.SftpATTRS; +import com.jcraft.jsch.SftpException; +import com.jiuyv.sptccc.agile.common.constant.FeignApiConstant; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.Vector; + +/** + * sftp 文件服务抽象父类 + * + * @author ren_chao + */ +public abstract class AbstractSftpFileService { + private static final Logger LOGGER = LoggerFactory.getLogger(AbstractSftpFileService.class); + + /** + * 判断是否有该目录或文件 + * @param channel 通道 + * @param directory 主目录 + * @param resources 需要检测的目录或文件 + * @return 存在返回true 不存在返回false + */ + @SuppressWarnings("unchecked") + protected boolean isResourceExist(ChannelSftp channel, String directory, String resources) { + LOGGER.info("查看目录{}是否有资源[{}]", directory, resources); + // 获取目录下的文件和子目录列表 + Vector entries; + try { + entries = channel.ls(directory); + } catch (SftpException e) { + LOGGER.error("文件服务器异常", e); + throw new ServiceException("文件服务器异常"); + } + if (entries == null) { + return false; + } + for (ChannelSftp.LsEntry entry : entries) { + if (entry.getFilename().equals(resources)) { + return true; + } + } + return false; + } + + protected void getFileStream(ChannelSftp sftpChannel, String directory, String fileName, HttpServletResponse response) throws SftpException, IOException { + if (!isResourceExist(sftpChannel, directory, fileName)) { + throw new ServiceException("文件不存在"); + } + String filePath = directory + "/" + fileName; + SftpATTRS stat = sftpChannel.stat(filePath); + response.setContentLengthLong(stat.getSize()); + sftpChannel.get(filePath, response.getOutputStream()); + } + + + protected void downloadException(HttpServletResponse response, String msg) { + try { + response.setStatus(403); + String message = URLEncoder.encode(msg, "UTF-8"); + response.addHeader(FeignApiConstant.EXC_MSG_KEY, message); + } catch (UnsupportedEncodingException e) { + LOGGER.error("编码异常", e); + } + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerApplyInfoServiceImpl.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerApplyInfoServiceImpl.java new file mode 100644 index 00000000..3ce4a4df --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerApplyInfoServiceImpl.java @@ -0,0 +1,67 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.dto.DockerApplyReviewDTO; +import com.jiuyv.sptccc.agile.dto.DockerApplyReviewDtlDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerApplyPageDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyReview; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyReviewDtl; +import com.jiuyv.sptccc.agile.portal.domain.TblPublicFiles; +import com.jiuyv.sptccc.agile.portal.mapper.DockerApplyReviewDtlMapper; +import com.jiuyv.sptccc.agile.portal.mapper.DockerApplyReviewMapper; +import com.jiuyv.sptccc.agile.portal.mapper.PublicFilesMapper; +import com.jiuyv.sptccc.agile.portal.service.IDockerApplyInfoService; +import com.jiuyv.sptccc.agile.portal.utils.UserUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class DockerApplyInfoServiceImpl implements IDockerApplyInfoService { + + private final DockerApplyReviewMapper dockerApplyReviewMapper; + private final DockerApplyReviewDtlMapper dockerApplyReviewDtlMapper; + private final PublicFilesMapper publicFilesMapper; + + public DockerApplyInfoServiceImpl(DockerApplyReviewMapper dockerApplyReviewMapper, + DockerApplyReviewDtlMapper dockerApplyReviewDtlMapper, + PublicFilesMapper publicFilesMapper) { + this.dockerApplyReviewMapper = dockerApplyReviewMapper; + this.dockerApplyReviewDtlMapper = dockerApplyReviewDtlMapper; + this.publicFilesMapper = publicFilesMapper; + } + + @Override + public List getPage(ReqDockerApplyPageDTO reqDTO) { + reqDTO.setApplyUserId(UserUtils.getUserId()); + return dockerApplyReviewMapper.selectList(reqDTO); + } + + @Override + public DockerApplyReviewDTO getInfo(Long reviewId) { + String userId = UserUtils.getUserId(); + TblDockerApplyReview applyReview = dockerApplyReviewMapper.selectOneById(reviewId, userId); + if (applyReview == null) { + throw new ServiceException("未查询到该条记录"); + } + DockerApplyReviewDTO reviewDTO = new DockerApplyReviewDTO(); + BeanUtils.copyProperties(applyReview, reviewDTO); + + // 申请明细 + List dtlList = dockerApplyReviewDtlMapper.selectListByReviewId(reviewId); + List dtlDTOList = dtlList.stream().map(tblDockerApplyReviewDtl -> { + DockerApplyReviewDtlDTO dtlDTO = new DockerApplyReviewDtlDTO(); + BeanUtils.copyProperties(tblDockerApplyReviewDtl, dtlDTO); + TblPublicFiles publicFiles = publicFilesMapper.selectByFileId(dtlDTO.getFileId(), userId); + dtlDTO.setFileName(publicFiles == null ? null : publicFiles.getFileName()); + return dtlDTO; + }).collect(Collectors.toList()); + reviewDTO.setReviewDtlList(dtlDTOList); + + return reviewDTO; + } + + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerApplyLibServiceImpl.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerApplyLibServiceImpl.java new file mode 100644 index 00000000..815a7ccd --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerApplyLibServiceImpl.java @@ -0,0 +1,57 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.jiuyv.sptccc.agile.common.enums.DataStatusEnum; +import com.jiuyv.sptccc.agile.dto.DockerLibDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyLib; +import com.jiuyv.sptccc.agile.portal.domain.TblPublicFiles; +import com.jiuyv.sptccc.agile.portal.mapper.DockerApplyLibMapper; +import com.jiuyv.sptccc.agile.portal.mapper.PublicFilesMapper; +import com.jiuyv.sptccc.agile.portal.service.IDockerApplyLibService; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DockerApplyLibServiceImpl implements IDockerApplyLibService { + private final DockerApplyLibMapper dockerApplyLibMapper; + private final PublicFilesMapper publicFilesMapper; + + public DockerApplyLibServiceImpl(DockerApplyLibMapper dockerApplyLibMapper, PublicFilesMapper publicFilesMapper) { + this.dockerApplyLibMapper = dockerApplyLibMapper; + this.publicFilesMapper = publicFilesMapper; + } + + @Override + public List getDockerLibList(Long applyId) { + // 组件列表 + List dockerApplyLibs = dockerApplyLibMapper.selectListByApplyId(applyId); + if (CollectionUtils.isEmpty(dockerApplyLibs)) { + return Collections.emptyList(); + } + List ids = dockerApplyLibs.stream().map(TblDockerApplyLib::getFileId).collect(Collectors.toList()); + Map map = publicFilesMapper.selectListByFileIds(ids, null) + .stream().collect(Collectors.toMap(TblPublicFiles::getFileId, f -> f)); + + return dockerApplyLibs.stream().map(l -> { + DockerLibDTO libDTO = new DockerLibDTO(); + BeanUtils.copyProperties(l, libDTO); + TblPublicFiles file = map.get(l.getFileId()); + if (file == null) { + libDTO.setDataStatus(DataStatusEnum.DELETED.getCode()); + } else { + libDTO.setFileName(file.getFileName()); + libDTO.setLibDesc(file.getRemarks()); + libDTO.setLibType(file.getFileType()); + libDTO.setSysType(file.getSysType()); + libDTO.setFileSize(file.getFileSize()); + } + return libDTO; + }).collect(Collectors.toList()); + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerDownloadApplyServiceImpl.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerDownloadApplyServiceImpl.java new file mode 100644 index 00000000..fc7e8a89 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerDownloadApplyServiceImpl.java @@ -0,0 +1,222 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.SftpATTRS; +import com.jcraft.jsch.SftpException; +import com.jiuyv.sptccc.agile.common.constant.ServiceConstant; +import com.jiuyv.sptccc.agile.common.enums.DockerFileReviewStatus; +import com.jiuyv.sptccc.agile.common.enums.LabStatusEnum; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.dto.DockerFileDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerDownApplyPageDTO; +import com.jiuyv.sptccc.agile.framework.config.ConsoleProperties; +import com.jiuyv.sptccc.agile.framework.config.sftp.SftpPool; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerDownloadApply; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerWithUser; +import com.jiuyv.sptccc.agile.portal.mapper.DockerDownloadApplyMapper; +import com.jiuyv.sptccc.agile.portal.service.IDockerDownloadApplyService; +import com.jiuyv.sptccc.agile.portal.service.IDockerWithUserService; +import com.jiuyv.sptccc.agile.portal.utils.UserUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Vector; + +@Service +public class DockerDownloadApplyServiceImpl extends AbstractSftpFileService implements IDockerDownloadApplyService { + private static final Logger LOGGER = LoggerFactory.getLogger(DockerDownloadApplyServiceImpl.class); + + private static final long KILOBYTE = 1024; + + private final DockerDownloadApplyMapper dockerDownloadApplyMapper; + private final IDockerWithUserService dockerWithUserService; + private final SftpPool sftpPool; + private final String dockerDataPath; + private final long downloadMaxFile; + + public DockerDownloadApplyServiceImpl(DockerDownloadApplyMapper dockerDownloadApplyMapper, SftpPool sftpPool, + @Lazy IDockerWithUserService dockerWithUserService, + ConsoleProperties consoleProperties) { + this.dockerDownloadApplyMapper = dockerDownloadApplyMapper; + this.sftpPool = sftpPool; + this.dockerWithUserService = dockerWithUserService; + this.dockerDataPath = consoleProperties.getDockerDataPath(); + this.downloadMaxFile = consoleProperties.getDownloadMaxFile(); + } + + @Override + public List list(ReqDockerDownApplyPageDTO reqDTO) { + reqDTO.setApplyUserId(UserUtils.getUserId()); + List list = dockerDownloadApplyMapper.selectList(reqDTO); + for (TblDockerDownloadApply downloadApply : list) { + Long applyId = downloadApply.getApplyId(); + try { + TblDockerWithUser simpleInfo = dockerWithUserService.getSimpleInfo(applyId); + downloadApply.setBusStatus(simpleInfo.getBusStatus()); + SftpATTRS attrs = getDockerFileInfo(downloadApply.getApplyId(), downloadApply.getFileName()); + downloadApply.setDataStatus(attrs == null ? "99" : "00"); + } catch (ServiceException e) { + LOGGER.info("未查询到实验室[{}]", applyId, e); + downloadApply.setBusStatus(LabStatusEnum.UNLOADED.getCode()); + downloadApply.setDataStatus("99"); + } + } + return list; + } + + @Override + public void apply(TblDockerWithUser dockerInfo, String fileName, String applyDesc) { + Long applyId = dockerInfo.getApplyId(); + TblDockerDownloadApply dockerDownloadApply = new TblDockerDownloadApply(); + UserUtils.createBaseEntity(dockerDownloadApply); + dockerDownloadApply.setReviewStatus(DockerFileReviewStatus.PENDING.getCode()); + dockerDownloadApply.setBusStatus(dockerInfo.getBusStatus()); + dockerDownloadApply.setApplyId(applyId); + dockerDownloadApply.setLabTitle(dockerInfo.getLabTitle()); + dockerDownloadApply.setFileName(fileName); + dockerDownloadApply.setApplyUserId(UserUtils.getUserId()); + dockerDownloadApply.setApplyUserName(UserUtils.getUserName()); + dockerDownloadApply.setApplyDesc(applyDesc); + SftpATTRS fileInfo = getDockerFileInfo(applyId, fileName); + if (fileInfo == null) { + throw new ServiceException("获取文件信息异常"); + } + dockerDownloadApply.setFileLastTime(Integer.toString(fileInfo.getMTime())); + dockerDownloadApply.setFileSize(Long.toString(fileInfo.getSize())); + dockerDownloadApplyMapper.insert(dockerDownloadApply); + } + + @Override + public void downloadFile(Long downloadApplyId, Boolean isQuery, HttpServletResponse response) { + TblDockerDownloadApply dockerDownloadApply = dockerDownloadApplyMapper + .selectByDownloadApplyId(downloadApplyId, UserUtils.getUserId()); + if (dockerDownloadApply == null) { + LOGGER.error("文件[{}]不存在", downloadApplyId); + downloadException(response, "文件[{}]不存在"); + return; + } + + if (!DockerFileReviewStatus.PASS.getCode().equals(dockerDownloadApply.getReviewStatus())) { + LOGGER.info("文件未通过审核,不允许下载"); + downloadException(response, "文件未通过审核,不允许下载"); + return; + } + + // 检查文件是否被修改 + SftpATTRS attrs = getDockerFileInfo(dockerDownloadApply.getApplyId(), dockerDownloadApply.getFileName()); + if (attrs == null) { + LOGGER.error("获取文件信息异常"); + downloadException(response, "获取文件信息异常"); + return; + } + String mtimeStr = Integer.toString(attrs.getMTime()); + String fileLastTime = dockerDownloadApply.getFileLastTime(); + if (!mtimeStr.equals(fileLastTime)) { + LOGGER.info("文件被修改,不允许下载"); + downloadException(response, "文件被修改,不允许下载"); + return; + } + + // 检查文件大小,超过设定值,不允许下载 + if (attrs.getSize() > downloadMaxFile * KILOBYTE * KILOBYTE) { + String msg = String.format("文件大小超过%sM,不允许下载", downloadMaxFile); + LOGGER.info(msg); + downloadException(response, msg); + return; + } + + if (isQuery) { + response.setStatus(200); + return; + } + + Long serverId = getServerId(dockerDownloadApply.getApplyId()); + ChannelSftp sftpChannel = sftpPool.get(serverId); + String path = dockerDataPath + "/" + dockerDownloadApply.getApplyId().toString() + + "/" + ServiceConstant.DOCKER_LIB_PATH_MAPPING_DOWNLOAD; + + String fileName = dockerDownloadApply.getFileName(); + try { + String contentDisposition = "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"); + response.addHeader("Content-Disposition", contentDisposition); + getFileStream(sftpChannel, path, fileName, response); + } catch (SftpException | IOException e) { + LOGGER.error("文件[{}]获取失败", fileName, e); + downloadException(response, "文件获取失败"); + } catch (ServiceException e) { + LOGGER.error("文件获取失败", e); + downloadException(response, e.getMessage()); + } finally { + sftpPool.close(serverId, sftpChannel); + } + } + + /** + * 获取容器文件列表信息 + * + */ + @SuppressWarnings("unchecked") + @Override + public List dockerFileList(Long applyId) { + String path = dockerDataPath + "/" + applyId + "/" + ServiceConstant.DOCKER_LIB_PATH_MAPPING_DOWNLOAD; + Long serverId = getServerId(applyId); + ChannelSftp channel = sftpPool.get(serverId); + try { + Vector entries = channel.ls(path); + ArrayList fileList = new ArrayList<>(); + for (ChannelSftp.LsEntry entry : entries) { + String filename = entry.getFilename(); + if (!filename.startsWith(".") && !filename.equals("..")) { + DockerFileDTO fileDTO = new DockerFileDTO(); + fileDTO.setFileName(filename); + fileDTO.setFileSize(Long.toString(entry.getAttrs().getSize())); + fileList.add(fileDTO); + } + } + return fileList; + } catch (SftpException e) { + LOGGER.error("获取文件失败", e); + return Collections.emptyList(); + } finally { + sftpPool.close(serverId, channel); + } + } + + /** + * 获取文件属性信息 + * + */ + private SftpATTRS getDockerFileInfo(Long applyId, String fileName) { + String path = dockerDataPath + "/" + applyId + "/" + ServiceConstant.DOCKER_LIB_PATH_MAPPING_DOWNLOAD; + Long serverId = getServerId(applyId); + ChannelSftp channel = sftpPool.get(serverId); + try { + return channel.stat(path + "/" + fileName); + } catch (SftpException e) { + LOGGER.error("获取文件失败", e); + return null; + } finally { + sftpPool.close(serverId, channel); + } + } + + + /** + * 根据applyId获取实验室服务器ID + * + */ + private Long getServerId(Long applyId) { + // 查询实验室服务器ID + TblDockerWithUser simpleInfo = dockerWithUserService.getSimpleInfo(applyId); + return simpleInfo.getDockerServerId(); + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerWithUserServiceImpl.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerWithUserServiceImpl.java new file mode 100644 index 00000000..25e49c87 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerWithUserServiceImpl.java @@ -0,0 +1,264 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.github.pagehelper.Page; +import com.jiuyv.sptccc.agile.common.constant.ServiceConstant; +import com.jiuyv.sptccc.agile.common.enums.DataStatusEnum; +import com.jiuyv.sptccc.agile.common.enums.DockerFileReviewStatus; +import com.jiuyv.sptccc.agile.common.enums.LabStatusEnum; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.dto.DockerFileDTO; +import com.jiuyv.sptccc.agile.dto.DockerLibDTO; +import com.jiuyv.sptccc.agile.dto.DockerWithUserDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerWithUserDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerWithUserPageDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyInfo; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyReview; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyReviewDtl; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerPortainerUser; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerWithUser; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerWithUserAccount; +import com.jiuyv.sptccc.agile.portal.domain.TblPublicFiles; +import com.jiuyv.sptccc.agile.portal.mapper.DockerApplyInfoMapper; +import com.jiuyv.sptccc.agile.portal.mapper.DockerApplyReviewDtlMapper; +import com.jiuyv.sptccc.agile.portal.mapper.DockerApplyReviewMapper; +import com.jiuyv.sptccc.agile.portal.mapper.DockerPortainerUserMapper; +import com.jiuyv.sptccc.agile.portal.mapper.DockerWithUserAccountMapper; +import com.jiuyv.sptccc.agile.portal.mapper.DockerWithUserMapper; +import com.jiuyv.sptccc.agile.portal.mapper.PublicFilesMapper; +import com.jiuyv.sptccc.agile.portal.service.IDockerApplyLibService; +import com.jiuyv.sptccc.agile.portal.service.IDockerDownloadApplyService; +import com.jiuyv.sptccc.agile.portal.service.IDockerWithUserService; +import com.jiuyv.sptccc.agile.portal.utils.UserUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class DockerWithUserServiceImpl implements IDockerWithUserService { + private static final Logger LOGGER = LoggerFactory.getLogger(DockerWithUserServiceImpl.class); + + private static final String API_KEY_NAME="X-API-Key"; + + private final DockerWithUserMapper dockerWithUserMapper; + private final DockerApplyReviewMapper dockerApplyReviewMapper; + private final DockerApplyReviewDtlMapper dockerApplyReviewDtlMapper; + private final DockerApplyInfoMapper dockerApplyInfoMapper; + private final DockerWithUserAccountMapper dockerWithUserAccountMapper; + private final DockerPortainerUserMapper dockerPortainerUserMapper; + private final IDockerApplyLibService dockerApplyLibService; + private final PublicFilesMapper publicFilesMapper; + private final IDockerDownloadApplyService dockerDownloadApplyService; + private final RestTemplate restTemplate; + + public DockerWithUserServiceImpl(DockerWithUserMapper dockerWithUserMapper, + DockerApplyReviewMapper dockerApplyReviewMapper, + DockerApplyReviewDtlMapper dockerApplyReviewDtlMapper, + DockerApplyInfoMapper dockerApplyInfoMapper, + DockerWithUserAccountMapper dockerWithUserAccountMapper, + DockerPortainerUserMapper dockerPortainerUserMapper, + IDockerApplyLibService dockerApplyLibService, + PublicFilesMapper publicFilesMapper, + IDockerDownloadApplyService dockerDownloadApplyService, + RestTemplateBuilder restTemplateBuilder) { + this.dockerWithUserMapper = dockerWithUserMapper; + this.dockerApplyReviewMapper = dockerApplyReviewMapper; + this.dockerApplyReviewDtlMapper = dockerApplyReviewDtlMapper; + this.dockerApplyInfoMapper = dockerApplyInfoMapper; + this.dockerWithUserAccountMapper = dockerWithUserAccountMapper; + this.dockerPortainerUserMapper = dockerPortainerUserMapper; + this.dockerApplyLibService = dockerApplyLibService; + this.publicFilesMapper = publicFilesMapper; + this.dockerDownloadApplyService = dockerDownloadApplyService; + this.restTemplate = restTemplateBuilder.build(); + } + + @Override + public List list(ReqDockerWithUserPageDTO reqDTO) { + String userId = UserUtils.getUserId(); + reqDTO.setApplyUserId(userId); + List list = dockerWithUserMapper.selectList(reqDTO); + List dockerWithUserDTOList = list.stream() + .map(tblDockerWithUser -> getDockerWithUserDTO(userId, tblDockerWithUser)).collect(Collectors.toList()); + if (list instanceof Page) { + Page page = new Page<>(); + page.setTotal(((Page) list).getTotal()); + page.addAll(dockerWithUserDTOList); + return page; + } + return dockerWithUserDTOList; + } + + @Override + public DockerWithUserDTO getInfo(Long applyId) { + // 容器信息 + TblDockerWithUser docker = getSimpleInfo(applyId); + DockerWithUserDTO dockerWithUserDTO = getDockerWithUserDTO(UserUtils.getUserId(), docker); + + // 组件列表 + List dockerLibList = dockerApplyLibService.getDockerLibList(applyId) + .stream().filter(lib -> DataStatusEnum.NORMAL.getCode().equals(lib.getDataStatus())) + .collect(Collectors.toList()); + List libList = new ArrayList<>(); + List applyLibList = new ArrayList<>(); + for (DockerLibDTO libDTO : dockerLibList) { + if (ServiceConstant.SYS_TYPE.equals(libDTO.getSysType())) { + applyLibList.add(libDTO); + } else { + libList.add(libDTO); + } + } + dockerWithUserDTO.setLibList(libList); + dockerWithUserDTO.setApplyLibList(applyLibList); + + // 容器文件 + dockerWithUserDTO.setDockerFileList(dockerDownloadApplyService.dockerFileList(applyId)); + return dockerWithUserDTO; + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void injectApply(ReqDockerWithUserDTO reqDTO) { + Long applyId = reqDTO.getApplyId(); + TblDockerWithUser simpleInfo = getSimpleInfo(applyId); + List fileIds = reqDTO.getFileIds(); + if (CollectionUtils.isEmpty(fileIds)) { + throw new ServiceException("文件不能为空"); + } + + TblDockerApplyReview applyReview = new TblDockerApplyReview(); + applyReview.setApplyRemark(reqDTO.getApplyDesc()); + applyReview.setApplyId(applyId); + applyReview.setLabTitle(simpleInfo.getLabTitle()); + applyReview.setApplyUserId(UserUtils.getUserId()); + applyReview.setApplyUserName(UserUtils.getUserName()); + applyReview.setReviewStatus(DockerFileReviewStatus.PENDING.getCode()); + UserUtils.createBaseEntity(applyReview); + dockerApplyReviewMapper.insert(applyReview); + + Long reviewId = applyReview.getReviewId(); + + List fileList = publicFilesMapper.selectListByFileIds(fileIds, UserUtils.getUserId()); + if (CollectionUtils.isEmpty(fileList)) { + throw new ServiceException("未查询到相关文件"); + } + + for (TblPublicFiles file : fileList) { + TblDockerApplyReviewDtl applyReviewDtl = new TblDockerApplyReviewDtl(); + applyReviewDtl.setReviewId(reviewId); + applyReviewDtl.setLibType(file.getFileType()); + applyReviewDtl.setLibDesc(file.getRemarks()); + applyReviewDtl.setFileId(file.getFileId()); + applyReviewDtl.setDataSourceType(ServiceConstant.PORTAL); + applyReviewDtl.setReviewStatus(DockerFileReviewStatus.PENDING.getCode()); + UserUtils.createBaseEntity(applyReviewDtl); + dockerApplyReviewDtlMapper.insert(applyReviewDtl); + } + + } + + @Override + public void restart(ReqDockerWithUserDTO reqDTO) { + TblDockerWithUser info = getSimpleInfo(reqDTO.getApplyId()); + if (!LabStatusEnum.IN_USE.getCode().equals(info.getBusStatus())) { + throw new ServiceException("实验室未生效"); + } + // 更新TblDockerWithUser + TblDockerWithUser dockerWithUser = new TblDockerWithUser(); + dockerWithUser.setApplyId(info.getApplyId()); + UserUtils.updateBaseEntity(dockerWithUser); + dockerWithUser.setRecTokenC(reqDTO.getRecToken()); + int row = dockerWithUserMapper.update(dockerWithUser); + if (row == 0) { + throw new ServiceException("容器正在重启,请勿重复提交"); + } + // 重启容器 + restartContainer(info.getDockerServerId(), info.getDockerContainerId()); + + } + + @Override + public List fileList(Long applyId) { + getSimpleInfo(applyId); + return dockerDownloadApplyService.dockerFileList(applyId); + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void applyDown(Long applyId, String fileName, String applyDesc) { + TblDockerWithUser dockerInfo = getSimpleInfo(applyId); + dockerDownloadApplyService.apply(dockerInfo, fileName, applyDesc); + } + + /** + * 获取TblDockerWithUser,及验证是否当前用户数据 + */ + @Override + public TblDockerWithUser getSimpleInfo(Long applyId) { + String userId = UserUtils.getUserId(); + TblDockerWithUser docker = dockerWithUserMapper.selectByApplyId(applyId, userId); + if (docker == null) { + throw new ServiceException("未查询到该条记录"); + } + return docker; + } + + + private DockerWithUserDTO getDockerWithUserDTO(String userId, TblDockerWithUser tblDockerWithUser) { + DockerWithUserDTO dockerWithUserDTO = new DockerWithUserDTO(); + Long applyId = tblDockerWithUser.getApplyId(); + TblDockerApplyInfo dockerApplyInfo = dockerApplyInfoMapper.selectInfoByApplyId(applyId, userId); + BeanUtils.copyProperties(dockerApplyInfo, dockerWithUserDTO); + BeanUtils.copyProperties(tblDockerWithUser, dockerWithUserDTO); + // 用户账户信息,如果多条,只取第一条 + TblDockerWithUserAccount dockerWithUserAccount = dockerWithUserAccountMapper.selectOneByApplyId(applyId); + if (dockerWithUserAccount != null) { + dockerWithUserDTO.setServiceType(dockerWithUserAccount.getServiceType()); + dockerWithUserDTO.setLoginUrl(dockerWithUserAccount.getLoginUrl()); + dockerWithUserDTO.setLoginUsername(dockerWithUserAccount.getLoginUsername()); + } + return dockerWithUserDTO; + } + + + /** + * 重启容器 + * + */ + private void restartContainer(Long serverId, String containerId) { + TblDockerPortainerUser p = dockerPortainerUserMapper.selectOne(); + if (p == null) { + throw new ServiceException("portainer信息获取失败"); + } + String url = p.getApiHttp() + "/api/endpoints/" + serverId + "/docker/containers/" + containerId + "/restart"; + HttpHeaders headers = new HttpHeaders(); + headers.set(API_KEY_NAME, p.getApiKey()); + ResponseEntity response; + try { + response = restTemplate.postForEntity(url, new HttpEntity<>(headers), String.class); + } catch (RestClientException e) { + LOGGER.error("容器[{}+{}]重启失败", serverId, containerId, e); + throw new ServiceException("容器重启失败"); + } + HttpStatus code = response.getStatusCode(); + if (HttpStatus.NO_CONTENT.value() != code.value()) { + LOGGER.error("容器[{}+{}]重启失败", serverId, containerId); + throw new ServiceException("容器重启失败"); + } + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/FileServiceImpl.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/FileServiceImpl.java new file mode 100644 index 00000000..883554b6 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/FileServiceImpl.java @@ -0,0 +1,205 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.SftpException; +import com.jiuyv.sptccc.agile.common.constant.ServiceConstant; +import com.jiuyv.sptccc.agile.common.enums.FileTypeEnum; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.common.utils.StringUtil; +import com.jiuyv.sptccc.agile.framework.config.ConsoleProperties; +import com.jiuyv.sptccc.agile.framework.config.sftp.SftpPool; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyLib; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerWithUser; +import com.jiuyv.sptccc.agile.portal.domain.TblPublicFiles; +import com.jiuyv.sptccc.agile.portal.mapper.DockerApplyLibMapper; +import com.jiuyv.sptccc.agile.portal.mapper.DockerWithUserMapper; +import com.jiuyv.sptccc.agile.portal.mapper.PublicFilesMapper; +import com.jiuyv.sptccc.agile.portal.service.IFileService; +import com.jiuyv.sptccc.agile.portal.utils.UserUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 文件上传与下载 + */ +@Service +public class FileServiceImpl extends AbstractSftpFileService implements IFileService { + private static final Logger LOGGER = LoggerFactory.getLogger(FileServiceImpl.class); + private static final List ALLOW_IMAGE_EXT = Arrays.asList("bmp", "gif", "jpg", "jpeg", "png"); + private static final List ALLOW_PYTHON_EXT = Arrays.asList("zip", "tar", "gz", "bz2"); + private static final List ALLOW_DATA_EXT = Arrays.asList("zip", "tar", "gz", "csv", "txt", "xls", "xlsx"); + + private final SftpPool sftpPool; + private final PublicFilesMapper publicFilesMapper; + private final DockerApplyLibMapper dockerApplyLibMapper; + private final DockerWithUserMapper dockerWithUserMapper; + private final String uploadPath; + + public FileServiceImpl(SftpPool sftpPool, PublicFilesMapper publicFilesMapper, + DockerApplyLibMapper dockerApplyLibMapper,DockerWithUserMapper dockerWithUserMapper, + ConsoleProperties consoleProperties) { + this.sftpPool = sftpPool; + this.publicFilesMapper = publicFilesMapper; + this.dockerApplyLibMapper = dockerApplyLibMapper; + this.dockerWithUserMapper = dockerWithUserMapper; + this.uploadPath = consoleProperties.getUploadPath(); + } + + /** + * 保存文件到Sftp + * + */ + @Override + @Transactional(propagation= Propagation.REQUIRES_NEW) + public void saveFile(MultipartFile file, String fileType, String remarks) { + String fileName = file.getOriginalFilename(); + String categoryPath = ServiceConstant.SYS_TYPE + "-" + LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM")); + String uuid = StringUtil.getSimpleUUID(); + String fileExt = StringUtil.getFileExtension(fileName); + + // 检查文件 + boolean isPython = FileTypeEnum.PYTHON.getCode().equals(fileType) && ALLOW_PYTHON_EXT.contains(fileExt); + boolean isData = FileTypeEnum.DATA.getCode().equals(fileType) && ALLOW_DATA_EXT.contains(fileExt); + if (!isPython && !isData) { + throw new ServiceException("文件类型错误"); + } + + // 文件保存到Sftp + saveToSftp(file, categoryPath, uuid, fileExt); + + // 文件记录保存到数据库 + TblPublicFiles publicFiles = new TblPublicFiles(); + publicFiles.setUuid(uuid); + publicFiles.setFileName(fileName); + publicFiles.setFileExtension(fileExt); + publicFiles.setFileCategoryPath(categoryPath); + publicFiles.setFileType(fileType); + publicFiles.setFileSourceType(ServiceConstant.FILE_SOURCE_TYPE); + publicFiles.setSysType(ServiceConstant.SYS_TYPE); + publicFiles.setRemarks(remarks); + publicFiles.setFileSize(Long.toString(file.getSize())); + UserUtils.createBaseEntity(publicFiles); + publicFilesMapper.insert(publicFiles); + } + + /** + * 获取当前用户的文件列表 + * + */ + @Override + public List getList(TblPublicFiles publicFile) { + return publicFilesMapper.selectList(publicFile); + } + + /** + * 删除文件 + * + */ + @Override + @Transactional(propagation= Propagation.REQUIRES_NEW) + public void deleteByFileId(Long fileId) { + String userId = UserUtils.getUserId(); + TblPublicFiles publicFiles = publicFilesMapper.selectByFileId(fileId, userId); + + // 检查文件是否已被使用 + List libList = dockerApplyLibMapper.selectListByFileId(fileId); + if (!CollectionUtils.isEmpty(libList)) { + List applyIds = libList.stream().map(TblDockerApplyLib::getApplyId).collect(Collectors.toList()); + List dockerWithUserList = dockerWithUserMapper.selectListByApplyIds(applyIds); + if (!CollectionUtils.isEmpty(dockerWithUserList)) { + throw new ServiceException("文件已注入到实验室,不允许删除"); + } + } + + // 删除文件 + ChannelSftp sftpChannel = sftpPool.getDefault(); + String directory = uploadPath + "/" + publicFiles.getFileCategoryPath(); + String fileName = publicFiles.getUuid() + "." + publicFiles.getFileExtension(); + try { + if (isResourceExist(sftpChannel, directory, fileName)) { + sftpChannel.rm(directory + "/" + fileName); + } + } catch (SftpException e) { + LOGGER.error("文件[{}]删除失败", fileName); + throw new ServiceException("文件删除失败"); + } finally { + sftpPool.closeDefault(sftpChannel); + } + + // 删除记录 + publicFilesMapper.deleteByFileIdAndUserId(fileId, userId, UserUtils.getUserName()); + } + + /** + * 获取图片 + * + */ + @Override + public void getImage(String uuid, HttpServletResponse response) { + TblPublicFiles publicFile = publicFilesMapper.selectByUUID(uuid); + if (publicFile == null || !ALLOW_IMAGE_EXT.contains(publicFile.getFileExtension())) { + throw new ServiceException("图片不存在"); + } + String directory = uploadPath + "/" + publicFile.getFileCategoryPath(); + String fileName = publicFile.getUuid() + "." + publicFile.getFileExtension(); + ChannelSftp sftpChannel = sftpPool.getDefault(); + try { + getFileStream(sftpChannel, directory, fileName, response); + } catch (SftpException | IOException e) { + LOGGER.error("图片[{}]获取失败", fileName, e); + throw new ServiceException("图片获取失败"); + } finally { + sftpPool.closeDefault(sftpChannel); + } + } + + @Override + public void downloadPublicFile(String fileName, HttpServletResponse response) { + ChannelSftp sftpChannel = sftpPool.getDefault(); + try { + getFileStream(sftpChannel, uploadPath, fileName, response); + } catch (SftpException | IOException e) { + LOGGER.error("文档获取失败", e); + throw new ServiceException("文档获取失败"); + } finally { + sftpPool.closeDefault(sftpChannel); + } + } + + /** + * 保存文件到Sftp + * + */ + private void saveToSftp(MultipartFile file, String fileCategoryPath, String uuid, String fileExtension) { + ChannelSftp sftpChannel = sftpPool.getDefault(); + try { + // 创建目录 + String targetDirectory = uploadPath + "/" + fileCategoryPath; + if (!isResourceExist(sftpChannel, uploadPath, fileCategoryPath)) { + sftpChannel.mkdir(targetDirectory); + } + // 文件上传 + sftpChannel.put(file.getInputStream(), targetDirectory + "/" + uuid + "." + fileExtension); + } catch (SftpException | IOException e) { + LOGGER.error("文件保存失败", e); + throw new ServiceException("文件保存失败"); + } finally { + sftpPool.closeDefault(sftpChannel); + } + } + + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalContentServiceImpl.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalContentServiceImpl.java new file mode 100644 index 00000000..2a739e3f --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalContentServiceImpl.java @@ -0,0 +1,119 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.github.pagehelper.Page; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.framework.config.ConsoleProperties; +import com.jiuyv.sptccc.agile.portal.domain.TblPortalContent; +import com.jiuyv.sptccc.agile.portal.mapper.PortalContentMapper; +import com.jiuyv.sptccc.agile.portal.service.IFileService; +import com.jiuyv.sptccc.agile.portal.service.IPortalContentService; +import org.apache.commons.io.FilenameUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 门户内容 + */ +@Service +public class PortalContentServiceImpl implements IPortalContentService { + private static final Logger LOGGER = LoggerFactory.getLogger(PortalContentServiceImpl.class); + private static final Pattern IMG_P = Pattern.compile("/?images/console/[a-fA-F0-9]+\\.(jpg|jpeg|png|gif|bmp|tiff|tif|webp|svg|ico)"); + + private final PortalContentMapper portalContentMapper; + private final IFileService fileService; + private final String wordFileName; + private final String sdkFileName; + + public PortalContentServiceImpl(PortalContentMapper portalContentMapper, IFileService fileService, + ConsoleProperties consoleProperties) { + this.portalContentMapper = portalContentMapper; + this.fileService = fileService; + this.wordFileName = consoleProperties.getWordFileName(); + this.sdkFileName = consoleProperties.getSdkFileName(); + } + + /** + * 获取内容列表 + */ + @Override + public List getContentList(String showType) { + List list = portalContentMapper.selectContentList(showType); + if (list instanceof Page) { + Page page = new Page<>(); + page.setTotal(((Page) list).getTotal()); + page.addAll(handleListUrl(list)); + return page; + } + return handleListUrl(list); + } + + /** + * 获取内容详情 + * + */ + @Override + public TblPortalContent getContentInfo(Long contentId) { + TblPortalContent info = portalContentMapper.selectInfoByContentId(contentId); + if (info == null) { + throw new ServiceException("未查询到该条内容"); + } + info.setImgUrl(handleUrl(info.getImgUrl())); + info.setContentText(handleUrl(info.getContentText())); + return info; + } + + @Override + public void getImage(String imageName, HttpServletResponse response) { + fileService.getImage(FilenameUtils.getBaseName(imageName), response); + } + + @Override + public void wordDownload(HttpServletResponse response) { + fileService.downloadPublicFile(wordFileName, response); + } + + @Override + public void sdkDownload(HttpServletResponse response) { + fileService.downloadPublicFile(sdkFileName, response); + } + + /** + * 处理List中url + * + */ + private List handleListUrl(List list) { + for (TblPortalContent content : list) { + content.setImgUrl(handleUrl(content.getImgUrl())); + content.setContentText(handleUrl(content.getContentText())); + } + return list; + } + + /** + * 处理url + * + */ + private String handleUrl(String text) { + LOGGER.info("内容详情url处理前:[{}]", text); + if (text == null) { + return null; + } + Matcher matcher = IMG_P.matcher(text); + StringBuffer result = new StringBuffer(); + while (matcher.find()) { + String[] split = matcher.group().split("/"); + String uri = "/public/content/images/" + split[split.length - 1]; + matcher.appendReplacement(result, uri); + } + matcher.appendTail(result); + LOGGER.info("内容详情url处理后:[{}]", result); + return result.toString(); + + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalLogininforServiceImpl.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalLogininforServiceImpl.java new file mode 100644 index 00000000..8738eea5 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalLogininforServiceImpl.java @@ -0,0 +1,35 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.jiuyv.sptccc.agile.portal.domain.TblPortalLogininfor; +import com.jiuyv.sptccc.agile.portal.mapper.TblPortalLogininforMapper; +import com.jiuyv.sptccc.agile.portal.service.IPortalLogininforService; + + +/** + * 系统访问日志情况信息 服务层处理 + * + * @author admin + */ +@Service +public class PortalLogininforServiceImpl implements IPortalLogininforService { + + @Autowired + private TblPortalLogininforMapper logininforMapper; + + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + @Override + public void insertLogininfor(TblPortalLogininfor logininfor) { + if (StringUtils.isNotBlank(logininfor.getMsg()) && logininfor.getMsg().length() > 1000) { + logininfor.setMsg(logininfor.getMsg().substring(0, 1000)); + } + logininforMapper.insertLogininfor(logininfor); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalMessageServiceImpl.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalMessageServiceImpl.java new file mode 100644 index 00000000..54e74d54 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalMessageServiceImpl.java @@ -0,0 +1,51 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.jiuyv.sptccc.agile.portal.domain.TblPortalMsg; +import com.jiuyv.sptccc.agile.portal.mapper.TblPortalMsgMapper; +import com.jiuyv.sptccc.agile.portal.service.IPortalMessageService; +import com.jiuyv.sptccc.agile.portal.utils.UserUtils; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 门户消息 + * + * @author ren_chao + */ +@Service +public class PortalMessageServiceImpl implements IPortalMessageService { + private final TblPortalMsgMapper portalMsgMapper; + + public PortalMessageServiceImpl(TblPortalMsgMapper portalMsgMapper) { + this.portalMsgMapper = portalMsgMapper; + } + + @Override + public List getList() { + return portalMsgMapper.selectList(Long.parseLong(UserUtils.getUserId())); + } + + @Override + public TblPortalMsg getDetail(Long msgId) { + markRead(msgId); + return portalMsgMapper.selectByMsgId(Long.parseLong(UserUtils.getUserId()), msgId); + } + + @Override + public void markRead(Long[] msgIds) { + if (msgIds == null || msgIds.length == 0) { + portalMsgMapper.markReadAll(Long.parseLong(UserUtils.getUserId()), UserUtils.getUserName()); + return; + } + for (Long msgId : msgIds) { + markRead(msgId); + } + } + + + private void markRead(Long msgId) { + portalMsgMapper.markRead(Long.parseLong(UserUtils.getUserId()), UserUtils.getUserName(), msgId); + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalOperLogServiceImpl.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalOperLogServiceImpl.java new file mode 100644 index 00000000..6043f57d --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalOperLogServiceImpl.java @@ -0,0 +1,29 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.jiuyv.sptccc.agile.portal.domain.TblPortalOperLog; +import com.jiuyv.sptccc.agile.portal.mapper.TblPortalOperLogMapper; +import com.jiuyv.sptccc.agile.portal.service.IPortalOperLogService; + +/** + * 操作日志 服务层处理 + * + * @author admin + */ +@Service +public class PortalOperLogServiceImpl implements IPortalOperLogService { + @Autowired + private TblPortalOperLogMapper operLogMapper; + + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + */ + @Override + public void insertOperlog(TblPortalOperLog operLog) { + operLogMapper.insertOperlog(operLog); + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalUserServiceImpl.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalUserServiceImpl.java new file mode 100644 index 00000000..9d04c8cf --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalUserServiceImpl.java @@ -0,0 +1,79 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.jiuyv.sptccc.agile.common.constant.ServiceConstant; +import com.jiuyv.sptccc.agile.dto.ResUserPasswordDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblPortalUser; +import com.jiuyv.sptccc.agile.portal.mapper.TblPortalUserMapper; +import com.jiuyv.sptccc.agile.portal.service.IPortalUserService; +import com.jiuyv.sptccc.agile.portal.utils.Sm4Util; +import org.apache.commons.codec.DecoderException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.security.GeneralSecurityException; + +/** + * 用户 业务层处理 + * + * @author admin + */ +@Service +public class PortalUserServiceImpl implements IPortalUserService { + private static final Logger LOGGER = LoggerFactory.getLogger(PortalUserServiceImpl.class); + + @Autowired + private TblPortalUserMapper userMapper; + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * @return 用户对象信息 + */ + @Override + public TblPortalUser selectUserByUserName(String userName) { + TblPortalUser user = userMapper.selectUserByUserName(userName); + if (user == null) { + return null; + } + user.setPhonenumber(decrypt(user.getPhonenumber())); + user.setEmail(decrypt(user.getEmail())); + return user; + } + + /** + * 修改用户基本信息,不变version + * + * @param user 用户信息 + * @return 结果 + */ + @Override + public int updateUserProfileNoVersion(TblPortalUser user) { + user.getParams().put(ServiceConstant.NO_VERSION_FLAG, "1");//有值就行 + return userMapper.updateUser(user); + } + + /** + * 重置用户密码 + * + */ + @Override + public void resetUserPwd(ResUserPasswordDTO passwordDTO) { + userMapper.resetUserPwd(passwordDTO.getUserId(), passwordDTO.getPassword()); + } + + private String decrypt(String cipherText) { + if (cipherText == null) { + return null; + } + try { + return Sm4Util.decryptEcb(ServiceConstant.SM4_SECERT_KEY, cipherText); + } catch (GeneralSecurityException | DecoderException e) { + LOGGER.debug("解密异常:{}", e.getMessage(), e); + return cipherText; + } + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/utils/Sm4Util.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/utils/Sm4Util.java new file mode 100644 index 00000000..579bb8e1 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/utils/Sm4Util.java @@ -0,0 +1,42 @@ +package com.jiuyv.sptccc.agile.portal.utils; + +import org.apache.commons.codec.DecoderException; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.codec.binary.Hex; +import org.bouncycastle.jce.provider.BouncyCastleProvider; + +import javax.crypto.Cipher; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.spec.SecretKeySpec; +import java.security.GeneralSecurityException; +import java.security.InvalidKeyException; +import java.security.Key; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.security.Security; + +/** + * Sm4解密 + */ +public class Sm4Util { + public static final String ALGORITHM_NAME = "SM4"; + public static final String ALGORITHM_NAME_ECB_PADDING = "SM4/ECB/PKCS7Padding"; + + static { + Security.addProvider(new BouncyCastleProvider()); + } + + public static String decryptEcb(String key, String text) throws GeneralSecurityException, DecoderException { + return new String(generateECBCipher(Hex.decodeHex(key)).doFinal(Base64.decodeBase64((text)))); + } + + private static Cipher generateECBCipher(byte[] key) + throws NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException, + InvalidKeyException { + Cipher cipher = Cipher.getInstance(ALGORITHM_NAME_ECB_PADDING, BouncyCastleProvider.PROVIDER_NAME); + Key sm4Key = new SecretKeySpec(key, ALGORITHM_NAME); + cipher.init(Cipher.DECRYPT_MODE, sm4Key); + return cipher; + } + +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/utils/UserUtils.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/utils/UserUtils.java new file mode 100644 index 00000000..6cbe90c7 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/java/com/jiuyv/sptccc/agile/portal/utils/UserUtils.java @@ -0,0 +1,64 @@ +package com.jiuyv.sptccc.agile.portal.utils; + +import com.jiuyv.sptccc.agile.common.constant.FeignApiConstant; +import com.jiuyv.sptccc.agile.common.enums.DataStatusEnum; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.common.utils.ServletUtils; +import com.jiuyv.sptccc.agile.common.utils.StringUtil; +import com.jiuyv.sptccc.agile.portal.domain.BaseEntity; + +import javax.servlet.http.HttpServletRequest; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; + +/** + * 获取网关传过来的用户 + * + * + */ +public class UserUtils { + + /** + * 用户ID + */ + public static String getUserId() { + HttpServletRequest request = ServletUtils.getRequest(); + String userId = request.getHeader(FeignApiConstant.USER_ID); + if (userId == null) { + throw new ServiceException("用户信息获取失败"); + } + return userId; + } + + /** + * 获取用户账户 + **/ + public static String getUserName() { + HttpServletRequest request = ServletUtils.getRequest(); + String userName = request.getHeader(FeignApiConstant.USER_NAME); + try { + return userName == null ? "" : URLDecoder.decode(userName, "UTF-8"); + } catch (UnsupportedEncodingException e) { + return ""; + } + } + + public static void createBaseEntity(BaseEntity entity) { + String userId = getUserId(); + String userName = getUserName(); + entity.setCreateBy(userId); + entity.setCreateByName(userName); + entity.setUpdateBy(userId); + entity.setUpdateByName(userName); + entity.setRecToken(StringUtil.getRecToken()); + entity.setDataStatus(DataStatusEnum.NORMAL.getCode()); + } + + public static void updateBaseEntity(BaseEntity entity) { + entity.setUpdateBy(getUserId()); + entity.setUpdateByName(getUserName()); + entity.setRecToken(StringUtil.getRecToken()); + } + + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/banner.txt b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/banner.txt new file mode 100644 index 00000000..3b5fdcc1 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/banner.txt @@ -0,0 +1,6 @@ +Application Version: ${conosle.version} +Spring Boot Version: ${spring-boot.version} +//////////////////////////////////////////////////////////////////// +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // +// 永不宕机 永无BUG // +//////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/bootstrap.yml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/bootstrap.yml new file mode 100644 index 00000000..820ded5c --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/bootstrap.yml @@ -0,0 +1,23 @@ +spring: + application: + name: portal-service + cloud: + config: + discovery: + service-id: CONFIG-SERVICE #告诉当前客户端 统一配置中心的服务端服务id + enabled: true #开启客户端,根据服务id到注册中心获取配置信息 + label: # 指定分支 + name: ${spring.application.name} # 指定应用名称 + profile: dev # 指定激活环境 + + +# 配置eureka客户端信息 +eureka: + instance: + prefer-ip-address: true + instance-id: ${spring.cloud.client.ip-address}:${server.port} + client: + register-with-eureka: true + fetchRegistry: true + service-url: + defaultZone: http://172.16.12.104:8761/eureka/ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/logback-spring.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/logback-spring.xml new file mode 100644 index 00000000..aa1b950d --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/logback-spring.xml @@ -0,0 +1,96 @@ + + + + + + + + + + System.out + + %d{HH:mm:ss.SSS} %X{spanId:-} %X{traceId:-} [%thread] %-5level %logger{36} - %msg%n + UTF-8 + + + + + ${LOG_HOME}/${APP_NAME}.log + + + ${LOG_HOME}/${APP_NAME}.log.%d{yyyy-MM-dd}.%i.log.zip + + + 100MB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} %X{traceId:-} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + ${LOG_HOME}/${APP_NAME}.log.%d{yyyy-MM-dd}.%i.log + 7 + + + 100MB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} %X{traceId:-} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + ${JSON_LOG_HOME}/${APP_NAME}.json.%d{yyyy-MM-dd}.%i.log + 7 + + + 100MB + + + + + + + { + "timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}", + "severity": "%level", + "service": "${APP_NAME:-}", + "trace": "%X{traceId:-}", + "span": "%X{spanId:-}", + "parent": "%X{X-B3-ParentSpanId:-}", + "exportable": "%X{X-Span-Export:-}", + "pid": "${PID:-}", + "thread": "%thread", + "class": "%logger{40}", + "rest": "%message" + } + + + + + + + + System.err + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerApplyInfoMapper.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerApplyInfoMapper.xml new file mode 100644 index 00000000..9dc6ac91 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerApplyInfoMapper.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select apply_id, + version_num, + rec_token, + docker_server_id, + apply_user_id, + apply_user_name, + apply_desc, + lab_title, + service_type, + docker_image_name, + usage_time, + usage_time_unit, + start_date, + end_date, + delay_times, + cpu_limits, + cpu_seq, + memory_limits, + disc_limits, + remarks, + order_num, + review_status, + review_desc, + release_flag, + bus_status, + data_status, + create_by, + create_by_name, + create_time, + update_by, + update_by_name, + update_time, + rsv1, + rsv2, + rsv3 + from tbl_docker_apply_info + + + + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerApplyLibMapper.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerApplyLibMapper.xml new file mode 100644 index 00000000..9f0a0053 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerApplyLibMapper.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select apply_lib_id, + version_num, + rec_token, + apply_id, + lib_type, + lib_desc, + file_id, + data_source_type, + order_num, + review_status, + review_desc, + bus_status, + data_status, + create_by, + create_by_name, + create_time, + update_by, + update_by_name, + update_time, + rsv1, + rsv2, + rsv3 + from tbl_docker_apply_lib + + + + + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerApplyReviewDtlMapper.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerApplyReviewDtlMapper.xml new file mode 100644 index 00000000..32b7073e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerApplyReviewDtlMapper.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + review_dtl_id,version_num,rec_token, + review_id,lib_type,lib_desc, + file_id,data_source_type,order_num, + review_status,review_desc,data_status, + create_by,create_by_name,create_time, + update_by,update_by_name,update_time, + rsv1,rsv2,rsv3 + + + + + + insert into tbl_docker_apply_review_dtl + + review_dtl_id, + version_num, + rec_token, + review_id, + lib_type, + lib_desc, + file_id, + data_source_type, + order_num, + review_status, + review_desc, + data_status, + create_by, + create_by_name, + create_time, + update_by, + update_by_name, + update_time + + + #{reviewDtlId,jdbcType=BIGINT}, + #{versionNum,jdbcType=OTHER}, + #{recToken,jdbcType=VARCHAR}, + #{reviewId,jdbcType=BIGINT}, + #{libType,jdbcType=VARCHAR}, + #{libDesc,jdbcType=VARCHAR}, + #{fileId,jdbcType=BIGINT}, + #{dataSourceType,jdbcType=VARCHAR}, + #{orderNum,jdbcType=OTHER}, + #{reviewStatus,jdbcType=VARCHAR}, + #{reviewDesc,jdbcType=VARCHAR}, + #{dataStatus,jdbcType=VARCHAR}, + #{createBy,jdbcType=VARCHAR}, + #{createByName,jdbcType=VARCHAR}, + CURRENT_TIMESTAMP, + #{updateBy,jdbcType=VARCHAR}, + #{updateByName,jdbcType=VARCHAR}, + CURRENT_TIMESTAMP + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerApplyReviewMapper.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerApplyReviewMapper.xml new file mode 100644 index 00000000..6bff0d46 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerApplyReviewMapper.xml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + review_id,version_num,rec_token, + apply_remark,apply_id,lab_title, + apply_user_id,apply_user_name,remarks, + order_num,review_status,review_desc, + data_status,create_by,create_by_name, + create_time,update_by,update_by_name, + update_time,rsv1,rsv2, + rsv3 + + + + + + + + insert into tbl_docker_apply_review + + review_id, + version_num, + rec_token, + apply_remark, + apply_id, + lab_title, + apply_user_id, + apply_user_name, + remarks, + order_num, + review_status, + review_desc, + data_status, + create_by, + create_by_name, + create_time, + update_by, + update_by_name, + update_time + + + (TO_CHAR(current_date, 'YYYYMMDD') || LPAD(nextval('seq_docker_apply_review')::TEXT, 8, '0'))::BIGINT, + #{versionNum}, + #{recToken}, + #{applyRemark}, + #{applyId}, + #{labTitle}, + #{applyUserId}, + #{applyUserName}, + #{remarks}, + #{orderNum}, + #{reviewStatus}, + #{reviewDesc}, + #{dataStatus}, + #{createBy}, + #{createByName}, + CURRENT_TIMESTAMP, + #{updateBy}, + #{updateByName}, + CURRENT_TIMESTAMP + + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerClientInfoMapper.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerClientInfoMapper.xml new file mode 100644 index 00000000..a4056d23 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerClientInfoMapper.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + docker_server_id,version_num,rec_token, + docker_server_name,docker_server_ip,docker_server_port, + docker_server_username,docker_server_password,cpu_limits, + memory_limits,disc_limits,used_cpu_limits, + used_memory_limits,used_disc_limits,remarks, + order_num,data_status,create_by, + create_by_name,create_time,update_by, + update_by_name,update_time + + + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerDownloadApplyMapper.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerDownloadApplyMapper.xml new file mode 100644 index 00000000..fe591237 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerDownloadApplyMapper.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select + download_apply_id,version_num,rec_token, + apply_id,lab_title,apply_user_id, + apply_user_name,apply_desc,file_name, + file_size,file_last_time,remarks, + order_num,review_status,review_desc, + bus_status,data_status,create_by, + create_by_name,create_time,update_by, + update_by_name,update_time,rsv1, + rsv2,rsv3 + from tbl_docker_download_apply + + + insert into tbl_docker_download_apply + + download_apply_id, + version_num, + rec_token, + apply_id, + lab_title, + apply_user_id, + apply_user_name, + apply_desc, + file_name, + file_size, + file_last_time, + remarks, + order_num, + review_status, + review_desc, + bus_status, + data_status, + create_by, + create_by_name, + create_time, + update_by, + update_by_name, + update_time + + + (TO_CHAR(current_date, 'YYYYMMDD') || LPAD(nextval('seq_docker_download_apply')::TEXT, 8, '0'))::BIGINT, + #{versionNum}, + #{recToken}, + #{applyId}, + #{labTitle}, + #{applyUserId}, + #{applyUserName}, + #{applyDesc}, + #{fileName}, + #{fileSize}, + #{fileLastTime}, + #{remarks}, + #{orderNum}, + #{reviewStatus}, + #{reviewDesc}, + #{busStatus}, + #{dataStatus}, + #{createBy}, + #{createByName}, + CURRENT_TIMESTAMP, + #{updateBy}, + #{updateByName}, + CURRENT_TIMESTAMP + + + + + + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerPortainerUserMapper.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerPortainerUserMapper.xml new file mode 100644 index 00000000..b57e52e0 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerPortainerUserMapper.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + docker_account_id,version_num,rec_token, + api_http,api_key,admin_username, + admin_password,remarks,order_num, + data_status,create_by,create_by_name, + create_time,update_by,update_by_name, + update_time + + + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerWithUserAccountMapper.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerWithUserAccountMapper.xml new file mode 100644 index 00000000..fe24770c --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerWithUserAccountMapper.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select account_id, + version_num, + rec_token, + apply_id, + service_type, + login_url, + login_username, + login_password, + docker_port_id, + remarks, + order_num, + bus_status, + data_status, + create_by, + create_by_name, + create_time, + update_by, + update_by_name, + update_time, + rsv1, + rsv2, + rsv3 + from tbl_docker_with_user_account + + + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerWithUserMapper.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerWithUserMapper.xml new file mode 100644 index 00000000..55bcd817 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/docker/DockerWithUserMapper.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select + apply_id,version_num,rec_token, + lab_title,apply_user_id,apply_user_name, + docker_container_id,docker_server_id,remarks, + order_num,bus_status,data_status, + create_by,create_by_name,create_time, + update_by,update_by_name,update_time, + rsv1,rsv2,rsv3 + from tbl_docker_with_user + + + + update tbl_docker_with_user + + version_num = version_num+1, + rec_token = #{recToken}, + lab_title = #{labTitle}, + apply_user_id = #{applyUserId}, + apply_user_name = #{applyUserName}, + docker_container_id = #{dockerContainerId}, + docker_server_id = #{dockerServerId}, + remarks = #{remarks}, + order_num = #{orderNum}, + bus_status = #{busStatus}, + data_status = #{dataStatus}, + update_by = #{updateBy}, + update_by_name = #{updateByName}, + update_time = CURRENT_TIMESTAMP + + where apply_id = #{applyId} and rec_token = #{recTokenC} + + + + + + + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/file/PublicFilesMapper.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/file/PublicFilesMapper.xml new file mode 100644 index 00000000..3796c75e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/file/PublicFilesMapper.xml @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select file_id, + version_num, + rec_token, + uuid, + file_name, + file_extension, + file_size, + file_category_path, + file_type, + file_source_type, + sys_type, + remarks, + file_busi_id, + file_busi_id2, + file_busi_id3, + upload_size, + data_status, + create_by, + create_by_name, + create_time, + update_by, + update_by_name, + update_time + from tbl_public_files + + + + + + + + + + + + update tbl_public_files + set data_status ='99', + update_by = #{userId}, + update_by_name = #{userName}, + update_time = CURRENT_TIMESTAMP + where file_id = #{fileId} + and create_by = #{userId} + + + + insert into tbl_public_files + + file_id, + version_num, + rec_token, + uuid, + file_name, + file_extension, + file_size, + file_category_path, + file_type, + file_source_type, + sys_type, + remarks, + file_busi_id, + file_busi_id2, + file_busi_id3, + upload_size, + data_status, + create_by, + create_by_name, + create_time, + update_by, + update_by_name, + update_time + + + #{fileId,jdbcType=BIGINT}, + #{versionNum,jdbcType=OTHER}, + #{recToken,jdbcType=VARCHAR}, + #{uuid,jdbcType=VARCHAR}, + #{fileName,jdbcType=VARCHAR}, + #{fileExtension,jdbcType=VARCHAR}, + #{fileSize,jdbcType=VARCHAR}, + #{fileCategoryPath,jdbcType=VARCHAR}, + #{fileType,jdbcType=VARCHAR}, + #{fileSourceType,jdbcType=VARCHAR}, + #{sysType,jdbcType=VARCHAR}, + #{remarks,jdbcType=VARCHAR}, + #{fileBusiId,jdbcType=VARCHAR}, + #{fileBusiId2,jdbcType=VARCHAR}, + #{fileBusiId3,jdbcType=VARCHAR}, + #{uploadSize,jdbcType=VARCHAR}, + #{dataStatus,jdbcType=VARCHAR}, + #{createBy,jdbcType=VARCHAR}, + #{createByName,jdbcType=VARCHAR}, + CURRENT_TIMESTAMP, + #{updateBy,jdbcType=VARCHAR}, + #{updateByName,jdbcType=VARCHAR}, + CURRENT_TIMESTAMP + + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/portal/PortalContentMapper.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/portal/PortalContentMapper.xml new file mode 100644 index 00000000..9cc4d718 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/portal/PortalContentMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select content_id, + version_num, + rec_token, + content_title, + content_text, + content_type, + show_type, + remarks, + bus_status, + data_status, + create_by, + create_by_name, + create_time, + update_by, + update_by_name, + update_time, + sort, + show_index, + subtitle, + img_url + from tbl_portal_content + + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/portal/TblPortalLogininforMapper.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/portal/TblPortalLogininforMapper.xml new file mode 100644 index 00000000..bac04038 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/portal/TblPortalLogininforMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + insert into tbl_portal_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) + values (#{userName}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, now()) + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/portal/TblPortalMsgMapper.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/portal/TblPortalMsgMapper.xml new file mode 100644 index 00000000..53113763 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/portal/TblPortalMsgMapper.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + select msg_id, + user_id, + msg_title, + msg_text, + msg_type, + msg_status, + data_status, + create_by, + create_by_name, + create_time, + update_by, + update_by_name, + update_time + from tbl_portal_user_msg + + + + + + + + + update tbl_portal_user_msg + set msg_status = '1', + update_by = #{userId}, + update_by_name = #{userName}, + update_time = CURRENT_TIMESTAMP + where user_id = #{userId} + and msg_id = #{msgId} + + + + update tbl_portal_user_msg + set msg_status = '1', + update_by = #{userId}, + update_by_name = #{userName}, + update_time = CURRENT_TIMESTAMP + where user_id = #{userId} + and msg_status = '0' + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/portal/TblPortalOperLogMapper.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/portal/TblPortalOperLogMapper.xml new file mode 100644 index 00000000..32c14884 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/portal/TblPortalOperLogMapper.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + insert into tbl_portal_oper_log(title, business_type, method, request_method, operator_type, oper_name, + dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, + error_msg, oper_time) + values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, + #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, now()) + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/portal/TblPortalUserMapper.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/portal/TblPortalUserMapper.xml new file mode 100644 index 00000000..01341785 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mapper/portal/TblPortalUserMapper.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select u.user_id, + u.version_num, + u.rec_token, + u.dept_id, + u.user_name, + u.nick_name, + u.email, + u.avatar, + u.phonenumber, + u.password, + u.sex, + u.status, + u.del_flag, + u.login_ip, + u.login_date, + u.create_by, + u.create_time, + u.remark, + u.last_login_error_time, + u.login_error_count, + u.is_locked, + u.enterprise_name, + u.industry_category, + u.social_credit_code, + u.enterprise_industry, + u.enterprise_address, + u.first_flag, + u.pwd_update_time + from tbl_portal_user u + + + + + + update tbl_portal_user + + + + version_num = version_num+1, + + rec_token = #{recToken}, + dept_id = #{deptId}, + user_name = #{userName}, + nick_name = #{nickName}, + email = #{email}, + phonenumber = #{phonenumber}, + sex = #{sex}, + avatar = #{avatar}, + password = #{password}, + enterprise_name = #{enterpriseName}, + industry_category = #{industryCategory}, + social_credit_code = #{socialCreditCode}, + + enterprise_industry = + #{enterpriseIndustry}, + + enterprise_address = + #{enterpriseAddress}, + + status = #{status}, + login_ip = #{loginIp}, + login_date = #{loginDate}, + update_by = #{updateBy}, + last_login_error_time = #{lastLoginErrorTime}, + login_error_count = #{loginErrorCount}, + is_locked = #{isLocked}, + remark = #{remark}, + update_time = now() + first_flag = #{firstFlag}, + + where user_id = #{userId} + AND version_num = #{params.versionNum} + AND rec_token = #{params.recToken} + + + + update tbl_portal_user + set version_num = version_num + 1, + password= #{password}, + first_flag='1', + update_time = now(), + pwd_update_time = now() + where user_id = #{userId} + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mybatis/mybatis-config.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mybatis/mybatis-config.xml new file mode 100644 index 00000000..54dacde0 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/main/resources/mybatis/mybatis-config.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/PortalConsoleApplicationTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/PortalConsoleApplicationTest.java new file mode 100644 index 00000000..35e07402 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/PortalConsoleApplicationTest.java @@ -0,0 +1,19 @@ +package com.jiuyv.sptccc.agile; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@SpringBootTest +class PortalConsoleApplicationTest { + + @Autowired + private PortalConsoleApplication portalConsoleApplication; + + @Test + void testConfig() { + assertNotNull(portalConsoleApplication); + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/domain/TblDomainTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/domain/TblDomainTest.java new file mode 100644 index 00000000..0580381b --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/domain/TblDomainTest.java @@ -0,0 +1,57 @@ +package com.jiuyv.sptccc.agile.portal.domain; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.platform.commons.util.ReflectionUtils; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; + +/** + * Domain测试类 + * + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class TblDomainTest { + + @Test + void domainTest() { + String packageName = "com.jiuyv.sptccc.agile.portal.domain"; + try { + invoke(packageName); + } catch (Exception e) { + Assertions.fail(); + } + } + + private void invoke(String packageName) throws InstantiationException, IllegalAccessException, InvocationTargetException { + List> classList = ReflectionUtils.findAllClassesInPackage(packageName, aClass -> true, s -> !s.endsWith("Test")); + + for (Class aClass : classList) { + Method[] methods = aClass.getDeclaredMethods(); + Object o = aClass.newInstance(); + for (Method method : methods) { + String name = method.getName(); + if (name.startsWith("get")) { + method.invoke(o); + } else if (name.startsWith("set")) { + Class[] parameterTypes = method.getParameterTypes(); + Object[] objects = Arrays.stream(parameterTypes).map(p -> { + try { + return p.newInstance(); + } catch (ReflectiveOperationException e) { + return null; + } + }).toArray(); + method.invoke(o, objects); + } + } + } + } + +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/dto/PortalDTOTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/dto/PortalDTOTest.java new file mode 100644 index 00000000..061f09d9 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/dto/PortalDTOTest.java @@ -0,0 +1,58 @@ +package com.jiuyv.sptccc.agile.portal.dto; + + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.platform.commons.util.ReflectionUtils; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; + +/** + * DTO测试类 + * + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class PortalDTOTest { + + @Test + void dtoTest() { + String packageName = "com.jiuyv.sptccc.agile.portal.dto"; + try { + invoke(packageName); + } catch (Exception e) { + Assertions.fail(); + } + } + + private void invoke(String packageName) throws InstantiationException, IllegalAccessException, InvocationTargetException { + List> classList = ReflectionUtils.findAllClassesInPackage(packageName, aClass -> true, s -> !s.endsWith("Test")); + + for (Class aClass : classList) { + Method[] methods = aClass.getDeclaredMethods(); + Object o = aClass.newInstance(); + for (Method method : methods) { + String name = method.getName(); + if (name.startsWith("get")) { + method.invoke(o); + } else if (name.startsWith("set")) { + Class[] parameterTypes = method.getParameterTypes(); + Object[] objects = Arrays.stream(parameterTypes).map(p -> { + try { + return p.newInstance(); + } catch (ReflectiveOperationException e) { + return null; + } + }).toArray(); + method.invoke(o, objects); + } + } + } + } + +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/BaseTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/BaseTest.java new file mode 100644 index 00000000..1aad066b --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/BaseTest.java @@ -0,0 +1,36 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.jiuyv.sptccc.agile.portal.utils.UserUtils; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.mockito.Mockito.when; + +/** + * 测试基类 + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +public abstract class BaseTest { + protected static final String userId = "1"; + protected static final String userName = "admin"; + private MockedStatic userUtilsMockedStatic; + + + @BeforeEach + void setUp() { + this.userUtilsMockedStatic = Mockito.mockStatic(UserUtils.class); + when(UserUtils.getUserId()).thenReturn(userId); + when(UserUtils.getUserName()).thenReturn(userName); + } + + @AfterEach + void tearDown() { + userUtilsMockedStatic.close(); + } + +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerApplyInfoServiceImplTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerApplyInfoServiceImplTest.java new file mode 100644 index 00000000..6c33d047 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerApplyInfoServiceImplTest.java @@ -0,0 +1,66 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.dto.DockerApplyReviewDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerApplyPageDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyReview; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyReviewDtl; +import com.jiuyv.sptccc.agile.portal.mapper.DockerApplyReviewDtlMapper; +import com.jiuyv.sptccc.agile.portal.mapper.DockerApplyReviewMapper; +import com.jiuyv.sptccc.agile.portal.mapper.PublicFilesMapper; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; + +import java.util.Collections; +import java.util.List; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +/** + * DockerApplyInfoService单元测试 + * @author ren_chao + */ +class DockerApplyInfoServiceImplTest extends BaseTest { + + @Spy + @InjectMocks + private DockerApplyInfoServiceImpl dockerApplyInfoService; + + @Mock + private DockerApplyReviewMapper dockerApplyReviewMapper; + @Mock + private DockerApplyReviewDtlMapper dockerApplyReviewDtlMapper; + @Mock + private PublicFilesMapper publicFilesMapper; + + @Test + void getPage() { + List list = Collections.emptyList(); + ReqDockerApplyPageDTO reqDTO = mock(ReqDockerApplyPageDTO.class); + when(dockerApplyReviewMapper.selectList(reqDTO)).thenReturn(list); + Assertions.assertEquals(list,dockerApplyInfoService.getPage(reqDTO)); + } + + @Test + void getInfo() { + Long reviewId = 1L; + try { + dockerApplyInfoService.getInfo(reviewId); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + + when(dockerApplyReviewMapper.selectOneById(reviewId, userId)).thenReturn(mock(TblDockerApplyReview.class)); + when(dockerApplyReviewDtlMapper.selectListByReviewId(reviewId)) + .thenReturn(Collections.singletonList(mock(TblDockerApplyReviewDtl.class))); + DockerApplyReviewDTO info = dockerApplyInfoService.getInfo(reviewId); + Assertions.assertEquals(1, info.getReviewDtlList().size()); + + + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerApplyLibServiceImplTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerApplyLibServiceImplTest.java new file mode 100644 index 00000000..5a66bfc6 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerApplyLibServiceImplTest.java @@ -0,0 +1,60 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.jiuyv.sptccc.agile.dto.DockerLibDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyLib; +import com.jiuyv.sptccc.agile.portal.domain.TblPublicFiles; +import com.jiuyv.sptccc.agile.portal.mapper.DockerApplyLibMapper; +import com.jiuyv.sptccc.agile.portal.mapper.PublicFilesMapper; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.ArrayList; +import java.util.List; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +/** + * DockerApplyLibService单元测试 + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class DockerApplyLibServiceImplTest { + + @Spy + @InjectMocks + private DockerApplyLibServiceImpl dockerApplyLibService; + + @Mock + private DockerApplyLibMapper dockerApplyLibMapper; + @Mock + private PublicFilesMapper publicFilesMapper; + + @Test + void getDockerLibList() { + Long applyId = 1L; + Long fileId = 1L; + List dockerApplyLibs = new ArrayList<>(); + when(dockerApplyLibMapper.selectListByApplyId(applyId)).thenReturn(dockerApplyLibs); + List dockerLibList = dockerApplyLibService.getDockerLibList(applyId); + Assertions.assertTrue(dockerLibList.isEmpty()); + + TblDockerApplyLib applyLib = mock(TblDockerApplyLib.class); + when(applyLib.getFileId()).thenReturn(fileId); + dockerApplyLibs.add(applyLib); + dockerApplyLibService.getDockerLibList(applyId); + + List publicFilesList = new ArrayList<>(); + TblPublicFiles publicFiles = mock(TblPublicFiles.class); + when(publicFiles.getFileId()).thenReturn(fileId); + publicFilesList.add(publicFiles); + when(publicFilesMapper.selectListByFileIds(any(), any())).thenReturn(publicFilesList); + dockerApplyLibService.getDockerLibList(applyId); + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerDownloadApplyServiceImplTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerDownloadApplyServiceImplTest.java new file mode 100644 index 00000000..4d829a8e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerDownloadApplyServiceImplTest.java @@ -0,0 +1,165 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.SftpATTRS; +import com.jcraft.jsch.SftpException; +import com.jiuyv.sptccc.agile.common.enums.DockerFileReviewStatus; +import com.jiuyv.sptccc.agile.common.enums.LabStatusEnum; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.dto.ReqDockerDownApplyPageDTO; +import com.jiuyv.sptccc.agile.framework.config.ConsoleProperties; +import com.jiuyv.sptccc.agile.framework.config.sftp.SftpPool; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerDownloadApply; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerWithUser; +import com.jiuyv.sptccc.agile.portal.mapper.DockerDownloadApplyMapper; +import com.jiuyv.sptccc.agile.portal.service.IDockerWithUserService; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; + +import javax.servlet.http.HttpServletResponse; +import java.util.Collections; +import java.util.List; +import java.util.Vector; + +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +/** + * DockerDownloadApplyService单元测试 + * @author ren_chao + */ +class DockerDownloadApplyServiceImplTest extends BaseTest { + + @Spy + @InjectMocks + private DockerDownloadApplyServiceImpl dockerDownloadApplyService; + + @Mock + private DockerDownloadApplyMapper dockerDownloadApplyMapper; + @Mock + private IDockerWithUserService dockerWithUserService; + @Mock + private SftpPool sftpPool; + @Mock + private ConsoleProperties consoleProperties; + + @Test + void list() throws SftpException { + Long applyId = 1L; + TblDockerDownloadApply apply = new TblDockerDownloadApply(); + apply.setApplyId(applyId); + List list = Collections.singletonList(apply); + ReqDockerDownApplyPageDTO reqDTO = new ReqDockerDownApplyPageDTO(); + + when(dockerDownloadApplyMapper.selectList(reqDTO)).thenReturn(list); + ChannelSftp channelSftp = mock(ChannelSftp.class); + when(channelSftp.stat(any())).thenThrow(SftpException.class); + when(sftpPool.get(0L)).thenReturn(channelSftp); + when(dockerWithUserService.getSimpleInfo(applyId)) + .thenThrow(ServiceException.class) + .thenReturn(mock(TblDockerWithUser.class)); + List downloadApplyList = dockerDownloadApplyService.list(reqDTO); + TblDockerDownloadApply downloadApply = downloadApplyList.get(0); + Assertions.assertEquals(LabStatusEnum.UNLOADED.getCode(), downloadApply.getBusStatus()); + + Assertions.assertEquals(list, dockerDownloadApplyService.list(reqDTO)); + + + + } + + @Test + void apply() throws SftpException { + ChannelSftp channelSftp = mock(ChannelSftp.class); + when(sftpPool.get(0L)).thenReturn(channelSftp); + when(dockerWithUserService.getSimpleInfo(0L)).thenReturn(mock(TblDockerWithUser.class)); + try { + dockerDownloadApplyService.apply(mock(TblDockerWithUser.class), "", ""); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + + SftpATTRS attrs = mock(SftpATTRS.class); + when(channelSftp.stat(anyString())).thenReturn(attrs); + + try { + dockerDownloadApplyService.apply(mock(TblDockerWithUser.class), "", ""); + } catch (Exception e) { + Assertions.fail(); + } + } + + @Test + void downloadFile() { + try { + doNothing().when(dockerDownloadApplyService).downloadException(any(), any()); + + Long downloadApplyId = 1L; + HttpServletResponse response = mock(HttpServletResponse.class); + dockerDownloadApplyService.downloadFile(downloadApplyId, false, response); + + TblDockerDownloadApply downloadApply = mock(TblDockerDownloadApply.class); + when(dockerDownloadApplyMapper.selectByDownloadApplyId(downloadApplyId, userId)).thenReturn(downloadApply); + dockerDownloadApplyService.downloadFile(downloadApplyId, false, response); + + when(downloadApply.getReviewStatus()).thenReturn(DockerFileReviewStatus.PASS.getCode()); + when(dockerWithUserService.getSimpleInfo(0L)).thenReturn(mock(TblDockerWithUser.class)); + ChannelSftp channelSftp = mock(ChannelSftp.class); + when(sftpPool.get(0L)).thenReturn(channelSftp); + dockerDownloadApplyService.downloadFile(downloadApplyId, false, response); + + Integer time = 1; + SftpATTRS attrs = mock(SftpATTRS.class); + when(channelSftp.stat(anyString())).thenReturn(attrs); + when(attrs.getMTime()).thenReturn(time); + dockerDownloadApplyService.downloadFile(downloadApplyId, false, response); + + when(downloadApply.getFileLastTime()).thenReturn(time.toString()); + when(attrs.getSize()).thenReturn(1L); + dockerDownloadApplyService.downloadFile(downloadApplyId, false, response); + + when(attrs.getSize()).thenReturn(0L); + when(downloadApply.getFileName()).thenReturn("filename"); + doNothing().when(dockerDownloadApplyService).getFileStream(any(), any(), any(), any()); + dockerDownloadApplyService.downloadFile(downloadApplyId, false, response); + + doThrow(SftpException.class).when(dockerDownloadApplyService).getFileStream(any(), any(), any(), any()); + dockerDownloadApplyService.downloadFile(downloadApplyId, false, response); + + doThrow(ServiceException.class).when(dockerDownloadApplyService).getFileStream(any(), any(), any(), any()); + dockerDownloadApplyService.downloadFile(downloadApplyId, false, response); + dockerDownloadApplyService.downloadFile(downloadApplyId, true, response); + } catch (Exception e) { + Assertions.fail(); + } + + } + + @Test + void dockerFileList() { + try { + Long applyId = 0L; + when(dockerWithUserService.getSimpleInfo(applyId)).thenReturn(mock(TblDockerWithUser.class)); + ChannelSftp channelSftp = mock(ChannelSftp.class); + when(sftpPool.get(0L)).thenReturn(channelSftp); + Vector entries = new Vector<>(); + ChannelSftp.LsEntry entry = mock(ChannelSftp.LsEntry.class); + when(entry.getFilename()).thenReturn("a"); + when(entry.getAttrs()).thenReturn(mock(SftpATTRS.class)); + entries.add(entry); + when(channelSftp.ls(any())).thenReturn(entries); + dockerDownloadApplyService.dockerFileList(applyId); + + when(channelSftp.ls(any())).thenThrow(SftpException.class); + dockerDownloadApplyService.dockerFileList(applyId); + } catch (Exception e) { + Assertions.fail(); + } + + } + +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerWithUserServiceImplTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerWithUserServiceImplTest.java new file mode 100644 index 00000000..b6f5e248 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/DockerWithUserServiceImplTest.java @@ -0,0 +1,245 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.github.pagehelper.Page; +import com.jiuyv.sptccc.agile.common.constant.ServiceConstant; +import com.jiuyv.sptccc.agile.common.enums.DataStatusEnum; +import com.jiuyv.sptccc.agile.common.enums.LabStatusEnum; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.dto.DockerFileDTO; +import com.jiuyv.sptccc.agile.dto.DockerLibDTO; +import com.jiuyv.sptccc.agile.dto.DockerWithUserDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerWithUserDTO; +import com.jiuyv.sptccc.agile.dto.ReqDockerWithUserPageDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyInfo; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerPortainerUser; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerWithUser; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerWithUserAccount; +import com.jiuyv.sptccc.agile.portal.domain.TblPublicFiles; +import com.jiuyv.sptccc.agile.portal.mapper.DockerApplyInfoMapper; +import com.jiuyv.sptccc.agile.portal.mapper.DockerApplyReviewDtlMapper; +import com.jiuyv.sptccc.agile.portal.mapper.DockerApplyReviewMapper; +import com.jiuyv.sptccc.agile.portal.mapper.DockerPortainerUserMapper; +import com.jiuyv.sptccc.agile.portal.mapper.DockerWithUserAccountMapper; +import com.jiuyv.sptccc.agile.portal.mapper.DockerWithUserMapper; +import com.jiuyv.sptccc.agile.portal.mapper.PublicFilesMapper; +import com.jiuyv.sptccc.agile.portal.service.IDockerApplyLibService; +import com.jiuyv.sptccc.agile.portal.service.IDockerDownloadApplyService; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + + +/** + * DockerWithUserService单元测试 + * @author ren_chao + */ +class DockerWithUserServiceImplTest extends BaseTest { + + private static final Long applyId = 1L; + + @Spy + @InjectMocks + DockerWithUserServiceImpl dockerWithUserService; + + @Mock + private DockerWithUserMapper dockerWithUserMapper; + @Mock + private DockerApplyReviewMapper dockerApplyReviewMapper; + @Mock + private DockerApplyReviewDtlMapper dockerApplyReviewDtlMapper; + @Mock + private DockerApplyInfoMapper dockerApplyInfoMapper; + @Mock + private DockerWithUserAccountMapper dockerWithUserAccountMapper; + @Mock + private DockerPortainerUserMapper dockerPortainerUserMapper; + @Mock + private IDockerApplyLibService dockerApplyLibService; + @Mock + private PublicFilesMapper publicFilesMapper; + @Mock + private IDockerDownloadApplyService dockerDownloadApplyService; + @Mock + private RestTemplateBuilder restTemplateBuilder; + + @Test + @SuppressWarnings("unchecked") + void list() { + ReqDockerWithUserPageDTO reqDTO = new ReqDockerWithUserPageDTO(); + List list = mock(List.class); + Page page = mock(Page.class); + when(dockerWithUserMapper.selectList(reqDTO)).thenReturn(list).thenReturn(page); + List listN = dockerWithUserService.list(reqDTO); + Assertions.assertFalse(listN instanceof Page); + List pageN = dockerWithUserService.list(reqDTO); + Assertions.assertTrue(pageN instanceof Page); + } + + @Test + void getInfo() { + TblDockerWithUser docker = new TblDockerWithUser(); + docker.setApplyId(applyId); + doReturn(docker).when(dockerWithUserService).getSimpleInfo(applyId); + when(dockerApplyInfoMapper.selectInfoByApplyId(applyId, userId)).thenReturn(new TblDockerApplyInfo()); + when(dockerWithUserAccountMapper.selectOneByApplyId(applyId)).thenReturn(new TblDockerWithUserAccount()); + List dockerLibList = new ArrayList<>(); + DockerLibDTO dockerLibDTO1 = new DockerLibDTO(); + dockerLibDTO1.setDataStatus(DataStatusEnum.NORMAL.getCode()); + dockerLibDTO1.setSysType(ServiceConstant.SYS_TYPE); + dockerLibList.add(dockerLibDTO1); + DockerLibDTO dockerLibDTO2 = new DockerLibDTO(); + dockerLibDTO2.setDataStatus(DataStatusEnum.NORMAL.getCode()); + dockerLibDTO2.setSysType(""); + dockerLibList.add(dockerLibDTO2); + when(dockerApplyLibService.getDockerLibList(applyId)).thenReturn(dockerLibList); + List dockerFileList = Collections.emptyList(); + DockerWithUserDTO info = dockerWithUserService.getInfo(applyId); + Assertions.assertEquals(1, info.getLibList().size()); + Assertions.assertEquals(1, info.getApplyLibList().size()); + Assertions.assertEquals(dockerFileList, info.getDockerFileList()); + } + + @Test + void injectApply() { + ReqDockerWithUserDTO reqDTO = mock(ReqDockerWithUserDTO.class); + when(reqDTO.getApplyId()).thenReturn(applyId); + TblDockerWithUser docker = new TblDockerWithUser(); + docker.setApplyId(applyId); + doReturn(docker).when(dockerWithUserService).getSimpleInfo(applyId); + try { + dockerWithUserService.injectApply(reqDTO); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + + List fileIds = Collections.singletonList(1L); + when(reqDTO.getFileIds()).thenReturn(fileIds); + List fileList = new ArrayList<>(); + when(publicFilesMapper.selectListByFileIds(fileIds, userId)).thenReturn(fileList); + try { + dockerWithUserService.injectApply(reqDTO); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + fileList.add(mock(TblPublicFiles.class)); + try { + dockerWithUserService.injectApply(reqDTO); + } catch (Exception e) { + Assertions.fail(); + } + } + + @Test + @SuppressWarnings("unchecked") + void restart() { + ReqDockerWithUserDTO reqDTO = mock(ReqDockerWithUserDTO.class); + when(reqDTO.getApplyId()).thenReturn(applyId); + + TblDockerWithUser docker = mock(TblDockerWithUser.class); + when(docker.getApplyId()).thenReturn(applyId); + when(docker.getBusStatus()).thenReturn(LabStatusEnum.DEFAULT.getCode()) + .thenReturn(LabStatusEnum.IN_USE.getCode()); + doReturn(docker).when(dockerWithUserService).getSimpleInfo(applyId); + try { + dockerWithUserService.restart(reqDTO); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + try { + dockerWithUserService.restart(reqDTO); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + + when(dockerWithUserMapper.update(any(TblDockerWithUser.class))).thenReturn(1); + try { + dockerWithUserService.restart(reqDTO); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + + when(dockerPortainerUserMapper.selectOne()).thenReturn(new TblDockerPortainerUser()); + RestTemplate restTemplate = mock(RestTemplate.class); + ResponseEntity response = mock(ResponseEntity.class); + when(response.getStatusCode()) + .thenReturn(HttpStatus.NO_CONTENT) + .thenReturn(HttpStatus.FOUND); + when(restTemplate.postForEntity(anyString(), any(HttpEntity.class), eq(String.class))) + .thenThrow(RestClientException.class) + .thenReturn(response); + ReflectionTestUtils.setField(dockerWithUserService, "restTemplate", restTemplate); + try { + dockerWithUserService.restart(reqDTO); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + try { + dockerWithUserService.restart(reqDTO); + } catch (Exception e) { + Assertions.fail(); + } + try { + dockerWithUserService.restart(reqDTO); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + + } + + @Test + void fileList() { + doReturn(new TblDockerWithUser()).when(dockerWithUserService).getSimpleInfo(applyId); + List list = Collections.emptyList(); + when(dockerDownloadApplyService.dockerFileList(applyId)).thenReturn(list); + Assertions.assertEquals(list, dockerWithUserService.fileList(applyId)); + } + + @Test + void applyDown() { + try { + doReturn(new TblDockerWithUser()).when(dockerWithUserService).getSimpleInfo(applyId); + dockerWithUserService.applyDown(applyId, "", ""); + } catch (Exception e) { + Assertions.fail(); + } + } + + @Test + void getSimpleInfo() { + TblDockerWithUser docker = new TblDockerWithUser(); + when(dockerWithUserMapper.selectByApplyId(applyId, userId)) + .thenReturn(null) + .thenReturn(docker); + try { + dockerWithUserService.getSimpleInfo(applyId); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + + Assertions.assertEquals(docker, dockerWithUserService.getSimpleInfo(applyId)); + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/FileServiceImplTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/FileServiceImplTest.java new file mode 100644 index 00000000..18ec8179 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/FileServiceImplTest.java @@ -0,0 +1,232 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.jcraft.jsch.ChannelSftp; +import com.jcraft.jsch.SftpATTRS; +import com.jcraft.jsch.SftpException; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.framework.config.ConsoleProperties; +import com.jiuyv.sptccc.agile.framework.config.sftp.SftpPool; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerApplyLib; +import com.jiuyv.sptccc.agile.portal.domain.TblDockerWithUser; +import com.jiuyv.sptccc.agile.portal.domain.TblPublicFiles; +import com.jiuyv.sptccc.agile.portal.mapper.DockerApplyLibMapper; +import com.jiuyv.sptccc.agile.portal.mapper.DockerWithUserMapper; +import com.jiuyv.sptccc.agile.portal.mapper.PublicFilesMapper; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.Spy; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; +import java.util.Vector; + +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +/** + * FileService单元测试 + * @author ren_chao + */ +class FileServiceImplTest extends BaseTest { + + @Spy + @InjectMocks + private FileServiceImpl fileService; + + @Mock + private SftpPool sftpPool; + + @Mock + private PublicFilesMapper publicFilesMapper; + + @Mock + private DockerApplyLibMapper dockerApplyLibMapper; + + @Mock + private DockerWithUserMapper dockerWithUserMapper; + + @Mock + private ConsoleProperties consoleProperties; + + @Test + void saveFile() throws IOException { + when(sftpPool.getDefault()).thenReturn(Mockito.mock(ChannelSftp.class)); + MultipartFile file = Mockito.mock(MultipartFile.class); + when(file.getOriginalFilename()).thenReturn("data.zip"); + String fileType = "pythonError"; + String remarks = ""; + try { + fileService.saveFile(file, fileType, remarks); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + fileType = "python"; + when(publicFilesMapper.insert(any(TblPublicFiles.class))).thenReturn(1); + fileService.saveFile(file, fileType, remarks); + + when(file.getInputStream()).thenThrow(IOException.class); + try { + fileService.saveFile(file, fileType, remarks); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + + + } + + @Test + void getList() { + TblPublicFiles publicFiles = new TblPublicFiles(); + ArrayList filesArrayList = new ArrayList<>(); + when(publicFilesMapper.selectList(publicFiles)).thenReturn(filesArrayList); + Assertions.assertEquals(fileService.getList(publicFiles), filesArrayList); + + } + + @Test + void deleteByFileId() { + when(sftpPool.getDefault()).thenReturn(Mockito.mock(ChannelSftp.class)); + TblPublicFiles publicFiles = new TblPublicFiles(); + Long fileId = 1L; + when(publicFilesMapper.selectByFileId(fileId, userId)).thenReturn(publicFiles); + List arrayList = new ArrayList<>(); + Long applyId = 1L; + TblDockerApplyLib applyLib = new TblDockerApplyLib(); + applyLib.setApplyId(applyId); + arrayList.add(applyLib); + when(dockerApplyLibMapper.selectListByFileId(fileId)).thenReturn(arrayList); + List dockerWithUserList = new ArrayList<>(); + when(dockerWithUserMapper.selectListByApplyIds(anyList())).thenReturn(dockerWithUserList); + fileService.deleteByFileId(fileId); + + doReturn(true).when(fileService).isResourceExist(any(ChannelSftp.class), anyString(), anyString()); + fileService.deleteByFileId(fileId); + + dockerWithUserList.add(new TblDockerWithUser()); + when(dockerWithUserMapper.selectListByApplyIds(anyList())).thenReturn(dockerWithUserList); + try { + fileService.deleteByFileId(fileId); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + + } + + @Test + void getImage() throws SftpException, IOException { + when(sftpPool.getDefault()).thenReturn(Mockito.mock(ChannelSftp.class)); + String uuid = "uuid"; + when(publicFilesMapper.selectByUUID(uuid)).thenReturn(null); + HttpServletResponse response = mock(HttpServletResponse.class); + try { + fileService.getImage(uuid, response); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + TblPublicFiles publicFiles = new TblPublicFiles(); + publicFiles.setFileExtension("jpg"); + when(publicFilesMapper.selectByUUID(uuid)).thenReturn(publicFiles); + try { + fileService.getImage(uuid, response); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + + doThrow(IOException.class).when(fileService).getFileStream(any(ChannelSftp.class), anyString(), anyString(), any(HttpServletResponse.class)); + try { + fileService.getImage(uuid, response); + Assertions.fail(); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + } + + @Test + void downloadPublicFile() { + when(sftpPool.getDefault()).thenReturn(Mockito.mock(ChannelSftp.class)); + HttpServletResponse response = mock(HttpServletResponse.class); + try { + fileService.downloadPublicFile("", response); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + } + + @Test + void isResourceExist() throws SftpException { + String directory = "directory"; + String resources = "resources"; + ChannelSftp channelSftp = mock(ChannelSftp.class); + when(channelSftp.ls(directory)).thenThrow(SftpException.class); + try { + fileService.isResourceExist(channelSftp, directory, resources); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + + channelSftp = mock(ChannelSftp.class); + when(channelSftp.ls(directory)).thenReturn(null); + Assertions.assertFalse(fileService.isResourceExist(channelSftp, directory, resources)); + + channelSftp = mock(ChannelSftp.class); + Vector entries = new Vector<>(); + ChannelSftp.LsEntry entry = mock(ChannelSftp.LsEntry.class); + when(entry.getFilename()).thenReturn(""); + entries.add(entry); + when(channelSftp.ls(directory)).thenReturn(entries); + Assertions.assertFalse(fileService.isResourceExist(channelSftp, directory, resources)); + + channelSftp = mock(ChannelSftp.class); + ChannelSftp.LsEntry entry2 = mock(ChannelSftp.LsEntry.class); + when(entry2.getFilename()).thenReturn(resources); + entries.add(entry2); + when(channelSftp.ls(directory)).thenReturn(entries); + Assertions.assertTrue(fileService.isResourceExist(channelSftp, directory, resources)); + + } + + @Test + void getFileStream() throws SftpException, IOException { + String directory = "directory"; + HttpServletResponse response = mock(HttpServletResponse.class); + ChannelSftp channelSftp = mock(ChannelSftp.class); + when(channelSftp.ls(directory)).thenReturn(null); + try { + fileService.getFileStream(channelSftp, directory, "", response); + } catch (Exception e) { + Assertions.assertTrue(e instanceof ServiceException); + } + + channelSftp = mock(ChannelSftp.class); + doReturn(true).when(fileService).isResourceExist(channelSftp, directory, ""); + when(channelSftp.stat(anyString())).thenReturn(mock(SftpATTRS.class)); + fileService.getFileStream(channelSftp, directory, "", response); + } + + @Test + void downloadException() { + HttpServletResponse response = mock(HttpServletResponse.class); + fileService.downloadException(response, ""); + + try (MockedStatic encoderMockedStatic = mockStatic(URLEncoder.class)) { + encoderMockedStatic.when(() -> URLEncoder.encode("", "UTF-8")).thenThrow(UnsupportedEncodingException.class); + fileService.downloadException(response, ""); + } catch (Exception e) { + Assertions.fail(); + } + + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalContentServiceImplTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalContentServiceImplTest.java new file mode 100644 index 00000000..272c6169 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalContentServiceImplTest.java @@ -0,0 +1,97 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.github.pagehelper.Page; +import com.jiuyv.sptccc.agile.common.exception.ServiceException; +import com.jiuyv.sptccc.agile.framework.config.ConsoleProperties; +import com.jiuyv.sptccc.agile.portal.domain.TblPortalContent; +import com.jiuyv.sptccc.agile.portal.mapper.PortalContentMapper; +import com.jiuyv.sptccc.agile.portal.service.IFileService; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import javax.servlet.http.HttpServletResponse; +import java.util.Collections; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +/** + * PortalContentService单元测试 + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class PortalContentServiceImplTest { + + @Spy + @InjectMocks + private PortalContentServiceImpl portalContentService; + + @Mock + private PortalContentMapper portalContentMapper; + @Mock + private IFileService fileService; + + @Mock + private ConsoleProperties consoleProperties; + + @Test + void getContentList() { + String showType = "1"; + Page page = new Page<>(); + TblPortalContent content = mock(TblPortalContent.class); + when(content.getImgUrl()).thenReturn("/images/console/a.jpg"); + page.add(content); + when(portalContentMapper.selectContentList(showType)) + .thenReturn(page) + .thenReturn(Collections.emptyList()); + assertTrue(portalContentService.getContentList(showType) instanceof Page); + assertFalse(portalContentService.getContentList(showType) instanceof Page); + + } + + @Test + void getContentInfo() { + Long contentId = 1L; + try { + portalContentService.getContentInfo(contentId); + fail(); + } catch (Exception e) { + assertTrue(e instanceof ServiceException); + } + TblPortalContent content = mock(TblPortalContent.class); + when(portalContentMapper.selectInfoByContentId(contentId)).thenReturn(content); + assertEquals(content, portalContentService.getContentInfo(contentId)); + } + + @Test + void getImage() { + try { + portalContentService.getImage("", mock(HttpServletResponse.class)); + } catch (Exception e) { + fail(); + } + } + + @Test + void wordDownload() { + try { + portalContentService.wordDownload(mock(HttpServletResponse.class)); + } catch (Exception e) { + fail(); + } + } + + @Test + void sdkDownload() { + try { + portalContentService.sdkDownload(mock(HttpServletResponse.class)); + } catch (Exception e) { + fail(); + } + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalLogininforServiceImplTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalLogininforServiceImplTest.java new file mode 100644 index 00000000..cc96be3e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalLogininforServiceImplTest.java @@ -0,0 +1,41 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.jiuyv.sptccc.agile.portal.domain.TblPortalLogininfor; +import com.jiuyv.sptccc.agile.portal.mapper.TblPortalLogininforMapper; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +/** + * PortalLogininforService单元测试 + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class PortalLogininforServiceImplTest { + + @Spy + @InjectMocks + private PortalLogininforServiceImpl portalLogininforService; + + @Mock + private TblPortalLogininforMapper logininforMapper; + + @Test + void insertLogininfor() { + String str = new String(new byte[5500]); + TblPortalLogininfor portalLogininfor = mock(TblPortalLogininfor.class); + when(portalLogininfor.getMsg()).thenReturn(str); + try { + portalLogininforService.insertLogininfor(portalLogininfor); + } catch (Exception e) { + Assertions.fail(); + } + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalMessageServiceImplTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalMessageServiceImplTest.java new file mode 100644 index 00000000..629c8a40 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalMessageServiceImplTest.java @@ -0,0 +1,54 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.jiuyv.sptccc.agile.portal.mapper.TblPortalMsgMapper; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; + +import static org.junit.jupiter.api.Assertions.fail; + +/** + * PortalMessageService单元测试 + * @author ren_chao + */ +class PortalMessageServiceImplTest extends BaseTest { + + @Spy + @InjectMocks + private PortalMessageServiceImpl portalMessageService; + + @Mock + private TblPortalMsgMapper portalMsgMapper; + + @Test + void getList() { + try { + portalMessageService.getList(); + } catch (Exception e) { + fail(); + } + } + + @Test + void getDetail() { + Long msgId = 1L; + try { + portalMessageService.getDetail(msgId); + } catch (Exception e) { + fail(); + } + } + + @Test + void markRead() { + try { + Long[] msgIds = new Long[]{1L}; + portalMessageService.markRead(msgIds); + msgIds = new Long[0]; + portalMessageService.markRead(msgIds); + } catch (Exception e) { + fail(); + } + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalOperLogServiceImplTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalOperLogServiceImplTest.java new file mode 100644 index 00000000..d3cef558 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalOperLogServiceImplTest.java @@ -0,0 +1,37 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.jiuyv.sptccc.agile.portal.domain.TblPortalOperLog; +import com.jiuyv.sptccc.agile.portal.mapper.TblPortalOperLogMapper; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +/** + * PortalOperLogService单元测试 + * @author ren_chao + */ +@ExtendWith(MockitoExtension.class) +class PortalOperLogServiceImplTest { + + @Spy + @InjectMocks + private PortalOperLogServiceImpl portalOperLogService; + + @Mock + private TblPortalOperLogMapper operLogMapper; + + @Test + void insertOperlog() { + try { + portalOperLogService.insertOperlog(Mockito.mock(TblPortalOperLog.class)); + } catch (Exception e) { + Assertions.fail(); + } + + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalUserServiceImplTest.java b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalUserServiceImplTest.java new file mode 100644 index 00000000..88502580 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-service/src/test/java/com/jiuyv/sptccc/agile/portal/service/impl/PortalUserServiceImplTest.java @@ -0,0 +1,70 @@ +package com.jiuyv.sptccc.agile.portal.service.impl; + +import com.jiuyv.sptccc.agile.dto.ResUserPasswordDTO; +import com.jiuyv.sptccc.agile.portal.domain.TblPortalUser; +import com.jiuyv.sptccc.agile.portal.mapper.TblPortalUserMapper; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.mockito.Spy; + +/** + * PortalUserService单元测试 + * @author ren_chao + */ +class PortalUserServiceImplTest { + + @Spy + @InjectMocks + private PortalUserServiceImpl portalUserService; + + @Mock + private TblPortalUserMapper userMapper; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void selectUserByUserName() { + String userName = "admin"; + TblPortalUser user = new TblPortalUser(); + user.setUserName(userName); + user.setPhonenumber("13877776666"); + user.setEmail("+hCBfvoE1AFCHG8QaEh2uQ=="); + Mockito.when(userMapper.selectUserByUserName(userName)).thenReturn(null); + Assertions.assertNull(portalUserService.selectUserByUserName(userName)); + Mockito.when(userMapper.selectUserByUserName(userName)).thenReturn(user); + Assertions.assertEquals(userName, portalUserService.selectUserByUserName(userName).getUserName()); + user.setEmail(null); + Mockito.when(userMapper.selectUserByUserName(userName)).thenReturn(user); + Assertions.assertNull(portalUserService.selectUserByUserName(userName).getEmail()); + + + } + + @Test + void updateUserProfileNoVersion() { + TblPortalUser user = new TblPortalUser(); + Mockito.when(userMapper.updateUser(user)).thenReturn(1); + Assertions.assertEquals(1, portalUserService.updateUserProfileNoVersion(user)); + } + + @Test + void resetUserPwd() { + try { + ResUserPasswordDTO dto = new ResUserPasswordDTO(); + Mockito.when(userMapper.resetUserPwd(dto.getUserId(), dto.getPassword())).thenReturn(1); + portalUserService.resetUserPwd(dto); + } catch (Exception e) { + Assertions.fail(); + } + } + + +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/.env.development b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/.env.development new file mode 100644 index 00000000..c3b60202 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/.env.development @@ -0,0 +1,11 @@ +# 页面标题 +VUE_APP_TITLE = '久事大数据开放平台' + +# 开发环境配置 +ENV = 'development' + +# 久事大数据开放平台/开发环境 +VUE_APP_BASE_API = '/public' + +# 路由懒加载 +VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/.env.production b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/.env.production new file mode 100644 index 00000000..c918cfa7 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/.env.production @@ -0,0 +1,16 @@ +### + # @Author: 1036896656@qq.com 1036896656@qq.com + # @Date: 2023-08-04 11:13:12 + # @LastEditors: 1036896656@qq.com 1036896656@qq.com + # @LastEditTime: 2023-08-24 18:47:53 + # @FilePath: \agile-portal-ui\.env.production + # @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE +### +# 页面标题 +VUE_APP_TITLE = 久事大数据开放平台 + +# 生产环境配置 +ENV = 'production' + +# 危化品管理系统/生产环境 +VUE_APP_BASE_API = '/public' diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/README.md b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/README.md new file mode 100644 index 00000000..0f987498 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/README.md @@ -0,0 +1,19 @@ +# agile-portal-front + +## Project setup +``` +npm install +``` + +### Compiles and hot-reloads for development +``` +npm run serve +``` + +### Compiles and minifies for production +``` +npm run build +``` + +### Customize configuration +See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/babel.config.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/babel.config.js new file mode 100644 index 00000000..2d47eef8 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/cli-plugin-babel/preset' + ], +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/jsconfig.json b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/jsconfig.json new file mode 100644 index 00000000..4aafc5f6 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/jsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "esnext", + "baseUrl": "./", + "moduleResolution": "node", + "paths": { + "@/*": [ + "src/*" + ] + }, + "lib": [ + "esnext", + "dom", + "dom.iterable", + "scripthost" + ] + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/package-lock.json b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/package-lock.json new file mode 100644 index 00000000..386b2ad0 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/package-lock.json @@ -0,0 +1,18139 @@ +{ + "name": "agile-portal-front", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "agile-portal-front", + "version": "0.1.0", + "dependencies": { + "axios": "^1.4.0", + "core-js": "^3.8.3", + "crypto-js": "^4.1.1", + "element-ui": "^2.15.13", + "js-cookie": "3.0.1", + "jsencrypt": "3.0.0-rc.1", + "normalize.css": "^8.0.1", + "nprogress": "^0.2.0", + "swiper": "^5.4.5", + "vue": "^2.6.14", + "vue-router": "^3.5.1", + "vuex": "^3.6.2" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "~5.0.0", + "@vue/cli-plugin-router": "~5.0.0", + "@vue/cli-plugin-vuex": "~5.0.0", + "@vue/cli-service": "~5.0.0", + "babel-plugin-component": "^1.1.1", + "sass": "^1.32.7", + "sass-loader": "^12.0.0", + "vue-template-compiler": "^2.6.14", + "webpack": "^5.88.2" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.22.10.tgz", + "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.10", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.22.10.tgz", + "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.10", + "@babel/parser": "^7.22.10", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.22.10.tgz", + "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.10", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", + "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz", + "integrity": "sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", + "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.22.10.tgz", + "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.22.10.tgz", + "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.22.10.tgz", + "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.10.tgz", + "integrity": "sha512-KxN6TqZzcFi4uD3UifqXElBTBNLAEH1l3vzMQj6JwJZbL2sZlThxSViOKCYY+4Ah4V4JhQ95IVB7s/Y6SJSlMQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.10", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/plugin-syntax-decorators": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz", + "integrity": "sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz", + "integrity": "sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", + "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.6", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", + "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz", + "integrity": "sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz", + "integrity": "sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.22.10.tgz", + "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.10", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.10", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.10", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.10", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.22.10", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.6", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.22.10.tgz", + "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.10", + "@babel/types": "^7.22.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.22.10.tgz", + "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@node-ipc/js-queue": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", + "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==", + "dev": true, + "dependencies": { + "easy-stack": "1.0.1" + }, + "engines": { + "node": ">=1.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.scandir/node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmmirror.com/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/address/node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, + "node_modules/@soda/friendly-errors-webpack-plugin": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "error-stack-parser": "^2.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz", + "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", + "dev": true + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmmirror.com/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmmirror.com/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.44.2", + "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-8.44.2.tgz", + "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmmirror.com/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.36", + "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz", + "integrity": "sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "node_modules/@types/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.5.4", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.5.4.tgz", + "integrity": "sha512-Y9vbIAoM31djQZrPYjpTLo0XlaSwOIsrlfE3LpulZeRblttsLQRFRlBAppW0LOxyT3ALj2M5vU1ucQQayQH3jA==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmmirror.com/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.2", + "resolved": "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.2.tgz", + "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmmirror.com/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmmirror.com/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz", + "integrity": "sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==", + "dev": true + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.1.5.tgz", + "integrity": "sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==", + "dev": true + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.5.tgz", + "integrity": "sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "@vue/babel-helper-vue-transform-on": "^1.1.5", + "camelcase": "^6.3.0", + "html-tags": "^3.3.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-plugin-transform-vue-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz", + "integrity": "sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-plugin-transform-vue-jsx/node_modules/html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/babel-preset-app": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz", + "integrity": "sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.16", + "@babel/helper-compilation-targets": "^7.12.16", + "@babel/helper-module-imports": "^7.12.13", + "@babel/plugin-proposal-class-properties": "^7.12.13", + "@babel/plugin-proposal-decorators": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/runtime": "^7.12.13", + "@vue/babel-plugin-jsx": "^1.0.3", + "@vue/babel-preset-jsx": "^1.1.2", + "babel-plugin-dynamic-import-node": "^2.3.3", + "core-js": "^3.8.3", + "core-js-compat": "^3.8.3", + "semver": "^7.3.4" + }, + "peerDependencies": { + "@babel/core": "*", + "core-js": "^3", + "vue": "^2 || ^3.2.13" + }, + "peerDependenciesMeta": { + "core-js": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/babel-preset-app/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/babel-preset-app/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/babel-preset-app/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@vue/babel-preset-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz", + "integrity": "sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==", + "dev": true, + "dependencies": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "@vue/babel-sugar-composition-api-inject-h": "^1.4.0", + "@vue/babel-sugar-composition-api-render-instance": "^1.4.0", + "@vue/babel-sugar-functional-vue": "^1.4.0", + "@vue/babel-sugar-inject-h": "^1.4.0", + "@vue/babel-sugar-v-model": "^1.4.0", + "@vue/babel-sugar-v-on": "^1.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0", + "vue": "*" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/babel-sugar-composition-api-inject-h": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz", + "integrity": "sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-composition-api-render-instance": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz", + "integrity": "sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-functional-vue": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz", + "integrity": "sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-inject-h": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz", + "integrity": "sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-model": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz", + "integrity": "sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-model/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@vue/babel-sugar-v-model/node_modules/html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/babel-sugar-v-on": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz", + "integrity": "sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "camelcase": "^5.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-on/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@vue/cli-overlay": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz", + "integrity": "sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ==", + "dev": true + }, + "node_modules/@vue/cli-plugin-babel": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz", + "integrity": "sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.16", + "@vue/babel-preset-app": "^5.0.8", + "@vue/cli-shared-utils": "^5.0.8", + "babel-loader": "^8.2.2", + "thread-loader": "^3.0.0", + "webpack": "^5.54.0" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/@achrinza/node-ipc": { + "version": "9.2.7", + "resolved": "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.7.tgz", + "integrity": "sha512-/EvNkqB4HNxPWCZASmgrjqG8gIdPOolD67LGASvGMp/FY5ne0rbvpYg5o9x8RmgjAl8KdmNQ4YlV1et9DYiW8g==", + "dev": true, + "dependencies": { + "@node-ipc/js-queue": "2.0.3", + "event-pubsub": "4.3.0", + "js-message": "1.0.7" + }, + "engines": { + "node": "8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 || 18 || 19 || 20" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/@vue/cli-shared-utils": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz", + "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==", + "dev": true, + "dependencies": { + "@achrinza/node-ipc": "^9.2.5", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "joi": "^17.4.0", + "launch-editor": "^2.2.1", + "lru-cache": "^6.0.0", + "node-fetch": "^2.6.7", + "open": "^8.0.2", + "ora": "^5.3.0", + "read-pkg": "^5.1.1", + "semver": "^7.3.4", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-plugin-babel/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@vue/cli-plugin-router": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz", + "integrity": "sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg==", + "dev": true, + "dependencies": { + "@vue/cli-shared-utils": "^5.0.8" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + } + }, + "node_modules/@vue/cli-plugin-router/node_modules/@achrinza/node-ipc": { + "version": "9.2.7", + "resolved": "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.7.tgz", + "integrity": "sha512-/EvNkqB4HNxPWCZASmgrjqG8gIdPOolD67LGASvGMp/FY5ne0rbvpYg5o9x8RmgjAl8KdmNQ4YlV1et9DYiW8g==", + "dev": true, + "dependencies": { + "@node-ipc/js-queue": "2.0.3", + "event-pubsub": "4.3.0", + "js-message": "1.0.7" + }, + "engines": { + "node": "8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 || 18 || 19 || 20" + } + }, + "node_modules/@vue/cli-plugin-router/node_modules/@vue/cli-shared-utils": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz", + "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==", + "dev": true, + "dependencies": { + "@achrinza/node-ipc": "^9.2.5", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "joi": "^17.4.0", + "launch-editor": "^2.2.1", + "lru-cache": "^6.0.0", + "node-fetch": "^2.6.7", + "open": "^8.0.2", + "ora": "^5.3.0", + "read-pkg": "^5.1.1", + "semver": "^7.3.4", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/@vue/cli-plugin-router/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-plugin-router/node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@vue/cli-plugin-router/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-plugin-router/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-plugin-router/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@vue/cli-plugin-vuex": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz", + "integrity": "sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA==", + "dev": true, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + } + }, + "node_modules/@vue/cli-service": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-5.0.8.tgz", + "integrity": "sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.12.16", + "@soda/friendly-errors-webpack-plugin": "^1.8.0", + "@soda/get-current-script": "^1.0.2", + "@types/minimist": "^1.2.0", + "@vue/cli-overlay": "^5.0.8", + "@vue/cli-plugin-router": "^5.0.8", + "@vue/cli-plugin-vuex": "^5.0.8", + "@vue/cli-shared-utils": "^5.0.8", + "@vue/component-compiler-utils": "^3.3.0", + "@vue/vue-loader-v15": "npm:vue-loader@^15.9.7", + "@vue/web-component-wrapper": "^1.3.0", + "acorn": "^8.0.5", + "acorn-walk": "^8.0.2", + "address": "^1.1.2", + "autoprefixer": "^10.2.4", + "browserslist": "^4.16.3", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.10", + "clipboardy": "^2.3.0", + "cliui": "^7.0.4", + "copy-webpack-plugin": "^9.0.1", + "css-loader": "^6.5.0", + "css-minimizer-webpack-plugin": "^3.0.2", + "cssnano": "^5.0.0", + "debug": "^4.1.1", + "default-gateway": "^6.0.3", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^5.1.0", + "is-file-esm": "^1.0.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "mini-css-extract-plugin": "^2.5.3", + "minimist": "^1.2.5", + "module-alias": "^2.2.2", + "portfinder": "^1.0.26", + "postcss": "^8.2.6", + "postcss-loader": "^6.1.1", + "progress-webpack-plugin": "^1.0.12", + "ssri": "^8.0.1", + "terser-webpack-plugin": "^5.1.1", + "thread-loader": "^3.0.0", + "vue-loader": "^17.0.0", + "vue-style-loader": "^4.1.3", + "webpack": "^5.54.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-chain": "^6.5.1", + "webpack-dev-server": "^4.7.3", + "webpack-merge": "^5.7.3", + "webpack-virtual-modules": "^0.4.2", + "whatwg-fetch": "^3.6.2" + }, + "bin": { + "vue-cli-service": "bin/vue-cli-service.js" + }, + "engines": { + "node": "^12.0.0 || >= 14.0.0" + }, + "peerDependencies": { + "vue-template-compiler": "^2.0.0", + "webpack-sources": "*" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "less-loader": { + "optional": true + }, + "pug-plain-loader": { + "optional": true + }, + "raw-loader": { + "optional": true + }, + "sass-loader": { + "optional": true + }, + "stylus-loader": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/@vue/cli-service/node_modules/@achrinza/node-ipc": { + "version": "9.2.7", + "resolved": "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.7.tgz", + "integrity": "sha512-/EvNkqB4HNxPWCZASmgrjqG8gIdPOolD67LGASvGMp/FY5ne0rbvpYg5o9x8RmgjAl8KdmNQ4YlV1et9DYiW8g==", + "dev": true, + "dependencies": { + "@node-ipc/js-queue": "2.0.3", + "event-pubsub": "4.3.0", + "js-message": "1.0.7" + }, + "engines": { + "node": "8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 || 18 || 19 || 20" + } + }, + "node_modules/@vue/cli-service/node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@vue/cli-service/node_modules/@vue/cli-shared-utils": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz", + "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==", + "dev": true, + "dependencies": { + "@achrinza/node-ipc": "^9.2.5", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "joi": "^17.4.0", + "launch-editor": "^2.2.1", + "lru-cache": "^6.0.0", + "node-fetch": "^2.6.7", + "open": "^8.0.2", + "ora": "^5.3.0", + "read-pkg": "^5.1.1", + "semver": "^7.3.4", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/@vue/cli-service/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@vue/cli-service/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@vue/cli-service/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-service/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@vue/cli-service/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-service/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@vue/cli-service/node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@vue/cli-service/node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-service/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-service/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@vue/compiler-sfc": { + "version": "2.7.14", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", + "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", + "dependencies": { + "@babel/parser": "^7.18.4", + "postcss": "^8.4.14", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "dev": true, + "dependencies": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "optionalDependencies": { + "prettier": "^1.18.2 || ^2.0.0" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "node_modules/@vue/component-compiler-utils/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/@vue/component-compiler-utils/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + }, + "node_modules/@vue/vue-loader-v15": { + "name": "vue-loader", + "version": "15.10.2", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.10.2.tgz", + "integrity": "sha512-ndeSe/8KQc/nlA7TJ+OBhv2qalmj1s+uBs7yHDRFaAXscFTApBzY9F1jES3bautmgWjDlDct0fw8rPuySDLwxw==", + "dev": true, + "dependencies": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "peerDependencies": { + "css-loader": "*", + "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "prettier": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/@vue/vue-loader-v15/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "node_modules/@vue/web-component-wrapper": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", + "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmmirror.com/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-validator": { + "version": "1.8.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-1.8.5.tgz", + "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==", + "dependencies": { + "babel-runtime": "6.x" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.15", + "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.15.tgz", + "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001520", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" + }, + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/babel-plugin-component": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/babel-plugin-component/-/babel-plugin-component-1.1.1.tgz", + "integrity": "sha512-WUw887kJf2GH80Ng/ZMctKZ511iamHNqPhd9uKo14yzisvV7Wt1EckIrb8oq/uCz3B3PpAW7Xfl7AkTLDYT6ag==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "7.0.0-beta.35" + } + }, + "node_modules/babel-plugin-component/node_modules/@babel/helper-module-imports": { + "version": "7.0.0-beta.35", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.35.tgz", + "integrity": "sha512-vaC1KyIZSuyWb3Lj277fX0pxivyHwuDU4xZsofqgYAbkDxNieMg2vuhzP5AgMweMY7fCQUMTi+BgPqTLjkxXFg==", + "dev": true, + "dependencies": { + "@babel/types": "7.0.0-beta.35", + "lodash": "^4.2.0" + } + }, + "node_modules/babel-plugin-component/node_modules/@babel/types": { + "version": "7.0.0-beta.35", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.0.0-beta.35.tgz", + "integrity": "sha512-y9XT11CozHDgjWcTdxmhSj13rJVXpa5ZXwjjOiTedjaM0ba5ItqdS02t31EhPl7HtOWxsZkYCCUNrSfrOisA6w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2", + "lodash": "^4.2.0", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.3", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-runtime/node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true + }, + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/body-parser/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001522", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", + "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==", + "dev": true + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmmirror.com/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "dependencies": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "deprecated": "Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog", + "dev": true, + "dependencies": { + "bluebird": "^3.1.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-webpack-plugin": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", + "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/copy-webpack-plugin/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/copy-webpack-plugin/node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/copy-webpack-plugin/node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/core-js": { + "version": "3.19.1", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.19.1.tgz", + "integrity": "sha512-Tnc7E9iKd/b/ff7GFbhwPVzJzPztGrChB8X8GLqoYGdEOG8IpLnK1xPyo3ZoO3HsK6TodJS58VGPOxA+hLHQMg==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true + }, + "node_modules/core-js-compat": { + "version": "3.32.1", + "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.32.1.tgz", + "integrity": "sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.10" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmmirror.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "dev": true, + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmmirror.com/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dev": true, + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/default-gateway/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/default-gateway/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/default-gateway/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/default-gateway/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/default-gateway/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmmirror.com/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "node_modules/dom7": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/dom7/-/dom7-2.1.5.tgz", + "integrity": "sha512-xnhwVgyOh3eD++/XGtH+5qBwYTgCm0aW91GFgPJ3XG+jlsRLyJivnbP0QmUBFhI+Oaz9FV0s7cxgXHezwOEBYA==", + "dependencies": { + "ssr-window": "^2.0.0" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/easy-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.500", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.500.tgz", + "integrity": "sha512-P38NO8eOuWOKY1sQk5yE0crNtrjgjJj6r3NrbIKtG18KzCHmHE2Bt+aQA7/y0w3uYsHWxDa6icOohzjLJ4vJ4A==", + "dev": true + }, + "node_modules/element-ui": { + "version": "2.15.13", + "resolved": "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.13.tgz", + "integrity": "sha512-LJoatEYX6WV74FqXBss8Xfho9fh9rjDSzrDrTyREdGb1h1R3uRvmLh5jqp2JU137aj4/BgqA3K06RQpQBX33Bg==", + "dependencies": { + "async-validator": "~1.8.1", + "babel-helper-vue-jsx-merge-props": "^2.0.0", + "deepmerge": "^1.2.0", + "normalize-wheel": "^1.0.1", + "resize-observer-polyfill": "^1.5.0", + "throttle-debounce": "^1.0.1" + }, + "peerDependencies": { + "vue": "^2.5.17" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmmirror.com/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.2.1.tgz", + "integrity": "sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/clean-css": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/html-minifier-terser/node_modules/terser": { + "version": "5.19.2", + "resolved": "https://registry.npmmirror.com/terser/-/terser-5.19.2.tgz", + "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-minifier-terser/node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.3", + "resolved": "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz", + "integrity": "sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/html-webpack-plugin/node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/html-webpack-plugin/node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/http-proxy-middleware/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/http-proxy/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-file-esm": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-file-esm/-/is-file-esm-1.0.0.tgz", + "integrity": "sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==", + "dev": true, + "dependencies": { + "read-pkg-up": "^7.0.1" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/joi": { + "version": "17.9.2", + "resolved": "https://registry.npmmirror.com/joi/-/joi-17.9.2.tgz", + "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/joi/node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true + }, + "node_modules/joi/node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/js-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.1.tgz", + "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/js-message": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", + "dev": true, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/jsencrypt": { + "version": "3.0.0-rc.1", + "resolved": "https://registry.npmmirror.com/jsencrypt/-/jsencrypt-3.0.0-rc.1.tgz", + "integrity": "sha512-gcvGaqerlUJy1Kq6tNgPYteVEoWNemu+9hBe2CdsCIz4rVcwjoTQ72iD1W76/PRMlnkzG0yVh7nwOOMOOUfKmg==" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "node_modules/launch-editor-middleware": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/launch-editor-middleware/-/launch-editor-middleware-2.6.0.tgz", + "integrity": "sha512-K2yxgljj5TdCeRN1lBtO3/J26+AIDDDw+04y6VAiZbWcTdBwsYN6RrZBnW5DN/QiSIdKNjKdATLUUluWWFYTIA==", + "dev": true, + "dependencies": { + "launch-editor": "^2.6.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true + }, + "node_modules/lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/module-alias": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/module-alias/-/module-alias-2.2.3.tgz", + "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==", + "dev": true + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==" + }, + "node_modules/normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module/node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dev": true, + "dependencies": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/postcss": { + "version": "8.4.28", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.28.tgz", + "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress-webpack-plugin": { + "version": "1.0.16", + "resolved": "https://registry.npmmirror.com/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz", + "integrity": "sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA==", + "dev": true, + "dependencies": { + "chalk": "^2.1.0", + "figures": "^2.0.0", + "log-update": "^2.3.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/progress-webpack-plugin/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/progress-webpack-plugin/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/progress-webpack-plugin/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", + "dev": true, + "dependencies": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.32.13", + "resolved": "https://registry.npmmirror.com/sass/-/sass-1.32.13.tgz", + "integrity": "sha512-dEgI9nShraqP7cXQH+lEXVf73WOPCse0QlFzSD8k+1TcOxCMwVXfQlr0jtoluZysQOyJGnfr21dLvYKDJq8HkA==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmmirror.com/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sirv": { + "version": "1.0.19", + "resolved": "https://registry.npmmirror.com/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^1.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ssr-window": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ssr-window/-/ssr-window-2.0.0.tgz", + "integrity": "sha512-NXzN+/HPObKAx191H3zKlYomE5WrVIkoCB5IaSdvKokxTpjBdWfr0RaP+1Z5KOfDT0ZVz+2tdtiBkhsEQ9p+0A==" + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/swiper": { + "version": "5.4.5", + "resolved": "https://registry.npmmirror.com/swiper/-/swiper-5.4.5.tgz", + "integrity": "sha512-7QjA0XpdOmiMoClfaZ2lYN6ICHcMm72LXiY+NF4fQLFidigameaofvpjEEiTQuw3xm5eksG5hzkaRsjQX57vtA==", + "hasInstallScript": true, + "dependencies": { + "dom7": "^2.1.5", + "ssr-window": "^2.0.0" + }, + "engines": { + "node": ">= 4.7.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/terser": { + "version": "5.19.2", + "resolved": "https://registry.npmmirror.com/terser/-/terser-5.19.2.tgz", + "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thread-loader": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/thread-loader/-/thread-loader-3.0.4.tgz", + "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", + "dev": true, + "dependencies": { + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/thread-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/thread-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/throttle-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-1.1.0.tgz", + "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vue": { + "version": "2.7.14", + "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.14.tgz", + "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", + "dependencies": { + "@vue/compiler-sfc": "2.7.14", + "csstype": "^3.1.0" + } + }, + "node_modules/vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "node_modules/vue-loader": { + "version": "17.2.2", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-17.2.2.tgz", + "integrity": "sha512-aqNvKJvnz2A/6VWeJZodAo8XLoAlVwBv+2Z6dama+LHsAF+P/xijQ+OfWrxIs0wcGSJduvdzvTuATzXbNKkpiw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "watchpack": "^2.4.0" + }, + "peerDependencies": { + "webpack": "^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "3.6.5", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-3.6.5.tgz", + "integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==" + }, + "node_modules/vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "dependencies": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "node_modules/vue-style-loader/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "node_modules/vue-template-compiler": { + "version": "2.7.14", + "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz", + "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "node_modules/vuex": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/vuex/-/vuex-3.6.2.tgz", + "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==", + "peerDependencies": { + "vue": "^2.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/webpack": { + "version": "5.88.2", + "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.88.2.tgz", + "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.9.0", + "resolved": "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz", + "integrity": "sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npmmirror.com/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "dev": true, + "dependencies": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmmirror.com/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.4.6", + "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", + "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", + "dev": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.17", + "resolved": "https://registry.npmmirror.com/whatwg-fetch/-/whatwg-fetch-3.6.17.tgz", + "integrity": "sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.22.10.tgz", + "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.22.10", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true + }, + "@babel/core": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.22.10.tgz", + "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.10", + "@babel/parser": "^7.22.10", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.1" + } + }, + "@babel/generator": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.22.10.tgz", + "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "dev": true, + "requires": { + "@babel/types": "^7.22.10", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", + "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.10" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz", + "integrity": "sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.22.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.22.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", + "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.10" + } + }, + "@babel/helpers": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.22.10.tgz", + "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10" + } + }, + "@babel/highlight": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.22.10.tgz", + "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.22.10.tgz", + "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.10.tgz", + "integrity": "sha512-KxN6TqZzcFi4uD3UifqXElBTBNLAEH1l3vzMQj6JwJZbL2sZlThxSViOKCYY+4Ah4V4JhQ95IVB7s/Y6SJSlMQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.10", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/plugin-syntax-decorators": "^7.22.10" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz", + "integrity": "sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz", + "integrity": "sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", + "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.22.6", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", + "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz", + "integrity": "sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz", + "integrity": "sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "semver": "^6.3.1" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.22.10.tgz", + "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.10", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.10", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.10", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.10", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.22.10", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + } + }, + "@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.22.6", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/traverse": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.22.10.tgz", + "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.10", + "@babel/types": "^7.22.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.22.10.tgz", + "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "@node-ipc/js-queue": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", + "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==", + "dev": true, + "requires": { + "easy-stack": "1.0.1" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + } + } + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmmirror.com/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + }, + "dependencies": { + "@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true + } + } + }, + "@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, + "@soda/friendly-errors-webpack-plugin": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "error-stack-parser": "^2.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz", + "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", + "dev": true + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmmirror.com/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmmirror.com/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "8.44.2", + "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-8.44.2.tgz", + "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmmirror.com/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.36", + "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz", + "integrity": "sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "@types/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/node": { + "version": "20.5.4", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.5.4.tgz", + "integrity": "sha512-Y9vbIAoM31djQZrPYjpTLo0XlaSwOIsrlfE3LpulZeRblttsLQRFRlBAppW0LOxyT3ALj2M5vU1ucQQayQH3jA==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmmirror.com/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.2", + "resolved": "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.2.tgz", + "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "dev": true, + "requires": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmmirror.com/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmmirror.com/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz", + "integrity": "sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==", + "dev": true + }, + "@vue/babel-helper-vue-transform-on": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.1.5.tgz", + "integrity": "sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==", + "dev": true + }, + "@vue/babel-plugin-jsx": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.5.tgz", + "integrity": "sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "@vue/babel-helper-vue-transform-on": "^1.1.5", + "camelcase": "^6.3.0", + "html-tags": "^3.3.1", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-plugin-transform-vue-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz", + "integrity": "sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + }, + "dependencies": { + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", + "dev": true + } + } + }, + "@vue/babel-preset-app": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz", + "integrity": "sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.16", + "@babel/helper-compilation-targets": "^7.12.16", + "@babel/helper-module-imports": "^7.12.13", + "@babel/plugin-proposal-class-properties": "^7.12.13", + "@babel/plugin-proposal-decorators": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/runtime": "^7.12.13", + "@vue/babel-plugin-jsx": "^1.0.3", + "@vue/babel-preset-jsx": "^1.1.2", + "babel-plugin-dynamic-import-node": "^2.3.3", + "core-js": "^3.8.3", + "core-js-compat": "^3.8.3", + "semver": "^7.3.4" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@vue/babel-preset-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz", + "integrity": "sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==", + "dev": true, + "requires": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "@vue/babel-sugar-composition-api-inject-h": "^1.4.0", + "@vue/babel-sugar-composition-api-render-instance": "^1.4.0", + "@vue/babel-sugar-functional-vue": "^1.4.0", + "@vue/babel-sugar-inject-h": "^1.4.0", + "@vue/babel-sugar-v-model": "^1.4.0", + "@vue/babel-sugar-v-on": "^1.4.0" + } + }, + "@vue/babel-sugar-composition-api-inject-h": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz", + "integrity": "sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-composition-api-render-instance": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz", + "integrity": "sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-functional-vue": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz", + "integrity": "sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-inject-h": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz", + "integrity": "sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-v-model": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz", + "integrity": "sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", + "dev": true + } + } + }, + "@vue/babel-sugar-v-on": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz", + "integrity": "sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "camelcase": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + }, + "@vue/cli-overlay": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz", + "integrity": "sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ==", + "dev": true + }, + "@vue/cli-plugin-babel": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz", + "integrity": "sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ==", + "dev": true, + "requires": { + "@babel/core": "^7.12.16", + "@vue/babel-preset-app": "^5.0.8", + "@vue/cli-shared-utils": "^5.0.8", + "babel-loader": "^8.2.2", + "thread-loader": "^3.0.0", + "webpack": "^5.54.0" + }, + "dependencies": { + "@achrinza/node-ipc": { + "version": "9.2.7", + "resolved": "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.7.tgz", + "integrity": "sha512-/EvNkqB4HNxPWCZASmgrjqG8gIdPOolD67LGASvGMp/FY5ne0rbvpYg5o9x8RmgjAl8KdmNQ4YlV1et9DYiW8g==", + "dev": true, + "requires": { + "@node-ipc/js-queue": "2.0.3", + "event-pubsub": "4.3.0", + "js-message": "1.0.7" + } + }, + "@vue/cli-shared-utils": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz", + "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==", + "dev": true, + "requires": { + "@achrinza/node-ipc": "^9.2.5", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "joi": "^17.4.0", + "launch-editor": "^2.2.1", + "lru-cache": "^6.0.0", + "node-fetch": "^2.6.7", + "open": "^8.0.2", + "ora": "^5.3.0", + "read-pkg": "^5.1.1", + "semver": "^7.3.4", + "strip-ansi": "^6.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "open": { + "version": "8.4.2", + "resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@vue/cli-plugin-router": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz", + "integrity": "sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^5.0.8" + }, + "dependencies": { + "@achrinza/node-ipc": { + "version": "9.2.7", + "resolved": "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.7.tgz", + "integrity": "sha512-/EvNkqB4HNxPWCZASmgrjqG8gIdPOolD67LGASvGMp/FY5ne0rbvpYg5o9x8RmgjAl8KdmNQ4YlV1et9DYiW8g==", + "dev": true, + "requires": { + "@node-ipc/js-queue": "2.0.3", + "event-pubsub": "4.3.0", + "js-message": "1.0.7" + } + }, + "@vue/cli-shared-utils": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz", + "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==", + "dev": true, + "requires": { + "@achrinza/node-ipc": "^9.2.5", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "joi": "^17.4.0", + "launch-editor": "^2.2.1", + "lru-cache": "^6.0.0", + "node-fetch": "^2.6.7", + "open": "^8.0.2", + "ora": "^5.3.0", + "read-pkg": "^5.1.1", + "semver": "^7.3.4", + "strip-ansi": "^6.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "open": { + "version": "8.4.2", + "resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@vue/cli-plugin-vuex": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz", + "integrity": "sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA==", + "dev": true + }, + "@vue/cli-service": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-5.0.8.tgz", + "integrity": "sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.12.16", + "@soda/friendly-errors-webpack-plugin": "^1.8.0", + "@soda/get-current-script": "^1.0.2", + "@types/minimist": "^1.2.0", + "@vue/cli-overlay": "^5.0.8", + "@vue/cli-plugin-router": "^5.0.8", + "@vue/cli-plugin-vuex": "^5.0.8", + "@vue/cli-shared-utils": "^5.0.8", + "@vue/component-compiler-utils": "^3.3.0", + "@vue/vue-loader-v15": "npm:vue-loader@^15.9.7", + "@vue/web-component-wrapper": "^1.3.0", + "acorn": "^8.0.5", + "acorn-walk": "^8.0.2", + "address": "^1.1.2", + "autoprefixer": "^10.2.4", + "browserslist": "^4.16.3", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.10", + "clipboardy": "^2.3.0", + "cliui": "^7.0.4", + "copy-webpack-plugin": "^9.0.1", + "css-loader": "^6.5.0", + "css-minimizer-webpack-plugin": "^3.0.2", + "cssnano": "^5.0.0", + "debug": "^4.1.1", + "default-gateway": "^6.0.3", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^5.1.0", + "is-file-esm": "^1.0.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "mini-css-extract-plugin": "^2.5.3", + "minimist": "^1.2.5", + "module-alias": "^2.2.2", + "portfinder": "^1.0.26", + "postcss": "^8.2.6", + "postcss-loader": "^6.1.1", + "progress-webpack-plugin": "^1.0.12", + "ssri": "^8.0.1", + "terser-webpack-plugin": "^5.1.1", + "thread-loader": "^3.0.0", + "vue-loader": "^17.0.0", + "vue-style-loader": "^4.1.3", + "webpack": "^5.54.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-chain": "^6.5.1", + "webpack-dev-server": "^4.7.3", + "webpack-merge": "^5.7.3", + "webpack-virtual-modules": "^0.4.2", + "whatwg-fetch": "^3.6.2" + }, + "dependencies": { + "@achrinza/node-ipc": { + "version": "9.2.7", + "resolved": "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.7.tgz", + "integrity": "sha512-/EvNkqB4HNxPWCZASmgrjqG8gIdPOolD67LGASvGMp/FY5ne0rbvpYg5o9x8RmgjAl8KdmNQ4YlV1et9DYiW8g==", + "dev": true, + "requires": { + "@node-ipc/js-queue": "2.0.3", + "event-pubsub": "4.3.0", + "js-message": "1.0.7" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@vue/cli-shared-utils": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz", + "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==", + "dev": true, + "requires": { + "@achrinza/node-ipc": "^9.2.5", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "joi": "^17.4.0", + "launch-editor": "^2.2.1", + "lru-cache": "^6.0.0", + "node-fetch": "^2.6.7", + "open": "^8.0.2", + "ora": "^5.3.0", + "read-pkg": "^5.1.1", + "semver": "^7.3.4", + "strip-ansi": "^6.0.0" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "open": { + "version": "8.4.2", + "resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@vue/compiler-sfc": { + "version": "2.7.14", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", + "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", + "requires": { + "@babel/parser": "^7.18.4", + "postcss": "^8.4.14", + "source-map": "^0.6.1" + } + }, + "@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2 || ^2.0.0", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + } + } + }, + "@vue/vue-loader-v15": { + "version": "npm:vue-loader@15.10.2", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.10.2.tgz", + "integrity": "sha512-ndeSe/8KQc/nlA7TJ+OBhv2qalmj1s+uBs7yHDRFaAXscFTApBzY9F1jES3bautmgWjDlDct0fw8rPuySDLwxw==", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + } + } + }, + "@vue/web-component-wrapper": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", + "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "address": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmmirror.com/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-validator": { + "version": "1.8.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-1.8.5.tgz", + "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==", + "requires": { + "babel-runtime": "6.x" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "autoprefixer": { + "version": "10.4.15", + "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.15.tgz", + "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "dev": true, + "requires": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001520", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "axios": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, + "babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" + }, + "babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "babel-plugin-component": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/babel-plugin-component/-/babel-plugin-component-1.1.1.tgz", + "integrity": "sha512-WUw887kJf2GH80Ng/ZMctKZ511iamHNqPhd9uKo14yzisvV7Wt1EckIrb8oq/uCz3B3PpAW7Xfl7AkTLDYT6ag==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "7.0.0-beta.35" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.0.0-beta.35", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.35.tgz", + "integrity": "sha512-vaC1KyIZSuyWb3Lj277fX0pxivyHwuDU4xZsofqgYAbkDxNieMg2vuhzP5AgMweMY7fCQUMTi+BgPqTLjkxXFg==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.35", + "lodash": "^4.2.0" + } + }, + "@babel/types": { + "version": "7.0.0-beta.35", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.0.0-beta.35.tgz", + "integrity": "sha512-y9XT11CozHDgjWcTdxmhSj13rJVXpa5ZXwjjOiTedjaM0ba5ItqdS02t31EhPl7HtOWxsZkYCCUNrSfrOisA6w==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.2.0", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.8.3", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001522", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", + "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==", + "dev": true + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmmirror.com/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "dependencies": { + "highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true + } + } + }, + "cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true + }, + "clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "requires": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "copy-webpack-plugin": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", + "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", + "dev": true, + "requires": { + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } + } + }, + "core-js": { + "version": "3.19.1", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.19.1.tgz", + "integrity": "sha512-Tnc7E9iKd/b/ff7GFbhwPVzJzPztGrChB8X8GLqoYGdEOG8IpLnK1xPyo3ZoO3HsK6TodJS58VGPOxA+hLHQMg==" + }, + "core-js-compat": { + "version": "3.32.1", + "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.32.1.tgz", + "integrity": "sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==", + "dev": true, + "requires": { + "browserslist": "^4.21.10" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, + "css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "dev": true + }, + "css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmmirror.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "dev": true, + "requires": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + }, + "serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + } + } + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmmirror.com/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dev": true, + "requires": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "requires": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, + "cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, + "csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==" + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "requires": { + "clone": "^1.0.2" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + } + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmmirror.com/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "dom7": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/dom7/-/dom7-2.1.5.tgz", + "integrity": "sha512-xnhwVgyOh3eD++/XGtH+5qBwYTgCm0aW91GFgPJ3XG+jlsRLyJivnbP0QmUBFhI+Oaz9FV0s7cxgXHezwOEBYA==", + "requires": { + "ssr-window": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "easy-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.500", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.500.tgz", + "integrity": "sha512-P38NO8eOuWOKY1sQk5yE0crNtrjgjJj6r3NrbIKtG18KzCHmHE2Bt+aQA7/y0w3uYsHWxDa6icOohzjLJ4vJ4A==", + "dev": true + }, + "element-ui": { + "version": "2.15.13", + "resolved": "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.13.tgz", + "integrity": "sha512-LJoatEYX6WV74FqXBss8Xfho9fh9rjDSzrDrTyREdGb1h1R3uRvmLh5jqp2JU137aj4/BgqA3K06RQpQBX33Bg==", + "requires": { + "async-validator": "~1.8.1", + "babel-helper-vue-jsx-merge-props": "^2.0.0", + "deepmerge": "^1.2.0", + "normalize-wheel": "^1.0.1", + "resize-observer-polyfill": "^1.5.0", + "throttle-debounce": "^1.0.1" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "requires": { + "stackframe": "^1.3.4" + } + }, + "es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmmirror.com/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fraction.js": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.2.1.tgz", + "integrity": "sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "requires": { + "duplexer": "^0.1.2" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "dependencies": { + "clean-css": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "terser": { + "version": "5.19.2", + "resolved": "https://registry.npmmirror.com/terser/-/terser-5.19.2.tgz", + "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + } + } + }, + "html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true + }, + "html-webpack-plugin": { + "version": "5.5.3", + "resolved": "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz", + "integrity": "sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "dependencies": { + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + } + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + } + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + } + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-file-esm": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-file-esm/-/is-file-esm-1.0.0.tgz", + "integrity": "sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==", + "dev": true, + "requires": { + "read-pkg-up": "^7.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "joi": { + "version": "17.9.2", + "resolved": "https://registry.npmmirror.com/joi/-/joi-17.9.2.tgz", + "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + }, + "dependencies": { + "@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + } + } + }, + "js-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.1.tgz", + "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==" + }, + "js-message": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsencrypt": { + "version": "3.0.0-rc.1", + "resolved": "https://registry.npmmirror.com/jsencrypt/-/jsencrypt-3.0.0-rc.1.tgz", + "integrity": "sha512-gcvGaqerlUJy1Kq6tNgPYteVEoWNemu+9hBe2CdsCIz4rVcwjoTQ72iD1W76/PRMlnkzG0yVh7nwOOMOOUfKmg==" + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "klona": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true + }, + "launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "launch-editor-middleware": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/launch-editor-middleware/-/launch-editor-middleware-2.6.0.tgz", + "integrity": "sha512-K2yxgljj5TdCeRN1lBtO3/J26+AIDDDw+04y6VAiZbWcTdBwsYN6RrZBnW5DN/QiSIdKNjKdATLUUluWWFYTIA==", + "dev": true, + "requires": { + "launch-editor": "^2.6.0" + } + }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.4" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "requires": { + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "module-alias": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/module-alias/-/module-alias-2.2.3.tgz", + "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==", + "dev": true + }, + "mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true + }, + "node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==" + }, + "normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dev": true, + "requires": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "postcss": { + "version": "8.4.28", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.28.tgz", + "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true + }, + "postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true + }, + "postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true + }, + "postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true + }, + "postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + } + }, + "postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true + }, + "postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true + }, + "postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "requires": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + } + }, + "postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress-webpack-plugin": { + "version": "1.0.16", + "resolved": "https://registry.npmmirror.com/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz", + "integrity": "sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA==", + "dev": true, + "requires": { + "chalk": "^2.1.0", + "figures": "^2.0.0", + "log-update": "^2.3.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + }, + "log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + } + } + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + } + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.32.13", + "resolved": "https://registry.npmmirror.com/sass/-/sass-1.32.13.tgz", + "integrity": "sha512-dEgI9nShraqP7cXQH+lEXVf73WOPCse0QlFzSD8k+1TcOxCMwVXfQlr0jtoluZysQOyJGnfr21dLvYKDJq8HkA==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0" + } + }, + "sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "requires": { + "node-forge": "^1" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmmirror.com/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true + }, + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "sirv": { + "version": "1.0.19", + "resolved": "https://registry.npmmirror.com/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "dev": true, + "requires": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^1.0.0" + } + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "ssr-window": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ssr-window/-/ssr-window-2.0.0.tgz", + "integrity": "sha512-NXzN+/HPObKAx191H3zKlYomE5WrVIkoCB5IaSdvKokxTpjBdWfr0RaP+1Z5KOfDT0ZVz+2tdtiBkhsEQ9p+0A==" + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } + } + }, + "swiper": { + "version": "5.4.5", + "resolved": "https://registry.npmmirror.com/swiper/-/swiper-5.4.5.tgz", + "integrity": "sha512-7QjA0XpdOmiMoClfaZ2lYN6ICHcMm72LXiY+NF4fQLFidigameaofvpjEEiTQuw3xm5eksG5hzkaRsjQX57vtA==", + "requires": { + "dom7": "^2.1.5", + "ssr-window": "^2.0.0" + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "terser": { + "version": "5.19.2", + "resolved": "https://registry.npmmirror.com/terser/-/terser-5.19.2.tgz", + "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + } + } + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "thread-loader": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/thread-loader/-/thread-loader-3.0.4.tgz", + "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", + "dev": true, + "requires": { + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "throttle-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-1.1.0.tgz", + "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==" + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "dev": true + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "vue": { + "version": "2.7.14", + "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.14.tgz", + "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", + "requires": { + "@vue/compiler-sfc": "2.7.14", + "csstype": "^3.1.0" + } + }, + "vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "vue-loader": { + "version": "17.2.2", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-17.2.2.tgz", + "integrity": "sha512-aqNvKJvnz2A/6VWeJZodAo8XLoAlVwBv+2Z6dama+LHsAF+P/xijQ+OfWrxIs0wcGSJduvdzvTuATzXbNKkpiw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "watchpack": "^2.4.0" + } + }, + "vue-router": { + "version": "3.6.5", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-3.6.5.tgz", + "integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==" + }, + "vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + } + } + }, + "vue-template-compiler": { + "version": "2.7.14", + "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz", + "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "vuex": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/vuex/-/vuex-3.6.2.tgz", + "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==" + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "webpack": { + "version": "5.88.2", + "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.88.2.tgz", + "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "4.9.0", + "resolved": "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz", + "integrity": "sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } + } + }, + "webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npmmirror.com/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "dev": true, + "requires": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + } + }, + "webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + } + } + }, + "webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "open": { + "version": "8.4.2", + "resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + }, + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmmirror.com/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, + "webpack-virtual-modules": { + "version": "0.4.6", + "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", + "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", + "dev": true + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "whatwg-fetch": { + "version": "3.6.17", + "resolved": "https://registry.npmmirror.com/whatwg-fetch/-/whatwg-fetch-3.6.17.tgz", + "integrity": "sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ==", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/package.json b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/package.json new file mode 100644 index 00000000..7aa3efde --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/package.json @@ -0,0 +1,35 @@ +{ + "name": "agile-portal-front", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve --mode development", + "build:dev": "vue-cli-service build --mode development", + "build:prod": "vue-cli-service build --mode production" + }, + "dependencies": { + "axios": "^1.4.0", + "core-js": "^3.8.3", + "crypto-js": "^4.1.1", + "element-ui": "^2.15.13", + "normalize.css": "^8.0.1", + "nprogress": "^0.2.0", + "swiper": "^5.4.5", + "vue": "^2.6.14", + "vue-router": "^3.5.1", + "vuex": "^3.6.2", + "jsencrypt": "3.0.0-rc.1", + "js-cookie": "3.0.1" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "~5.0.0", + "@vue/cli-plugin-router": "~5.0.0", + "@vue/cli-plugin-vuex": "~5.0.0", + "@vue/cli-service": "~5.0.0", + "babel-plugin-component": "^1.1.1", + "sass": "^1.32.7", + "sass-loader": "^12.0.0", + "vue-template-compiler": "^2.6.14", + "webpack": "^5.88.2" + } +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/pom.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/pom.xml new file mode 100644 index 00000000..c26717f4 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/pom.xml @@ -0,0 +1,73 @@ + + + 4.0.0 + + com.jiuyv.sptcc.agile + agile-portal + 0.2.8 + + agile-portal-ui + + + UTF-8 + 1.12.1 + v16.17.0 + 8.15.0 + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + com.github.eirslett + frontend-maven-plugin + ${frontend-maven-plugin.version} + + https://npm.taobao.org/mirrors/node/ + http://172.16.12.11:8082/repository/npm_public/npm/-/ + http://172.16.12.11:8082/repository/npm_public/ + /opt/nodenpm/ + ${node.version} + ${npm.version} + + + + + install node and npm + + install-node-and-npm + + generate-resources + + + + npm install + + npm + + generate-resources + + install --legacy-peer-deps + + + + + npm run build + + npm + + + run build:prod + + + + + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/public/favicon.ico b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/public/favicon.ico new file mode 100644 index 00000000..16e6fcd8 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/public/favicon.ico differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/public/index.html b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/public/index.html new file mode 100644 index 00000000..c3e5161a --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/public/index.html @@ -0,0 +1,25 @@ + + + + + + + + + 久事大数据开放平台 + + + +
+ + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/App.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/App.vue new file mode 100644 index 00000000..dd6bfc17 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/App.vue @@ -0,0 +1,28 @@ + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/api/homeView.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/api/homeView.js new file mode 100644 index 00000000..d3c62efd --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/api/homeView.js @@ -0,0 +1,71 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-08-04 11:13:12 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-10-18 16:49:46 + * @FilePath: \agile-portal-ui\src\api\homeView.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ + +import request from '@/utils/request' + +// 首页banner +export function listBanner(query) { + return request({ + url: '/content/banner', + method: 'get', + }) +} +// 应用场景 +export function scenesList(query) { + return request({ + url: '/content/scenesList', + method: 'get', + }) +} +//新闻 +export function listNews(query) { + return request({ + url: '/content/list', + method: 'get', + }) +} +//新闻详情 +export function contentInfo(id) { + return request({ + url: '/content/contentInfo?contentId=' + id, + method: 'get', + }) +} +//API列表 +export function listApi(query) { + return request({ + url: '/api/list', + method: 'get', + params: query + }) +} +// 产品介绍 +export function dataProduct() { + return request({ + url: '/content/dataProduct', + method: 'get', + }) +} + +// SDK下载 +export function sdkDownload() { + return request({ + url: '/content/sdkDownload', + method: 'get', + responseType: 'blob', + }) +} + +export function downloadFile() { + return request({ + url: '/content/wordDownload', + method: 'get', + responseType: 'blob', + }) +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/api/login.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/api/login.js new file mode 100644 index 00000000..76869bf1 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/api/login.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +export function verifyUser(data) { + return request({ + url: '/verifyUser', + method: 'post', + data: data + }) +} +// 登录 +export function login(data) { + return request({ + url: '/login', + method: 'post', + data: data + }) +} +//sendPhoneCode +export function sendPhoneCode(data) { + return request({ + url: '/sendPhoneCode', + method: 'get', + }) +} +export function getInfo() { + return request({ + url: '/getInfo', + method: 'get', + }) +} +// 退出方法 +export function logout() { + return request({ + url: '/logout', + method: 'post' + }) +} +//KEY与iv获取接口(get) +export function getKeyiv() { + return request({ + url: '/getPublicKey', + method: 'get' + }) +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/api/user.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/api/user.js new file mode 100644 index 00000000..a9310400 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/api/user.js @@ -0,0 +1,205 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-08-04 11:13:12 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-12-21 16:53:10 + * @FilePath: \agile-portal-ui\src\api\user.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import request from '@/utils/request' +//我的申请 +//实验室上传申请列表 +export function laboratoryList(query) { + return request({ + url: '/myApply/laboratoryList', + method: 'get', + params: query + }) +} +//详情 +export function laboratoryDetail(id) { + return request({ + url: '/myApply/laboratoryDetail?reviewId=' + id, + method: 'get', + }) +} +//数据导出申请 +export function exportApplyList(query) { + return request({ + url: '/myApply/exportList', + method: 'get', + params: query + }) +} +//下载 +export function download(id) { + return request({ + url: '/myApply/download?downloadApplyId=' + id, + method: 'get', + responseType: 'blob', + }) +} +export function isDownload(query) { + return request({ + url: '/myApply/download', + method: 'get', + params: query, + }) +} +//我的实验室列表 +export function myLabList(query) { + return request({ + url: '/myLab/list', + method: 'get', + params: query + }) +} +//详情 +export function infoDetail(id) { + return request({ + url: '/myLab/info?applyId=' + id, + method: 'get', + }) +} +//重启 +export function restart(data) { + return request({ + url: '/myLab/restart', + method: 'post', + data: data + }) +} + +//数据注入 +export function dataInjection(data) { + return request({ + url: '/myLab/dataInjection', + method: 'post', + data: data + }) +} +//申请下载-获取文件列表 +export function fileList(id) { + return request({ + url: '/myLab/fileList?applyId=' + id, + method: 'get', + }) +} +// 申请下载 - 申请 +export function applyDown(data) { + return request({ + url: '/myLab/applyDown', + method: 'post', + data: data + }) +} +//我的应用 +//API列表 +export function userApiList(query) { + return request({ + url: '/api/userApiList', + method: 'get', + params: query + }) +} +//接口调用统计 +export function userApiStatisticsList(query) { + return request({ + url: '/api/userApiStatisticsList', + method: 'get', + params: query + }) +} +//我的消息 +export function myMessageList(query) { + return request({ + url: '/myMessage/page', + method: 'get', + params: query + }) +} +// 详情 +export function myMessageDetail(id) { + return request({ + url: '/myMessage/detail?msgId=' + id, + method: 'post' + }) +} +// 已读 +export function myMessageMarkRead(data) { + return request({ + url: 'myMessage/markRead', + method: 'post', + data: data + }) +} +//我的资源 +export function myResourcesList(query) { + return request({ + url: '/myResources/list', + method: 'get', + params: query + }) +} + +// 新增上传文件 +export function uploadFile(data) { + return request({ + url: '/myResources/uploadFile', + method: 'post', + data: data, + headers: { + 'Content-Type': 'multipart/form-data' + } + }) +} + +//删除文件 +export function deleteFile(id) { + return request({ + url: '/myResources/delete?fileId=' + id, + method: 'delete', + }) +} + +//忘记密码 +//获取验证码 +export function getPhoneByUser(username) { + return request({ + url: '/rePwd/getPhoneByUser?username=' + username, + method: 'get', + }) +} +//获取验证码 +export function sendPhoneCode() { + return request({ + url: '/rePwd/sendPhoneCode', + method: 'get', + }) +} + +//验证验证码 +export function verifyPhoneCode(phoneCode) { + return request({ + url: '/rePwd/verifyPhoneCode?phoneCode=' + phoneCode, + method: 'get', + }) +} + +// 重置密码 +export function resetPassword(data) { + return request({ + url: '/rePwd/reset', + method: 'post', + data: data + }) +} + +// 修改密码 +export function changePassword(data) { + return request({ + url: '/changePassword', + method: 'post', + data: data + }) +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/css/base.scss b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/css/base.scss new file mode 100644 index 00000000..2c21158b --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/css/base.scss @@ -0,0 +1,97 @@ +a { + text-decoration: none; + color: #000; + line-height: 1; + margin: 0; + padding: 0; +} + +body { + background: #fafafa; +} + +h1, +h2, +h3, +h4, +h5, +h6, +a, +ul, +div, +dd { + text-align: left; + padding: 0; + margin: 0; +} + +li { + list-style: none; +} + +.top-banner { + width: 100%; + height: 280px; + overflow: hidden; + background: url("@/assets/images/data-product.jpg") no-repeat top center; + background-size: 100%; + + .slogan { + width: 1200px; + color: #fff; + margin: 90px auto 0 auto; + + .title { + font-size: 24px; + font-weight: 700; + } + + .summary { + padding-top: 20px; + line-height: 1; + font-size: 18px; + } + } +} + +.inner-container { + width: 1200px; + margin: 50px auto; + + .common-inner-title { + font-size: 24px; + margin-bottom: 50px; + font-weight: 500; + text-align: center; + + span { + position: relative; + padding-bottom: 5px; + + &::after { + position: absolute; + bottom: -5px; + left: 25%; + width: 50%; + height: 3px; + border-radius: 2px; + content: ''; + background: linear-gradient(to left, #2555F4, #1884EB); + } + } + + } +} + +.el-empty__image { + width: 140px; +} + +.verifybox { + top: 43%; + left: 73%; +} + +.container { + padding-top: 60px; +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/image/default.jpg b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/image/default.jpg new file mode 100644 index 00000000..963f9f97 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/image/default.jpg differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/image/open.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/image/open.png new file mode 100644 index 00000000..a6718367 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/image/open.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/image/out.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/image/out.png new file mode 100644 index 00000000..553f52ed Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/image/out.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/image/top.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/image/top.png new file mode 100644 index 00000000..152047d5 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/image/top.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/image/user.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/image/user.png new file mode 100644 index 00000000..ce11aa5e Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/image/user.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/1.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/1.png new file mode 100644 index 00000000..6a6c34ea Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/1.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/2.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/2.png new file mode 100644 index 00000000..b3b41ef8 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/2.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/3.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/3.png new file mode 100644 index 00000000..04da2502 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/3.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/boder.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/boder.png new file mode 100644 index 00000000..fa0066ee Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/boder.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/case-banner.jpg b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/case-banner.jpg new file mode 100644 index 00000000..d91ac76f Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/case-banner.jpg differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/case-bg.jpg b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/case-bg.jpg new file mode 100644 index 00000000..b36d8ad1 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/case-bg.jpg differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/data-laboratory.jpg b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/data-laboratory.jpg new file mode 100644 index 00000000..e28577b8 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/data-laboratory.jpg differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/data-product.jpg b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/data-product.jpg new file mode 100644 index 00000000..ac2c1322 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/data-product.jpg differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/data-service.jpg b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/data-service.jpg new file mode 100644 index 00000000..f26109ca Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/data-service.jpg differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/index-product-pic1.jpg b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/index-product-pic1.jpg new file mode 100644 index 00000000..b30d9773 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/index-product-pic1.jpg differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/index-product-pic2.jpg b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/index-product-pic2.jpg new file mode 100644 index 00000000..963f9f97 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/index-product-pic2.jpg differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/index-product-pic3.jpg b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/index-product-pic3.jpg new file mode 100644 index 00000000..07d21ef6 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/index-product-pic3.jpg differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/jiushi-logo.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/jiushi-logo.png new file mode 100644 index 00000000..cb300867 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/jiushi-logo.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-oprate-pic1.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-oprate-pic1.png new file mode 100644 index 00000000..432d4b8f Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-oprate-pic1.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-oprate-pic2.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-oprate-pic2.png new file mode 100644 index 00000000..58d6b87d Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-oprate-pic2.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-oprate-pic3.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-oprate-pic3.png new file mode 100644 index 00000000..5f304679 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-oprate-pic3.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-oprate-pic4.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-oprate-pic4.png new file mode 100644 index 00000000..a8b09d18 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-oprate-pic4.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-pic1.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-pic1.png new file mode 100644 index 00000000..2a370022 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-pic1.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-pic2.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-pic2.png new file mode 100644 index 00000000..56ed1582 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-pic2.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-pic3.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-pic3.png new file mode 100644 index 00000000..409766d8 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab-pic3.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab1.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab1.png new file mode 100644 index 00000000..afee3a5f Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab1.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab2.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab2.png new file mode 100644 index 00000000..dda04ed9 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab2.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab3.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab3.png new file mode 100644 index 00000000..b9a2a8a6 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab3.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab4.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab4.png new file mode 100644 index 00000000..054f9db3 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/lab4.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/login-bg.jpg b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/login-bg.jpg new file mode 100644 index 00000000..6441f36e Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/login-bg.jpg differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/news-title-bg.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/news-title-bg.png new file mode 100644 index 00000000..6b53de60 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/news-title-bg.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/no-data.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/no-data.png new file mode 100644 index 00000000..748f9da0 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/no-data.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/open.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/open.png new file mode 100644 index 00000000..cb8ddb86 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/open.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/process-arrow-icon.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/process-arrow-icon.png new file mode 100644 index 00000000..d627fd7d Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/process-arrow-icon.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/process-icon1.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/process-icon1.png new file mode 100644 index 00000000..7c0f6cec Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/process-icon1.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/process-icon2.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/process-icon2.png new file mode 100644 index 00000000..41d452c8 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/process-icon2.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/process-icon3.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/process-icon3.png new file mode 100644 index 00000000..d4275a8c Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/process-icon3.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/process-icon4.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/process-icon4.png new file mode 100644 index 00000000..b1eb849f Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/process-icon4.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/sjsys.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/sjsys.png new file mode 100644 index 00000000..6f875d5c Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/sjsys.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/user-bg.jpg b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/user-bg.jpg new file mode 100644 index 00000000..f6376eba Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/user-bg.jpg differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/zxdt.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/zxdt.png new file mode 100644 index 00000000..188d39e7 Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/images/zxdt.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/logo.png b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/logo.png new file mode 100644 index 00000000..f3d2503f Binary files /dev/null and b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/assets/logo.png differ diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/Markdown.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/Markdown.vue new file mode 100644 index 00000000..4f4b72c7 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/Markdown.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/NewsSwiper.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/NewsSwiper.vue new file mode 100644 index 00000000..f3b8c9f6 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/NewsSwiper.vue @@ -0,0 +1,126 @@ + + + + + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/Pagination/index.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/Pagination/index.vue new file mode 100644 index 00000000..26bf5d49 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/Pagination/index.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/ParentView/index.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/ParentView/index.vue new file mode 100644 index 00000000..7bf61489 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/ParentView/index.vue @@ -0,0 +1,3 @@ + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/Verify.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/Verify.vue new file mode 100644 index 00000000..f5a35dfb --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/Verify.vue @@ -0,0 +1,491 @@ + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/Verify/VerifyPoints.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/Verify/VerifyPoints.vue new file mode 100644 index 00000000..df2f9c01 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/Verify/VerifyPoints.vue @@ -0,0 +1,254 @@ + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/Verify/VerifySlide.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/Verify/VerifySlide.vue new file mode 100644 index 00000000..7a55ea83 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/Verify/VerifySlide.vue @@ -0,0 +1,361 @@ + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/api/index.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/api/index.js new file mode 100644 index 00000000..270a916b --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/api/index.js @@ -0,0 +1,25 @@ +/** + * 此处可直接引用自己项目封装好的 axios 配合后端联调 + */ + +import request from '@/utils/request' // 组件内部封装的axios +// import request from "@/api/axios.js" //调用项目封装的axios + +// 获取验证图片 以及token +export function reqGet(data) { + return request({ + url: '/captcha/get', + method: 'post', + data + }) +} + +// 滑动或者点选验证 +export function reqCheck(data) { + return request({ + url: '/captcha/check', + method: 'post', + data + }) +} + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/utils/ase.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/utils/ase.js new file mode 100644 index 00000000..71f07e0f --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/utils/ase.js @@ -0,0 +1,11 @@ +import CryptoJS from 'crypto-js' +/** + * @word 要加密的内容 + * @keyWord String 服务器随机返回的关键字 + * */ +export function aesEncrypt(word, keyWord = 'XwKsGlMcdPMEhR1B') { + var key = CryptoJS.enc.Utf8.parse(keyWord) + var srcs = CryptoJS.enc.Utf8.parse(word) + var encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }) + return encrypted.toString() +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/utils/axios.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/utils/axios.js new file mode 100644 index 00000000..171c4ab2 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/utils/axios.js @@ -0,0 +1,30 @@ +import axios from 'axios' + +axios.defaults.baseURL = process.env.BASE_API + +const service = axios.create({ + timeout: 40000, + headers: { + 'X-Requested-With': 'XMLHttpRequest', + 'Content-Type': 'application/json; charset=UTF-8' + }, +}) +service.interceptors.request.use( + config => { + return config + }, + error => { + Promise.reject(error) + } +) + +// response interceptor +service.interceptors.response.use( + response => { + const res = response.data + return res + }, + error => { + } +) +export default service diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/utils/util.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/utils/util.js new file mode 100644 index 00000000..8f26e736 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/components/verifition/utils/util.js @@ -0,0 +1,36 @@ +export function resetSize(vm) { + var img_width, img_height, bar_width, bar_height // 图片的宽度、高度,移动条的宽度、高度 + + var parentWidth = vm.$el.parentNode.offsetWidth || window.offsetWidth + var parentHeight = vm.$el.parentNode.offsetHeight || window.offsetHeight + + if (vm.imgSize.width.indexOf('%') != -1) { + img_width = parseInt(this.imgSize.width) / 100 * parentWidth + 'px' + } else { + img_width = this.imgSize.width + } + + if (vm.imgSize.height.indexOf('%') != -1) { + img_height = parseInt(this.imgSize.height) / 100 * parentHeight + 'px' + } else { + img_height = this.imgSize.height + } + + if (vm.barSize.width.indexOf('%') != -1) { + bar_width = parseInt(this.barSize.width) / 100 * parentWidth + 'px' + } else { + bar_width = this.barSize.width + } + + if (vm.barSize.height.indexOf('%') != -1) { + bar_height = parseInt(this.barSize.height) / 100 * parentHeight + 'px' + } else { + bar_height = this.barSize.height + } + + return { imgWidth: img_width, imgHeight: img_height, barWidth: bar_width, barHeight: bar_height } +} + +export const _code_chars = [1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] +export const _code_color1 = ['#fffff0', '#f0ffff', '#f0fff0', '#fff0f0'] +export const _code_color2 = ['#FF0033', '#006699', '#993366', '#FF9900', '#66CC66', '#FF33CC'] diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/layout/components/AppContainer/index.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/layout/components/AppContainer/index.vue new file mode 100644 index 00000000..8d8095c3 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/layout/components/AppContainer/index.vue @@ -0,0 +1,35 @@ + + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/layout/components/Footer/index.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/layout/components/Footer/index.vue new file mode 100644 index 00000000..39e7472e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/layout/components/Footer/index.vue @@ -0,0 +1,180 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/layout/components/TopNav/index.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/layout/components/TopNav/index.vue new file mode 100644 index 00000000..6b24850c --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/layout/components/TopNav/index.vue @@ -0,0 +1,348 @@ + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/layout/components/index.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/layout/components/index.js new file mode 100644 index 00000000..9b4aa199 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/layout/components/index.js @@ -0,0 +1,3 @@ +export { default as AppContainer } from './AppContainer' +export { default as TopNav } from './TopNav' +export { default as Footer } from './Footer' \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/layout/index.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/layout/index.vue new file mode 100644 index 00000000..40905128 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/layout/index.vue @@ -0,0 +1,111 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/main.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/main.js new file mode 100644 index 00000000..60c4a4b6 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/main.js @@ -0,0 +1,34 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-08-04 11:13:11 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-10-20 10:16:29 + * @FilePath: \agile-portal-ui\src\main.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import Vue from 'vue' +import App from './App.vue' +import router from './router' +import store from './store' +import 'normalize.css/normalize.css' +import '@/assets/css/base.scss' // base css +import Cookies from 'js-cookie' +import Element from 'element-ui'; +import 'element-ui/lib/theme-chalk/index.css'; +import './permission' // permission control +import { resetForm, parseTime, arrList } from "@/utils/common"; +Vue.use(Element, { + size: Cookies.get('size') || 'medium' // set element-ui default size +}) +import Pagination from "@/components/Pagination"; +Vue.component('Pagination', Pagination) +Vue.prototype.resetForm = resetForm +Vue.prototype.parseTime = parseTime +Vue.prototype.arrList = arrList +Vue.config.productionTip = false + +new Vue({ + router, + store, + render: h => h(App) +}).$mount('#app') diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/permission.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/permission.js new file mode 100644 index 00000000..b45cf56f --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/permission.js @@ -0,0 +1,88 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-08-04 11:13:12 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-09-26 09:41:22 + * @FilePath: \agile-portal-ui\src\permission.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import router from "./router"; +import store from "./store"; +import {Message} from "element-ui"; +import NProgress from "nprogress"; // progress bar +import "nprogress/nprogress.css"; // progress bar style +import {isRelogin} from '@/utils/request' + +NProgress.configure({ showSpinner: false }); // NProgress Configuration + +const whiteList = [ + "Index", + "productsList", + "ProductsDetail", + "DataServiceGuide", + "ApiList", + "DataLaboratory", + "SuccessCase", + "Login", + "ResetPwd", + "FindPwd", + "NewsCenter", + "NewsDetail", + "introduce", + "AccountIssues", + "LegalNotice", + "privacyStatement", + "CompanyProfile" +]; // no redirect whitelist + +router.beforeEach(async (to, from, next) => { + + // start progress bar + NProgress.start(); + + const storedData = localStorage.getItem('myData'); + if (storedData) { + // 判断当前用户是否已拉取完user_info信息 + isRelogin.show = true + store.dispatch('GetInfo').then(() => { + isRelogin.show = false + next(); + NProgress.done(); + }).catch(err => { + store.dispatch('LogOut').then(() => { + if (whiteList.indexOf(to.name) === -1) { + Message.error(err) + next({ path: '/login' }) + } else { + next() + } + }) + }) + } else { + if (whiteList.indexOf(to.name) === -1) { + // 判断当前用户是否已拉取完user_info信息 + isRelogin.show = true + store.dispatch('GetInfo').then(() => { + isRelogin.show = false + next(); + NProgress.done(); + }).catch(err => { + store.dispatch('LogOut').then(() => { + Message.error(err) + next({ path: '/login' }) + }) + }) + } else { + + next(); + NProgress.done(); + } + } + + +}); + +router.afterEach(() => { + // finish progress bar + NProgress.done(); +}); diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/router/index.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/router/index.js new file mode 100644 index 00000000..bc6b5c7b --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/router/index.js @@ -0,0 +1,319 @@ +import Vue from 'vue' +import VueRouter from 'vue-router' +import ParentView from '@/components/ParentView' +import HomeView from '@/views/HomeView.vue' +const DataProducts = () => import('@/views/DataProducts.vue') +const ProductsDetail = () => import('@/views/ProductsDetail.vue') +const DataServiceGuide = () => import('@/views/DataServiceGuide.vue') +const introduce = () => import('@/views/introduce.vue') +const DataLaboratory = () => import('@/views/DataLaboratory.vue') +const SuccessCase = () => import('@/views/SuccessCase.vue') +const ApiList = () => import('@/views/ApiList.vue') +const Login = () => import('@/views/Login.vue') +const NewsCenter = () => import('@/views/NewsCenter.vue') +const NewsDetail = () => import('@/views/NewsDetail.vue') + +const AccountIssues = () => import('@/views/AccountIssues.vue') +const LegalNotice = () => import('@/views/LegalNotice.vue') +const privacyStatement = () => import('@/views/privacyStatement.vue') +const CompanyProfile = () => import('@/views/CompanyProfile.vue') + +const UserIndex = () => import('@/views/user/UserIndex.vue') +const UserInfo = () => import('@/views/user/UserInfo.vue') +const LabApply = () => import('@/views/user/LabApply.vue') +const DataApply = () => import('@/views/user/DataApply.vue') +const MyLab = () => import('@/views/user/MyLab.vue') +const MyLabDetail = () => import('@/views/user/MyLabDetail.vue') +const MyApiList = () => import('@/views/user/MyApiList.vue') +const MyApicall = () => import('@/views/user/MyApicall.vue') +const MyData = () => import('@/views/user/MyData.vue') +const MyMsg = () => import('@/views/user/MyMsg.vue') +const ResetPwd = () => import('@/views/user/ResetPwd.vue') +const FindPwd = () => import('@/views/user/FindPwd.vue') +const LabDetail = () => import('@/views/user/LabDetail.vue') + +Vue.use(VueRouter) +import Layout from '@/layout' +export const userRoutes = [ + { + path: 'index', + component: UserInfo, + name: 'UserInfo', + hidden: false, + meta: { title: '个人信息' } + }, + { + path: 'myapply', + component: ParentView, + name: 'myapply', + hidden: false, + isOpen: false, + meta: { title: '我的申请' }, + children: [ + { + path: 'labapply', + component: LabApply, + name: 'LabApply', + hidden: false, + meta: { title: '数据注入申请' }, + }, + { + path: 'labdetail/:applyId', + component: LabDetail, + hidden: true, + name: 'LabDetail', + meta: { title: '实验室数据详情' }, + }, + { + path: 'myLabDetail/:applyId', + component: MyLabDetail, + hidden: true, + name: 'MyLabDetail', + meta: { title: '实验室数据详情' }, + }, + { + path: 'dataapply', + component: DataApply, + name: 'DataApply', + hidden: false, + meta: { title: '数据导出申请' } + }, + ] + }, + { + path: 'mylab', + component: MyLab, + name: 'MyLab', + hidden: false, + meta: { title: '我的实验室' } + }, + { + path: 'myapp', + component: ParentView, + name: 'MyApp', + hidden: false, + isOpen: false, + meta: { title: '我的应用' }, + children: [ + { + path: 'list', + component: MyApiList, + name: 'myAppList', + hidden: false, + meta: { title: 'API列表' }, + }, + { + path: 'apicall', + component: MyApicall, + name: 'ApiCall', + hidden: false, + meta: { title: '接口调用统计' } + }, + ] + }, + { + path: 'mydata', + component: MyData, + name: 'MyData', + hidden: false, + meta: { title: '我的资源' } + }, + { + path: 'mymsg', + component: MyMsg, + name: 'MyMsg', + hidden: false, + meta: { title: '我的消息' } + }, +] +const routes = [ + { + path: '', + component: Layout, + redirect: '/', + children: [ + { + path: '/', + component: HomeView, + name: 'Index', + hidden: false, + meta: { title: '首页' } + }, + // { + // path: 'products', + // component: DataProducts, + // name: 'DataProducts', + // hidden: false, + // meta: { title: '数据产品' } + // }, + { + path: 'products', + component: ParentView, + name: 'DataProducts', + hidden: false, + meta: { title: '数据产品' }, + children: [ + { + path: 'productsList', + component: DataProducts, + name: 'productsList', + hidden: false, + meta: { title: '数据产品' }, + }, + { + path: 'detail/:contentId(\\d+)', + component: ProductsDetail, + name: 'ProductsDetail', + hidden: false, + meta: { title: '产品详情' } + }, + ] + }, + { + path: 'news', + component: ParentView, + redirect: 'news/list', + hidden: true, + meta: { title: 'NewsCenter' }, + children: [ + { + path: 'list', + component: NewsCenter, + name: 'NewsCenter', + hidden: false, + meta: { title: '新闻中心' }, + }, + { + path: 'detail/:contentId(\\d+)', + component: NewsDetail, + name: 'NewsDetail', + hidden: false, + meta: { title: '新闻详情' } + }, + ] + }, + + { + path: 'service', + component: ParentView, + name: 'DataService', + hidden: false, + meta: { title: '数据服务' }, + children: [ + { + path: 'introduce', + component: introduce, + name: 'introduce', + hidden: false, + meta: { title: '服务介绍' } + }, + { + path: 'guide', + component: DataServiceGuide, + name: 'DataServiceGuide', + hidden: false, + meta: { title: '接入指引' } + }, + { + path: 'api', + component: ApiList, + name: 'ApiList', + hidden: false, + meta: { title: 'API列表' } + } + ] + + }, + { + path: 'laboratory', + component: DataLaboratory, + name: 'DataLaboratory', + meta: { title: '数据实验室' } + }, + { + path: 'case', + component: SuccessCase, + name: 'SuccessCase', + hidden: false, + meta: { title: '成功案例' } + }, + { + path: 'user', + component: UserIndex, + redirect: 'user/index', + name: 'UserIndex', + hidden: false, + meta: { title: '用户中心' }, + children: userRoutes + }, + { + path: '/resetpwd', + name: 'ResetPwd', + component: ResetPwd, + hidden: false, + meta: { title: '修改密码' }, + }, + { + path: '/findpwd', + name: 'FindPwd', + hidden: false, + component: FindPwd, + meta: { title: '忘记密码' }, + }, + { + path: 'AccountIssues', + component: AccountIssues, + name: 'AccountIssues', + hidden: false, + meta: { title: '账户问题' } + }, + { + path: 'LegalNotice', + component: LegalNotice, + name: 'LegalNotice', + hidden: false, + meta: { title: '法律声明' } + }, + { + path: 'privacyStatement', + component: privacyStatement, + name: 'privacyStatement', + hidden: false, + meta: { title: '隐私声明' } + }, + { + path: 'CompanyProfile', + component: CompanyProfile, + name: 'CompanyProfile', + hidden: false, + meta: { title: '公司简介' } + }, + + ] + }, + + { + path: '/login', + name: 'Login', + hidden: true, + // route level code-splitting + // this generates a separate chunk (about.[hash].js) for this route + // which is lazy-loaded when the route is visited. + component: Login + }, + +] + +// 防止连续点击多次路由报错 +let routerPush = VueRouter.prototype.push; +VueRouter.prototype.push = function push(location) { + return routerPush.call(this, location).catch(err => err) +} +const router = new VueRouter({ + //mode: 'history', + //base: process.env.BASE_URL, + //base: '/portal-gateway/', + routes +}) + +export default router diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/store/getters.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/store/getters.js new file mode 100644 index 00000000..2fdb42eb --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/store/getters.js @@ -0,0 +1,15 @@ +const getters = { + showChild: state => state.settings.showChild, + avatar: state => state.user.avatar, + userName: state => state.user.userName, + status: state => state.user.status, + phonenumber: state => state.user.phonenumber, + roles: state => state.user.roles, + nickName: state => state.user.nickName, + industryCategory: state => state.user.industryCategory, + enterpriseName: state => state.user.enterpriseName, + socialCreditCode: state => state.user.socialCreditCode, + enterpriseAddress: state => state.user.enterpriseAddress, + industryCategory: state => state.user.industryCategory, +} +export default getters diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/store/index.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/store/index.js new file mode 100644 index 00000000..49f06fb7 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/store/index.js @@ -0,0 +1,32 @@ +import Vue from 'vue' +import Vuex from 'vuex' +import user from './modules/user' +import permission from './modules/permission' +import settings from './modules/settings' +import getters from './getters' + +Vue.use(Vuex) + +/* export default new Vuex.Store({ + state: { + }, + getters: { + }, + mutations: { + }, + actions: { + }, + modules: { + } +}) */ + +const store = new Vuex.Store({ + modules: { + user, + permission, + settings + }, + getters +}) + +export default store diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/store/modules/permission.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/store/modules/permission.js new file mode 100644 index 00000000..d7a71187 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/store/modules/permission.js @@ -0,0 +1,6 @@ +const permission = { + state: {}, + mutations: {}, + actions: {} +} +export default permission \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/store/modules/settings.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/store/modules/settings.js new file mode 100644 index 00000000..695ab81b --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/store/modules/settings.js @@ -0,0 +1,25 @@ +const state = { + isChildShow: false +} +const mutations = { + CHANGE_SETTING: (state) => { + state.isChildShow = !state.isChildShow + }, + HIDE_SUB_MENU: (state) => { + state.isChildShow = false + }, +} +const actions = { + changeSetting({ commit }) { + commit('CHANGE_SETTING') + }, + hideSubMenu({ commit }) { + commit('HIDE_SUB_MENU') + }, +} +export default { + namespaced: true,//成为带命名空间的模块 + state, + mutations, + actions +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/store/modules/user.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/store/modules/user.js new file mode 100644 index 00000000..44c1a5e4 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/store/modules/user.js @@ -0,0 +1,60 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-08-04 11:13:12 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-11-24 13:38:32 + * @FilePath: \agile-portal-ui\src\store\modules\user.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import { getInfo, logout } from '@/api/login' +import { getToken, setToken, removeToken } from '@/utils/auth' +const user = { + state: { + userName: '', + avatar: '', + topbg: localStorage.getItem('topBg'), + topNav: false, + }, + mutations: { + UPDATE_STATE: (state, data) => { + let newState = { ...state, ...data } + for (let item in newState) { + state[item] = newState[item] + } + }, + SET_ROLES: (state, roles) => { + state.roles = roles + }, + }, + actions: { + // 获取用户信息 + GetInfo({ commit, state }) { + return new Promise((resolve, reject) => { + getInfo().then(res => { + const data = res.data + + localStorage.setItem('myData', JSON.stringify(data)); + commit('UPDATE_STATE', data) + resolve(res) + }).catch(error => { + + reject(error) + }) + }) + }, + + // 退出系统 + LogOut({ commit, state }) { + return new Promise((resolve, reject) => { + logout().then(() => { + localStorage.setItem('myData', ''); + resolve() + }).catch(error => { + reject(error) + }) + }) + }, + } +} + +export default user \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/auth.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/auth.js new file mode 100644 index 00000000..ee0ce5c2 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/auth.js @@ -0,0 +1,23 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-09-12 17:50:09 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-10-17 14:03:53 + * @FilePath: \agile-portal-ui\src\utils\auth.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import Cookies from 'js-cookie' + +const TokenKey = 'AdminPortal-Token' + +export function getToken() { + return Cookies.get(TokenKey) +} + +export function setToken(token) { + return Cookies.set(TokenKey, token) +} + +export function removeToken() { + return Cookies.remove(TokenKey) +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/common.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/common.js new file mode 100644 index 00000000..fbf30d5b --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/common.js @@ -0,0 +1,55 @@ +// 表单重置 +export function resetForm(refName) { + if (this.$refs[refName]) { + this.$refs[refName].resetFields(); + } +} +//数据字典 +export function arrList(val, arr) { + + var ArrList = arr + const obj = ArrList.find(item => item.value == val); + return obj ? obj.label : null; +} +// 日期格式化 +export function parseTime(time, pattern) { + if (arguments.length === 0 || !time) { + return null + } + const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' + let date + if (typeof time === 'object') { + date = time + } else { + if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { + time = parseInt(time) + } else if (typeof time === 'string') { + time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), ''); + } + if ((typeof time === 'number') && (time.toString().length === 10)) { + time = time * 1000 + } + date = new Date(time) + } + const formatObj = { + y: date.getFullYear(), + m: date.getMonth() + 1, + d: date.getDate(), + h: date.getHours(), + i: date.getMinutes(), + s: date.getSeconds(), + a: date.getDay() + } + const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { + let value = formatObj[key] + // Note: getDay() returns 0 on Sunday + if (key === 'a') { + return ['日', '一', '二', '三', '四', '五', '六'][value] + } + if (result.length > 0 && value < 10) { + value = '0' + value + } + return value || 0 + }) + return time_str +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/errorCode.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/errorCode.js new file mode 100644 index 00000000..d2111ee1 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/errorCode.js @@ -0,0 +1,6 @@ +export default { + '401': '认证失败,无法访问系统资源', + '403': '当前操作没有权限', + '404': '访问资源不存在', + 'default': '系统未知错误,请反馈给管理员' +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/jsencrypt.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/jsencrypt.js new file mode 100644 index 00000000..17d8f57f --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/jsencrypt.js @@ -0,0 +1,18 @@ +//import JSEncrypt from 'jsencrypt/bin/jsencrypt.min' +import JSEncrypt from 'jsencrypt'; + + +// 加密 +export function encrypt(publicKey, password) { + const encryptor = new JSEncrypt() + encryptor.setPublicKey(publicKey) // 设置公钥 + return encryptor.encrypt(password) // 对数据进行加密 +} + +// 解密 +export function decrypt(txt) { + const encryptor = new JSEncrypt() + encryptor.setPrivateKey(privateKey) // 设置私钥 + return encryptor.decrypt(txt) // 对数据进行解密 +} + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/plugins/cache.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/plugins/cache.js new file mode 100644 index 00000000..6b5c00b9 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/plugins/cache.js @@ -0,0 +1,77 @@ +const sessionCache = { + set (key, value) { + if (!sessionStorage) { + return + } + if (key != null && value != null) { + sessionStorage.setItem(key, value) + } + }, + get (key) { + if (!sessionStorage) { + return null + } + if (key == null) { + return null + } + return sessionStorage.getItem(key) + }, + setJSON (key, jsonValue) { + if (jsonValue != null) { + this.set(key, JSON.stringify(jsonValue)) + } + }, + getJSON (key) { + const value = this.get(key) + if (value != null) { + return JSON.parse(value) + } + }, + remove (key) { + sessionStorage.removeItem(key); + } +} +const localCache = { + set (key, value) { + if (!localStorage) { + return + } + if (key != null && value != null) { + localStorage.setItem(key, value) + } + }, + get (key) { + if (!localStorage) { + return null + } + if (key == null) { + return null + } + return localStorage.getItem(key) + }, + setJSON (key, jsonValue) { + if (jsonValue != null) { + this.set(key, JSON.stringify(jsonValue)) + } + }, + getJSON (key) { + const value = this.get(key) + if (value != null) { + return JSON.parse(value) + } + }, + remove (key) { + localStorage.removeItem(key); + } +} + +export default { + /** + * 会话级缓存 + */ + session: sessionCache, + /** + * 本地缓存 + */ + local: localCache +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/request.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/request.js new file mode 100644 index 00000000..15fca8f8 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/request.js @@ -0,0 +1,144 @@ +import axios from 'axios' +import {Message, MessageBox, Notification} from 'element-ui' +import store from '@/store' +import errorCode from '@/utils/errorCode' +//import cache from '@/plugins/cache' + +let downloadLoadingInstance; +// 是否显示重新登录 +export let isRelogin = { show: false }; +axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' + +// 创建axios实例 +const service = axios.create({ + // axios中请求配置有baseURL选项,表示请求URL公共部分 + baseURL: process.env.VUE_APP_BASE_API, + // 超时 + timeout: 20000, + withCredentials: true //表示每次请求可以携带 cookie 和 session +}) + +// request拦截器 +service.interceptors.request.use(config => { + // 是否需要防止数据重复提交 + /* const isRepeatSubmit = (config.headers || {}).repeatSubmit === false + // get请求映射params参数 + if (config.method === 'get' && config.params) { + let url = config.url + '?' + tansParams(config.params); + url = url.slice(0, -1); + config.params = {}; + config.url = url; + } + if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) { + const requestObj = { + url: config.url, + data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data, + time: new Date().getTime() + } + const sessionObj = cache.session.getJSON('sessionObj') + if (sessionObj === undefined || sessionObj === null || sessionObj === '') { + cache.session.setJSON('sessionObj', requestObj) + } else { + const s_url = sessionObj.url; // 请求地址 + const s_data = sessionObj.data; // 请求数据 + const s_time = sessionObj.time; // 请求时间 + const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 + if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { + const message = '数据正在处理,请勿重复提交'; + console.warn(`[${s_url}]: ` + message) + return Promise.reject(new Error(message)) + } else { + cache.session.setJSON('sessionObj', requestObj) + } + } + } */ + return config +}, error => { + Promise.reject(error) +}) + +// 响应拦截器 +service.interceptors.response.use(res => { + const Contentdisposition = res.headers['content-disposition'] + if (Contentdisposition != undefined) { + + store.filename = Contentdisposition + } + // 未设置状态码则默认成功状态 + const code = res.data.code || 200; + // 获取错误信息 + const msg = errorCode[code] || res.data.msg || errorCode['default'] + if (code === 401) { + if (!isRelogin.show) { + isRelogin.show = true; + MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { + confirmButtonText: '重新登录', + cancelButtonText: '取消', + type: 'warning' + } + ).then(() => { + isRelogin.show = false; + store.dispatch('LogOut').then(() => { + location.href = location.href.split('#')[0]; + }) + }).catch(() => { + isRelogin.show = false; + }); + } + return Promise.reject('无效的会话,或者会话已过期,请重新登录。') + } else if (code === 500) { + Message({ + message: msg, + type: 'error' + }) + return res.data + } else if (code !== 200) { + Notification.error({ + title: msg + }) + return Promise.reject('error') + } else { + return res.data + } +}, + error => { + + let { message } = error; + if (message == "Network Error") { + message = "后端接口连接异常"; + } else if (message.includes("timeout")) { + message = "系统接口请求超时"; + } else if (message.includes("Request failed with status code")) { + message = "系统接口" + message.substr(message.length - 3) + "异常"; + if (error.response.status === 403) { + isRelogin.show = true; + MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { + confirmButtonText: '重新登录', + cancelButtonText: '取消', + type: 'warning' + } + ).then(() => { + isRelogin.show = false; + store.dispatch('LogOut').then(() => { + location.href = location.href.split('#')[0]; + }) + }).catch(() => { + isRelogin.show = false; + }); + return Promise.reject('无效的会话,或者会话已过期,请重新登录。') + } else if (error.response.status === 301) { + message = '没有权限,请联系管理员授权' + } + } + Message({ + message: message, + type: 'error', + duration: 5 * 1000 + }) + return Promise.reject(error) + } +) + + + +export default service diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/scroll-to.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/scroll-to.js new file mode 100644 index 00000000..c5d8e04e --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/utils/scroll-to.js @@ -0,0 +1,58 @@ +Math.easeInOutQuad = function(t, b, c, d) { + t /= d / 2 + if (t < 1) { + return c / 2 * t * t + b + } + t-- + return -c / 2 * (t * (t - 2) - 1) + b +} + +// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts +var requestAnimFrame = (function() { + return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) } +})() + +/** + * Because it's so fucking difficult to detect the scrolling element, just move them all + * @param {number} amount + */ +function move(amount) { + document.documentElement.scrollTop = amount + document.body.parentNode.scrollTop = amount + document.body.scrollTop = amount +} + +function position() { + return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop +} + +/** + * @param {number} to + * @param {number} duration + * @param {Function} callback + */ +export function scrollTo(to, duration, callback) { + const start = position() + const change = to - start + const increment = 20 + let currentTime = 0 + duration = (typeof (duration) === 'undefined') ? 500 : duration + var animateScroll = function() { + // increment the time + currentTime += increment + // find the value with the quadratic in-out easing function + var val = Math.easeInOutQuad(currentTime, start, change, duration) + // move the document.body + move(val) + // do the animation unless its over + if (currentTime < duration) { + requestAnimFrame(animateScroll) + } else { + if (callback && typeof (callback) === 'function') { + // the animation is done so lets callback + callback() + } + } + } + animateScroll() +} diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/AboutView.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/AboutView.vue new file mode 100644 index 00000000..3fa28070 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/AboutView.vue @@ -0,0 +1,5 @@ + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/AccountIssues.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/AccountIssues.vue new file mode 100644 index 00000000..f4bd5170 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/AccountIssues.vue @@ -0,0 +1,189 @@ + + + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/ApiList.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/ApiList.vue new file mode 100644 index 00000000..7f2fe7ce --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/ApiList.vue @@ -0,0 +1,261 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/CompanyProfile.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/CompanyProfile.vue new file mode 100644 index 00000000..9507973b --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/CompanyProfile.vue @@ -0,0 +1,173 @@ + + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/DataLaboratory.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/DataLaboratory.vue new file mode 100644 index 00000000..8e77e59c --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/DataLaboratory.vue @@ -0,0 +1,266 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/DataProducts.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/DataProducts.vue new file mode 100644 index 00000000..2ed95000 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/DataProducts.vue @@ -0,0 +1,129 @@ + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/DataServiceGuide.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/DataServiceGuide.vue new file mode 100644 index 00000000..ffbe8e5a --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/DataServiceGuide.vue @@ -0,0 +1,312 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/HomeView.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/HomeView.vue new file mode 100644 index 00000000..ed946529 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/HomeView.vue @@ -0,0 +1,426 @@ + + + + + diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/LegalNotice.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/LegalNotice.vue new file mode 100644 index 00000000..3b71957f --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/LegalNotice.vue @@ -0,0 +1,175 @@ + + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/Login.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/Login.vue new file mode 100644 index 00000000..35f32954 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/Login.vue @@ -0,0 +1,346 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/NewsCenter.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/NewsCenter.vue new file mode 100644 index 00000000..c8fc8900 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/NewsCenter.vue @@ -0,0 +1,153 @@ + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/NewsDetail.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/NewsDetail.vue new file mode 100644 index 00000000..82d940a5 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/NewsDetail.vue @@ -0,0 +1,179 @@ + + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/ProductsDetail.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/ProductsDetail.vue new file mode 100644 index 00000000..05ee61a1 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/ProductsDetail.vue @@ -0,0 +1,203 @@ + + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/SuccessCase.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/SuccessCase.vue new file mode 100644 index 00000000..93b0dd47 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/SuccessCase.vue @@ -0,0 +1,52 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/introduce.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/introduce.vue new file mode 100644 index 00000000..f5e401a1 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/introduce.vue @@ -0,0 +1,161 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/privacyStatement.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/privacyStatement.vue new file mode 100644 index 00000000..5a0c9bd3 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/privacyStatement.vue @@ -0,0 +1,176 @@ + + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/ApplyLab.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/ApplyLab.vue new file mode 100644 index 00000000..276e3677 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/ApplyLab.vue @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/DataApply.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/DataApply.vue new file mode 100644 index 00000000..3d750e5c --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/DataApply.vue @@ -0,0 +1,249 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/FindPwd.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/FindPwd.vue new file mode 100644 index 00000000..f7b9b188 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/FindPwd.vue @@ -0,0 +1,292 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/LabApply.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/LabApply.vue new file mode 100644 index 00000000..2c78875d --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/LabApply.vue @@ -0,0 +1,256 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/LabDetail.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/LabDetail.vue new file mode 100644 index 00000000..6e1820f9 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/LabDetail.vue @@ -0,0 +1,162 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyApiList.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyApiList.vue new file mode 100644 index 00000000..11b67a09 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyApiList.vue @@ -0,0 +1,114 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyApicall.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyApicall.vue new file mode 100644 index 00000000..27165fdd --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyApicall.vue @@ -0,0 +1,126 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyData.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyData.vue new file mode 100644 index 00000000..2db2bed3 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyData.vue @@ -0,0 +1,304 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyLab.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyLab.vue new file mode 100644 index 00000000..48487cb2 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyLab.vue @@ -0,0 +1,495 @@ + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyLabDetail.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyLabDetail.vue new file mode 100644 index 00000000..f115d577 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyLabDetail.vue @@ -0,0 +1,294 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyMsg.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyMsg.vue new file mode 100644 index 00000000..cdc06b18 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/MyMsg.vue @@ -0,0 +1,233 @@ + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/ResetPwd.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/ResetPwd.vue new file mode 100644 index 00000000..b48d6ac4 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/ResetPwd.vue @@ -0,0 +1,305 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/UserIndex.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/UserIndex.vue new file mode 100644 index 00000000..ea0b7f49 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/UserIndex.vue @@ -0,0 +1,222 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/UserInfo.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/UserInfo.vue new file mode 100644 index 00000000..edefed96 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/UserInfo.vue @@ -0,0 +1,157 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/components/LeftNav.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/components/LeftNav.vue new file mode 100644 index 00000000..ef0517ae --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/components/LeftNav.vue @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/components/UserTopBg.vue b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/components/UserTopBg.vue new file mode 100644 index 00000000..8dee3307 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/src/views/user/components/UserTopBg.vue @@ -0,0 +1,18 @@ + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/vue.config.js b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/vue.config.js new file mode 100644 index 00000000..0d5b9b4a --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/agile-portal-ui/vue.config.js @@ -0,0 +1,41 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-08-04 11:13:12 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-11-27 17:28:50 + * @FilePath: \agile-portal-ui\vue.config.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +const { defineConfig } = require("@vue/cli-service"); +const path = require('path'); + +function resolve(dir) { + return path.join(__dirname, dir); +} + +module.exports = defineConfig({ + transpileDependencies: true, + devServer: { + host: '130.252.102.225', + port: 8088, + open: true, + client: { + overlay: false + }, + proxy: { + [process.env.VUE_APP_BASE_API]: { + target: `http://172.16.12.107:18081/`, + //target: `http://130.252.101.48:18081/`, + changeOrigin: true, + pathRewrite: { + ['^' + process.env.VUE_APP_BASE_API]: '' + } + } + } + }, + publicPath: process.env.NODE_ENV === "production" ? "./" : "/", // 指定公共路径为"/public/" + outputDir: 'dist', + assetsDir: 'static', + lintOnSave: process.env.NODE_ENV === 'development', + productionSourceMap: false +}); \ No newline at end of file diff --git a/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/pom.xml b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/pom.xml new file mode 100644 index 00000000..78030116 --- /dev/null +++ b/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8/pom.xml @@ -0,0 +1,184 @@ + + 4.0.0 + + + org.springframework.boot + spring-boot-starter-parent + 2.6.7 + + + + com.jiuyv.sptcc.agile + agile-portal + 0.2.8 + pom + + + UTF-8 + 1.21 + 2.2.2 + 1.4.1 + 2.11.0 + 1.3.0 + 0.1.13 + 0.1.7 + 0.2.1 + 6.3 + 0.1.55 + 1.70 + + + + + + org.springframework.cloud + spring-cloud-dependencies + 2021.0.5 + pom + import + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + 2021.0.5.0 + pom + import + + + + com.jiuyv.sptcc.agile + agile-portal-api + ${project.version} + + + + com.jiuyv.sptcc.agile + agile-common + ${agile-common.version} + + + + com.jiuyv.sptcc.agile + agile-mobile-message-api + ${agile-mobile-message-api.version} + + + + com.jiuyv.sptcc.agile + agile-data-api + ${agile-data.version} + + + + + commons-io + commons-io + ${commons.io.version} + + + + com.anji-plus + captcha + ${ajcaptcha.version} + + + + + eu.bitwalker + UserAgentUtils + ${bitwalker.version} + + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + ${mybatis-spring-boot.version} + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${pagehelper.boot.version} + + + + + + + nexus-releases + Internal Releases + http://172.16.12.11:8082/repository/maven-releases/ + + + + nexus-snapshots + Internal Snapshots + http://172.16.12.11:8082/repository/maven-snapshots/ + + + + + scm:svn:http://172.16.12.10/svn/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8 + scm:svn:http://172.16.12.10/svn/sptcc_agile_etl/src/portal/src/tags/agile-portal-0.2.8 + + + + + + jiuyv + jiuyv + http://172.16.12.11:8082/repository/maven-public/ + + true + always + + + + + + jiuyv + jiuyv Plugin Repository + http://172.16.12.11:8082/repository/maven-public/ + + + central + Maven Plugin Repository + http://repo1.maven.org/maven2/ + + + + + + agile-portal-ui + agile-portal-service + agile-portal-gateway + agile-portal-api + agile-portal-gw + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/pom.xml b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/pom.xml new file mode 100644 index 00000000..479eb15e --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/pom.xml @@ -0,0 +1,56 @@ + + 4.0.0 + agile-common + 1.2.0 + jar + + + + com.jiuyv.sptcc.agile + agile-system + 1.2.0 + + + + + com.fasterxml.jackson.core + jackson-annotations + + + + org.apache.commons + commons-lang3 + + + + org.hibernate.validator + hibernate-validator + compile + + + + org.springframework.boot + spring-boot-starter-logging + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + none + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/constant/BaseResultCode.java b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/constant/BaseResultCode.java new file mode 100644 index 00000000..7519edc7 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/constant/BaseResultCode.java @@ -0,0 +1,43 @@ +package com.jiuyv.sptccc.agile.common.constant; + +import com.jiuyv.sptccc.agile.common.core.IErrorCode; + +/** + * + * 返回码,与返回对象 + * @ClassName : BaseResultCode + * @Description : + * @Author : sky + * @Date: 2023-09-21 19:10 + */ +public enum BaseResultCode implements IErrorCode { + + SUCCESS("success", "操作成功"), + PROCESS("process", "订单处理中,请稍后查询"), + FAILED("failed", "操作失败"), + ; + + private String code; + private String message; + + private BaseResultCode(String code, String message) { + this.code = code; + this.message = message; + } + + /** + * 返回码 + */ + @Override + public String getCode() { + return code; + } + + /** + * 返回信息 + */ + @Override + public String getMessage() { + return message; + } +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/constant/DateTimeFormatConstant.java b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/constant/DateTimeFormatConstant.java new file mode 100644 index 00000000..17984794 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/constant/DateTimeFormatConstant.java @@ -0,0 +1,28 @@ +package com.jiuyv.sptccc.agile.common.constant; + +/** + * @ClassName : DateFormart + * @Description : + * @Author : sky + * @Date: 2023-09-19 16:31 + */ +public final class DateTimeFormatConstant { + + private DateTimeFormatConstant() { + throw new IllegalStateException("Utility class"); + } + + public static final String YYYY = "yyyy"; + + public static final String YYYY_MM = "yyyy-MM"; + + public static final String YYYY_MM_DD = "yyyy-MM-dd"; + + public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; + + public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; + + private static final String[] parsePatterns = {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", + "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", + "yyyy.MM.dd HH:mm", "yyyy.MM"}; +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/constant/HttpStatus.java b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/constant/HttpStatus.java new file mode 100644 index 00000000..02c39d2e --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/constant/HttpStatus.java @@ -0,0 +1,88 @@ +package com.jiuyv.sptccc.agile.common.constant; + +/** + * 返回状态码 + * + * @author admin + */ +public class HttpStatus { + /** + * 操作成功 + */ + public static final String SUCCESS = "success"; + + /** + * 对象创建成功 + */ + public static final String CREATED = String.valueOf(201); + + /** + * 请求已经被接受 + */ + public static final String ACCEPTED = String.valueOf(202); + + /** + * 操作已经执行成功,但是没有返回数据 + */ + public static final String NO_CONTENT = String.valueOf(204); + + /** + * 资源已被移除 + */ + public static final String MOVED_PERM = String.valueOf(301); + + /** + * 重定向 + */ + public static final String SEE_OTHER = "303"; + + /** + * 资源没有被修改 + */ + public static final String NOT_MODIFIED = "304"; + + /** + * 参数列表错误(缺少,格式不匹配) + */ + public static final String BAD_REQUEST = "400"; + + /** + * 未授权 + */ + public static final String UNAUTHORIZED = "401"; + + /** + * 访问受限,授权过期 + */ + public static final String FORBIDDEN = "403"; + + /** + * 资源,服务未找到 + */ + public static final String NOT_FOUND = "404"; + + /** + * 不允许的http方法 + */ + public static final String BAD_METHOD = "405"; + + /** + * 资源冲突,或者资源被锁 + */ + public static final String CONFLICT = "409"; + + /** + * 不支持的数据,媒体类型 + */ + public static final String UNSUPPORTED_TYPE = "415"; + + /** + * 系统内部错误 + */ + public static final String ERROR = "500"; + + /** + * 接口未实现 + */ + public static final String NOT_IMPLEMENTED = "501"; +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/IDictEnum.java b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/IDictEnum.java new file mode 100644 index 00000000..8da128ce --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/IDictEnum.java @@ -0,0 +1,14 @@ +package com.jiuyv.sptccc.agile.common.core; + +/** + * 字段代码通用枚举接口 + * 便于统一方式处理 + * + * @author zhouliang + */ +public interface IDictEnum { + + String getCode(); + + String getMsg(); +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/IErrorCode.java b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/IErrorCode.java new file mode 100644 index 00000000..70f39d11 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/IErrorCode.java @@ -0,0 +1,20 @@ +package com.jiuyv.sptccc.agile.common.core; + +/** + * @ClassName : IErrorCode + * @Description : 常用API返回对接接口 + * @Author : sky + * @Date: 2023-06-06 16:33 + */ +public interface IErrorCode { + + /** + * 返回码 + */ + String getCode(); + + /** + * 返回信息 + */ + String getMessage(); +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/base/PageSize.java b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/base/PageSize.java new file mode 100644 index 00000000..75122c24 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/base/PageSize.java @@ -0,0 +1,59 @@ +package com.jiuyv.sptccc.agile.common.core.base; + +import javax.validation.constraints.Max; + +/** + * 分页参数 + * @ClassName : PageSize + * @Author : sky + * @Date: 2023-07-13 20:10 + */ +public class PageSize { + + @Max(1000) + private Integer pageSize = 20; + + private Integer pageNum = 1; + + /** + * 排序字段 + */ + private String orderBy ; + + /** + * 是否倒序 + */ + private boolean desc; + + public Integer getPageSize() { + return pageSize; + } + + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + public Integer getPageNum() { + return pageNum; + } + + public void setPageNum(Integer pageNum) { + this.pageNum = pageNum; + } + + public String getOrderBy() { + return orderBy; + } + + public void setOrderBy(String orderBy) { + this.orderBy = orderBy; + } + + public boolean isDesc() { + return desc; + } + + public void setDesc(boolean desc) { + this.desc = desc; + } +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/base/Range.java b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/base/Range.java new file mode 100644 index 00000000..487a5741 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/base/Range.java @@ -0,0 +1,38 @@ +package com.jiuyv.sptccc.agile.common.core.base; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.jiuyv.sptccc.agile.common.constant.DateTimeFormatConstant; + +import java.util.Date; + +/** + * 范围查询 + * @ClassName : Range + * @Description : + * @Author : sky + * @Date: 2023-09-19 16:29 + */ +public class Range extends PageSize { + + @JsonFormat(pattern = DateTimeFormatConstant.YYYY_MM_DD) + private Date beginDate; + + @JsonFormat(pattern = DateTimeFormatConstant.YYYY_MM_DD) + private Date endDate; + + public Date getBeginDate() { + return beginDate; + } + + public void setBeginDate(Date beginDate) { + this.beginDate = beginDate; + } + + public Date getEndDate() { + return endDate; + } + + public void setEndDate(Date endDate) { + this.endDate = endDate; + } +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/base/UserInfo.java b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/base/UserInfo.java new file mode 100644 index 00000000..f2513c25 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/base/UserInfo.java @@ -0,0 +1,56 @@ +package com.jiuyv.sptccc.agile.common.core.base; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * @ClassName : User + * @Description : + * @Author : sky + * @Date: 2023-09-04 18:27 + */ +public class UserInfo implements Serializable { + + @NotBlank(message = "用户名不能为空") + private String userName; + + @NotNull(message = "用户Id不能为空") + private Long userId; + + private String deptId; + + private String nickName; + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/domain/R.java b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/domain/R.java new file mode 100644 index 00000000..2489ce13 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/domain/R.java @@ -0,0 +1,122 @@ +package com.jiuyv.sptccc.agile.common.core.domain; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.jiuyv.sptccc.agile.common.constant.BaseResultCode; +import com.jiuyv.sptccc.agile.common.core.IErrorCode; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.Serializable; + +/** + * 响应信息主体 + * + * @author admin + */ +public class R implements Serializable { + + + protected static final Logger log = LoggerFactory.getLogger(R.class); + private static final long serialVersionUID = 1L; + private String code; + + private String msg; + + private T data; + + public R() { + } + + public R(String code, String msg, T data) { + this.code = code; + this.msg = msg; + this.data = data; + } + + public static R restResult(IErrorCode errorCode) { + return fail(errorCode.getCode(),errorCode.getMessage()); + } + + private static R restResult(T data, String code, String msg) { + //异常要输出 + log.info("Return Business Exception >> code={}, msg={}", code, msg); + R apiResult = new R<>(); + apiResult.setCode(code); + apiResult.setData(data); + apiResult.setMsg(msg); + return apiResult; + } + + public static R success() { + return ok(); + } + + public static R success(T data) { + return ok(data); + } + + public static R ok() { + return restResult(BaseResultCode.SUCCESS); + } + + public static R ok(T data) { + return restResult(data, BaseResultCode.SUCCESS.getCode(), BaseResultCode.SUCCESS.getMessage()); + } + + public static R ok(T data, String msg) { + return restResult(data, BaseResultCode.SUCCESS.getCode(), msg); + } + + public static R fail() { + return restResult(null, BaseResultCode.FAILED.getCode(), "操作失败"); + } + + public static R fail(String msg) { + return restResult(null, BaseResultCode.FAILED.getCode(), msg); + } + + public static R fail(T data) { + return restResult(data, BaseResultCode.FAILED.getCode(), "操作失败"); + } + + public static R fail(T data, String msg) { + return restResult(data, BaseResultCode.FAILED.getCode(), msg); + } + + public static R fail(IErrorCode errorCode) { + return restResult(errorCode); + } + + public static R fail(String code, String msg) { + return restResult(null, code, msg); + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + @JsonIgnore + public boolean isSuccess() { + return BaseResultCode.SUCCESS.getCode().equals(code); + } +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/page/PageResult.java b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/page/PageResult.java new file mode 100644 index 00000000..c0753661 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/page/PageResult.java @@ -0,0 +1,73 @@ +package com.jiuyv.sptccc.agile.common.core.page; + +import java.io.Serializable; +import java.util.List; + +/** + * 分页对象 + * @param + */ +public class PageResult implements Serializable { + + private static final long serialVersionUID = 1L; + + private Integer pageNum; + private Integer pageSize; + private Long total; + private List rows; + + public PageResult() { + } + + public PageResult(Long total, List list) { + this.total = total; + this.rows = list; + } + + public PageResult(Integer pageNum, Integer pageSize, Long total, List list) { + this.pageNum = pageNum; + this.pageSize = pageSize; + this.total = total; + this.rows = list; + } + + public static PageResult instance(Long total, List data){ + return instance(null,null,total,data); + } + + public static PageResult instance(Integer pageNum,Integer pageSize,Long total, List data){ + return new PageResult(pageNum,pageSize,total,data); + } + + public Integer getPageNum() { + return pageNum; + } + + public void setPageNum(Integer pageNum) { + this.pageNum = pageNum; + } + + public Integer getPageSize() { + return pageSize; + } + + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + public Long getTotal() { + return total; + } + + public void setTotal(Long total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/page/TableDataInfo.java b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/page/TableDataInfo.java new file mode 100644 index 00000000..c1ca026e --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-common/src/main/java/com/jiuyv/sptccc/agile/common/core/page/TableDataInfo.java @@ -0,0 +1,82 @@ +package com.jiuyv.sptccc.agile.common.core.page; + +import java.io.Serializable; +import java.util.List; + +/** + * 表格分页数据对象 + * + * @author admin + */ +public class TableDataInfo implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 总记录数 + */ + private int total; + + /** + * 列表数据 + */ + private List rows; + + /** + * 消息状态码 + */ + private String code; + + /** + * 消息内容 + */ + private String msg; + + /** + * 表格数据对象 + */ + public TableDataInfo() { + } + + /** + * 分页 + * + * @param list 列表数据 + * @param total 总记录数 + */ + public TableDataInfo(List list, int total) { + this.rows = list; + this.total = total; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.editorconfig b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.editorconfig new file mode 100644 index 00000000..7034f9bf --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.editorconfig @@ -0,0 +1,22 @@ +# 告诉EditorConfig插件,这是根文件,不用继续往上查找 +root = true + +# 匹配全部文件 +[*] +# 设置字符集 +charset = utf-8 +# 缩进风格,可选space、tab +indent_style = space +# 缩进的空格数 +indent_size = 2 +# 结尾换行符,可选lf、cr、crlf +end_of_line = lf +# 在文件结尾插入新行 +insert_final_newline = true +# 删除一行中的前后空格 +trim_trailing_whitespace = true + +# 匹配md结尾的文件 +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.env.development b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.env.development new file mode 100644 index 00000000..6ac851d0 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.env.development @@ -0,0 +1,11 @@ +# 页面标题 +VUE_APP_TITLE = 久事大数据开放平台(管理系统) + +# 开发环境配置 +ENV = 'development' + +# 久事大数据开放平台(管理系统)/开发环境 +VUE_APP_BASE_API = '/dev-api' + +# 路由懒加载 +VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.env.production b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.env.production new file mode 100644 index 00000000..c3d3c023 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.env.production @@ -0,0 +1,8 @@ +# 页面标题 +VUE_APP_TITLE = 久事大数据开放平台(管理系统) + +# 生产环境配置 +ENV = 'production' + +# 久事大数据开放平台(管理系统)/生产环境 +VUE_APP_BASE_API = '' diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.env.staging b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.env.staging new file mode 100644 index 00000000..fc848f0f --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.env.staging @@ -0,0 +1,10 @@ +# 页面标题 +VUE_APP_TITLE = 久事大数据开放平台(管理系统) + +NODE_ENV = production + +# 测试环境配置 +ENV = 'staging' + +# 久事大数据开放平台(管理系统)/测试环境 +VUE_APP_BASE_API = '/stage-api' diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.eslintignore b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.eslintignore new file mode 100644 index 00000000..21cfec76 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.eslintignore @@ -0,0 +1,10 @@ +# 忽略build目录下类型为js的文件的语法检查 +build/*.js +# 忽略src/assets目录下文件的语法检查 +src/assets +# 忽略public目录下文件的语法检查 +public +# 忽略当前目录下为js的文件的语法检查 +*.js +# 忽略当前目录下为vue的文件的语法检查 +*.vue diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.eslintrc.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.eslintrc.js new file mode 100644 index 00000000..82bbdeea --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.eslintrc.js @@ -0,0 +1,199 @@ +// ESlint 检查配置 +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + sourceType: 'module' + }, + env: { + browser: true, + node: true, + es6: true, + }, + extends: ['plugin:vue/recommended', 'eslint:recommended'], + + // add your custom rules here + //it is base on https://github.com/vuejs/eslint-config-vue + rules: { + "vue/max-attributes-per-line": [2, { + "singleline": 10, + "multiline": { + "max": 1, + "allowFirstLine": false + } + }], + "vue/singleline-html-element-content-newline": "off", + "vue/multiline-html-element-content-newline":"off", + "vue/name-property-casing": ["error", "PascalCase"], + "vue/no-v-html": "off", + 'accessor-pairs': 2, + 'arrow-spacing': [2, { + 'before': true, + 'after': true + }], + 'block-spacing': [2, 'always'], + 'brace-style': [2, '1tbs', { + 'allowSingleLine': true + }], + 'camelcase': [0, { + 'properties': 'always' + }], + 'comma-dangle': [2, 'never'], + 'comma-spacing': [2, { + 'before': false, + 'after': true + }], + 'comma-style': [2, 'last'], + 'constructor-super': 2, + 'curly': [2, 'multi-line'], + 'dot-location': [2, 'property'], + 'eol-last': 2, + 'eqeqeq': ["error", "always", {"null": "ignore"}], + 'generator-star-spacing': [2, { + 'before': true, + 'after': true + }], + 'handle-callback-err': [2, '^(err|error)$'], + 'indent': [2, 2, { + 'SwitchCase': 1 + }], + 'jsx-quotes': [2, 'prefer-single'], + 'key-spacing': [2, { + 'beforeColon': false, + 'afterColon': true + }], + 'keyword-spacing': [2, { + 'before': true, + 'after': true + }], + 'new-cap': [2, { + 'newIsCap': true, + 'capIsNew': false + }], + 'new-parens': 2, + 'no-array-constructor': 2, + 'no-caller': 2, + 'no-console': 'off', + 'no-class-assign': 2, + 'no-cond-assign': 2, + 'no-const-assign': 2, + 'no-control-regex': 0, + 'no-delete-var': 2, + 'no-dupe-args': 2, + 'no-dupe-class-members': 2, + 'no-dupe-keys': 2, + 'no-duplicate-case': 2, + 'no-empty-character-class': 2, + 'no-empty-pattern': 2, + 'no-eval': 2, + 'no-ex-assign': 2, + 'no-extend-native': 2, + 'no-extra-bind': 2, + 'no-extra-boolean-cast': 2, + 'no-extra-parens': [2, 'functions'], + 'no-fallthrough': 2, + 'no-floating-decimal': 2, + 'no-func-assign': 2, + 'no-implied-eval': 2, + 'no-inner-declarations': [2, 'functions'], + 'no-invalid-regexp': 2, + 'no-irregular-whitespace': 2, + 'no-iterator': 2, + 'no-label-var': 2, + 'no-labels': [2, { + 'allowLoop': false, + 'allowSwitch': false + }], + 'no-lone-blocks': 2, + 'no-mixed-spaces-and-tabs': 2, + 'no-multi-spaces': 2, + 'no-multi-str': 2, + 'no-multiple-empty-lines': [2, { + 'max': 1 + }], + 'no-native-reassign': 2, + 'no-negated-in-lhs': 2, + 'no-new-object': 2, + 'no-new-require': 2, + 'no-new-symbol': 2, + 'no-new-wrappers': 2, + 'no-obj-calls': 2, + 'no-octal': 2, + 'no-octal-escape': 2, + 'no-path-concat': 2, + 'no-proto': 2, + 'no-redeclare': 2, + 'no-regex-spaces': 2, + 'no-return-assign': [2, 'except-parens'], + 'no-self-assign': 2, + 'no-self-compare': 2, + 'no-sequences': 2, + 'no-shadow-restricted-names': 2, + 'no-spaced-func': 2, + 'no-sparse-arrays': 2, + 'no-this-before-super': 2, + 'no-throw-literal': 2, + 'no-trailing-spaces': 2, + 'no-undef': 2, + 'no-undef-init': 2, + 'no-unexpected-multiline': 2, + 'no-unmodified-loop-condition': 2, + 'no-unneeded-ternary': [2, { + 'defaultAssignment': false + }], + 'no-unreachable': 2, + 'no-unsafe-finally': 2, + 'no-unused-vars': [2, { + 'vars': 'all', + 'args': 'none' + }], + 'no-useless-call': 2, + 'no-useless-computed-key': 2, + 'no-useless-constructor': 2, + 'no-useless-escape': 0, + 'no-whitespace-before-property': 2, + 'no-with': 2, + 'one-var': [2, { + 'initialized': 'never' + }], + 'operator-linebreak': [2, 'after', { + 'overrides': { + '?': 'before', + ':': 'before' + } + }], + 'padded-blocks': [2, 'never'], + 'quotes': [2, 'single', { + 'avoidEscape': true, + 'allowTemplateLiterals': true + }], + 'semi': [2, 'never'], + 'semi-spacing': [2, { + 'before': false, + 'after': true + }], + 'space-before-blocks': [2, 'always'], + 'space-before-function-paren': [2, 'never'], + 'space-in-parens': [2, 'never'], + 'space-infix-ops': 2, + 'space-unary-ops': [2, { + 'words': true, + 'nonwords': false + }], + 'spaced-comment': [2, 'always', { + 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] + }], + 'template-curly-spacing': [2, 'never'], + 'use-isnan': 2, + 'valid-typeof': 2, + 'wrap-iife': [2, 'any'], + 'yield-star-spacing': [2, 'both'], + 'yoda': [2, 'never'], + 'prefer-const': 2, + 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, + 'object-curly-spacing': [2, 'always', { + objectsInObjects: false + }], + 'array-bracket-spacing': [2, 'never'] + } +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.gitignore b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.gitignore new file mode 100644 index 00000000..78a752d8 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +**/*.log + +tests/**/coverage/ +tests/e2e/reports +selenium-debug.log + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.local + +package-lock.json +yarn.lock diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/babel.config.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/babel.config.js new file mode 100644 index 00000000..c8267b2d --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/babel.config.js @@ -0,0 +1,13 @@ +module.exports = { + presets: [ + // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app + '@vue/cli-plugin-babel/preset' + ], + 'env': { + 'development': { + // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require(). + // This plugin can significantly increase the speed of hot updates, when you have a large number of pages. + 'plugins': ['dynamic-import-node'] + } + } +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/bin/build.bat b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/bin/build.bat new file mode 100644 index 00000000..dda590d2 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/bin/build.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] Weḅdistļ +echo. + +%~d0 +cd %~dp0 + +cd .. +npm run build:prod + +pause \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/bin/package.bat b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/bin/package.bat new file mode 100644 index 00000000..0e5bc0fb --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/bin/package.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] װWeḅnode_modulesļ +echo. + +%~d0 +cd %~dp0 + +cd .. +npm install --registry=https://registry.npmmirror.com + +pause \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/bin/run-web.bat b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/bin/run-web.bat new file mode 100644 index 00000000..d30deae7 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/bin/run-web.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [Ϣ] ʹ Vue CLI Web ̡ +echo. + +%~d0 +cd %~dp0 + +cd .. +npm run dev + +pause \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/build/index.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/build/index.js new file mode 100644 index 00000000..0c57de2a --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/build/index.js @@ -0,0 +1,35 @@ +const { run } = require('runjs') +const chalk = require('chalk') +const config = require('../vue.config.js') +const rawArgv = process.argv.slice(2) +const args = rawArgv.join(' ') + +if (process.env.npm_config_preview || rawArgv.includes('--preview')) { + const report = rawArgv.includes('--report') + + run(`vue-cli-service build ${args}`) + + const port = 9526 + const publicPath = config.publicPath + + var connect = require('connect') + var serveStatic = require('serve-static') + const app = connect() + + app.use( + publicPath, + serveStatic('./dist', { + index: ['index.html', '/'] + }) + ) + + app.listen(port, function () { + console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`)) + if (report) { + console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`)) + } + + }) +} else { + run(`vue-cli-service build ${args}`) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/package.json b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/package.json new file mode 100644 index 00000000..db6f67f9 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/package.json @@ -0,0 +1,97 @@ +{ + "name": "jiuyv", + "version": "3.8.3", + "description": "久事大数据开放平台(管理系统)", + "author": "jiuyv", + "license": "MIT", + "scripts": { + "dev": "vue-cli-service serve", + "build:prod": "vue-cli-service build", + "build:stage": "vue-cli-service build --mode staging", + "preview": "node build/index.js --preview", + "lint": "eslint --ext .js,.vue src" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "src/**/*.{js,vue}": [ + "eslint --fix", + "git add" + ] + }, + "keywords": [ + "vue", + "admin", + "dashboard", + "element-ui", + "boilerplate", + "admin-template", + "management-system" + ], + "repository": { + "type": "git", + "url": "https://gitee.com/y_project/RuoYi-Vue.git" + }, + "dependencies": { + "@riophae/vue-treeselect": "0.4.0", + "axios": "0.24.0", + "clipboard": "2.0.8", + "core-js": "3.19.1", + "crypto-js": "^4.1.1", + "echarts": "4.9.0", + "echarts-liquidfill": "^2.0.6", + "echarts-wordcloud": "^1.1.3", + "element-ui": "2.15.8", + "file-saver": "2.0.5", + "fuse.js": "6.4.3", + "gm-crypto": "^0.1.8", + "highlight.js": "9.18.5", + "js-beautify": "1.13.0", + "js-cookie": "3.0.1", + "jsencrypt": "3.0.0-rc.1", + "nprogress": "0.2.0", + "quill": "1.3.7", + "screenfull": "5.0.2", + "sortablejs": "1.10.2", + "sql-formatter": "^2.3.3", + "vue": "2.6.12", + "vue-codemirror": "^4.0.6", + "vue-count-to": "1.0.13", + "vue-cropper": "0.5.5", + "vue-meta": "2.4.0", + "vue-router": "3.4.9", + "vuedraggable": "2.24.3", + "vuex": "3.6.0" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "4.4.6", + "@vue/cli-plugin-eslint": "4.4.6", + "@vue/cli-service": "4.4.6", + "babel-eslint": "10.1.0", + "babel-plugin-dynamic-import-node": "2.3.3", + "chalk": "4.1.0", + "compression-webpack-plugin": "5.0.2", + "connect": "3.6.6", + "eslint": "7.15.0", + "eslint-plugin-vue": "7.2.0", + "html-webpack-plugin": "^4.5.1", + "lint-staged": "10.5.3", + "runjs": "4.4.2", + "sass": "1.32.13", + "sass-loader": "10.1.1", + "script-ext-html-webpack-plugin": "2.1.5", + "svg-sprite-loader": "5.1.1", + "vue-template-compiler": "2.6.12" + }, + "engines": { + "node": ">=8.9", + "npm": ">= 3.0.0" + }, + "browserslist": [ + "> 1%", + "last 2 versions" + ] +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/pom.xml b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/pom.xml new file mode 100644 index 00000000..528a8236 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + + com.jiuyv.sptcc.agile + agile-system + 1.2.0 + + + com.jiuyv.sptcc.agile + agile-system-console-ui + 1.2.0 + + UTF-8 + 1.12.1 + v16.17.0 + 8.15.0 + + + + + + org.apache.maven.plugins + maven-clean-plugin + ${maven.clean.version} + + + + dist + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + com.github.eirslett + frontend-maven-plugin + ${frontend-maven-plugin.version} + + https://npm.taobao.org/mirrors/node/ + http://172.16.12.11:8082/repository/npm_public/npm/-/ + http://172.16.12.11:8082/repository/npm_public/ + /opt/nodenpm/ + ${node.version} + ${npm.version} + + + + + install node and npm + + install-node-and-npm + + generate-resources + + + + npm install + + npm + + generate-resources + + install --legacy-peer-deps + + + + + npm run build + + npm + + + run build:prod + + + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/favicon.ico b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/favicon.ico new file mode 100644 index 00000000..16e6fcd8 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/favicon.ico differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/favicon.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/favicon.png new file mode 100644 index 00000000..47fdeda8 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/favicon.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/favicon1.ico b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/favicon1.ico new file mode 100644 index 00000000..37b5fff5 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/favicon1.ico differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/html/ie.html b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/html/ie.html new file mode 100644 index 00000000..052ffcd6 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/html/ie.html @@ -0,0 +1,46 @@ + + + + + + 请升级您的浏览器 + + + + + + +

请升级您的浏览器,以便我们更好的为您提供服务!

+

您正在使用 Internet Explorer 的早期版本(IE11以下版本或使用该内核的浏览器)。这意味着在升级浏览器前,您将无法访问此网站。

+
+

请注意:微软公司对Windows XP 及 Internet Explorer 早期版本的支持已经结束

+

自 2016 年 1 月 12 日起,Microsoft 不再为 IE 11 以下版本提供相应支持和更新。没有关键的浏览器安全更新,您的电脑可能易受有害病毒、间谍软件和其他恶意软件的攻击,它们可以窃取或损害您的业务数据和信息。请参阅 微软对 Internet Explorer 早期版本的支持将于 2016 年 1 月 12 日结束的说明

+
+

您可以选择更先进的浏览器

+

推荐使用以下浏览器的最新版本。如果您的电脑已有以下浏览器的最新版本则直接使用该浏览器访问即可。

+ +
+ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/index.html b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/index.html new file mode 100644 index 00000000..72fd3e95 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/index.html @@ -0,0 +1,210 @@ + + + + + + + + + <%= webpackConfig.name %> + + + + +
+
+
+
+
+
正在加载系统资源,请耐心等待
+
+
+ + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/robots.txt b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/robots.txt new file mode 100644 index 00000000..77470cb3 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/App.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/App.vue new file mode 100644 index 00000000..033f862b --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/App.vue @@ -0,0 +1,42 @@ + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/apilog.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/apilog.js new file mode 100644 index 00000000..5940b0da --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/apilog.js @@ -0,0 +1,16 @@ +import request from '@/utils/request' + +export function pageApiLog(data) { + return request({ + url: '/api/apiLogs/page', + method: 'get', + params: data + }) +} + +export function getApiLog(id) { + return request({ + url: '/api/apiLogs/detail?id=' + id, + method: 'get' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/dataapi.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/dataapi.js new file mode 100644 index 00000000..e6224076 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/dataapi.js @@ -0,0 +1,129 @@ +import request from '@/utils/request' + +export function listDataApi(data) { + return request({ + url: '/api/apis/list', + method: 'get', + params: data + }) +} + +export function pageDataApi(data) { + return request({ + url: '/api/apis/page', + method: 'get', + params: data + }) +} + +export function getDataApi(data) { + return request({ + url: '/api/apis/detail', + method: 'get', + params: data + }) +} + +export function delDataApi(data) { + return request({ + url: '/api/apis/delete', + method: 'post', + data: data + }) +} + +export function addDataApi(data) { + return request({ + url: '/api/apis/add', + method: 'post', + data: data + }) +} + +export function updateDataApi(data) { + return request({ + url: '/api/apis/edit', + method: 'post', + data: data + }) +} + +export function sqlParse(data) { + return request({ + url: '/api/apis/sql/parse', + method: 'post', + data: data + }) +} + +export function copyDataApi(data) { + return request({ + url: '/api/apis/copy', + method: 'post', + data: data + }) +} + +export function registerDataApi(data) { + return request({ + url: '/api/apis/register', + method: 'post', + data: data + }) +} + +export function releaseDataApi(data) { + return request({ + url: '/api/apis/release', + method: 'post', + data: data + }) +} + +export function cancelDataApi(data) { + return request({ + url: '/api/apis/cancel', + method: 'post', + data: data + }) +} + +export function downDataApi(data) { + return request({ + url: '/api/apis/down', + method: 'post', + data: data + }) +} + +export function checkDataApi(data) { + return request({ + url: '/api/apis/check', + method: 'post', + data: data + }) +} + +export function word(id) { + return request({ + url: '/api/apis/word/' + id, + method: 'post', + responseType: 'blob', + timeout: 0, + }) +} +// 获取授权信息接口 +export function getauthInfo(data) { + return request({ + url: 'org/info/auth/info/', + method: 'get', + params: data + }) +} + +export function getApiPrefix() { + return request({ + url: '/api/apis/prefix', + method: 'get', + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/orgconfig.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/orgconfig.js new file mode 100644 index 00000000..99b9ffd9 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/orgconfig.js @@ -0,0 +1,53 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-07-04 10:33:56 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-07-14 09:31:26 + * @FilePath: \agile-system-console-ui\src\api\apimanage\orginfo.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import request from '@/utils/request' + +// 查询列表 +export function orgConfigList(query) { + return request({ + url: '/org/config/list', + method: 'get', + params: query + }) +} + +// 查询详细 +export function getOrgConfig(data) { + return request({ + url: '/org/config/detail', + method: 'get', + params: data + }) +} +// 新增 +export function addOrgConfig(data) { + return request({ + url: '/org/config/add', + method: 'post', + data: data + }) +} + +// 修改 +export function updateOrgConfig(data) { + return request({ + url: '/org/config/edit', + method: 'post', + data: data + }) +} + +// 删除 +export function delOrgConfig(data) { + return request({ + url: '/org/config/delete', + method: 'get', + params: data + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/orginfo.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/orginfo.js new file mode 100644 index 00000000..326d3588 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/orginfo.js @@ -0,0 +1,100 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-07-04 10:33:56 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-07-14 09:31:26 + * @FilePath: \agile-system-console-ui\src\api\apimanage\orginfo.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import request from '@/utils/request' + +// 查询【机构管理信息】列表 +export function listInfo(query) { + return request({ + url: '/org/info/list', + method: 'get', + params: query + }) +} + +// 查询【机构管理信息】详细 +export function getInfo(data) { + return request({ + url: '/org/info/detail', + method: 'get', + params: data + }) +} +// 获取授权信息接口 +export function getauthInfo(orgNo) { + return request({ + url: 'org/info/auth/info/', + method: 'get', + params: orgNo + }) +} +// 新增授权信息 +export function addInfoauth(data) { + return request({ + url: 'org/info/auth', + method: 'post', + data: data + }) +} +// 新增【机构管理信息】 +export function addInfo(data) { + return request({ + url: '/org/info/add', + method: 'post', + data: data + }) +} + +// 修改【机构管理信息】 +export function updateInfo(data) { + return request({ + url: '/org/info/edit', + method: 'post', + data: data + }) +} + +// 删除【机构管理信息】 +export function delInfo(data) { + return request({ + url: '/org/info/delete', + method: 'post', + data: data + }) +} + +export function getKay() { + return request({ + url: '/org/info/key', + method: 'get' + }) +} +//用户模糊搜索 +export function userGetList(data) { + return request({ + url: '/portal/user/list', + method: 'get', + params: data + }) +} + +export function runInfo(data) { + return request({ + url: '/org/info/run', + method: 'post', + data: data + }) +} + +export function stopInfo(data) { + return request({ + url: '/org/info/stop', + method: 'post', + data: data + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/orglog.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/orglog.js new file mode 100644 index 00000000..34e2b32c --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/orglog.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 查询网关访问日志列表 +export function listLog(query) { + return request({ + url: '/org/log/list', + method: 'get', + params: query + }) +} + +// 查询网关访问日志详细 +export function getLog(logId) { + return request({ + url: '/org/log/' + logId, + method: 'get' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/orgstatistics.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/orgstatistics.js new file mode 100644 index 00000000..5457a478 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/apimanage/orgstatistics.js @@ -0,0 +1,10 @@ +import request from '@/utils/request' + +// 查询接口调用次数统计列表 +export function listStatistics(query) { + return request({ + url: '/org/statistics/list', + method: 'get', + params: query + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/absolve.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/absolve.js new file mode 100644 index 00000000..389226f2 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/absolve.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询危险货物品数据可免除量列表 +export function listAbsolve(query) { + return request({ + url: '/business/absolve/list', + method: 'get', + params: query + }) +} + +// 查询危险货物品数据可免除量详细 +export function getAbsolve(absolveCode) { + return request({ + url: '/business/absolve/' + absolveCode, + method: 'get' + }) +} + +// 新增危险货物品数据可免除量 +export function addAbsolve(data) { + return request({ + url: '/business/absolve', + method: 'post', + data: data + }) +} + +// 修改危险货物品数据可免除量 +export function updateAbsolve(data) { + return request({ + url: '/business/absolve', + method: 'put', + data: data + }) +} + +// 删除危险货物品数据可免除量 +export function delAbsolve(absolveCode) { + return request({ + url: '/business/absolve/' + absolveCode, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/catalogue.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/catalogue.js new file mode 100644 index 00000000..aad8f53d --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/catalogue.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询危化品目录管理列表 +export function listCatalogue(query) { + return request({ + url: '/business/catalogue/list', + method: 'get', + params: query + }) +} + +// 查询危化品目录管理详细 +export function getCatalogue(id) { + return request({ + url: '/business/catalogue/' + id, + method: 'get' + }) +} + +// 新增危化品目录管理 +export function addCatalogue(data) { + return request({ + url: '/business/catalogue', + method: 'post', + data: data + }) +} + +// 修改危化品目录管理 +export function updateCatalogue(data) { + return request({ + url: '/business/catalogue', + method: 'put', + data: data + }) +} + +// 删除危化品目录管理 +export function delCatalogue(id) { + return request({ + url: '/business/catalogue/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/checkEaInfo.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/checkEaInfo.js new file mode 100644 index 00000000..35f30420 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/checkEaInfo.js @@ -0,0 +1,50 @@ +import request from '@/utils/request' + +// 查询电子底账列表 +export function listCheckEaInfo(query) { + return request({ + url: '/business/checkEaInfo/list', + method: 'get', + params: query + }) +} + +// 查询电子底账详细 +export function getCheckEaInfo(id) { + return request({ + url: '/business/checkEaInfo/' + id, + method: 'get' + }) +} + +// 新增电子底账 +export function addCheckEaInfo(data) { + return request({ + url: '/business/checkEaInfo', + method: 'post', + data: data + }) +} + +// 修改电子底账 +export function updateCheckEaInfo(data) { + return request({ + url: '/business/checkEaInfo', + method: 'put', + data: data + }) +} + +// 删除电子底账 +export function delCheckEaInfo(id) { + return request({ + url: '/business/checkEaInfo/' + id, + method: 'delete' + }) +} +export function getResultInfo(id) { + return request({ + url: '/business/checkEaInfo/checkAndReviewEaInfo/' + id, + method: 'get' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/checkInInfo.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/checkInInfo.js new file mode 100644 index 00000000..f19f1ea9 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/checkInInfo.js @@ -0,0 +1,66 @@ +import request from '@/utils/request' + +// 查询进口报关列表 +export function listCheckInInfo(query) { + return request({ + url: '/business/checkInInfo/list', + method: 'get', + params: query + }) +} + +// 查询进口报关详细 +export function getCheckInInfo(id) { + return request({ + url: '/business/checkInInfo/' + id, + method: 'get' + }) +} + +// 新增进口报关 +export function addCheckInInfo(data) { + return request({ + url: '/business/checkInInfo', + method: 'post', + data: data + }) +} + +// 修改进口报关 +export function updateCheckInInfo(data) { + return request({ + url: '/business/checkInInfo', + method: 'put', + data: data + }) +} + +// 删除进口报关 +export function delCheckInInfo(id) { + return request({ + url: '/business/checkInInfo/' + id, + method: 'delete' + }) +} +export function getResultInfo(id) { + return request({ + url: '/business/checkInInfo/checkAndReviewInInfo/' + id, + method: 'get' + }) +} +//审单结果查询 +export function reviewCheckInInfo(query) { + return request({ + url: '/business/checkInInfo/reviewInInfo', + method: 'get', + params: query + }) +} +//审单结果查询 +export function flushCheckInInfo(query) { + return request({ + url: '/business/checkInInfo/flushInInfo', + method: 'get', + params: query + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/checkPaInfo.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/checkPaInfo.js new file mode 100644 index 00000000..d372c9b4 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/checkPaInfo.js @@ -0,0 +1,50 @@ +import request from '@/utils/request' + +// 查询包装类型列表 +export function listCheckPaInfo(query) { + return request({ + url: '/business/checkPaInfo/list', + method: 'get', + params: query + }) +} + +// 查询包装类型详细 +export function getCheckPaInfo(id) { + return request({ + url: '/business/checkPaInfo/' + id, + method: 'get' + }) +} + +// 新增包装类型 +export function addCheckPaInfo(data) { + return request({ + url: '/business/checkPaInfo', + method: 'post', + data: data + }) +} + +// 修改包装类型 +export function updateCheckPaInfo(data) { + return request({ + url: '/business/checkPaInfo', + method: 'put', + data: data + }) +} + +// 删除包装类型 +export function delCheckPaInfo(id) { + return request({ + url: '/business/checkPaInfo/' + id, + method: 'delete' + }) +} +export function getResultInfo(id) { + return request({ + url: '/business/checkPaInfo/checkAndReviewPaInfo/' + id, + method: 'get' + }) +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/checkRule.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/checkRule.js new file mode 100644 index 00000000..f25a0401 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/checkRule.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询校验规则列表 +export function listCheckRule(query) { + return request({ + url: '/business/checkRule/list', + method: 'get', + params: query + }) +} + +// 查询校验规则详细 +export function getCheckRule(id) { + return request({ + url: '/business/checkRule/' + id, + method: 'get' + }) +} + +// 新增校验规则 +export function addCheckRule(data) { + return request({ + url: '/business/checkRule', + method: 'post', + data: data + }) +} + +// 修改校验规则 +export function updateCheckRule(data) { + return request({ + url: '/business/checkRule', + method: 'put', + data: data + }) +} + +// 删除校验规则 +export function delCheckRule(id) { + return request({ + url: '/business/checkRule/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/dangerGoods.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/dangerGoods.js new file mode 100644 index 00000000..a8052cc6 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/dangerGoods.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询CIQ危险化学品列表 +export function listDangerGoods(query) { + return request({ + url: '/business/dangerGoods/list', + method: 'get', + params: query + }) +} + +// 查询CIQ危险化学品详细 +export function getDangerGoods(id) { + return request({ + url: '/business/dangerGoods/' + id, + method: 'get' + }) +} + +// 新增CIQ危险化学品 +export function addDangerGoods(data) { + return request({ + url: '/business/dangerGoods', + method: 'post', + data: data + }) +} + +// 修改CIQ危险化学品 +export function updateDangerGoods(data) { + return request({ + url: '/business/dangerGoods', + method: 'put', + data: data + }) +} + +// 删除CIQ危险化学品 +export function delDangerGoods(id) { + return request({ + url: '/business/dangerGoods/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/gasBase.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/gasBase.js new file mode 100644 index 00000000..5d0d8af8 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/gasBase.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询压缩气体基础数据列表 +export function listGasBase(query) { + return request({ + url: '/business/gasBase/list', + method: 'get', + params: query + }) +} + +// 查询压缩气体基础数据详细 +export function getGasBase(id) { + return request({ + url: '/business/gasBase/' + id, + method: 'get' + }) +} + +// 新增压缩气体基础数据 +export function addGasBase(data) { + return request({ + url: '/business/gasBase', + method: 'post', + data: data + }) +} + +// 修改压缩气体基础数据 +export function updateGasBase(data) { + return request({ + url: '/business/gasBase', + method: 'put', + data: data + }) +} + +// 删除压缩气体基础数据 +export function delGasBase(id) { + return request({ + url: '/business/gasBase/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/goods.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/goods.js new file mode 100644 index 00000000..1e91318c --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/goods.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询危险品货物管理列表 +export function listGoods(query) { + return request({ + url: '/business/goods/list', + method: 'get', + params: query + }) +} + +// 查询危险品货物管理详细 +export function getGoods(id) { + return request({ + url: '/business/goods/' + id, + method: 'get' + }) +} + +// 新增危险品货物管理 +export function addGoods(data) { + return request({ + url: '/business/goods', + method: 'post', + data: data + }) +} + +// 修改危险品货物管理 +export function updateGoods(data) { + return request({ + url: '/business/goods', + method: 'put', + data: data + }) +} + +// 删除危险品货物管理 +export function delGoods(id) { + return request({ + url: '/business/goods/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/identify.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/identify.js new file mode 100644 index 00000000..340b8938 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/identify.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询危险品分类鉴定数据列表 +export function listIdentify(query) { + return request({ + url: '/business/identify/list', + method: 'get', + params: query + }) +} + +// 查询危险品分类鉴定数据详细 +export function getIdentify(id) { + return request({ + url: '/business/identify/' + id, + method: 'get' + }) +} + +// 新增危险品分类鉴定数据 +export function addIdentify(data) { + return request({ + url: '/business/identify', + method: 'post', + data: data + }) +} + +// 修改危险品分类鉴定数据 +export function updateIdentify(data) { + return request({ + url: '/business/identify', + method: 'put', + data: data + }) +} + +// 删除危险品分类鉴定数据 +export function delIdentify(id) { + return request({ + url: '/business/identify/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/info.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/info.js new file mode 100644 index 00000000..3e336728 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/info.js @@ -0,0 +1,61 @@ +import request from '@/utils/request' + +// 查询校验数据列表 +export function listInfo(query) { + return request({ + url: '/business/info/list', + method: 'get', + params: query + }) +} + +// 查询校验数据详细 +export function getInfo(id) { + return request({ + url: '/business/info/' + id, + method: 'get' + }) +} + +// 新增校验数据 +export function addInfo(data) { + return request({ + url: '/business/info', + method: 'post', + data: data + }) +} + +// 修改校验数据 +export function updateInfo(data) { + return request({ + url: '/business/info', + method: 'put', + data: data + }) +} + +// 删除校验数据 +export function delInfo(id) { + return request({ + url: '/business/info/' + id, + method: 'delete' + }) + + +} + +// 校验数据 +export function check(id) { + return request({ + url: '/business/info/check/' + id, + method: 'get' + }) +} + +export function getResultInfo(id) { + return request({ + url: '/business/info/getResultInfo/' + id, + method: 'get' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/isolation.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/isolation.js new file mode 100644 index 00000000..f4cbdd25 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/isolation.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询危险货物品数据隔离列表 +export function listIsolation(query) { + return request({ + url: '/business/isolation/list', + method: 'get', + params: query + }) +} + +// 查询危险货物品数据隔离详细 +export function getIsolation(operationCode) { + return request({ + url: '/business/isolation/' + operationCode, + method: 'get' + }) +} + +// 新增危险货物品数据隔离 +export function addIsolation(data) { + return request({ + url: '/business/isolation', + method: 'post', + data: data + }) +} + +// 修改危险货物品数据隔离 +export function updateIsolation(data) { + return request({ + url: '/business/isolation', + method: 'put', + data: data + }) +} + +// 删除危险货物品数据隔离 +export function delIsolation(operationCode) { + return request({ + url: '/business/isolation/' + operationCode, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/operation.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/operation.js new file mode 100644 index 00000000..43a99e89 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/operation.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询危险货物品数据积载与操作列表 +export function listOperation(query) { + return request({ + url: '/business/operation/list', + method: 'get', + params: query + }) +} + +// 查询危险货物品数据积载与操作详细 +export function getOperation(operationCode) { + return request({ + url: '/business/operation/' + operationCode, + method: 'get' + }) +} + +// 新增危险货物品数据积载与操作 +export function addOperation(data) { + return request({ + url: '/business/operation', + method: 'post', + data: data + }) +} + +// 修改危险货物品数据积载与操作 +export function updateOperation(data) { + return request({ + url: '/business/operation', + method: 'put', + data: data + }) +} + +// 删除危险货物品数据积载与操作 +export function delOperation(operationCode) { + return request({ + url: '/business/operation/' + operationCode, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/organicPeroxide.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/organicPeroxide.js new file mode 100644 index 00000000..981222e7 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/organicPeroxide.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询有机过氧化物列表 +export function listOrganicPeroxide(query) { + return request({ + url: '/business/organicPeroxide/list', + method: 'get', + params: query + }) +} + +// 查询有机过氧化物详细 +export function getOrganicPeroxide(id) { + return request({ + url: '/business/organicPeroxide/' + id, + method: 'get' + }) +} + +// 新增有机过氧化物 +export function addOrganicPeroxide(data) { + return request({ + url: '/business/organicPeroxide', + method: 'post', + data: data + }) +} + +// 修改有机过氧化物 +export function updateOrganicPeroxide(data) { + return request({ + url: '/business/organicPeroxide', + method: 'put', + data: data + }) +} + +// 删除有机过氧化物 +export function delOrganicPeroxide(id) { + return request({ + url: '/business/organicPeroxide/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/packageBase.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/packageBase.js new file mode 100644 index 00000000..43c3cb42 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/packageBase.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询固体液体数据管理列表 +export function listPackageBase(query) { + return request({ + url: '/business/packageBase/list', + method: 'get', + params: query + }) +} + +// 查询固体液体数据管理详细 +export function getPackageBase(id) { + return request({ + url: '/business/packageBase/' + id, + method: 'get' + }) +} + +// 新增固体液体数据管理 +export function addPackageBase(data) { + return request({ + url: '/business/packageBase', + method: 'post', + data: data + }) +} + +// 修改固体液体数据管理 +export function updatePackageBase(data) { + return request({ + url: '/business/packageBase', + method: 'put', + data: data + }) +} + +// 删除固体液体数据管理 +export function delPackageBase(id) { + return request({ + url: '/business/packageBase/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/packageRule.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/packageRule.js new file mode 100644 index 00000000..b656fc27 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/packageRule.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 查询包装导则管理列表 +export function listPackageRule(query) { + return request({ + url: '/business/packageRule/list', + method: 'get', + params: query + }) +} + +// 查询包装导则管理详细 +export function getPackageRule(id) { + return request({ + url: '/business/packageRule/' + id, + method: 'get' + }) +} + +// 查询包装导则管理详细 +export function getPackageRuleInfo(id) { + return request({ + url: '/business/packageRule/edit/' + id, + method: 'get' + }) +} + +// 新增包装导则管理 +export function addPackageRule(data) { + return request({ + url: '/business/packageRule', + method: 'post', + data: data + }) +} + +// 修改包装导则管理 +export function updatePackageRule(data) { + return request({ + url: '/business/packageRule', + method: 'put', + data: data + }) +} + +// 删除包装导则管理 +export function delPackageRule(id) { + return request({ + url: '/business/packageRule/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/peroxideType52Base.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/peroxideType52Base.js new file mode 100644 index 00000000..38041bf1 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/peroxideType52Base.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询5.2类有机过氧化物数据列表 +export function listPeroxideType52Base(query) { + return request({ + url: '/business/peroxideType52Base/list', + method: 'get', + params: query + }) +} + +// 查询5.2类有机过氧化物数据详细 +export function getPeroxideType52Base(id) { + return request({ + url: '/business/peroxideType52Base/' + id, + method: 'get' + }) +} + +// 新增5.2类有机过氧化物数据 +export function addPeroxideType52Base(data) { + return request({ + url: '/business/peroxideType52Base', + method: 'post', + data: data + }) +} + +// 修改5.2类有机过氧化物数据 +export function updatePeroxideType52Base(data) { + return request({ + url: '/business/peroxideType52Base', + method: 'put', + data: data + }) +} + +// 删除5.2类有机过氧化物数据 +export function delPeroxideType52Base(id) { + return request({ + url: '/business/peroxideType52Base/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/peroxideTypefBase.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/peroxideTypefBase.js new file mode 100644 index 00000000..29d4bf1a --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/peroxideTypefBase.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询 F型有机过氧化物数据列表 +export function listPeroxideTypefBase(query) { + return request({ + url: '/business/peroxideTypefBase/list', + method: 'get', + params: query + }) +} + +// 查询 F型有机过氧化物数据详细 +export function getPeroxideTypefBase(id) { + return request({ + url: '/business/peroxideTypefBase/' + id, + method: 'get' + }) +} + +// 新增 F型有机过氧化物数据 +export function addPeroxideTypefBase(data) { + return request({ + url: '/business/peroxideTypefBase', + method: 'post', + data: data + }) +} + +// 修改 F型有机过氧化物数据 +export function updatePeroxideTypefBase(data) { + return request({ + url: '/business/peroxideTypefBase', + method: 'put', + data: data + }) +} + +// 删除 F型有机过氧化物数据 +export function delPeroxideTypefBase(id) { + return request({ + url: '/business/peroxideTypefBase/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/ruleGroup.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/ruleGroup.js new file mode 100644 index 00000000..923539e1 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/ruleGroup.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询校验规则组列表 +export function listRuleGroup(query) { + return request({ + url: '/business/ruleGroup/list', + method: 'get', + params: query + }) +} + +// 查询校验规则组详细 +export function getRuleGroup(id) { + return request({ + url: '/business/ruleGroup/' + id, + method: 'get' + }) +} + +// 新增校验规则组 +export function addRuleGroup(data) { + return request({ + url: '/business/ruleGroup', + method: 'post', + data: data + }) +} + +// 修改校验规则组 +export function updateRuleGroup(data) { + return request({ + url: '/business/ruleGroup', + method: 'put', + data: data + }) +} + +// 删除校验规则组 +export function delRuleGroup(id) { + return request({ + url: '/business/ruleGroup/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/specialRule.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/specialRule.js new file mode 100644 index 00000000..e060b670 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/business/specialRule.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询特殊规定管理列表 +export function listSpecialRule(query) { + return request({ + url: '/business/specialRule/list', + method: 'get', + params: query + }) +} + +// 查询特殊规定管理详细 +export function getSpecialRule(id) { + return request({ + url: '/business/specialRule/' + id, + method: 'get' + }) +} + +// 新增特殊规定管理 +export function addSpecialRule(data) { + return request({ + url: '/business/specialRule', + method: 'post', + data: data + }) +} + +// 修改特殊规定管理 +export function updateSpecialRule(data) { + return request({ + url: '/business/specialRule', + method: 'put', + data: data + }) +} + +// 删除特殊规定管理 +export function delSpecialRule(id) { + return request({ + url: '/business/specialRule/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/delegate.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/delegate.js new file mode 100644 index 00000000..69567ad4 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/delegate.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 查询列表 +export function listdelegate(query) { + return request({ + url: '/business/delegate/page/list', + method: 'get', + params: query + }) +} + +// 查询详细 +export function getdelegate(Id) { + return request({ + url: '/business/delegate/' + Id, + method: 'get' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/goodsDeclare.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/goodsDeclare.js new file mode 100644 index 00000000..eaf3af70 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/goodsDeclare.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询列表 +export function listdelegate(query) { + return request({ + url: '/business/goodsDeclare/page/list', + method: 'get', + params: query + }) +} + +// 查询详细 +export function getdelegate(Id) { + return request({ + url: '/business/goodsDeclare/' + Id, + method: 'get' + }) +} + +// 随附文件 +export function getFileList(data) { + return request({ + url: '/system/dict/data/fileType/', + method: 'post', + data: data + }) +} + +// 随附文件 +export function attachFileList(Id) { + return request({ + url: '/business/attachFile/list?declareId=' + Id, + method: 'get' + }) +} +// 随附文件 +export function downloadFile(query) { + return request({ + url: '/business/attachFile/download', + method: 'get', + params: query, + responseType: 'blob', + timeout: 0, + }) +} + +// 查询详细 +export function getdelegateList(Id) { + return request({ + url: '/business/delegate/list/' + Id, + method: 'get' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/his.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/his.js new file mode 100644 index 00000000..e38f5102 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/his.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询随附文件信息列表 +export function listHis(query) { + return request({ + url: '/business/his/list', + method: 'get', + params: query + }) +} + +// 查询随附文件信息详细 +export function getHis(hisId) { + return request({ + url: '/business/his/' + hisId, + method: 'get' + }) +} + +// 新增随附文件信息 +export function addHis(data) { + return request({ + url: '/business/his', + method: 'post', + data: data + }) +} + +// 修改随附文件信息 +export function updateHis(data) { + return request({ + url: '/business/his', + method: 'put', + data: data + }) +} + +// 删除随附文件信息 +export function delHis(hisId) { + return request({ + url: '/business/his/' + hisId, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/info.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/info.js new file mode 100644 index 00000000..89fca62b --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/info.js @@ -0,0 +1,66 @@ +import request from '@/utils/request' + +// 查询货代公司列表 +export function listInfo(query) { + return request({ + url: '/agent/info/page/list', + method: 'get', + params: query + }) +} +export function listagent(query) { + return request({ + url: '/agent/info/list', + method: 'get', + params: query + }) +} +// 查询货代公司详细 +export function getInfo(id) { + return request({ + url: '/agent/info/' + id, + method: 'get' + }) +} +// 查询货代公司列表(排除节点) +export function listDeptExcludeChild(deptId) { + return request({ + url: '/agent/info/list/exclude/' + deptId, + method: 'get' + }) +} +// 新增货代公司 +export function addInfo(data) { + return request({ + url: '/agent/info/add', + method: 'post', + data: data + }) +} + +// 修改货代公司 +export function updateInfo(data) { + return request({ + url: '/agent/info/edit', + method: 'post', + data: data + }) +} + +// 删除货代公司 +export function delInfo(data) { + return request({ + url: '/agent/info/delete', + method: 'post', + data: data + }) +} + +// 启停货代公司 +export function changeStatus(data) { + return request({ + url: '/agent/info/edit/status', + method: 'post', + data: data + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/logininfor.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/logininfor.js new file mode 100644 index 00000000..1f9bb880 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/logininfor.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 查询登录日志列表 +export function list(query) { + return request({ + url: '/business/loginLog/list', + method: 'get', + params: query + }) +} + +// 删除登录日志 +export function delLogininfor(infoId) { + return request({ + url: '/business/loginLog/' + infoId, + method: 'delete' + }) +} + +// 清空登录日志 +export function cleanLogininfor() { + return request({ + url: '/business/loginLog/removeAll', + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/operlog.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/operlog.js new file mode 100644 index 00000000..55c50b9c --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/operlog.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 查询操作日志列表 +export function list(query) { + return request({ + url: '/business/oprLog/list', + method: 'get', + params: query + }) +} + +// 删除操作日志 +export function delOperlog(operId) { + return request({ + url: '/business/oprLog/' + operId, + method: 'delete' + }) +} + +// 清空操作日志 +export function cleanOperlog() { + return request({ + url: '/business/oprLog/removeAll', + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/user.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/user.js new file mode 100644 index 00000000..ac433953 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/ccicsh/user.js @@ -0,0 +1,61 @@ +import request from '@/utils/request' + +// 查询预审平台用户信息列表 +export function listUser(query) { + return request({ + url: '/pq/user/page/list', + method: 'get', + params: query + }) +} + +// 查询预审平台用户信息详细 +export function getUser(id) { + return request({ + url: '/pq/user/' + id, + method: 'get' + }) +} + +// 新增预审平台用户信息 +export function addUser(data) { + return request({ + url: '/pq/user/add', + method: 'post', + data: data + }) +} + +// 修改预审平台用户信息 +export function updateUser(data) { + return request({ + url: '/pq/user/edit', + method: 'post', + data: data + }) +} + +// 删除预审平台用户信息 +export function delUser(data) { + return request({ + url: '/pq/user/delete', + method: 'post', + data: data + }) +} +// 重置密码 +export function resetPwd(data) { + return request({ + url: '/pq/user/resetPwd', + method: 'post', + data: data + }) +} +// 启停 +export function changeStatus(data) { + return request({ + url: '/pq/user/editStatus', + method: 'post', + data: data + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/dataconsole/export.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/dataconsole/export.js new file mode 100644 index 00000000..43a63403 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/dataconsole/export.js @@ -0,0 +1,40 @@ +import request from '@/utils/request' + +// 查询SQL查询导出记录列表 +export function listExport(query) { + return request({ + url: '/console/export/page', + method: 'post', + data: query, + closeLoading : true + }) +} + +// 查询SQL查询导出记录详细 +export function getExportDetail(data) { + return request({ + url: '/console/export/detail', + method: 'get', + params: data + }) +} + +// 下载 +export function exportDownload(exportId) { + return request({ + url: '/console/export/download/?exportId=' + exportId, + method: 'get', + responseType: 'blob', + timeout: 0, + }) +} + + +// 删除SQL查询导出记录 +export function delExport(data) { + return request({ + url: '/console/export/delete', + method: 'post', + data: data + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/dataconsole/sqlapply.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/dataconsole/sqlapply.js new file mode 100644 index 00000000..a4f01f11 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/dataconsole/sqlapply.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 查询【SQL元数据权限申请】列表 +export function listApply(query) { + return request({ + url: '/sql/apply/list', + method: 'get', + params: query + }) +} + +// 查询【SQL元数据权限申请】详细 +export function getApply(applyId) { + return request({ + url: '/sql/apply/' + applyId, + method: 'get' + }) +} + +// 新增【SQL元数据权限申请】 +export function addApply(data) { + return request({ + url: '/sql/apply', + method: 'post', + data: data + }) +} + +// 修改【SQL元数据权限申请】 +export function updateApply(data) { + return request({ + url: '/sql/apply', + method: 'put', + data: data + }) +} + +export function passApply(data) { + return request({ + url: '/sql/apply/pass', + method: 'post', + data: data + }) +} + +export function refuseApply(data) { + return request({ + url: '/sql/apply/refuse', + method: 'post', + data: data + }) +} +//申请列表 +export function authApply(data) { + return request({ + url: '/sql/apply/auth/list', + method: 'post', + data: data + }) +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/dataconsole/sqlconsole.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/dataconsole/sqlconsole.js new file mode 100644 index 00000000..ba64e106 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/dataconsole/sqlconsole.js @@ -0,0 +1,83 @@ +import request from '@/utils/request' + +export function runSql (data) { + return request({ + url: '/console/sql/run', + method: 'post', + timeout: 20 * 60 * 1000, + data: data + }) +} + +export function explainSql (data) { + return request({ + url: '/console/sql/explain', + method: 'post', + timeout: 20 * 60 * 1000, + data: data + }) +} + +export function stopSql (data) { + return request({ + url: '/console/sql/stop', + method: 'post', + data: data + }) +} + +export function exportSql (data) { + return request({ + url: '/console/sql/export', + method: 'post', + data: data, + }) +} + +export function consoleFileList (data) { + return request({ + url: '/console/file/list', + method: 'get', + params: data + }) +} + +export function consoleTask () { + return request({ + url: '/console/sql/sqlRunTask', + method: 'get' + }) +} + +export function addConsoleFile (data) { + return request({ + url: '/console/file', + method: 'post', + data: data + }) +} + +export function updateConsoleFile (data) { + return request({ + url: '/console/file', + method: 'put', + data: data + }) +} + +export function delConsoleFile (data) { + return request({ + url: '/console/file/delete', + method: 'post', + data: data + }) +} + +export function getConnectNum (data) { + return request({ + url: '/console/sql/connectNum', + method: 'get', + timeout: 20 * 60 * 1000, + params: data + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/dataconsole/sqlmyapply.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/dataconsole/sqlmyapply.js new file mode 100644 index 00000000..1370885f --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/dataconsole/sqlmyapply.js @@ -0,0 +1,19 @@ +import request from '@/utils/request' + +// 查询【SQL元数据权限申请】列表 +export function listApply(query) { + return request({ + url: '/sql/apply/my/list', + method: 'get', + params: query + }) +} + +// 查询【SQL元数据权限申请】详细 +export function getApply(applyId) { + return request({ + url: '/sql/apply/my/' + applyId, + method: 'get' + }) +} + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerApplyInfo.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerApplyInfo.js new file mode 100644 index 00000000..4f3cdfc1 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerApplyInfo.js @@ -0,0 +1,166 @@ +import request, { downloadStream } from '@/utils/request' + +//容器申请-查询 +export function pageDockerApplyInfo(data) { + return request({ + url: '/docker/dockerApplyInfo/page', + method: 'get', + params: data + }) +} + +//容器申请-详情 +export function detailDockerApplyInfo(data) { + return request({ + url: '/docker/dockerApplyInfo/detail', + method: 'get', + params: data + }) +} + +//容器申请-新增 +export function addDockerApplyInfo(data) { + return request({ + url: '/docker/dockerApplyInfo/add', + method: 'post', + data: data + }) +} + +//容器申请-编辑 +export function editDockerApplyInfo(data) { + return request({ + url: '/docker/dockerApplyInfo/edit', + method: 'put', + data: data + }) +} + +//容器申请-删除 +export function delDockerApplyInfo(data) { + return request({ + url: '/docker/dockerApplyInfo/del', + method: 'delete', + data: data + }) +} + +//容器申请-发布 +export function releasePageDockerApplyInfo(data) { + return request({ + url: '/docker/dockerApplyInfo/release', + method: 'put', + data: data + }) +} + +//容器数据注入申请-审核 +export function reviewDockerApplyReview(data) { + return request({ + url: '/docker/dockerApplyReview/review', + method: 'put', + data: data + }) +} + +//容器数据注入申请-待审核 +export function pageDockerApplyReview(data) { + return request({ + url: '/docker/dockerApplyReview/reviewPage', + method: 'get', + params: data + }) +} + +//容器数据注入申请-详情 +export function detailDockerApplyReview(data) { + return request({ + url: '/docker/dockerApplyReview/detail', + method: 'get', + params: data + }) +} + +//用户模糊搜索 +export function userGetList(data) { + return request({ + url: '/portal/user/getList', + method: 'get', + params: data + }) +} +//实验室硬件配置信息表 +export function dockerConfigHardwareGetList(data) { + return request({ + url: '/docker/dockerConfigHardware/getList', + method: 'get', + params: data + }) +} +//容器可用镜像 镜像名称dockerImageName serviceType 服务类型 +export function dockerImagesGetList(data) { + return request({ + url: '/docker/dockerImages/getList', + method: 'get', + params: data + }) +} +//服务器清单dockerServerId dockerServerName +export function dockerClientInfoGetList(data) { + return request({ + url: '/docker/dockerClientInfo/getList', + method: 'get', + params: data + }) +} + +//服务器清单dockerServerId dockerServerName +export function fileDownload(uuId) { + // return request({ + // url: '/files/' + uuId, + // method: 'get', + // responseType: 'blob', + // timeout: 0, + // }) + downloadStream('/files/' + uuId); +} +// 分块上传首次获取文件ID;所有分块传完后再次调用进行合并 +export function getUploadSize(data,source) { + var opts={ + url: 'files/upload/console/getUploadSize', + method: 'post', + data: data, + headers: { + 'Content-Type': 'multipart/form-data; charset=utf-8; boundary="another cool boundary";', + }, + timeout: 0, + }; + if(source){//取消token + opts.cancelToken = source.token; + } + return request(opts) +} + +// 文件上传 +export function getUpload(data,uploadProgressFunc,idx,source) { + var opts={ + url: 'files/upload/console', + method: 'post', + data: data, + headers: { + 'Content-Type': 'multipart/form-data' + }, + timeout: 0, + }; + if(uploadProgressFunc && idx!==undefined){ + //追加进度处理 + opts.onUploadProgress=(progressEvent) => { + const { loaded, total } = progressEvent; + uploadProgressFunc(loaded,total,idx); + } + } + if(source){//取消token + opts.cancelToken = source.token; + } + return request(opts); +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerClientInfo.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerClientInfo.js new file mode 100644 index 00000000..1c4b9d62 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerClientInfo.js @@ -0,0 +1,31 @@ +import request from '@/utils/request' + +//服务器清单-查询 +export function pageDockerClientInfo(data) { + return request({ + url: '/docker/dockerClientInfo/page', + method: 'get', + params: data + }) +} + +//服务器清单-详情 +export function detailDockerClientInfo(data) { + return request({ + url: '/docker/dockerClientInfo/detail', + method: 'get', + params: data + }) +} + +//服务器清单-编辑 +export function editDockerClientInfo(data) { + return request({ + url: '/docker/dockerClientInfo/edit', + method: 'put', + data: data + }) +} + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerConfigHardware.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerConfigHardware.js new file mode 100644 index 00000000..a2e6a013 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerConfigHardware.js @@ -0,0 +1,55 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-06-29 19:49:12 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-07-12 16:24:12 + * @FilePath: \agile-system-console-ui\src\api\docker\dockerConfigHardware.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import request from '@/utils/request' + +//实验室硬件配置信息表-查询 +export function pageDockerConfigHardware(data) { + return request({ + url: '/docker/dockerConfigHardware/page', + method: 'get', + params: data + }) +} + +//实验室硬件配置信息表-详情 +export function detailDockerConfigHardware(data) { + return request({ + url: '/docker/dockerConfigHardware/detail', + method: 'get', + params: data + }) +} +//实验室硬件配置信息表-新增 +export function editDockerConfigHardware(data) { + return request({ + url: '/docker/dockerConfigHardware/edit', + method: 'put', + data: data + }) +} +//实验室硬件配置信息表-编辑 +export function addDockerConfigHardware(data) { + return request({ + url: '/docker/dockerConfigHardware/add', + method: 'post', + data: data + }) +} + +//实验室硬件配置信息表-查询集合 +export function getListDockerConfigHardware(data) { + return request({ + url: '/docker/dockerConfigHardware/getList', + method: 'get', + params: data + }) +} + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerDownloadApply.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerDownloadApply.js new file mode 100644 index 00000000..1148e194 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerDownloadApply.js @@ -0,0 +1,52 @@ +import request, { downloadStream } from '@/utils/request' + +//下载文件申请-查询 +export function pageDockerDownloadApply(data) { + return request({ + url: '/docker/dockerDownloadApply/page', + method: 'get', + params: data + }) +} + +//下载文件申请-详情 +export function detailDockerDownloadApply(data) { + return request({ + url: '/docker/dockerDownloadApply/detail', + method: 'get', + params: data + }) +} + +//下载文件申请-审核 +export function reviewDockerDownloadApply(data) { + return request({ + url: '/docker/dockerDownloadApply/review', + method: 'put', + data: data + }) +} + +//下载文件申请-审核查询 +export function reviewPageDockerDownloadApply(data) { + return request({ + url: '/docker/dockerDownloadApply/reviewPage', + method: 'get', + params: data + }) +} + + +//下载文件 +export function fileDownloadDockerDownloadApply(downloadApplyId,data) { + // return request({ + // url: '/docker/dockerDownloadApply/downloadFile/' + downloadApplyId, + // method: 'get', + // timeout: 0, + // }) + downloadStream( + '/docker/dockerDownloadApply/downloadFile/' + downloadApplyId, + data //请求参数 + ); +} + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerImages.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerImages.js new file mode 100644 index 00000000..cf0bfe13 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerImages.js @@ -0,0 +1,31 @@ +import request from '@/utils/request' + +//容器可用镜像-查询 +export function pageDockerImages(data) { + return request({ + url: '/docker/dockerImages/page', + method: 'get', + params: data + }) +} + +//容器可用镜像-详情 +export function detailDockerImages(data) { + return request({ + url: '/docker/dockerImages/detail', + method: 'get', + params: data + }) +} + +//容器可用镜像-编辑 +export function editDockerImages(data) { + return request({ + url: '/docker/dockerImages/edit', + method: 'put', + data: data + }) +} + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerPortList.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerPortList.js new file mode 100644 index 00000000..92c515bf --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerPortList.js @@ -0,0 +1,31 @@ +import request from '@/utils/request' + +//服务器端口-查询 +export function pageDockerPortList(data) { + return request({ + url: '/docker/dockerPortList/page', + method: 'get', + params: data + }) +} + +//服务器端口-详情 +export function detailDockerPortList(data) { + return request({ + url: '/docker/dockerPortList/detail', + method: 'get', + params: data + }) +} + +//服务器端口-编辑 +export function editDockerPortList(data) { + return request({ + url: '/docker/dockerPortList/edit', + method: 'put', + data: data + }) +} + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerPortainerUser.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerPortainerUser.js new file mode 100644 index 00000000..7495686d --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerPortainerUser.js @@ -0,0 +1,31 @@ +import request from '@/utils/request' + +//管理portainer账户信息-查询 +export function pageDockerPortainerUser(data) { + return request({ + url: '/docker/dockerPortainerUser/page', + method: 'get', + params: data + }) +} + +//管理portainer账户信息-详情 +export function detailDockerPortainerUser(data) { + return request({ + url: '/docker/dockerPortainerUser/detail', + method: 'get', + params: data + }) +} + +//管理portainer账户信息-编辑 +export function editDockerPortainerUser(data) { + return request({ + url: '/docker/dockerPortainerUser/edit', + method: 'put', + data: data + }) +} + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerVpn.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerVpn.js new file mode 100644 index 00000000..94e89a36 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerVpn.js @@ -0,0 +1,82 @@ +import request from '@/utils/request' + +//vpn用户表-查询 +export function pageDockerVpn(data) { + return request({ + url: '/docker/dockerVpn/page', + method: 'get', + params: data + }) +} +export function dockerApplyInfo(data) { + return request({ + url: '/docker/dockerApplyInfo/getList', + method: 'get', + params: data + }) +} +//vpn用户表-详情 +export function detailDockerVpn(data) { + return request({ + url: '/docker/dockerVpn/detail', + method: 'get', + params: data + }) +} + +//vpn用户表-新增 +export function addDockerVpn(data) { + return request({ + url: '/docker/dockerVpn/add', + method: 'post', + data: data + }) +} + +//vpn用户表-编辑 +export function editDockerVpn(data) { + return request({ + url: '/docker/dockerVpn/edit', + method: 'put', + data: data + }) +} + +//vpn用户表-删除 +export function delDockerVpn(data) { + return request({ + url: '/docker/dockerVpn/del', + method: 'delete', + data: data + }) +} + +//vpn用户表-发送账户 +export function sendDockerVpn(data) { + return request({ + url: '/docker/dockerVpn/send', + method: 'put', + data: data + }) +} + +//vpn用户表-停用 +export function disableDockerVpn(data) { + return request({ + url: '/docker/dockerVpn/disable', + method: 'put', + data: data + }) +} + +//vpn用户表-启用 +export function enableDockerVpn(data) { + return request({ + url: '/docker/dockerVpn/enable', + method: 'put', + data: data + }) +} + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerWithUser.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerWithUser.js new file mode 100644 index 00000000..eb2e7645 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/docker/dockerWithUser.js @@ -0,0 +1,127 @@ +import request, { downloadStream } from '@/utils/request' + +//用户与容器信息-查询 +export function pageDockerWithUser(data) { + return request({ + url: '/docker/dockerWithUser/page', + method: 'get', + params: data + }) +} + +//用户与容器信息-详情 +export function detailDockerWithUser(data) { + return request({ + url: '/docker/dockerWithUser/detail', + method: 'get', + params: data + }) +} + +//用户与容器信息-重启 +export function restartDockerWithUser(data) { + return request({ + url: '/docker/dockerWithUser/restart', + method: 'put', + data: data + }) +} + +//用户与容器信息-禁用 +export function disableDockerWithUser(data) { + return request({ + url: '/docker/dockerWithUser/disable', + method: 'put', + data: data + }) +} + +//用户与容器信息-启用 +export function enableDockerWithUser(data) { + return request({ + url: '/docker/dockerWithUser/enable', + method: 'put', + data: data + }) +} + +//用户与容器信息-销毁 +export function removeDockerWithUser(data) { + return request({ + url: '/docker/dockerWithUser/remove', + method: 'put', + data: data + }) +} +//用户与容器信息-收回 +export function withdrawDockerWithUser(data) { + return request({ + url: '/docker/dockerWithUser/withdraw', + method: 'put', + data: data + }) +} +//用户与容器信息-重置密码 +export function resetPwdDockerWithUser(data) { + return request({ + url: '/docker/dockerWithUser/resetPwd', + method: 'put', + data: data + }) +} + +//用户与容器信息-重新初始化 +export function initializeDockerWithUser(data) { + return request({ + url: '/docker/dockerWithUser/initialize', + method: 'put', + data: data + }) +} +//用户与容器信息-失败组件重载 +export function loadlibDockerWithUser(data) { + return request({ + url: '/docker/dockerWithUser/loadlib', + method: 'put', + data: data + }) +} + +//用户与容器信息-上传组件 +export function addlibDockerWithUser(data) { + return request({ + url: '/docker/dockerWithUser/addlib', + method: 'put', + data: data + }) +} + +//用户与容器信息-获取日志文件清单 +export function getLogsDockerWithUser(data) { + return request({ + url: '/docker/dockerWithUser/getLogs', + method: 'get', + params: data + }) +} + +//用户与容器信息-下载日志文件 +export function downloadLogDockerWithUser(data) { + // return request({ + // url: '/docker/dockerWithUser/downloadLog', + // method: 'get', + // responseType: 'blob', + // params: data, + // timeout: 0, + // }) + downloadStream(`/docker/dockerWithUser/downloadLog`, data); +} + +//用户与容器信息-删除组件 +export function dellibDockerWithUser(data) { + return request({ + url: '/docker/dockerWithUser/dellib', + method: 'delete', + data: data + }) +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/index.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/index.js new file mode 100644 index 00000000..e9713468 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/index.js @@ -0,0 +1,47 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-07-11 18:01:28 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-07-11 18:02:46 + * @FilePath: \agile-system-console-ui\src\api\index.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import request from '@/utils/request' + +// 重点关注数据 +export function getfocus() { + return request({ + url: '/home/focus', + method: 'get', + closeLoading : true + }) +} +// 首页待审批申请数据接口 +export function getapply() { + return request({ + url: 'home/wait/apply', + method: 'get', + closeLoading : true + }) +} +// 退出方法 +export function logout() { + return request({ + url: '/logout', + method: 'post', + closeLoading : true + }) +} + +// 获取验证码 +export function getCodeImg() { + return request({ + url: '/captchaImage', + headers: { + isToken: false + }, + method: 'get', + timeout: 20000, + closeLoading : true + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/login.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/login.js new file mode 100644 index 00000000..b0a50c1c --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/login.js @@ -0,0 +1,66 @@ +import request from '@/utils/request' +import {Decrypt, Encrypt} from '@/utils/secret' + +// 登录方法 +export function login(username, password, code, uuid) { + const data = { + username, + password, + code, + uuid + } + // data.password = Encrypt(password) + return request({ + url: '/login', + headers: { + isToken: false + }, + method: 'post', + data: data, + closeLoading : true + }) +} + +// 注册方法 +export function register(data) { + return request({ + url: '/register', + headers: { + isToken: false + }, + method: 'post', + data: data, + closeLoading : true + }) +} + +// 获取用户详细信息 +export function getInfo() { + return request({ + url: '/getInfo', + method: 'get', + closeLoading : true + }) +} + +// 退出方法 +export function logout() { + return request({ + url: '/logout', + method: 'post', + closeLoading : true + }) +} + +// 获取验证码 +export function getCodeImg() { + return request({ + url: '/captchaImage', + headers: { + isToken: false + }, + method: 'get', + timeout: 20000, + closeLoading : true + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/menu.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/menu.js new file mode 100644 index 00000000..faef101c --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/menu.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 获取路由 +export const getRouters = () => { + return request({ + url: '/getRouters', + method: 'get' + }) +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/metadata/assetdata.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/metadata/assetdata.js new file mode 100644 index 00000000..f8a49fd3 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/metadata/assetdata.js @@ -0,0 +1,32 @@ +import request from '@/utils/request' + +export function baseDataList(data) { + return request({ + url: '/asset/data/list', + method: 'get', + params: data + }) +} + +export function baseTableList(columnName) { + return request({ + url: '/asset/data/table/' + columnName, + method: 'get', + }) +} + +export function baseTableDetail(tableId) { + return request({ + url: '/asset/data/detail/' + tableId, + method: 'get', + }) +} + +export function baseTableExport(ids) { + return request({ + url: '/asset/data/export/' + ids, + method: 'get', + responseType: 'blob', + timeout: 0, + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/metadata/datacolumn.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/metadata/datacolumn.js new file mode 100644 index 00000000..b6ea8c74 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/metadata/datacolumn.js @@ -0,0 +1,59 @@ +import request from '@/utils/request' + +export function listDataColumn(data) { + return request({ + url: '/metadata/columns/list', + method: 'get', + params: data + }) +} + +export function pageDataColumn(data) { + return request({ + url: '/metadata/columns/page', + method: 'get', + params: data + }) +} + +export function getDataColumn(id) { + return request({ + url: '/metadata/columns/' + id, + method: 'get' + }) +} + +export function getDataMetadataTree(level, data) { + return request({ + url: '/metadata/columns/tree/' + level, + method: 'get', + params: data + }) +} + +export function getDataMetadataTreeByPerm(level, data) { + return request({ + url: '/metadata/columns/tree/perm/' + level, + method: 'get', + timeout: 10 * 60 * 1000, + params: data + }) +} + +export function getDataMetadataTreeNew(data) { + return request({ + url: '/metadata/columns/treeList', + method: 'post', + data: data, + closeLoading : true + }) +} + +export function getDataMetadataTreePermNew(data) { + return request({ + url: '/metadata/columns/treeList/perm', + method: 'post', + data: data, + closeLoading : true + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/metadata/datasource.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/metadata/datasource.js new file mode 100644 index 00000000..b6625a89 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/metadata/datasource.js @@ -0,0 +1,163 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-07-04 10:29:59 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-09-21 10:24:07 + * @FilePath: \agile-system-console-ui\src\api\metadata\datasource.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import request from '@/utils/request' +//连接数列表 +export function pageDataSource(data) { + return request({ + url: '/metadata/source/conn/page', + method: 'get', + params: data + }) +} + +export function getDataSource(id) { + return request({ + url: '/metadata/source/conn/detail?connId=' + id, + timeout: 2 * 60 * 1000, + method: 'get' + }) +} + +export function delDataSource(data) { + return request({ + url: '/metadata/source/conn/delete', + method: 'post', + data: data + }) +} + +export function addDataSource(data) { + return request({ + url: '/metadata/source/conn/add', + method: 'post', + data: data + }) +} + +export function updateDataSource(data) { + return request({ + url: '/metadata/source/conn/edit', + method: 'post', + data: data + }) +} +//数据源 + + +// 刷新参数缓存 +export function refreshMetadata() { + return request({ + url: '/metadata/sources/refresh', + method: 'get' + }) +} + +export function listDataSource(data) { + return request({ + url: '/metadata/sources/list', + method: 'get', + params: data + }) +} +export function listDataUnauthSource(data) { + return request({ + url: '/metadata/sources/unauth/tree', + method: 'get', + params: data + }) +} + +export function pageDataList(data) { + return request({ + url: '/metadata/sources/page', + method: 'get', + params: data + }) +} + +export function getData(id) { + return request({ + url: '/metadata/sources/' + id, + method: 'get' + }) +} + +export function delData(data) { + return request({ + url: '/metadata/sources/delete', + method: 'post', + data: data + }) +} + +export function addData(data) { + return request({ + url: '/metadata/sources', + method: 'post', + data: data + }) +} + +export function updateData(data) { + return request({ + url: '/metadata/sources', + method: 'put', + data: data + }) +} + +export function checkConnection(data) { + return request({ + url: '/metadata/sources/checkConnection', + method: 'post', + timeout: 5 * 60 * 1000, + data: data + }) +} + +export function sync(data) { + return request({ + url: '/metadata/sources/sync', + method: 'post', + data: data + }) +} + +export function syncTable(data) { + return request({ + url: '/metadata/sources/sync/table', + method: 'post', + data: data + }) +} + +export function word(id) { + return request({ + url: '/metadata/sources/word/' + id, + method: 'post', + responseType: 'blob', + timeout: 0, + }) +} + +export function schemas(data) { + return request({ + url: '/metadata/sources/schemas', + method: 'get', + params: data + }) +} + +export function queryMetadataTree(data) { + return request({ + url: '/metadata/sources/treeList', + method: 'get', + params: data + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/metadata/datatable.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/metadata/datatable.js new file mode 100644 index 00000000..17e7d689 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/metadata/datatable.js @@ -0,0 +1,49 @@ +import request,{syncRequest} from '@/utils/request' + +export function listDataTable(data) { + return request({ + url: '/metadata/tables/list', + method: 'get', + params: data + }) +} + +export function pageDataTable(data) { + return request({ + url: '/metadata/tables/page', + method: 'get', + params: data + }) +} + +export function queryTableMap(data) { + return request({ + url: '/metadata/tables/tableMap', + method: 'post', + data: data + }) +} + +export function queryTreeMap(data) { + return request({ + url: '/metadata/columns/treeMap', + method: 'post', + data: data, + headers: { repeatSubmit:false }, + closeLoading : true + }) +} + +export function queryTableList(data) { + return request({ + url: '/metadata/tables/conn/list', + method: 'get', + params: data + }) +} + +var tmpobj={ + timeoutid:0, +}; + +export {tmpobj}; diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/metadata/quality.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/metadata/quality.js new file mode 100644 index 00000000..8d124bd3 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/metadata/quality.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +export function qualityList(data) { + return request({ + url: '/data/quality/list', + method: 'get', + params: data + }) +} +export function qualitypage(data) { + return request({ + url: '/data/quality/page', + method: 'get', + params: data + }) +} + +export function qualityExport(ids) { + return request({ + url: '/data/quality/export/' + ids, + method: 'get', + responseType: 'blob', + timeout: 0, + }) +} + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/cache.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/cache.js new file mode 100644 index 00000000..72c5f6a3 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/cache.js @@ -0,0 +1,57 @@ +import request from '@/utils/request' + +// 查询缓存详细 +export function getCache() { + return request({ + url: '/monitor/cache', + method: 'get' + }) +} + +// 查询缓存名称列表 +export function listCacheName() { + return request({ + url: '/monitor/cache/getNames', + method: 'get' + }) +} + +// 查询缓存键名列表 +export function listCacheKey(cacheName) { + return request({ + url: '/monitor/cache/getKeys/' + cacheName, + method: 'get' + }) +} + +// 查询缓存内容 +export function getCacheValue(cacheName, cacheKey) { + return request({ + url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey, + method: 'get' + }) +} + +// 清理指定名称缓存 +export function clearCacheName(cacheName) { + return request({ + url: '/monitor/cache/clearCacheName/' + cacheName, + method: 'delete' + }) +} + +// 清理指定键名缓存 +export function clearCacheKey(cacheKey) { + return request({ + url: '/monitor/cache/clearCacheKey/' + cacheKey, + method: 'delete' + }) +} + +// 清理全部缓存 +export function clearCacheAll() { + return request({ + url: '/monitor/cache/clearCacheAll', + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/job.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/job.js new file mode 100644 index 00000000..38155693 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/job.js @@ -0,0 +1,71 @@ +import request from '@/utils/request' + +// 查询定时任务调度列表 +export function listJob(query) { + return request({ + url: '/monitor/job/list', + method: 'get', + params: query + }) +} + +// 查询定时任务调度详细 +export function getJob(jobId) { + return request({ + url: '/monitor/job/' + jobId, + method: 'get' + }) +} + +// 新增定时任务调度 +export function addJob(data) { + return request({ + url: '/monitor/job', + method: 'post', + data: data + }) +} + +// 修改定时任务调度 +export function updateJob(data) { + return request({ + url: '/monitor/job', + method: 'put', + data: data + }) +} + +// 删除定时任务调度 +export function delJob(jobId) { + return request({ + url: '/monitor/job/' + jobId, + method: 'delete' + }) +} + +// 任务状态修改 +export function changeJobStatus(jobId, status) { + const data = { + jobId, + status + } + return request({ + url: '/monitor/job/changeStatus', + method: 'put', + data: data + }) +} + + +// 定时任务立即执行一次 +export function runJob(jobId, jobGroup) { + const data = { + jobId, + jobGroup + } + return request({ + url: '/monitor/job/run', + method: 'put', + data: data + }) +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/jobLog.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/jobLog.js new file mode 100644 index 00000000..6e0be616 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/jobLog.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 查询调度日志列表 +export function listJobLog(query) { + return request({ + url: '/monitor/jobLog/list', + method: 'get', + params: query + }) +} + +// 删除调度日志 +export function delJobLog(jobLogId) { + return request({ + url: '/monitor/jobLog/' + jobLogId, + method: 'delete' + }) +} + +// 清空调度日志 +export function cleanJobLog() { + return request({ + url: '/monitor/jobLog/clean', + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/logininfor.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/logininfor.js new file mode 100644 index 00000000..26a46eb5 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/logininfor.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 查询登录日志列表 +export function list(query) { + return request({ + url: '/monitor/logininfor/list', + method: 'get', + params: query + }) +} + +// 删除登录日志 +export function delLogininfor(infoId) { + return request({ + url: '/monitor/logininfor/' + infoId, + method: 'delete' + }) +} + +// 清空登录日志 +export function cleanLogininfor() { + return request({ + url: '/monitor/logininfor/clean', + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/online.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/online.js new file mode 100644 index 00000000..bd221378 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/online.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 查询在线用户列表 +export function list(query) { + return request({ + url: '/monitor/online/list', + method: 'get', + params: query + }) +} + +// 强退用户 +export function forceLogout(tokenId) { + return request({ + url: '/monitor/online/' + tokenId, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/operlog.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/operlog.js new file mode 100644 index 00000000..a04bca84 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/operlog.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 查询操作日志列表 +export function list(query) { + return request({ + url: '/monitor/operlog/list', + method: 'get', + params: query + }) +} + +// 删除操作日志 +export function delOperlog(operId) { + return request({ + url: '/monitor/operlog/' + operId, + method: 'delete' + }) +} + +// 清空操作日志 +export function cleanOperlog() { + return request({ + url: '/monitor/operlog/clean', + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/server.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/server.js new file mode 100644 index 00000000..e1f9ca21 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/monitor/server.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 获取服务信息 +export function getServer() { + return request({ + url: '/monitor/server', + method: 'get' + }) +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/content.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/content.js new file mode 100644 index 00000000..383dfc51 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/content.js @@ -0,0 +1,63 @@ +import request from '@/utils/request' + +// 查询门户内容列表 +export function listContent(query) { + return request({ + url: '/portal/content/list', + method: 'get', + params: query + }) +} + +// 查询门户内容详细 +export function getContent(contentId) { + return request({ + url: '/portal/content/' + contentId, + method: 'get' + }) +} + +// 新增门户内容 +export function addContent(data) { + return request({ + url: '/portal/content', + method: 'post', + data: data + }) +} + +// 修改门户内容 +export function updateContent(data) { + return request({ + url: '/portal/content', + method: 'put', + data: data + }) +} + +// 删除门户内容 +export function delContent(data) { + return request({ + url: '/portal/content/delete', + method: 'post', + data: data + }) +} + +// 发布门户内容 +export function releaseContent(data) { + return request({ + url: '/portal/content/release', + method: 'post', + data: data + }) +} + +// 下架门户内容 +export function downContent(data) { + return request({ + url: '/portal/content/down', + method: 'post', + data: data + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/information.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/information.js new file mode 100644 index 00000000..fcb60ed9 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/information.js @@ -0,0 +1,63 @@ +import request from '@/utils/request' + +// 查询门户内容列表 +export function listContent(query) { + return request({ + url: '/portal/content/info/list', + method: 'get', + params: query + }) +} + +// 查询门户内容详细 +export function getContent(contentId) { + return request({ + url: '/portal/content/info/' + contentId, + method: 'get' + }) +} + +// 新增门户内容 +export function addContent(data) { + return request({ + url: '/portal/content/info', + method: 'post', + data: data + }) +} + +// 修改门户内容 +export function updateContent(data) { + return request({ + url: '/portal/content/info', + method: 'put', + data: data + }) +} + +// 删除门户内容 +export function delContent(data) { + return request({ + url: '/portal/content/info/delete', + method: 'post', + data: data + }) +} + +// 发布门户内容 +export function releaseContent(data) { + return request({ + url: '/portal/content/info/release', + method: 'post', + data: data + }) +} + +// 下架门户内容 +export function downContent(data) { + return request({ + url: '/portal/content/info/down', + method: 'post', + data: data + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/logininfor.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/logininfor.js new file mode 100644 index 00000000..f836b5ee --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/logininfor.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 查询登录日志列表 +export function list(query) { + return request({ + url: '/portal/logininfor/list', + method: 'get', + params: query + }) +} + +// 删除登录日志 +export function delLogininfor(infoId) { + return request({ + url: '/portal/logininfor/' + infoId, + method: 'delete' + }) +} + +// 清空登录日志 +export function cleanLogininfor() { + return request({ + url: '/portal/logininfor/clean', + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/operlog.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/operlog.js new file mode 100644 index 00000000..3d4f58cb --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/operlog.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 查询操作日志列表 +export function list(query) { + return request({ + url: '/portal/operlog/list', + method: 'get', + params: query + }) +} + +// 删除操作日志 +export function delOperlog(operId) { + return request({ + url: '/portal/operlog/' + operId, + method: 'delete' + }) +} + +// 清空操作日志 +export function cleanOperlog() { + return request({ + url: '/portal/operlog/clean', + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/portalUserMsg.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/portalUserMsg.js new file mode 100644 index 00000000..9c1f2049 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/portalUserMsg.js @@ -0,0 +1,22 @@ +import request from '@/utils/request' + +//门户用户消息-查询 +export function pagePortalUserMsg(data) { + return request({ + url: '/portal/portalUserMsg/page', + method: 'get', + params: data + }) +} + +//门户用户消息-详情 +export function detailPortalUserMsg(data) { + return request({ + url: '/portal/portalUserMsg/detail', + method: 'get', + params: data + }) +} + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/user.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/user.js new file mode 100644 index 00000000..d945674d --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/portal/user.js @@ -0,0 +1,111 @@ +import request from '@/utils/request' +import { parseStrEmpty } from "@/utils/ruoyi"; + +// 查询用户列表 +export function listUser(query) { + return request({ + url: '/portal/user/list', + method: 'get', + params: query + }) +} + +// 查询用户详细 +export function getUser(userId) { + return request({ + url: '/portal/user/' + parseStrEmpty(userId), + method: 'get' + }) +} + +// 新增用户 +export function addUser(data) { + return request({ + url: '/portal/user', + method: 'post', + data: data + }) +} + +// 修改用户 +export function updateUser(data) { + return request({ + url: '/portal/user', + method: 'put', + data: data + }) +} + +// 删除用户 +export function delUser(userId) { + return request({ + url: '/portal/user/' + userId, + method: 'delete' + }) +} + +// 用户密码重置 +export function resetUserPwd(userId, password) { + const data = { + userId, + password + } + return request({ + url: '/portal/user/resetPwd', + method: 'put', + data: data + }) +} + +// 用户状态修改 +export function changeUserStatus(userId, status) { + const data = { + userId, + status + } + return request({ + url: '/portal/user/changeStatus', + method: 'put', + data: data + }) +} + +// 查询用户个人信息 +export function getUserProfile() { + return request({ + url: '/portal/user/profile', + method: 'get' + }) +} + +// 修改用户个人信息 +export function updateUserProfile(data) { + return request({ + url: '/portal/user/profile', + method: 'put', + data: data + }) +} + +// 用户密码重置 +export function updateUserPwd(oldPassword, newPassword) { + const data = { + oldPassword, + newPassword + } + return request({ + url: '/portal/user/profile/updatePwd', + method: 'put', + params: data + }) +} + +// 用户头像上传 +export function uploadAvatar(data) { + return request({ + url: '/portal/user/profile/avatar', + method: 'post', + data: data + }) +} + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/lineInfo.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/lineInfo.js new file mode 100644 index 00000000..aa452db1 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/lineInfo.js @@ -0,0 +1,52 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-09-26 17:33:41 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-09-27 15:33:09 + * @FilePath: \agile-system-console-ui\src\api\product\lineInfo.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import request from '@/utils/request' + +// 查询线路基础信息列表 +export function listLine(data) { + return request({ + url: '/product/lineInfo/list', + method: 'post', + data: data + }) +} + +// 查询线路基础信息详细 +export function getLine(lineName) { + return request({ + url: '/product/lineInfo/detail?lineName=' + lineName, + method: 'get' + }) +} + +// 新增线路基础信息 +export function addLine(data) { + return request({ + url: '/base/line', + method: 'post', + data: data + }) +} + +// 修改线路基础信息 +export function updateLine(data) { + return request({ + url: '/base/line', + method: 'put', + data: data + }) +} + +// 删除线路基础信息 +export function delLine(lineName) { + return request({ + url: '/base/line/' + lineName, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/lineMetric.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/lineMetric.js new file mode 100644 index 00000000..7f9f7409 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/lineMetric.js @@ -0,0 +1,45 @@ +import request from '@/utils/request' + +// 查询统计时间段内的线路客流量列表 +export function listDay(data) { + return request({ + url: '/product/lineMetric/page', + method: 'post', + data: data, + closeLoading : true + }) +} + +// 查询统计时间段内的线路客流量详细 +export function getDay(id) { + return request({ + url: '/prd/day/' + id, + method: 'get' + }) +} + +// 新增统计时间段内的线路客流量 +export function addDay(data) { + return request({ + url: '/prd/day', + method: 'post', + data: data + }) +} + +// 修改统计时间段内的线路客流量 +export function updateDay(data) { + return request({ + url: '/prd/day', + method: 'put', + data: data + }) +} + +// 删除统计时间段内的线路客流量 +export function delDay(id) { + return request({ + url: '/prd/day/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/lineStation.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/lineStation.js new file mode 100644 index 00000000..b3b6f8b4 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/lineStation.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询站点基础信息列表 +export function listLinestation(data) { + return request({ + url: '/product/lineInfo/stationList', + method: 'post', + data: data + }) +} + +// 查询站点基础信息详细 +export function getLinestation(lineCode) { + return request({ + url: '/product/lineInfo/stationDetail?lineName=' + lineCode, + method: 'get' + }) +} + +// 新增站点基础信息 +export function addLinestation(data) { + return request({ + url: '/base/Linestation', + method: 'post', + data: data + }) +} + +// 修改站点基础信息 +export function updateLinestation(data) { + return request({ + url: '/base/Linestation', + method: 'put', + data: data + }) +} + +// 删除站点基础信息 +export function delLinestation(lineCode) { + return request({ + url: '/base/Linestation/' + lineCode, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/routeMetric.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/routeMetric.js new file mode 100644 index 00000000..60f5997f --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/routeMetric.js @@ -0,0 +1,53 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-09-26 17:33:41 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-09-27 15:19:04 + * @FilePath: \agile-system-console-ui\src\api\product\routeMetric.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import request from '@/utils/request' + +// 查询班次日客流量统计列表 +export function listDay(data) { + return request({ + url: '/product/routeMetric/page', + method: 'post', + data: data, + closeLoading : true + }) +} + +// 查询班次日客流量统计详细 +export function getDay(id) { + return request({ + url: '/product/routeMetric/detail?id=' + id, + method: 'get' + }) +} + +// 新增班次日客流量统计 +export function addDay(data) { + return request({ + url: '/prd/day', + method: 'post', + data: data + }) +} + +// 修改班次日客流量统计 +export function updateDay(data) { + return request({ + url: '/prd/day', + method: 'put', + data: data + }) +} + +// 删除班次日客流量统计 +export function delDay(id) { + return request({ + url: '/prd/day/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/stationFreqMetric.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/stationFreqMetric.js new file mode 100644 index 00000000..f8a7c475 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/stationFreqMetric.js @@ -0,0 +1,53 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-09-26 17:33:41 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-09-27 15:20:33 + * @FilePath: \agile-system-console-ui\src\api\product\stationFreqMetric.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import request from '@/utils/request' + +// 查询站点日常乘客客流量统计列表 +export function listDay(data) { + return request({ + url: '/produce/stationFreqMetric/page', + method: 'post', + data: data, + closeLoading : true + }) +} + +// 查询站点日常乘客客流量统计详细 +export function getDay(id) { + return request({ + url: '/prd/day/' + id, + method: 'get' + }) +} + +// 新增站点日常乘客客流量统计 +export function addDay(data) { + return request({ + url: '/prd/day', + method: 'post', + data: data + }) +} + +// 修改站点日常乘客客流量统计 +export function updateDay(data) { + return request({ + url: '/prd/day', + method: 'put', + data: data + }) +} + +// 删除站点日常乘客客流量统计 +export function delDay(id) { + return request({ + url: '/prd/day/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/stationFreqTrans.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/stationFreqTrans.js new file mode 100644 index 00000000..5101b49b --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/stationFreqTrans.js @@ -0,0 +1,45 @@ +import request from '@/utils/request' + +// 查询站点日常乘客换乘客流量统计列表 +export function listDay(data) { + return request({ + url: '/product/stationFreqTrans/page', + method: 'post', + data: data, + closeLoading : true + }) +} + +// 查询站点日常乘客换乘客流量统计详细 +export function getDay(id) { + return request({ + url: '/prd/day/' + id, + method: 'get' + }) +} + +// 新增站点日常乘客换乘客流量统计 +export function addDay(data) { + return request({ + url: '/prd/day', + method: 'post', + data: data + }) +} + +// 修改站点日常乘客换乘客流量统计 +export function updateDay(data) { + return request({ + url: '/prd/day', + method: 'put', + data: data + }) +} + +// 删除站点日常乘客换乘客流量统计 +export function delDay(id) { + return request({ + url: '/prd/day/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/stationMetric.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/stationMetric.js new file mode 100644 index 00000000..ccea8182 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/stationMetric.js @@ -0,0 +1,45 @@ +import request from '@/utils/request' + +// 查询站点日客流量统计列表 +export function listDay(data) { + return request({ + url: '/product/stationMetric/page', + method: 'post', + data: data, + closeLoading : true + }) +} + +// 查询站点日客流量统计详细 +export function getDay(id) { + return request({ + url: '/prd/day/' + id, + method: 'get' + }) +} + +// 新增站点日客流量统计 +export function addDay(data) { + return request({ + url: '/prd/day', + method: 'post', + data: data + }) +} + +// 修改站点日客流量统计 +export function updateDay(data) { + return request({ + url: '/prd/day', + method: 'put', + data: data + }) +} + +// 删除站点日客流量统计 +export function delDay(id) { + return request({ + url: '/prd/day/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/stationTrans.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/stationTrans.js new file mode 100644 index 00000000..7557b0d9 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/product/stationTrans.js @@ -0,0 +1,45 @@ +import request from '@/utils/request' + +// 查询站点日换乘客流量统计列表 +export function listDay(data) { + return request({ + url: '/product/stationTrans/page', + method: 'post', + data: data, + closeLoading : true + }) +} + +// 查询站点日换乘客流量统计详细 +export function getDay(id) { + return request({ + url: '/prd/day/' + id, + method: 'get' + }) +} + +// 新增站点日换乘客流量统计 +export function addDay(data) { + return request({ + url: '/prd/day', + method: 'post', + data: data + }) +} + +// 修改站点日换乘客流量统计 +export function updateDay(data) { + return request({ + url: '/prd/day', + method: 'put', + data: data + }) +} + +// 删除站点日换乘客流量统计 +export function delDay(id) { + return request({ + url: '/prd/day/' + id, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/publicx/publicFiles.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/publicx/publicFiles.js new file mode 100644 index 00000000..2bcf8a59 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/publicx/publicFiles.js @@ -0,0 +1,22 @@ +import request from '@/utils/request' + +//系统文件表-查询 +export function pagePublicFiles(data) { + return request({ + url: '/publicx/publicFiles/page', + method: 'get', + params: data + }) +} + +//系统文件表-详情 +export function detailPublicFiles(data) { + return request({ + url: '/publicx/publicFiles/detail', + method: 'get', + params: data + }) +} + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/publicx/publicMsgTemplate.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/publicx/publicMsgTemplate.js new file mode 100644 index 00000000..bbdb7d69 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/publicx/publicMsgTemplate.js @@ -0,0 +1,31 @@ +import request from '@/utils/request' + +//消息模板-查询 +export function pagePublicMsgTemplate(data) { + return request({ + url: '/publicx/publicMsgTemplate/page', + method: 'get', + params: data + }) +} + +//消息模板-详情 +export function detailPublicMsgTemplate(data) { + return request({ + url: '/publicx/publicMsgTemplate/detail', + method: 'get', + params: data + }) +} + +//消息模板-编辑 +export function editPublicMsgTemplate(data) { + return request({ + url: '/publicx/publicMsgTemplate/edit', + method: 'get', + params: data + }) +} + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/publicx/publicPhoneMsgLog.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/publicx/publicPhoneMsgLog.js new file mode 100644 index 00000000..40bb203a --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/publicx/publicPhoneMsgLog.js @@ -0,0 +1,30 @@ +import request from '@/utils/request' + +//短信记录表-查询 +export function pagePublicPhoneMsgLog(data) { + return request({ + url: '/publicx/publicPhoneMsgLog/page', + method: 'get', + params: data + }) +} + +//短信记录表-详情 +export function detailPublicPhoneMsgLog(data) { + return request({ + url: '/publicx/publicPhoneMsgLog/detail', + method: 'get', + params: data + }) +} + +//短信记录表-获取剩余短信 +export function remainingNumPublicPhoneMsgLog(data) { + return request({ + url: '/publicx/publicPhoneMsgLog/remainingNum', + method: 'get', + params: data + }) +} + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/centimeDelay.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/centimeDelay.js new file mode 100644 index 00000000..21cd1f95 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/centimeDelay.js @@ -0,0 +1,31 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-09-26 17:33:41 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-09-26 19:59:03 + * @FilePath: \agile-system-console-ui\src\api\quality\centimeDelay.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import request from '@/utils/request' + +// 查询延迟上送比率列表 +export function listPrd(data) { + return request({ + url: '/quality/centimeDelay/page', + method: 'post', + data: data, + closeLoading : true + }) +} + +export function exportList(data) { + return request({ + url: '/quality/centimeDelay/export', + method: 'post', + data: data, + responseType: 'blob', + timeout: 0, + closeLoading : true + }) +} + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/posMatchRate.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/posMatchRate.js new file mode 100644 index 00000000..e085c5e5 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/posMatchRate.js @@ -0,0 +1,32 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-09-26 17:33:41 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-09-26 20:03:03 + * @FilePath: \agile-system-console-ui\src\api\quality\posMatchRate.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import request from '@/utils/request' + +// 查询Pos匹配率列表 +export function listPrd(data) { + return request({ + url: '/quality/posMatchRate/page', + method: 'post', + data: data, + closeLoading : true + }) +} + +export function exportList(data) { + return request({ + url: '/quality/posMatchRate/export', + method: 'post', + data: data, + responseType: 'blob', + timeout: 0, + closeLoading : true + }) +} + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/routeDailyCount.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/routeDailyCount.js new file mode 100644 index 00000000..2dc66cd8 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/routeDailyCount.js @@ -0,0 +1,32 @@ +/* + * @Author: 1036896656@qq.com 1036896656@qq.com + * @Date: 2023-09-26 17:33:41 + * @LastEditors: 1036896656@qq.com 1036896656@qq.com + * @LastEditTime: 2023-09-26 20:06:15 + * @FilePath: \agile-system-console-ui\src\api\quality\routeDailyCount.js + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import request from '@/utils/request' + +// 查询日营运线路条数列表 +export function listPrd(data) { + return request({ + url: '/quality/routeDailyCount/page', + method: 'post', + data: data, + closeLoading : true + }) +} + +export function exportList(data) { + return request({ + url: '/quality/routeDailyCount/export', + method: 'post', + data: data, + responseType: 'blob', + timeout: 0, + closeLoading : true + }) +} + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/routeMiss.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/routeMiss.js new file mode 100644 index 00000000..87a01a9d --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/routeMiss.js @@ -0,0 +1,22 @@ +import request from '@/utils/request' + +// 查询班次缺失率列表 +export function listPrd(data) { + return request({ + url: '/quality/routeMiss/page', + method: 'post', + data: data, + closeLoading : true + }) +} + +export function exportList(data) { + return request({ + url: '/quality/routeMiss/export', + method: 'post', + data: data, + responseType: 'blob', + timeout: 0, + closeLoading : true + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/routeTurnoverTime.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/routeTurnoverTime.js new file mode 100644 index 00000000..3f8a60d0 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/routeTurnoverTime.js @@ -0,0 +1,23 @@ +import request from '@/utils/request' + +// 查询班次周转时间列表 +export function listPrd(data) { + return request({ + url: '/quality/routeTurnover/page', + method: 'post', + data: data, + closeLoading : true + }) +} + +export function exportList(data) { + return request({ + url: '/quality/routeTurnover/export', + method: 'post', + data: data, + responseType: 'blob', + timeout: 0, + closeLoading : true + }) +} + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/stationMiss.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/stationMiss.js new file mode 100644 index 00000000..9dcb6413 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/stationMiss.js @@ -0,0 +1,31 @@ +import request from '@/utils/request' + +// 查询站点缺失率列表 +export function listPrd(data) { + return request({ + url: '/quality/stationMiss/page', + method: 'post', + data: data, + closeLoading : true + }) +} + +// 查询站点缺失率详细 +export function getPrd(id) { + return request({ + url: '/quality/stationMiss/detail?id=' + id, + method: 'get' + }) +} + +export function exportList(data) { + return request({ + url: '/quality/stationMiss/export', + method: 'post', + data: data, + responseType: 'blob', + timeout: 0, + closeLoading : true + }) +} + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/vehicleDailyCount.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/vehicleDailyCount.js new file mode 100644 index 00000000..330b3d88 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/quality/vehicleDailyCount.js @@ -0,0 +1,23 @@ +import request from '@/utils/request' + +// 查询日营运车辆数列表 +export function listPrd(data) { + return request({ + url: '/quality/vehicleDaily/page', + method: 'post', + data: data, + closeLoading : true + }) +} + +export function exportList(data) { + return request({ + url: '/quality/vehicleDaily/export', + method: 'post', + data: data, + responseType: 'blob', + timeout: 0, + closeLoading : true + }) +} + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/sftp/user.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/sftp/user.js new file mode 100644 index 00000000..08a8564e --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/sftp/user.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询SFTP用户列表 +export function listUser(query) { + return request({ + url: '/sftp/user/list', + method: 'get', + params: query + }) +} + +// 查询SFTP用户详细 +export function getUser(sftpId) { + return request({ + url: '/sftp/user/' + sftpId, + method: 'get' + }) +} + +// 新增SFTP用户 +export function addUser(data) { + return request({ + url: '/sftp/user', + method: 'post', + data: data + }) +} + +// 修改SFTP用户 +export function updateUser(data) { + return request({ + url: '/sftp/user', + method: 'put', + data: data + }) +} + +// 删除SFTP用户 +export function delUser(sftpId) { + return request({ + url: '/sftp/user/' + sftpId, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/sftp/userFile.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/sftp/userFile.js new file mode 100644 index 00000000..3f0c3dc9 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/sftp/userFile.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询SFTP用户文件列表 +export function listFile(query) { + return request({ + url: '/sftp/file/list', + method: 'get', + params: query + }) +} + +// 查询SFTP用户文件详细 +export function getFile(sftpFileId) { + return request({ + url: '/sftp/file/' + sftpFileId, + method: 'get' + }) +} + +// 新增SFTP用户文件 +export function addFile(data) { + return request({ + url: '/sftp/file', + method: 'post', + data: data + }) +} + +// 修改SFTP用户文件 +export function updateFile(data) { + return request({ + url: '/sftp/file', + method: 'put', + data: data + }) +} + +// 删除SFTP用户文件 +export function delFile(sftpFileId) { + return request({ + url: '/sftp/file/' + sftpFileId, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/config.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/config.js new file mode 100644 index 00000000..a404d825 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/config.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 查询参数列表 +export function listConfig(query) { + return request({ + url: '/system/config/list', + method: 'get', + params: query + }) +} + +// 查询参数详细 +export function getConfig(configId) { + return request({ + url: '/system/config/' + configId, + method: 'get' + }) +} + +// 根据参数键名查询参数值 +export function getConfigKey(configKey) { + return request({ + url: '/system/config/configKey/' + configKey, + method: 'get' + }) +} + +// 新增参数配置 +export function addConfig(data) { + return request({ + url: '/system/config', + method: 'post', + data: data + }) +} + +// 修改参数配置 +export function updateConfig(data) { + return request({ + url: '/system/config', + method: 'put', + data: data + }) +} + +// 删除参数配置 +export function delConfig(configId) { + return request({ + url: '/system/config/' + configId, + method: 'delete' + }) +} + +// 刷新参数缓存 +export function refreshCache() { + return request({ + url: '/system/config/refreshCache', + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/dept.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/dept.js new file mode 100644 index 00000000..2804676f --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/dept.js @@ -0,0 +1,68 @@ +import request from '@/utils/request' + +// 查询部门列表 +export function listDept(query) { + return request({ + url: '/system/dept/list', + method: 'get', + params: query + }) +} + +// 查询部门列表(排除节点) +export function listDeptExcludeChild(deptId) { + return request({ + url: '/system/dept/list/exclude/' + deptId, + method: 'get' + }) +} + +// 查询部门详细 +export function getDept(deptId) { + return request({ + url: '/system/dept/' + deptId, + method: 'get' + }) +} + +// 查询部门下拉树结构 +export function treeselect() { + return request({ + url: '/system/dept/treeselect', + method: 'get' + }) +} + +// 根据角色ID查询部门树结构 +export function roleDeptTreeselect(roleId) { + return request({ + url: '/system/dept/roleDeptTreeselect/' + roleId, + method: 'get' + }) +} + +// 新增部门 +export function addDept(data) { + return request({ + url: '/system/dept', + method: 'post', + data: data + }) +} + +// 修改部门 +export function updateDept(data) { + return request({ + url: '/system/dept', + method: 'put', + data: data + }) +} + +// 删除部门 +export function delDept(deptId) { + return request({ + url: '/system/dept/' + deptId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/dict/data.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/dict/data.js new file mode 100644 index 00000000..6c9eb79b --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/dict/data.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 查询字典数据列表 +export function listData(query) { + return request({ + url: '/system/dict/data/list', + method: 'get', + params: query + }) +} + +// 查询字典数据详细 +export function getData(dictCode) { + return request({ + url: '/system/dict/data/' + dictCode, + method: 'get' + }) +} + +// 根据字典类型查询字典数据信息 +export function getDicts(dictType) { + return request({ + url: '/system/dict/data/type/' + dictType, + method: 'get' + }) +} + +// 新增字典数据 +export function addData(data) { + return request({ + url: '/system/dict/data', + method: 'post', + data: data + }) +} + +// 修改字典数据 +export function updateData(data) { + return request({ + url: '/system/dict/data', + method: 'put', + data: data + }) +} + +// 删除字典数据 +export function delData(dictCode) { + return request({ + url: '/system/dict/data/' + dictCode, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/dict/type.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/dict/type.js new file mode 100644 index 00000000..a7a6e01f --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/dict/type.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 查询字典类型列表 +export function listType(query) { + return request({ + url: '/system/dict/type/list', + method: 'get', + params: query + }) +} + +// 查询字典类型详细 +export function getType(dictId) { + return request({ + url: '/system/dict/type/' + dictId, + method: 'get' + }) +} + +// 新增字典类型 +export function addType(data) { + return request({ + url: '/system/dict/type', + method: 'post', + data: data + }) +} + +// 修改字典类型 +export function updateType(data) { + return request({ + url: '/system/dict/type', + method: 'put', + data: data + }) +} + +// 删除字典类型 +export function delType(dictId) { + return request({ + url: '/system/dict/type/' + dictId, + method: 'delete' + }) +} + +// 刷新字典缓存 +export function refreshCache() { + return request({ + url: '/system/dict/type/refreshCache', + method: 'delete' + }) +} + +// 获取字典选择框列表 +export function optionselect() { + return request({ + url: '/system/dict/type/optionselect', + method: 'get' + }) +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/menu.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/menu.js new file mode 100644 index 00000000..f6415c65 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/menu.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 查询菜单列表 +export function listMenu(query) { + return request({ + url: '/system/menu/list', + method: 'get', + params: query + }) +} + +// 查询菜单详细 +export function getMenu(menuId) { + return request({ + url: '/system/menu/' + menuId, + method: 'get' + }) +} + +// 查询菜单下拉树结构 +export function treeselect() { + return request({ + url: '/system/menu/treeselect', + method: 'get' + }) +} + +// 根据角色ID查询菜单下拉树结构 +export function roleMenuTreeselect(roleId) { + return request({ + url: '/system/menu/roleMenuTreeselect/' + roleId, + method: 'get' + }) +} + +// 新增菜单 +export function addMenu(data) { + return request({ + url: '/system/menu', + method: 'post', + data: data + }) +} + +// 修改菜单 +export function updateMenu(data) { + return request({ + url: '/system/menu', + method: 'put', + data: data + }) +} + +// 删除菜单 +export function delMenu(menuId) { + return request({ + url: '/system/menu/' + menuId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/notice.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/notice.js new file mode 100644 index 00000000..cc8c57d0 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/notice.js @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +// 查询公告列表 +export function listNotice(query) { + return request({ + url: '/system/notice/list', + method: 'get', + params: query + }) +} + +// 查询公告列表 +export function noPermListNotice(query) { + return request({ + url: '/system/notice/noPermList', + method: 'get', + params: query + }) +} + +// 查询公告详细 +export function getNotice(noticeId) { + return request({ + url: '/system/notice/' + noticeId, + method: 'get' + }) +} + +// 新增公告 +export function addNotice(data) { + return request({ + url: '/system/notice', + method: 'post', + data: data + }) +} + +// 修改公告 +export function updateNotice(data) { + return request({ + url: '/system/notice', + method: 'put', + data: data + }) +} + +// 删除公告 +export function delNotice(noticeId) { + return request({ + url: '/system/notice/' + noticeId, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/post.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/post.js new file mode 100644 index 00000000..1a8e9ca0 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/post.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询岗位列表 +export function listPost(query) { + return request({ + url: '/system/post/list', + method: 'get', + params: query + }) +} + +// 查询岗位详细 +export function getPost(postId) { + return request({ + url: '/system/post/' + postId, + method: 'get' + }) +} + +// 新增岗位 +export function addPost(data) { + return request({ + url: '/system/post', + method: 'post', + data: data + }) +} + +// 修改岗位 +export function updatePost(data) { + return request({ + url: '/system/post', + method: 'put', + data: data + }) +} + +// 删除岗位 +export function delPost(postId) { + return request({ + url: '/system/post/' + postId, + method: 'delete' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/role.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/role.js new file mode 100644 index 00000000..4b455e13 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/role.js @@ -0,0 +1,111 @@ +import request from '@/utils/request' + +// 查询角色列表 +export function listRole(query) { + return request({ + url: '/system/role/list', + method: 'get', + params: query + }) +} + +// 查询角色详细 +export function getRole(roleId) { + return request({ + url: '/system/role/' + roleId, + method: 'get' + }) +} + +// 新增角色 +export function addRole(data) { + return request({ + url: '/system/role', + method: 'post', + data: data + }) +} + +// 修改角色 +export function updateRole(data) { + return request({ + url: '/system/role', + method: 'put', + data: data + }) +} + +// 角色数据权限 +export function dataScope(data) { + return request({ + url: '/system/role/dataScope', + method: 'put', + data: data + }) +} + +// 角色状态修改 +export function changeRoleStatus(roleId, status) { + const data = { + roleId, + status + } + return request({ + url: '/system/role/changeStatus', + method: 'put', + data: data + }) +} + +// 删除角色 +export function delRole(roleId) { + return request({ + url: '/system/role/' + roleId, + method: 'delete' + }) +} + +// 查询角色已授权用户列表 +export function allocatedUserList(query) { + return request({ + url: '/system/role/authUser/allocatedList', + method: 'get', + params: query + }) +} + +// 查询角色未授权用户列表 +export function unallocatedUserList(query) { + return request({ + url: '/system/role/authUser/unallocatedList', + method: 'get', + params: query + }) +} + +// 取消用户授权角色 +export function authUserCancel(data) { + return request({ + url: '/system/role/authUser/cancel', + method: 'put', + data: data + }) +} + +// 批量取消用户授权角色 +export function authUserCancelAll(data) { + return request({ + url: '/system/role/authUser/cancelAll', + method: 'put', + params: data + }) +} + +// 授权用户选择 +export function authUserSelectAll(data) { + return request({ + url: '/system/role/authUser/selectAll', + method: 'put', + params: data + }) +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/user.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/user.js new file mode 100644 index 00000000..4fd752b4 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/user.js @@ -0,0 +1,127 @@ +import request from '@/utils/request' +import { parseStrEmpty } from "@/utils/ruoyi"; + +// 查询用户列表 +export function listUser(query) { + return request({ + url: '/system/user/list', + method: 'get', + params: query + }) +} + +// 查询用户详细 +export function getUser(userId) { + return request({ + url: '/system/user/' + parseStrEmpty(userId), + method: 'get' + }) +} + +// 新增用户 +export function addUser(data) { + return request({ + url: '/system/user', + method: 'post', + data: data + }) +} + +// 修改用户 +export function updateUser(data) { + return request({ + url: '/system/user', + method: 'put', + data: data + }) +} + +// 删除用户 +export function delUser(userId) { + return request({ + url: '/system/user/' + userId, + method: 'delete' + }) +} + +// 用户密码重置 +export function resetUserPwd(userId, password) { + const data = { + userId, + password + } + return request({ + url: '/system/user/resetPwd', + method: 'put', + data: data + }) +} + +// 用户状态修改 +export function changeUserStatus(userId, status) { + const data = { + userId, + status + } + return request({ + url: '/system/user/changeStatus', + method: 'put', + data: data + }) +} + +// 查询用户个人信息 +export function getUserProfile() { + return request({ + url: '/system/user/profile', + method: 'get' + }) +} + +// 修改用户个人信息 +export function updateUserProfile(data) { + return request({ + url: '/system/user/profile', + method: 'put', + data: data + }) +} + +// 用户密码重置 +export function updateUserPwd(oldPassword, newPassword) { + const data = { + oldPassword, + newPassword + } + return request({ + url: '/system/user/profile/updatePwd', + method: 'put', + params: data + }) +} + +// 用户头像上传 +export function uploadAvatar(data) { + return request({ + url: '/system/user/profile/avatar', + method: 'post', + data: data + }) +} + +// 查询授权角色 +export function getAuthRole(userId) { + return request({ + url: '/system/user/authRole/' + userId, + method: 'get' + }) +} + +// 保存授权角色 +export function updateAuthRole(data) { + return request({ + url: '/system/user/authRole', + method: 'put', + params: data + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/warning.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/warning.js new file mode 100644 index 00000000..ca7ecebd --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/system/warning.js @@ -0,0 +1,45 @@ +import request from '@/utils/request' + +// 查询【告警联系方式】列表 +export function listWarning(query) { + return request({ + url: '/system/warning/list', + method: 'get', + params: query + }) +} + +// 查询【告警联系方式】详细 +export function getWarning(id) { + return request({ + url: '/system/warning/' + id, + method: 'get' + }) +} + +// 新增【告警联系方式】 +export function addWarning(data) { + return request({ + url: '/system/warning', + method: 'post', + data: data + }) +} + +// 修改【告警联系方式】 +export function updateWarning(data) { + return request({ + url: '/system/warning', + method: 'put', + data: data + }) +} + +// 删除【告警联系方式】 +export function delWarning(data) { + return request({ + url: '/system/warning/delete', + method: 'post', + data: data + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/tool/gen.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/tool/gen.js new file mode 100644 index 00000000..45069278 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/api/tool/gen.js @@ -0,0 +1,76 @@ +import request from '@/utils/request' + +// 查询生成表数据 +export function listTable(query) { + return request({ + url: '/tool/gen/list', + method: 'get', + params: query + }) +} +// 查询db数据库列表 +export function listDbTable(query) { + return request({ + url: '/tool/gen/db/list', + method: 'get', + params: query + }) +} + +// 查询表详细信息 +export function getGenTable(tableId) { + return request({ + url: '/tool/gen/' + tableId, + method: 'get' + }) +} + +// 修改代码生成信息 +export function updateGenTable(data) { + return request({ + url: '/tool/gen', + method: 'put', + data: data + }) +} + +// 导入表 +export function importTable(data) { + return request({ + url: '/tool/gen/importTable', + method: 'post', + params: data + }) +} + +// 预览生成代码 +export function previewTable(tableId) { + return request({ + url: '/tool/gen/preview/' + tableId, + method: 'get' + }) +} + +// 删除表数据 +export function delTable(tableId) { + return request({ + url: '/tool/gen/' + tableId, + method: 'delete' + }) +} + +// 生成代码(自定义路径) +export function genCode(tableName) { + return request({ + url: '/tool/gen/genCode/' + tableName, + method: 'get' + }) +} + +// 同步数据库 +export function synchDb(tableName) { + return request({ + url: '/tool/gen/synchDb/' + tableName, + method: 'get' + }) +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/401_images/401.gif b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/401_images/401.gif new file mode 100644 index 00000000..cd6e0d94 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/401_images/401.gif differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/404_images/404.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/404_images/404.png new file mode 100644 index 00000000..3d8e2305 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/404_images/404.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/404_images/404_cloud.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/404_images/404_cloud.png new file mode 100644 index 00000000..c6281d09 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/404_images/404_cloud.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/index.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/index.js new file mode 100644 index 00000000..2c6b309c --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/index.js @@ -0,0 +1,9 @@ +import Vue from 'vue' +import SvgIcon from '@/components/SvgIcon'// svg component + +// register globally +Vue.component('svg-icon', SvgIcon) + +const req = require.context('./svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys().map(requireContext) +requireAll(req) diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/404.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/404.svg new file mode 100644 index 00000000..6df50190 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/agiletable.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/agiletable.svg new file mode 100644 index 00000000..08ea569c --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/agiletable.svg @@ -0,0 +1,6 @@ + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/alarm.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/alarm.svg new file mode 100644 index 00000000..76c79283 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/alarm.svg @@ -0,0 +1,6 @@ + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/api.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/api.svg new file mode 100644 index 00000000..273c03ce --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/api.svg @@ -0,0 +1,6 @@ + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/approve.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/approve.svg new file mode 100644 index 00000000..a9dc9d25 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/approve.svg @@ -0,0 +1,9 @@ + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/bug.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/bug.svg new file mode 100644 index 00000000..05a150dc --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/bug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/build.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/build.svg new file mode 100644 index 00000000..97c46886 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/build.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/button.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/button.svg new file mode 100644 index 00000000..904fddc8 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/button.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/cascader.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/cascader.svg new file mode 100644 index 00000000..e256024f --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/cascader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/chart.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/chart.svg new file mode 100644 index 00000000..27728fb0 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/checkbox.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/checkbox.svg new file mode 100644 index 00000000..013fd3a2 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/checkbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/clipboard.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/clipboard.svg new file mode 100644 index 00000000..90923ff6 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/clipboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/code.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/code.svg new file mode 100644 index 00000000..ed4d23cf --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/color.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/color.svg new file mode 100644 index 00000000..44a81aab --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/component.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/component.svg new file mode 100644 index 00000000..29c34580 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/component.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/consolesql.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/consolesql.svg new file mode 100644 index 00000000..7129cc49 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/consolesql.svg @@ -0,0 +1,12 @@ + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/content.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/content.svg new file mode 100644 index 00000000..d1c4dc5b --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/content.svg @@ -0,0 +1,9 @@ + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/dashboard.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/dashboard.svg new file mode 100644 index 00000000..5317d370 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/data1.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/data1.svg new file mode 100644 index 00000000..1b5f3526 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/data1.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/data2.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/data2.svg new file mode 100644 index 00000000..c4cb030a --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/data2.svg @@ -0,0 +1,6 @@ + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/data3.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/data3.svg new file mode 100644 index 00000000..948e806c --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/data3.svg @@ -0,0 +1,12 @@ + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/datafull.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/datafull.svg new file mode 100644 index 00000000..f96a1fb0 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/datafull.svg @@ -0,0 +1,6 @@ + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/date-range.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/date-range.svg new file mode 100644 index 00000000..fda571e7 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/date-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/date.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/date.svg new file mode 100644 index 00000000..52dc73ee --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/date.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/dict.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/dict.svg new file mode 100644 index 00000000..48493773 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/dict.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/docker.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/docker.svg new file mode 100644 index 00000000..c2ad89cb --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/docker.svg @@ -0,0 +1,16 @@ + + + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/dockerc.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/dockerc.svg new file mode 100644 index 00000000..82680ced --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/dockerc.svg @@ -0,0 +1,6 @@ + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/dockeru.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/dockeru.svg new file mode 100644 index 00000000..01d85b91 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/dockeru.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/documentation.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/documentation.svg new file mode 100644 index 00000000..70431228 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/documentation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/download.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/download.svg new file mode 100644 index 00000000..c8969513 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/drag.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/drag.svg new file mode 100644 index 00000000..4185d3ce --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/drag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/druid.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/druid.svg new file mode 100644 index 00000000..a2b4b4ed --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/druid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/edit.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/edit.svg new file mode 100644 index 00000000..d26101f2 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/education.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/education.svg new file mode 100644 index 00000000..7bfb01d1 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/education.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/email.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/email.svg new file mode 100644 index 00000000..74d25e21 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/examine.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/examine.svg new file mode 100644 index 00000000..178d59cd --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/examine.svg @@ -0,0 +1,6 @@ + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/example.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/example.svg new file mode 100644 index 00000000..46f42b53 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/example.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/excel.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/excel.svg new file mode 100644 index 00000000..74d97b80 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/excel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/exit-fullscreen.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/exit-fullscreen.svg new file mode 100644 index 00000000..485c128b --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/exit-fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/eye-open.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/eye-open.svg new file mode 100644 index 00000000..88dcc98e --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/eye-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/eye.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/eye.svg new file mode 100644 index 00000000..16ed2d87 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/eye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/form.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/form.svg new file mode 100644 index 00000000..dcbaa185 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/form.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/ftp1.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/ftp1.svg new file mode 100644 index 00000000..0ab959c2 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/ftp1.svg @@ -0,0 +1,6 @@ + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/ftp2.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/ftp2.svg new file mode 100644 index 00000000..299c0f98 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/ftp2.svg @@ -0,0 +1,9 @@ + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/fullscreen.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/fullscreen.svg new file mode 100644 index 00000000..0e86b6fa --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/gateway.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/gateway.svg new file mode 100644 index 00000000..6ec3dc88 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/gateway.svg @@ -0,0 +1,12 @@ + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/github.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/github.svg new file mode 100644 index 00000000..db0a0d43 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/guide.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/guide.svg new file mode 100644 index 00000000..b2710017 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/guide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/icon.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/icon.svg new file mode 100644 index 00000000..82be8eee --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/input.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/input.svg new file mode 100644 index 00000000..ab91381e --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/input.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/international.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/international.svg new file mode 100644 index 00000000..e9b56eee --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/international.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/job.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/job.svg new file mode 100644 index 00000000..2a93a251 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/job.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/language.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/language.svg new file mode 100644 index 00000000..0082b577 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/language.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/link.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/link.svg new file mode 100644 index 00000000..48197ba4 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/list.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/list.svg new file mode 100644 index 00000000..20259edd --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/lock.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/lock.svg new file mode 100644 index 00000000..74fee543 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/log.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/log.svg new file mode 100644 index 00000000..d879d33b --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/log.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/logininfor.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/logininfor.svg new file mode 100644 index 00000000..267f8447 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/logininfor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/message.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/message.svg new file mode 100644 index 00000000..14ca8172 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/message.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/money.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/money.svg new file mode 100644 index 00000000..c1580de1 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/money.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/monitor.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/monitor.svg new file mode 100644 index 00000000..bc308cb0 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/monitor.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/natural.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/natural.svg new file mode 100644 index 00000000..b1955684 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/natural.svg @@ -0,0 +1,9 @@ + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/nested.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/nested.svg new file mode 100644 index 00000000..06713a86 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/nested.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/number.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/number.svg new file mode 100644 index 00000000..ad5ce9af --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/number.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/online.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/online.svg new file mode 100644 index 00000000..330a2029 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/online.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/password.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/password.svg new file mode 100644 index 00000000..6c64defe --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/password.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/pdf.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/pdf.svg new file mode 100644 index 00000000..957aa0cc --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/pdf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/people.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/people.svg new file mode 100644 index 00000000..2bd54aeb --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/people.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/peoples.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/peoples.svg new file mode 100644 index 00000000..aab852e5 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/peoples.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/phone.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/phone.svg new file mode 100644 index 00000000..ab8e8c4e --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/portal.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/portal.svg new file mode 100644 index 00000000..0c4b240a --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/portal.svg @@ -0,0 +1,8 @@ + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/post.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/post.svg new file mode 100644 index 00000000..2922c613 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/post.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/qq.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/qq.svg new file mode 100644 index 00000000..ee13d4ec --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/qq.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/question.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/question.svg new file mode 100644 index 00000000..cf75bd4b --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/question.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/radio.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/radio.svg new file mode 100644 index 00000000..0cde3452 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/radio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/rate.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/rate.svg new file mode 100644 index 00000000..aa3b14d7 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/rate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/redis-list.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/redis-list.svg new file mode 100644 index 00000000..98a15b2a --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/redis-list.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/redis.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/redis.svg new file mode 100644 index 00000000..2f1d62df --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/redis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/row.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/row.svg new file mode 100644 index 00000000..07809922 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/row.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/search.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/search.svg new file mode 100644 index 00000000..84233dda --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/select.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/select.svg new file mode 100644 index 00000000..d6283828 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/select.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/server.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/server.svg new file mode 100644 index 00000000..ca37b001 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/shopping.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/shopping.svg new file mode 100644 index 00000000..87513e7c --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/shopping.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/size.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/size.svg new file mode 100644 index 00000000..ddb25b8d --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/skill.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/skill.svg new file mode 100644 index 00000000..a3b73121 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/skill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/slider.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/slider.svg new file mode 100644 index 00000000..fbe4f39f --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/slider.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/star.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/star.svg new file mode 100644 index 00000000..6cf86e66 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/star.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/swagger.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/swagger.svg new file mode 100644 index 00000000..05d4e7bc --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/swagger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/switch.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/switch.svg new file mode 100644 index 00000000..0ba61e38 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/switch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/system.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/system.svg new file mode 100644 index 00000000..dba28cf6 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/system.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/tab.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/tab.svg new file mode 100644 index 00000000..b4b48e48 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/tab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/table.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/table.svg new file mode 100644 index 00000000..0e3dc9de --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/textarea.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/textarea.svg new file mode 100644 index 00000000..2709f292 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/textarea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/theme.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/theme.svg new file mode 100644 index 00000000..5982a2f7 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/theme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/time-range.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/time-range.svg new file mode 100644 index 00000000..13c1202b --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/time-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/time.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/time.svg new file mode 100644 index 00000000..b376e32a --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/tool.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/tool.svg new file mode 100644 index 00000000..c813067e --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/tool.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/tree-table.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/tree-table.svg new file mode 100644 index 00000000..8aafdb82 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/tree-table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/tree.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/tree.svg new file mode 100644 index 00000000..dd4b7dd2 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/upload.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/upload.svg new file mode 100644 index 00000000..bae49c0a --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/upload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/user.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/user.svg new file mode 100644 index 00000000..0ba0716a --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/userv.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/userv.svg new file mode 100644 index 00000000..c6fd8ce4 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/userv.svg @@ -0,0 +1,6 @@ + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/validCode.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/validCode.svg new file mode 100644 index 00000000..cfb10214 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/validCode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/wechat.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/wechat.svg new file mode 100644 index 00000000..c586e551 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/wechat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/zip.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/zip.svg new file mode 100644 index 00000000..f806fc48 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svg/zip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svgo.yml b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svgo.yml new file mode 100644 index 00000000..d11906ae --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/icons/svgo.yml @@ -0,0 +1,22 @@ +# replace default config + +# multipass: true +# full: true + +plugins: + + # - name + # + # or: + # - name: false + # - name: true + # + # or: + # - name: + # param1: 1 + # param2: 2 + +- removeAttrs: + attrs: + - 'fill' + - 'fill-rule' diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/1bg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/1bg.png new file mode 100644 index 00000000..e42b52b5 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/1bg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/2bg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/2bg.png new file mode 100644 index 00000000..e754720f Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/2bg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/3bg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/3bg.png new file mode 100644 index 00000000..216c824f Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/3bg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/4bg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/4bg.png new file mode 100644 index 00000000..76129c92 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/4bg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/5bg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/5bg.png new file mode 100644 index 00000000..01c4fff1 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/5bg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/6bg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/6bg.png new file mode 100644 index 00000000..6c3b8126 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/6bg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/7bg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/7bg.png new file mode 100644 index 00000000..ae1484be Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/7bg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/8bg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/8bg.png new file mode 100644 index 00000000..12294431 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/8bg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/dark.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/dark.svg new file mode 100644 index 00000000..f646bd7e --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/dark.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/dbbg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/dbbg.png new file mode 100644 index 00000000..3d3e003f Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/dbbg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/f1.jpg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/f1.jpg new file mode 100644 index 00000000..aca13fa9 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/f1.jpg differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/f2.jpg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/f2.jpg new file mode 100644 index 00000000..21e63e72 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/f2.jpg differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/f3.jpg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/f3.jpg new file mode 100644 index 00000000..c26678f5 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/f3.jpg differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/f4.jpg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/f4.jpg new file mode 100644 index 00000000..93e635f0 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/f4.jpg differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/f5.jpg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/f5.jpg new file mode 100644 index 00000000..6b190d8a Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/f5.jpg differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon1.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon1.png new file mode 100644 index 00000000..38462863 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon1.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon2.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon2.png new file mode 100644 index 00000000..16572912 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon2.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon3.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon3.png new file mode 100644 index 00000000..c31aca2f Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon3.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon3_1.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon3_1.png new file mode 100644 index 00000000..e5e8bc15 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon3_1.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon3_2.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon3_2.png new file mode 100644 index 00000000..d59d7860 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon3_2.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon4.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon4.png new file mode 100644 index 00000000..ef8f0fb1 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon4.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon5.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon5.png new file mode 100644 index 00000000..03f51f4e Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon5.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon6.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon6.png new file mode 100644 index 00000000..2f5d6ff5 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/icon6.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn1.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn1.png new file mode 100644 index 00000000..7c5facd5 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn1.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn2.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn2.png new file mode 100644 index 00000000..ca148533 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn2.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn3.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn3.png new file mode 100644 index 00000000..23bf5e23 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn3.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn4.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn4.png new file mode 100644 index 00000000..8acd3bea Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn4.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn5.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn5.png new file mode 100644 index 00000000..672a455c Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn5.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn6.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn6.png new file mode 100644 index 00000000..8c8ad7d9 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn6.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn7.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn7.png new file mode 100644 index 00000000..571f7bc9 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn7.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn8.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn8.png new file mode 100644 index 00000000..a8deabec Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/iconn8.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/indexbg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/indexbg.png new file mode 100644 index 00000000..5396d441 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/indexbg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/libg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/libg.png new file mode 100644 index 00000000..50be09a5 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/libg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/light.svg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/light.svg new file mode 100644 index 00000000..ab7cc088 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/light.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/login-background.jpg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/login-background.jpg new file mode 100644 index 00000000..8a89eb82 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/login-background.jpg differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/login-background.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/login-background.png new file mode 100644 index 00000000..91d62d1a Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/login-background.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/logo.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/logo.png new file mode 100644 index 00000000..fd537fb8 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/logo.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n1bg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n1bg.png new file mode 100644 index 00000000..57b9a8d7 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n1bg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n2bg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n2bg.png new file mode 100644 index 00000000..28496f12 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n2bg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n3bg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n3bg.png new file mode 100644 index 00000000..28496f12 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n3bg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n4bg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n4bg.png new file mode 100644 index 00000000..084aeacf Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n4bg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n5bg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n5bg.png new file mode 100644 index 00000000..084aeacf Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n5bg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n6bg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n6bg.png new file mode 100644 index 00000000..02812af7 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n6bg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n7bg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n7bg.png new file mode 100644 index 00000000..104a1eac Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n7bg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n8bg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n8bg.png new file mode 100644 index 00000000..3febe863 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/n8bg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/out.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/out.png new file mode 100644 index 00000000..00a68948 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/out.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/password.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/password.png new file mode 100644 index 00000000..182643a3 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/password.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/profile.jpg b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/profile.jpg new file mode 100644 index 00000000..aad25d24 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/profile.jpg differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/profile.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/profile.png new file mode 100644 index 00000000..aad25d24 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/profile.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/top.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/top.png new file mode 100644 index 00000000..461f708b Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/top.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/ts.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/ts.png new file mode 100644 index 00000000..6d807cb8 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/ts.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/tz.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/tz.png new file mode 100644 index 00000000..9f69c5f7 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/tz.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/user.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/user.png new file mode 100644 index 00000000..32a23784 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/user.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/usimg.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/usimg.png new file mode 100644 index 00000000..edfd2939 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/usimg.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/validCode.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/validCode.png new file mode 100644 index 00000000..4f0d8ed6 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/validCode.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/xl.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/xl.png new file mode 100644 index 00000000..a44c100c Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/images/xl.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/logo/logo.png b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/logo/logo.png new file mode 100644 index 00000000..cb300867 Binary files /dev/null and b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/logo/logo.png differ diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/base.scss b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/base.scss new file mode 100644 index 00000000..07b6c431 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/base.scss @@ -0,0 +1,372 @@ + /** + * 通用css样式布局处理 + */ + + /** 基础通用 **/ + ul, + dl, + dt, + dd { + margin: 0; + padding: 0; + list-style-type: none; + + } + + .h1, + .h2, + .h3, + .h4, + .h5, + .h6, + h1, + h2, + h3, + h4, + h5, + h6 { + margin: 0; + padding: 0; + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; + } + + .el-message-box__status+.el-message-box__message { + word-break: break-word; + } + + .el-dialog:not(.is-fullscreen) { + margin-top: 6vh !important; + } + + .el-dialog__wrapper.scrollbar .el-dialog .el-dialog__body { + overflow: auto; + overflow-x: hidden; + max-height: 70vh; + padding: 10px 20px 0; + } + + .el-form--inline { + border-bottom: 1px solid #ccc; + // margin-bottom: 20px; + // -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.12), 0 0 5px 0 rgba(0, 0, 0, 0.04); + // box-shadow: 0px 2px 5px 0 rgba(0, 0, 0, 0.12), 0 0 5px 0 rgba(0, 0, 0, 0.04); + padding: 10px 10px 0; + } + + .el-table { + border: 1px solid #EEEEEE; + border-bottom: 0; + + .el-table__header-wrapper, + .el-table__fixed-header-wrapper { + th { + word-break: break-word; + background-color: #f8f8f9; + color: #515a6e; + height: 40px; + font-size: 13px; + } + } + + .el-table__body-wrapper { + .el-button [class*="el-icon-"]+span { + margin-left: 1px; + } + } + } + + /** 表单布局 **/ + .form-header { + font-size: 15px; + color: #6379bb; + border-bottom: 1px solid #ddd; + margin: 8px 10px 25px 10px; + padding-bottom: 5px + } + + /** 表格布局 **/ + .pagination-container { + position: relative; + height: 25px; + margin-bottom: 10px; + margin-top: 15px; + padding: 10px 20px !important; + } + + /* tree border */ + .tree-border { + margin-top: 5px; + border: 1px solid #e5e6e7; + background: #FFFFFF none; + border-radius: 4px; + } + + .pagination-container .el-pagination { + right: 0; + position: absolute; + } + + @media (max-width : 768px) { + .pagination-container .el-pagination>.el-pagination__jump { + display: none !important; + } + + .pagination-container .el-pagination>.el-pagination__sizes { + display: none !important; + } + } + + .el-table .fixed-width .el-button--mini { + padding-left: 0; + padding-right: 0; + width: inherit; + } + + /** 表格更多操作下拉样式 */ + .el-table .el-dropdown-link, + .el-table .el-dropdown-selfdefine { + cursor: pointer; + margin-left: 5px; + } + + .el-table .el-dropdown, + .el-icon-arrow-down { + font-size: 12px; + } + + .el-tree-node__content>.el-checkbox { + margin-right: 8px; + } + + .list-group-striped>.list-group-item { + border-left: 0; + border-right: 0; + border-radius: 0; + padding-left: 0; + padding-right: 0; + } + + .list-group { + padding-left: 0px; + list-style: none; + } + + .list-group-item { + border-bottom: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; + margin-bottom: -1px; + padding: 11px 0px; + font-size: 13px; + } + + .pull-right { + float: right !important; + } + + .el-card__header { + padding: 14px 15px 7px; + min-height: 40px; + } + + .el-card__body { + padding: 15px 20px 20px 20px; + } + + .card-box { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 10px; + } + + /* button color */ + .el-button--cyan.is-active, + .el-button--cyan:active { + background: #20B2AA; + border-color: #20B2AA; + color: #FFFFFF; + } + + .el-button--cyan:focus, + .el-button--cyan:hover { + background: #48D1CC; + border-color: #48D1CC; + color: #FFFFFF; + } + + .el-button--cyan { + background-color: #20B2AA; + border-color: #20B2AA; + color: #FFFFFF; + } + + /* text color */ + .text-navy { + color: #1ab394; + } + + .text-primary { + color: inherit; + } + + .text-success { + color: #1c84c6; + } + + .text-info { + color: #23c6c8; + } + + .text-warning { + color: #f8ac59; + } + + .text-danger { + color: #ed5565; + } + + .text-muted { + color: #888888; + } + + /* image */ + .img-circle { + border-radius: 50%; + } + + .img-lg { + width: 80px; + height: 80px; + } + + .avatar-upload-preview { + position: relative; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 200px; + height: 200px; + border-radius: 50%; + box-shadow: 0 0 4px #ccc; + overflow: hidden; + } + + /* 拖拽列样式 */ + .sortable-ghost { + opacity: .8; + color: #fff !important; + background: #42b983 !important; + } + + .top-right-btn { + position: relative; + float: right; + } + + .header-title { + font-size: 18px; + font-weight: 600; + color: #001330; + } + + .el-form-item__label { + color: #001330; + font-weight: normal; + } + + .el-table th.el-table__cell.is-leaf, + .el-table td.el-table__cell { + border-bottom: 1px solid #F0F0F0; + } + + .el-table .el-table__header-wrapper th, + .el-table .el-table__fixed-header-wrapper th { + background-color: #f8f8f9 !important; + color: #2A2A2B; + font-weight: 500; + font-size: 14px; + } + + .el-table--medium .el-table__cell { + padding: 10px 0 !important; + } + + .header-filter { + padding: 10px 0 0 0; + } + + .list-wrapper { + padding-bottom: 20px; + + .table-index { + .el-button--small { + padding: 0 0; + } + } + + } + + + .card-wrapper { + padding-bottom: 40px; + + .btn-list { + padding-bottom: 20px; + } + } + + .el-switch__label { + font-weight: normal; + } + + .el-button--medium { + border-radius: 4px; + } + + .el-input__inner { + border-radius: 4px; + } + + .el-button--mini { + border-radius: 4px; + } + + .el-button--small { + font-size: 14px; + padding: 8px 15px; + } + + // .el-breadcrumb__inner a, + // .el-breadcrumb__inner.is-link { + // color: #fff !important; + // } + .el-input, + .el-select { + position: relative; + font-size: 14px; + display: inline-block; + width: 100%; + } + + .list-dia { + + .el-input--mini, + .el-button--mini { + font-size: 12px; + font-weight: normal; + } + + .el-form-item--mini { + .el-form-item__label { + font-size: 12px; + } + } + + .el-table--mini { + .cell { + font-size: 12px; + } + } + } \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/btn.scss b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/btn.scss new file mode 100644 index 00000000..e6ba1a8e --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/btn.scss @@ -0,0 +1,99 @@ +@import './variables.scss'; + +@mixin colorBtn($color) { + background: $color; + + &:hover { + color: $color; + + &:before, + &:after { + background: $color; + } + } +} + +.blue-btn { + @include colorBtn($blue) +} + +.light-blue-btn { + @include colorBtn($light-blue) +} + +.red-btn { + @include colorBtn($red) +} + +.pink-btn { + @include colorBtn($pink) +} + +.green-btn { + @include colorBtn($green) +} + +.tiffany-btn { + @include colorBtn($tiffany) +} + +.yellow-btn { + @include colorBtn($yellow) +} + +.pan-btn { + font-size: 14px; + color: #fff; + padding: 14px 36px; + border-radius: 8px; + border: none; + outline: none; + transition: 600ms ease all; + position: relative; + display: inline-block; + + &:hover { + background: #fff; + + &:before, + &:after { + width: 100%; + transition: 600ms ease all; + } + } + + &:before, + &:after { + content: ''; + position: absolute; + top: 0; + right: 0; + height: 2px; + width: 0; + transition: 400ms ease all; + } + + &::after { + right: inherit; + top: inherit; + left: 0; + bottom: 0; + } +} + +.custom-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #fff; + color: #fff; + -webkit-appearance: none; + text-align: center; + box-sizing: border-box; + outline: 0; + margin: 0; + padding: 10px 15px; + font-size: 14px; + border-radius: 4px; +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/data.scss b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/data.scss new file mode 100644 index 00000000..5612ab8a --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/data.scss @@ -0,0 +1,1174 @@ +/*! + * Quill Editor v1.3.7 + * https://quilljs.com/ + * Copyright (c) 2014, Jason Chen + * Copyright (c) 2013, salesforce.com + */ +.ql-container { + box-sizing: border-box; + font-family: Helvetica, Arial, sans-serif; + font-size: 13px; + height: 100%; + margin: 0px; + position: relative; +} + +.ql-container.ql-disabled .ql-tooltip { + visibility: hidden; +} + +.ql-container.ql-disabled .ql-editor ul[data-checked]>li::before { + pointer-events: none; +} + +.ql-clipboard { + left: -100000px; + height: 1px; + overflow-y: hidden; + position: absolute; + top: 50%; +} + +.ql-clipboard p { + margin: 0; + padding: 0; +} + +.ql-editor { + box-sizing: border-box; + line-height: 1.42; + height: 100%; + outline: none; + overflow-y: auto; + padding: 12px 15px; + tab-size: 4; + -moz-tab-size: 4; + text-align: left; + white-space: pre-wrap; + word-wrap: break-word; +} + +.ql-editor>* { + cursor: text; +} + +.ql-editor p, +.ql-editor ol, +.ql-editor ul, +.ql-editor pre, +.ql-editor blockquote, +.ql-editor h1, +.ql-editor h2, +.ql-editor h3, +.ql-editor h4, +.ql-editor h5, +.ql-editor h6 { + margin: 0; + padding: 0; + counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; +} + +.ql-editor ol, +.ql-editor ul { + padding-left: 1.5em; +} + +.ql-editor ol>li, +.ql-editor ul>li { + list-style-type: none; +} + +.ql-editor ul>li::before { + content: '\2022'; +} + +.ql-editor ul[data-checked=true], +.ql-editor ul[data-checked=false] { + pointer-events: none; +} + +.ql-editor ul[data-checked=true]>li *, +.ql-editor ul[data-checked=false]>li * { + pointer-events: all; +} + +.ql-editor ul[data-checked=true]>li::before, +.ql-editor ul[data-checked=false]>li::before { + color: #777; + cursor: pointer; + pointer-events: all; +} + +.ql-editor ul[data-checked=true]>li::before { + content: '\2611'; +} + +.ql-editor ul[data-checked=false]>li::before { + content: '\2610'; +} + +.ql-editor li::before { + display: inline-block; + white-space: nowrap; + width: 1.2em; +} + +.ql-editor li:not(.ql-direction-rtl)::before { + margin-left: -1.5em; + margin-right: 0.3em; + text-align: right; +} + +.ql-editor li.ql-direction-rtl::before { + margin-left: 0.3em; + margin-right: -1.5em; +} + +.ql-editor ol li:not(.ql-direction-rtl), +.ql-editor ul li:not(.ql-direction-rtl) { + padding-left: 1.5em; +} + +.ql-editor ol li.ql-direction-rtl, +.ql-editor ul li.ql-direction-rtl { + padding-right: 1.5em; +} + +.ql-editor ol li { + counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; + counter-increment: list-0; +} + +.ql-editor ol li:before { + content: counter(list-0, decimal) '. '; +} + +.ql-editor ol li.ql-indent-1 { + counter-increment: list-1; +} + +.ql-editor ol li.ql-indent-1:before { + content: counter(list-1, lower-alpha) '. '; +} + +.ql-editor ol li.ql-indent-1 { + counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; +} + +.ql-editor ol li.ql-indent-2 { + counter-increment: list-2; +} + +.ql-editor ol li.ql-indent-2:before { + content: counter(list-2, lower-roman) '. '; +} + +.ql-editor ol li.ql-indent-2 { + counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9; +} + +.ql-editor ol li.ql-indent-3 { + counter-increment: list-3; +} + +.ql-editor ol li.ql-indent-3:before { + content: counter(list-3, decimal) '. '; +} + +.ql-editor ol li.ql-indent-3 { + counter-reset: list-4 list-5 list-6 list-7 list-8 list-9; +} + +.ql-editor ol li.ql-indent-4 { + counter-increment: list-4; +} + +.ql-editor ol li.ql-indent-4:before { + content: counter(list-4, lower-alpha) '. '; +} + +.ql-editor ol li.ql-indent-4 { + counter-reset: list-5 list-6 list-7 list-8 list-9; +} + +.ql-editor ol li.ql-indent-5 { + counter-increment: list-5; +} + +.ql-editor ol li.ql-indent-5:before { + content: counter(list-5, lower-roman) '. '; +} + +.ql-editor ol li.ql-indent-5 { + counter-reset: list-6 list-7 list-8 list-9; +} + +.ql-editor ol li.ql-indent-6 { + counter-increment: list-6; +} + +.ql-editor ol li.ql-indent-6:before { + content: counter(list-6, decimal) '. '; +} + +.ql-editor ol li.ql-indent-6 { + counter-reset: list-7 list-8 list-9; +} + +.ql-editor ol li.ql-indent-7 { + counter-increment: list-7; +} + +.ql-editor ol li.ql-indent-7:before { + content: counter(list-7, lower-alpha) '. '; +} + +.ql-editor ol li.ql-indent-7 { + counter-reset: list-8 list-9; +} + +.ql-editor ol li.ql-indent-8 { + counter-increment: list-8; +} + +.ql-editor ol li.ql-indent-8:before { + content: counter(list-8, lower-roman) '. '; +} + +.ql-editor ol li.ql-indent-8 { + counter-reset: list-9; +} + +.ql-editor ol li.ql-indent-9 { + counter-increment: list-9; +} + +.ql-editor ol li.ql-indent-9:before { + content: counter(list-9, decimal) '. '; +} + +.ql-editor .ql-indent-1:not(.ql-direction-rtl) { + padding-left: 3em; +} + +.ql-editor li.ql-indent-1:not(.ql-direction-rtl) { + padding-left: 4.5em; +} + +.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right { + padding-right: 3em; +} + +.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right { + padding-right: 4.5em; +} + +.ql-editor .ql-indent-2:not(.ql-direction-rtl) { + padding-left: 6em; +} + +.ql-editor li.ql-indent-2:not(.ql-direction-rtl) { + padding-left: 7.5em; +} + +.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right { + padding-right: 6em; +} + +.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right { + padding-right: 7.5em; +} + +.ql-editor .ql-indent-3:not(.ql-direction-rtl) { + padding-left: 9em; +} + +.ql-editor li.ql-indent-3:not(.ql-direction-rtl) { + padding-left: 10.5em; +} + +.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right { + padding-right: 9em; +} + +.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right { + padding-right: 10.5em; +} + +.ql-editor .ql-indent-4:not(.ql-direction-rtl) { + padding-left: 12em; +} + +.ql-editor li.ql-indent-4:not(.ql-direction-rtl) { + padding-left: 13.5em; +} + +.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right { + padding-right: 12em; +} + +.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right { + padding-right: 13.5em; +} + +.ql-editor .ql-indent-5:not(.ql-direction-rtl) { + padding-left: 15em; +} + +.ql-editor li.ql-indent-5:not(.ql-direction-rtl) { + padding-left: 16.5em; +} + +.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right { + padding-right: 15em; +} + +.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right { + padding-right: 16.5em; +} + +.ql-editor .ql-indent-6:not(.ql-direction-rtl) { + padding-left: 18em; +} + +.ql-editor li.ql-indent-6:not(.ql-direction-rtl) { + padding-left: 19.5em; +} + +.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right { + padding-right: 18em; +} + +.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right { + padding-right: 19.5em; +} + +.ql-editor .ql-indent-7:not(.ql-direction-rtl) { + padding-left: 21em; +} + +.ql-editor li.ql-indent-7:not(.ql-direction-rtl) { + padding-left: 22.5em; +} + +.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right { + padding-right: 21em; +} + +.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right { + padding-right: 22.5em; +} + +.ql-editor .ql-indent-8:not(.ql-direction-rtl) { + padding-left: 24em; +} + +.ql-editor li.ql-indent-8:not(.ql-direction-rtl) { + padding-left: 25.5em; +} + +.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right { + padding-right: 24em; +} + +.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right { + padding-right: 25.5em; +} + +.ql-editor .ql-indent-9:not(.ql-direction-rtl) { + padding-left: 27em; +} + +.ql-editor li.ql-indent-9:not(.ql-direction-rtl) { + padding-left: 28.5em; +} + +.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right { + padding-right: 27em; +} + +.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right { + padding-right: 28.5em; +} + +.ql-editor .ql-video { + display: block; + max-width: 100%; +} + +.ql-editor .ql-video.ql-align-center { + margin: 0 auto; +} + +.ql-editor .ql-video.ql-align-right { + margin: 0 0 0 auto; +} + +.ql-editor .ql-bg-black { + background-color: #000; +} + +.ql-editor .ql-bg-red { + background-color: #e60000; +} + +.ql-editor .ql-bg-orange { + background-color: #f90; +} + +.ql-editor .ql-bg-yellow { + background-color: #ff0; +} + +.ql-editor .ql-bg-green { + background-color: #008a00; +} + +.ql-editor .ql-bg-blue { + background-color: #06c; +} + +.ql-editor .ql-bg-purple { + background-color: #93f; +} + +.ql-editor .ql-color-white { + color: #fff; +} + +.ql-editor .ql-color-red { + color: #e60000; +} + +.ql-editor .ql-color-orange { + color: #f90; +} + +.ql-editor .ql-color-yellow { + color: #ff0; +} + +.ql-editor .ql-color-green { + color: #008a00; +} + +.ql-editor .ql-color-blue { + color: #06c; +} + +.ql-editor .ql-color-purple { + color: #93f; +} + +.ql-editor .ql-font-serif { + font-family: Georgia, Times New Roman, serif; +} + +.ql-editor .ql-font-monospace { + font-family: Monaco, Courier New, monospace; +} + +.ql-editor .ql-size-small { + font-size: 0.75em; +} + +.ql-editor .ql-size-large { + font-size: 1.5em; +} + +.ql-editor .ql-size-huge { + font-size: 2.5em; +} + +.ql-editor .ql-direction-rtl { + direction: rtl; + text-align: inherit; +} + +.ql-editor .ql-align-center { + text-align: center; +} + +.ql-editor .ql-align-justify { + text-align: justify; +} + +.ql-editor .ql-align-right { + text-align: right; +} + +.ql-editor.ql-blank::before { + color: rgba(0, 0, 0, 0.6); + content: attr(data-placeholder); + font-style: italic; + left: 15px; + pointer-events: none; + position: absolute; + right: 15px; +} + +.ql-bubble.ql-toolbar:after, +.ql-bubble .ql-toolbar:after { + clear: both; + content: ''; + display: table; +} + +.ql-bubble.ql-toolbar button, +.ql-bubble .ql-toolbar button { + background: none; + border: none; + cursor: pointer; + display: inline-block; + float: left; + height: 24px; + padding: 3px 5px; + width: 28px; +} + +.ql-bubble.ql-toolbar button svg, +.ql-bubble .ql-toolbar button svg { + float: left; + height: 100%; +} + +.ql-bubble.ql-toolbar button:active:hover, +.ql-bubble .ql-toolbar button:active:hover { + outline: none; +} + +.ql-bubble.ql-toolbar input.ql-image[type=file], +.ql-bubble .ql-toolbar input.ql-image[type=file] { + display: none; +} + +.ql-bubble.ql-toolbar button:hover, +.ql-bubble .ql-toolbar button:hover, +.ql-bubble.ql-toolbar button:focus, +.ql-bubble .ql-toolbar button:focus, +.ql-bubble.ql-toolbar button.ql-active, +.ql-bubble .ql-toolbar button.ql-active, +.ql-bubble.ql-toolbar .ql-picker-label:hover, +.ql-bubble .ql-toolbar .ql-picker-label:hover, +.ql-bubble.ql-toolbar .ql-picker-label.ql-active, +.ql-bubble .ql-toolbar .ql-picker-label.ql-active, +.ql-bubble.ql-toolbar .ql-picker-item:hover, +.ql-bubble .ql-toolbar .ql-picker-item:hover, +.ql-bubble.ql-toolbar .ql-picker-item.ql-selected, +.ql-bubble .ql-toolbar .ql-picker-item.ql-selected { + color: #fff; +} + +.ql-bubble.ql-toolbar button:hover .ql-fill, +.ql-bubble .ql-toolbar button:hover .ql-fill, +.ql-bubble.ql-toolbar button:focus .ql-fill, +.ql-bubble .ql-toolbar button:focus .ql-fill, +.ql-bubble.ql-toolbar button.ql-active .ql-fill, +.ql-bubble .ql-toolbar button.ql-active .ql-fill, +.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-fill, +.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-fill, +.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-fill, +.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-fill, +.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-fill, +.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-fill, +.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-fill, +.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-fill, +.ql-bubble.ql-toolbar button:hover .ql-stroke.ql-fill, +.ql-bubble .ql-toolbar button:hover .ql-stroke.ql-fill, +.ql-bubble.ql-toolbar button:focus .ql-stroke.ql-fill, +.ql-bubble .ql-toolbar button:focus .ql-stroke.ql-fill, +.ql-bubble.ql-toolbar button.ql-active .ql-stroke.ql-fill, +.ql-bubble .ql-toolbar button.ql-active .ql-stroke.ql-fill, +.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill, +.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill, +.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill, +.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill, +.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill, +.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill, +.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill, +.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill { + fill: #fff; +} + +.ql-bubble.ql-toolbar button:hover .ql-stroke, +.ql-bubble .ql-toolbar button:hover .ql-stroke, +.ql-bubble.ql-toolbar button:focus .ql-stroke, +.ql-bubble .ql-toolbar button:focus .ql-stroke, +.ql-bubble.ql-toolbar button.ql-active .ql-stroke, +.ql-bubble .ql-toolbar button.ql-active .ql-stroke, +.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke, +.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke, +.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke, +.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke, +.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke, +.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke, +.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke, +.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke, +.ql-bubble.ql-toolbar button:hover .ql-stroke-miter, +.ql-bubble .ql-toolbar button:hover .ql-stroke-miter, +.ql-bubble.ql-toolbar button:focus .ql-stroke-miter, +.ql-bubble .ql-toolbar button:focus .ql-stroke-miter, +.ql-bubble.ql-toolbar button.ql-active .ql-stroke-miter, +.ql-bubble .ql-toolbar button.ql-active .ql-stroke-miter, +.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke-miter, +.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke-miter, +.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, +.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, +.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke-miter, +.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke-miter, +.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter, +.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter { + stroke: #fff; +} + +@media (pointer: coarse) { + + .ql-bubble.ql-toolbar button:hover:not(.ql-active), + .ql-bubble .ql-toolbar button:hover:not(.ql-active) { + color: #ccc; + } + + .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-fill, + .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-fill, + .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill, + .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill { + fill: #ccc; + } + + .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke, + .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke, + .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter, + .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter { + stroke: #ccc; + } +} + +.ql-bubble { + box-sizing: border-box; +} + +.ql-bubble * { + box-sizing: border-box; +} + +.ql-bubble .ql-hidden { + display: none; +} + +.ql-bubble .ql-out-bottom, +.ql-bubble .ql-out-top { + visibility: hidden; +} + +.ql-bubble .ql-tooltip { + position: absolute; + transform: translateY(10px); +} + +.ql-bubble .ql-tooltip a { + cursor: pointer; + text-decoration: none; +} + +.ql-bubble .ql-tooltip.ql-flip { + transform: translateY(-10px); +} + +.ql-bubble .ql-formats { + display: inline-block; + vertical-align: middle; +} + +.ql-bubble .ql-formats:after { + clear: both; + content: ''; + display: table; +} + +.ql-bubble .ql-stroke { + fill: none; + stroke: #ccc; + stroke-linecap: round; + stroke-linejoin: round; + stroke-width: 2; +} + +.ql-bubble .ql-stroke-miter { + fill: none; + stroke: #ccc; + stroke-miterlimit: 10; + stroke-width: 2; +} + +.ql-bubble .ql-fill, +.ql-bubble .ql-stroke.ql-fill { + fill: #ccc; +} + +.ql-bubble .ql-empty { + fill: none; +} + +.ql-bubble .ql-even { + fill-rule: evenodd; +} + +.ql-bubble .ql-thin, +.ql-bubble .ql-stroke.ql-thin { + stroke-width: 1; +} + +.ql-bubble .ql-transparent { + opacity: 0.4; +} + +.ql-bubble .ql-direction svg:last-child { + display: none; +} + +.ql-bubble .ql-direction.ql-active svg:last-child { + display: inline; +} + +.ql-bubble .ql-direction.ql-active svg:first-child { + display: none; +} + +.ql-bubble .ql-editor h1 { + font-size: 2em; +} + +.ql-bubble .ql-editor h2 { + font-size: 1.5em; +} + +.ql-bubble .ql-editor h3 { + font-size: 1.17em; +} + +.ql-bubble .ql-editor h4 { + font-size: 1em; +} + +.ql-bubble .ql-editor h5 { + font-size: 0.83em; +} + +.ql-bubble .ql-editor h6 { + font-size: 0.67em; +} + +.ql-bubble .ql-editor a { + text-decoration: underline; +} + +.ql-bubble .ql-editor blockquote { + border-left: 4px solid #ccc; + margin-bottom: 5px; + margin-top: 5px; + padding-left: 16px; +} + +.ql-bubble .ql-editor code, +.ql-bubble .ql-editor pre { + background-color: #f0f0f0; + border-radius: 3px; +} + +.ql-bubble .ql-editor pre { + white-space: pre-wrap; + margin-bottom: 5px; + margin-top: 5px; + padding: 5px 10px; +} + +.ql-bubble .ql-editor code { + font-size: 85%; + padding: 2px 4px; +} + +.ql-bubble .ql-editor pre.ql-syntax { + background-color: #23241f; + color: #f8f8f2; + overflow: visible; +} + +.ql-bubble .ql-editor img { + max-width: 100%; +} + +.ql-bubble .ql-picker { + color: #ccc; + display: inline-block; + float: left; + font-size: 14px; + font-weight: 500; + height: 24px; + position: relative; + vertical-align: middle; +} + +.ql-bubble .ql-picker-label { + cursor: pointer; + display: inline-block; + height: 100%; + padding-left: 8px; + padding-right: 2px; + position: relative; + width: 100%; +} + +.ql-bubble .ql-picker-label::before { + display: inline-block; + line-height: 22px; +} + +.ql-bubble .ql-picker-options { + background-color: #444; + display: none; + min-width: 100%; + padding: 4px 8px; + position: absolute; + white-space: nowrap; +} + +.ql-bubble .ql-picker-options .ql-picker-item { + cursor: pointer; + display: block; + padding-bottom: 5px; + padding-top: 5px; +} + +.ql-bubble .ql-picker.ql-expanded .ql-picker-label { + color: #777; + z-index: 2; +} + +.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-fill { + fill: #777; +} + +.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-stroke { + stroke: #777; +} + +.ql-bubble .ql-picker.ql-expanded .ql-picker-options { + display: block; + margin-top: -1px; + top: 100%; + z-index: 1; +} + +.ql-bubble .ql-color-picker, +.ql-bubble .ql-icon-picker { + width: 28px; +} + +.ql-bubble .ql-color-picker .ql-picker-label, +.ql-bubble .ql-icon-picker .ql-picker-label { + padding: 2px 4px; +} + +.ql-bubble .ql-color-picker .ql-picker-label svg, +.ql-bubble .ql-icon-picker .ql-picker-label svg { + right: 4px; +} + +.ql-bubble .ql-icon-picker .ql-picker-options { + padding: 4px 0px; +} + +.ql-bubble .ql-icon-picker .ql-picker-item { + height: 24px; + width: 24px; + padding: 2px 4px; +} + +.ql-bubble .ql-color-picker .ql-picker-options { + padding: 3px 5px; + width: 152px; +} + +.ql-bubble .ql-color-picker .ql-picker-item { + border: 1px solid transparent; + float: left; + height: 16px; + margin: 2px; + padding: 0px; + width: 16px; +} + +.ql-bubble .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg { + position: absolute; + margin-top: -9px; + right: 0; + top: 50%; + width: 18px; +} + +.ql-bubble .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=''])::before, +.ql-bubble .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=''])::before, +.ql-bubble .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=''])::before, +.ql-bubble .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=''])::before, +.ql-bubble .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=''])::before, +.ql-bubble .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=''])::before { + content: attr(data-label); +} + +.ql-bubble .ql-picker.ql-header { + width: 98px; +} + +.ql-bubble .ql-picker.ql-header .ql-picker-label::before, +.ql-bubble .ql-picker.ql-header .ql-picker-item::before { + content: 'Normal'; +} + +.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="1"]::before, +.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]::before { + content: 'Heading 1'; +} + +.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="2"]::before, +.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]::before { + content: 'Heading 2'; +} + +.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="3"]::before, +.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]::before { + content: 'Heading 3'; +} + +.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="4"]::before, +.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]::before { + content: 'Heading 4'; +} + +.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="5"]::before, +.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]::before { + content: 'Heading 5'; +} + +.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="6"]::before, +.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]::before { + content: 'Heading 6'; +} + +.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]::before { + font-size: 2em; +} + +.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]::before { + font-size: 1.5em; +} + +.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]::before { + font-size: 1.17em; +} + +.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]::before { + font-size: 1em; +} + +.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]::before { + font-size: 0.83em; +} + +.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]::before { + font-size: 0.67em; +} + +.ql-bubble .ql-picker.ql-font { + width: 108px; +} + +.ql-bubble .ql-picker.ql-font .ql-picker-label::before, +.ql-bubble .ql-picker.ql-font .ql-picker-item::before { + content: 'Sans Serif'; +} + +.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=serif]::before, +.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]::before { + content: 'Serif'; +} + +.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before, +.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before { + content: 'Monospace'; +} + +.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]::before { + font-family: Georgia, Times New Roman, serif; +} + +.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before { + font-family: Monaco, Courier New, monospace; +} + +.ql-bubble .ql-picker.ql-size { + width: 98px; +} + +.ql-bubble .ql-picker.ql-size .ql-picker-label::before, +.ql-bubble .ql-picker.ql-size .ql-picker-item::before { + content: 'Normal'; +} + +.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=small]::before, +.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]::before { + content: 'Small'; +} + +.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=large]::before, +.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]::before { + content: 'Large'; +} + +.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=huge]::before, +.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]::before { + content: 'Huge'; +} + +.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]::before { + font-size: 10px; +} + +.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]::before { + font-size: 18px; +} + +.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]::before { + font-size: 32px; +} + +.ql-bubble .ql-color-picker.ql-background .ql-picker-item { + background-color: #fff; +} + +.ql-bubble .ql-color-picker.ql-color .ql-picker-item { + background-color: #000; +} + +.ql-bubble .ql-toolbar .ql-formats { + margin: 8px 12px 8px 0px; +} + +.ql-bubble .ql-toolbar .ql-formats:first-child { + margin-left: 12px; +} + +.ql-bubble .ql-color-picker svg { + margin: 1px; +} + +.ql-bubble .ql-color-picker .ql-picker-item.ql-selected, +.ql-bubble .ql-color-picker .ql-picker-item:hover { + border-color: #fff; +} + +.ql-bubble .ql-tooltip { + background-color: #444; + border-radius: 25px; + color: #fff; +} + +.ql-bubble .ql-tooltip-arrow { + border-left: 6px solid transparent; + border-right: 6px solid transparent; + content: " "; + display: block; + left: 50%; + margin-left: -6px; + position: absolute; +} + +.ql-bubble .ql-tooltip:not(.ql-flip) .ql-tooltip-arrow { + border-bottom: 6px solid #444; + top: -6px; +} + +.ql-bubble .ql-tooltip.ql-flip .ql-tooltip-arrow { + border-top: 6px solid #444; + bottom: -6px; +} + +.ql-bubble .ql-tooltip.ql-editing .ql-tooltip-editor { + display: block; +} + +.ql-bubble .ql-tooltip.ql-editing .ql-formats { + visibility: hidden; +} + +.ql-bubble .ql-tooltip-editor { + display: none; +} + +.ql-bubble .ql-tooltip-editor input[type=text] { + background: transparent; + border: none; + color: #fff; + font-size: 13px; + height: 100%; + outline: none; + padding: 10px 20px; + position: absolute; + width: 100%; +} + +.ql-bubble .ql-tooltip-editor a { + top: 10px; + position: absolute; + right: 20px; +} + +.ql-bubble .ql-tooltip-editor a:before { + color: #ccc; + content: "\D7"; + font-size: 16px; + font-weight: bold; +} + +.ql-container.ql-bubble:not(.ql-disabled) a { + position: relative; + white-space: nowrap; +} + +.ql-container.ql-bubble:not(.ql-disabled) a::before { + background-color: #444; + border-radius: 15px; + top: -5px; + font-size: 12px; + color: #fff; + content: attr(href); + font-weight: normal; + overflow: hidden; + padding: 5px 15px; + text-decoration: none; + z-index: 1; +} + +.ql-container.ql-bubble:not(.ql-disabled) a::after { + border-top: 6px solid #444; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + top: 0; + content: " "; + height: 0; + width: 0; +} + +.ql-container.ql-bubble:not(.ql-disabled) a::before, +.ql-container.ql-bubble:not(.ql-disabled) a::after { + left: 0; + margin-left: 50%; + position: absolute; + transform: translate(-50%, -100%); + transition: visibility 0s ease 200ms; + visibility: hidden; +} + +.ql-container.ql-bubble:not(.ql-disabled) a:hover::before, +.ql-container.ql-bubble:not(.ql-disabled) a:hover::after { + visibility: visible; +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/element-ui.scss b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/element-ui.scss new file mode 100644 index 00000000..bd09cfc6 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/element-ui.scss @@ -0,0 +1,112 @@ +// cover some element-ui styles + +.el-breadcrumb__inner, +.el-breadcrumb__inner a { + font-weight: 400 !important; +} + +.el-upload { + input[type="file"] { + display: none !important; + } +} + +.el-upload__input { + display: none; +} + +.cell { + .el-tag { + margin-right: 0px; + } +} + +.small-padding { + .cell { + padding-left: 5px; + padding-right: 5px; + } +} + +.fixed-width { + .el-button--mini { + padding: 7px 10px; + width: 60px; + } +} + +.status-col { + .cell { + padding: 0 10px; + text-align: center; + + .el-tag { + margin-right: 0px; + } + } +} + +// to fixed https://github.com/ElemeFE/element/issues/2461 +.el-dialog { + transform: none; + left: 0; + position: relative; + margin: 0 auto; + border-radius: 10px; + + .el-dialog__header { + padding: 0; + text-align: center; + background: #F0F2F5; + border-radius: 10px 10px 0 0; + + .el-dialog__title { + line-height: 64px; + font-size: 24px; + color: #333333; + + } + + .el-dialog__headerbtn { + font-size: 24px; + font-weight: 600; + } + } + + .el-dialog__footer { + text-align: center; + } +} + +// refine element ui upload +.upload-container { + .el-upload { + width: 100%; + + .el-upload-dragger { + width: 100%; + height: 200px; + } + } +} + +// dropdown +.el-dropdown-menu { + a { + display: block + } +} + +// fix date-picker ui bug in filter-item +.el-range-editor.el-input__inner { + display: inline-flex !important; +} + +// to fix el-date-picker css style +.el-range-separator { + box-sizing: content-box; +} + +.el-menu--collapse>div>.el-submenu>.el-submenu__title .el-submenu__icon-arrow { + display: none; +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/element-variables.scss b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/element-variables.scss new file mode 100644 index 00000000..1615ff28 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/element-variables.scss @@ -0,0 +1,31 @@ +/** +* I think element-ui's default theme color is too light for long-term use. +* So I modified the default color and you can modify it to your liking. +**/ + +/* theme color */ +$--color-primary: #1890ff; +$--color-success: #13ce66; +$--color-warning: #ffba00; +$--color-danger: #ff4949; +// $--color-info: #1E1E1E; + +$--button-font-weight: 400; + +// $--color-text-regular: #1f2d3d; + +$--border-color-light: #dfe4ed; +$--border-color-lighter: #e6ebf5; + +$--table-border: 1px solid #dfe6ec; + +/* icon font path, required */ +$--font-path: '~element-ui/lib/theme-chalk/fonts'; + +@import "~element-ui/packages/theme-chalk/src/index"; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + theme: $--color-primary; +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/index.scss b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/index.scss new file mode 100644 index 00000000..96095ef6 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/index.scss @@ -0,0 +1,191 @@ +@import './variables.scss'; +@import './mixin.scss'; +@import './transition.scss'; +@import './element-ui.scss'; +@import './sidebar.scss'; +@import './btn.scss'; + +body { + height: 100%; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; +} + +label { + font-weight: 700; +} + +html { + height: 100%; + box-sizing: border-box; +} + +#app { + height: 100%; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +.no-padding { + padding: 0px !important; +} + +.padding-content { + padding: 4px 0; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +div:focus { + outline: none; +} + +.fr { + float: right; +} + +.fl { + float: left; +} + +.pr-5 { + padding-right: 5px; +} + +.pl-5 { + padding-left: 5px; +} + +.block { + display: block; +} + +.pointer { + cursor: pointer; +} + +.inlineBlock { + display: block; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } +} + +aside { + background: #eef1f6; + padding: 8px 24px; + margin-bottom: 20px; + border-radius: 2px; + display: block; + line-height: 32px; + font-size: 16px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + color: #2c3e50; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + a { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } + } +} + +//main-container全局样式 +.app-container { + padding: 20px; +} + +.components-container { + margin: 30px 50px; + position: relative; +} + +.pagination-container { + margin-top: 30px; +} + +.text-center { + text-align: center +} + +.sub-navbar { + height: 50px; + line-height: 50px; + position: relative; + width: 100%; + text-align: right; + padding-right: 20px; + transition: 600ms ease position; + background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%); + + .subtitle { + font-size: 20px; + color: #fff; + } + + &.draft { + background: #d0d0d0; + } + + &.deleted { + background: #d0d0d0; + } +} + +.link-type, +.link-type:focus { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } +} + +.filter-container { + padding-bottom: 10px; + + .filter-item { + display: inline-block; + vertical-align: middle; + margin-bottom: 10px; + } +} + +//refine vue-multiselect plugin +.multiselect { + line-height: 16px; +} + +.multiselect--active { + z-index: 1000 !important; +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/mixin.scss b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/mixin.scss new file mode 100644 index 00000000..06fa0612 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/mixin.scss @@ -0,0 +1,66 @@ +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +@mixin scrollBar { + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } +} + +@mixin relative { + position: relative; + width: 100%; + height: 100%; +} + +@mixin pct($pct) { + width: #{$pct}; + position: relative; + margin: 0 auto; +} + +@mixin triangle($width, $height, $color, $direction) { + $width: $width/2; + $color-border-style: $height solid $color; + $transparent-border-style: $width solid transparent; + height: 0; + width: 0; + + @if $direction==up { + border-bottom: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==right { + border-left: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } + + @else if $direction==down { + border-top: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==left { + border-right: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/ruoyi.scss b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/ruoyi.scss new file mode 100644 index 00000000..42e4e873 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/ruoyi.scss @@ -0,0 +1,330 @@ + /** + * 通用css样式布局处理 + * Copyright (c) 2019 ruoyi + */ + + /** 基础通用 **/ + .pt5 { + padding-top: 5px; + } + + .pr5 { + padding-right: 5px; + } + + .pb5 { + padding-bottom: 5px; + } + + .mt5 { + margin-top: 5px; + } + + .mr5 { + margin-right: 5px; + } + + .mb5 { + margin-bottom: 5px; + } + + .mb8 { + margin-bottom: 8px; + // -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.12), 0 0 5px 0 rgba(0, 0, 0, 0.04); + // box-shadow: 0px 2px 5px 0 rgba(0, 0, 0, 0.12), 0 0 5px 0 rgba(0, 0, 0, 0.04); + padding: 10px 5px; + margin: 0 !important; + } + + .ml5 { + margin-left: 5px; + } + + .mt10 { + margin-top: 10px; + } + + .mr10 { + margin-right: 10px; + } + + .mb10 { + margin-bottom: 10px; + } + + .ml10 { + margin-left: 10px; + } + + .mt20 { + margin-top: 20px; + } + + .mr20 { + margin-right: 20px; + } + + .mb20 { + margin-bottom: 20px; + } + + .ml20 { + margin-left: 20px; + } + + .h1, + .h2, + .h3, + .h4, + .h5, + .h6, + h1, + h2, + h3, + h4, + h5, + h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; + } + + .el-dialog:not(.is-fullscreen) { + margin-top: 6vh !important; + } + + .el-dialog__wrapper.scrollbar .el-dialog .el-dialog__body { + overflow: auto; + overflow-x: hidden; + max-height: 70vh; + padding: 10px 20px 0; + } + + .el-table { + + .el-table__header-wrapper, + .el-table__fixed-header-wrapper { + th { + word-break: break-word; + background-color: #f8f8f9; + color: #515a6e; + height: 40px; + font-size: 13px; + } + } + + .el-table__body-wrapper { + .el-button [class*="el-icon-"]+span { + margin-left: 1px; + } + } + } + + /** 表单布局 **/ + .form-header { + font-size: 15px; + color: #6379bb; + border-bottom: 1px solid #ddd; + margin: 8px 10px 25px 10px; + padding-bottom: 5px + } + + /** 表格布局 **/ + .pagination-container { + position: relative; + height: 25px; + margin-bottom: 10px; + margin-top: 15px; + padding: 10px 20px !important; + } + + /* tree border */ + .tree-border { + margin-top: 5px; + border: 1px solid #e5e6e7; + background: #FFFFFF none; + border-radius: 4px; + } + + .pagination-container .el-pagination { + right: 0; + position: absolute; + } + + @media (max-width : 768px) { + .pagination-container .el-pagination>.el-pagination__jump { + display: none !important; + } + + .pagination-container .el-pagination>.el-pagination__sizes { + display: none !important; + } + } + + .el-table .fixed-width .el-button--mini { + padding-left: 0; + padding-right: 0; + width: inherit; + } + + /** 表格更多操作下拉样式 */ + .el-table .el-dropdown-link { + cursor: pointer; + color: #409EFF; + margin-left: 5px; + } + + .el-table .el-dropdown, + .el-icon-arrow-down { + font-size: 12px; + } + + .el-tree-node__content>.el-checkbox { + margin-right: 8px; + } + + .list-group-striped>.list-group-item { + border-left: 0; + border-right: 0; + border-radius: 0; + padding-left: 0; + padding-right: 0; + } + + .list-group { + padding-left: 0px; + list-style: none; + } + + .list-group-item { + border-bottom: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; + margin-bottom: -1px; + padding: 11px 0px; + font-size: 13px; + } + + .pull-right { + float: right !important; + } + + .el-card__header { + padding: 14px 15px 7px; + min-height: 40px; + } + + .el-card__body { + padding: 15px 20px 20px 20px; + } + + .card-box { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 10px; + } + + /* button color */ + .el-button--cyan.is-active, + .el-button--cyan:active { + background: #20B2AA; + border-color: #20B2AA; + color: #FFFFFF; + } + + .el-button--cyan:focus, + .el-button--cyan:hover { + background: #48D1CC; + border-color: #48D1CC; + color: #FFFFFF; + } + + .el-button--cyan { + background-color: #20B2AA; + border-color: #20B2AA; + color: #FFFFFF; + } + + /* text color */ + .text-navy { + color: #1ab394; + } + + .text-primary { + color: inherit; + } + + .text-success { + color: #1c84c6; + } + + .text-info { + color: #23c6c8; + } + + .text-warning { + color: #f8ac59; + } + + .text-danger { + color: #ed5565; + } + + .text-muted { + color: #888888; + } + + /* image */ + .img-circle { + border-radius: 50%; + } + + .img-lg { + width: 120px; + height: 120px; + } + + .avatar-upload-preview { + position: absolute; + top: 50%; + transform: translate(50%, -50%); + width: 200px; + height: 200px; + border-radius: 50%; + box-shadow: 0 0 4px #ccc; + overflow: hidden; + } + + /* 拖拽列样式 */ + .sortable-ghost { + opacity: .8; + color: #fff !important; + background: #42b983 !important; + } + + .top-right-btn { + position: relative; + float: right; + } + + + +.el-table__row .el-button.el-button--text:hover { + color: #5153B3; +} + +.el-input.is-disabled .el-input__inner,.el-textarea.is-disabled .el-textarea__inner { + color: #7c7c7c; +} + + +.el-upload, .el-upload-dragger{ + width: 100%; +} + +.customClass-Loading .el-icon-loading{ + font-size: 40px; +} +.customClass-Loading .el-loading-text{ + font-size: 30px; +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/sidebar.scss b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/sidebar.scss new file mode 100644 index 00000000..02c8a5b3 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/sidebar.scss @@ -0,0 +1,250 @@ +#app { + + .main-container { + min-height: calc(100% - 90px); + transition: margin-left .28s; + margin-left: $base-sidebar-width; + position: relative; + background: #FBFBFB; + padding:15px 25px; + } + + .sidebarHide { + margin-left: 0!important; + } + + .sidebar-container { + -webkit-transition: width .28s; + transition: width 0.28s; + width: $base-sidebar-width !important; + background-color: $base-menu-background; + height: 100%; + position: absolute; + font-size: 0px; + top: 0; + bottom: 0; + left: 0; + z-index: 1001; + overflow: hidden; + -webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35); + box-shadow: 2px 0 6px rgba(0,21,41,.35); + + // reset element-ui css + .horizontal-collapse-transition { + transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; + } + + .scrollbar-wrapper { + overflow-x: hidden !important; + } + + .el-scrollbar__bar.is-vertical { + right: 0px; + } + + .el-scrollbar { + height: 100%; + } + + &.has-logo { + .el-scrollbar { + height: calc(100% - 50px); + } + } + + .is-horizontal { + display: none; + } + + a { + display: inline-block; + width: 100%; + overflow: hidden; + } + + .svg-icon { + margin-right: 16px; + } + + .el-menu { + border: none; + height: 100%; + width: 100% !important; + } + + .el-menu-item, .el-submenu__title { + overflow: hidden !important; + text-overflow: ellipsis !important; + white-space: nowrap !important; + } + + // menu hover + .submenu-title-noDropdown, + .el-submenu__title { + &:hover { + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + & .theme-dark .is-active > .el-submenu__title { + color: $base-menu-color-active !important; + } + + & .nest-menu .el-submenu>.el-submenu__title, + & .el-submenu .el-menu-item { + min-width: $base-sidebar-width !important; + + &:hover { + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + & .theme-dark .nest-menu .el-submenu>.el-submenu__title, + & .theme-dark .el-submenu .el-menu-item { + background-color: $base-sub-menu-background !important; + + &:hover { + background-color: $base-sub-menu-hover !important; + } + } + } + + .hideSidebar { + .sidebar-container { + width: 54px !important; + } + + .main-container { + margin-left: 54px; + } + + .submenu-title-noDropdown { + padding: 0 !important; + position: relative; + + .el-tooltip { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + } + } + + .el-submenu { + overflow: hidden; + + &>.el-submenu__title { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + + } + } + + .el-menu--collapse { + .el-submenu { + &>.el-submenu__title { + &>span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + .el-menu--collapse .el-menu .el-submenu { + min-width: $base-sidebar-width !important; + } + .el-menu li.is-active>div.el-submenu__title{ + background-image: url(../images/libg.png); + background-size: contain; + background-repeat: no-repeat; + background-position: left; + background-color: #f2f2f2 !important; + font-weight: 600; + color: #409eff !important; + +} + .el-menu div.nest-menu li.is-active>div.el-submenu__title{ + background-image: none; + background-color: #f2f2f2 !important; + font-weight: 600; + color: rgb(64, 158, 255); + } + +.el-menu li.is-opened>ul>.nest-menu>a>li.is-active { + background-color: #3F8BFF !important; + font-weight: 600; + color: #fff !important; +} + // mobile responsive + .mobile { + .main-container { + margin-left: 0px; + } + + .sidebar-container { + transition: transform .28s; + width: $base-sidebar-width !important; + } + + &.hideSidebar { + .sidebar-container { + pointer-events: none; + transition-duration: 0.3s; + transform: translate3d(-$base-sidebar-width, 0, 0); + } + } + } + + .withoutAnimation { + + .main-container, + .sidebar-container { + transition: none; + } + } +} + +// when menu collapsed +.el-menu--vertical { + &>.el-menu { + .svg-icon { + margin-right: 16px; + } + } + + .nest-menu .el-submenu>.el-submenu__title, + .el-menu-item { + &:hover { + // you can use $subMenuHover + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + // the scroll bar appears when the subMenu is too long + >.el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } + } +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/transition.scss b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/transition.scss new file mode 100644 index 00000000..4cb27cc8 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/transition.scss @@ -0,0 +1,48 @@ +// global transition css + +/* fade */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter, +.fade-leave-active { + opacity: 0; +} + +/* fade-transform */ +.fade-transform-leave-active, +.fade-transform-enter-active { + transition: all .5s; +} + +.fade-transform-enter { + opacity: 0; + transform: translateX(-30px); +} + +.fade-transform-leave-to { + opacity: 0; + transform: translateX(30px); +} + +/* breadcrumb transition */ +.breadcrumb-enter-active, +.breadcrumb-leave-active { + transition: all .5s; +} + +.breadcrumb-enter, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-move { + transition: all .5s; +} + +.breadcrumb-leave-active { + position: absolute; +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/variables.scss b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/variables.scss new file mode 100644 index 00000000..da95f53c --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/assets/styles/variables.scss @@ -0,0 +1,54 @@ +// base color +$blue:#324157; +$light-blue:#3A71A8; +$red:#C03639; +$pink: #E65D6E; +$green: #30B08F; +$tiffany: #4AB7BD; +$yellow:#FEC171; +$panGreen: #30B08F; + +// 默认菜单主题风格 +$base-menu-color:#bfcbd9; +$base-menu-color-active:#f2f2f5; +$base-menu-background:#304156; +$base-logo-title-color: #ffffff; + +$base-menu-light-color:rgba(0,0,0,.70); +$base-menu-light-background:#ffffff; +$base-logo-light-title-color: #001529; + +$base-sub-menu-background:#1f2d3d; +$base-sub-menu-hover:#001528; + +// 自定义暗色菜单风格 +/** +$base-menu-color:hsla(0,0%,100%,.65); +$base-menu-color-active:#fff; +$base-menu-background:#001529; +$base-logo-title-color: #ffffff; + +$base-menu-light-color:rgba(0,0,0,.70); +$base-menu-light-background:#ffffff; +$base-logo-light-title-color: #001529; + +$base-sub-menu-background:#000c17; +$base-sub-menu-hover:#001528; +*/ + +$base-sidebar-width: 200px; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + menuColor: $base-menu-color; + menuLightColor: $base-menu-light-color; + menuColorActive: $base-menu-color-active; + menuBackground: $base-menu-background; + menuLightBackground: $base-menu-light-background; + subMenuBackground: $base-sub-menu-background; + subMenuHover: $base-sub-menu-hover; + sideBarWidth: $base-sidebar-width; + logoTitleColor: $base-logo-title-color; + logoLightTitleColor: $base-logo-light-title-color +} diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Breadcrumb/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Breadcrumb/index.vue new file mode 100644 index 00000000..b34d9e81 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Breadcrumb/index.vue @@ -0,0 +1,92 @@ + + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/day.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/day.vue new file mode 100644 index 00000000..fe3eaf0c --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/day.vue @@ -0,0 +1,161 @@ + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/hour.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/hour.vue new file mode 100644 index 00000000..4b1f1fcd --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/hour.vue @@ -0,0 +1,114 @@ + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/index.vue new file mode 100644 index 00000000..3963df28 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/index.vue @@ -0,0 +1,430 @@ + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/min.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/min.vue new file mode 100644 index 00000000..43cab900 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/min.vue @@ -0,0 +1,116 @@ + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/month.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/month.vue new file mode 100644 index 00000000..fd0ac384 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/month.vue @@ -0,0 +1,114 @@ + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/result.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/result.vue new file mode 100644 index 00000000..aea6e0e4 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/result.vue @@ -0,0 +1,559 @@ + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/second.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/second.vue new file mode 100644 index 00000000..e7b77617 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/second.vue @@ -0,0 +1,117 @@ + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/week.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/week.vue new file mode 100644 index 00000000..1cec700e --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/week.vue @@ -0,0 +1,202 @@ + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/year.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/year.vue new file mode 100644 index 00000000..5487a6c7 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Crontab/year.vue @@ -0,0 +1,131 @@ + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/DictData/index.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/DictData/index.js new file mode 100644 index 00000000..c2a0359c --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/DictData/index.js @@ -0,0 +1,21 @@ +import Vue from 'vue' +import DataDict from '@/utils/dict' +import { getDicts as getDicts } from '@/api/system/dict/data' + +function install() { + Vue.use(DataDict, { + metas: { + '*': { + labelField: 'dictLabel', + valueField: 'dictValue', + request(dictMeta) { + return getDicts(dictMeta.type).then(res => res.data) + }, + }, + }, + }) +} + +export default { + install, +} \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/DictTag/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/DictTag/index.vue new file mode 100644 index 00000000..4c196c48 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/DictTag/index.vue @@ -0,0 +1,52 @@ + + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Editor/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Editor/index.vue new file mode 100644 index 00000000..011c5de7 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Editor/index.vue @@ -0,0 +1,293 @@ + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/FileUpload/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/FileUpload/index.vue new file mode 100644 index 00000000..aa2296b9 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/FileUpload/index.vue @@ -0,0 +1,209 @@ + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Hamburger/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Hamburger/index.vue new file mode 100644 index 00000000..368b0021 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Hamburger/index.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/HeaderSearch/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/HeaderSearch/index.vue new file mode 100644 index 00000000..c44eff56 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/HeaderSearch/index.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/IconSelect/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/IconSelect/index.vue new file mode 100644 index 00000000..b0ec9fa1 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/IconSelect/index.vue @@ -0,0 +1,68 @@ + + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/IconSelect/requireIcons.js b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/IconSelect/requireIcons.js new file mode 100644 index 00000000..99e5c54c --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/IconSelect/requireIcons.js @@ -0,0 +1,11 @@ + +const req = require.context('../../assets/icons/svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys() + +const re = /\.\/(.*)\.svg/ + +const icons = requireAll(req).map(i => { + return i.match(re)[1] +}) + +export default icons diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/ImagePreview/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/ImagePreview/index.vue new file mode 100644 index 00000000..743d8d51 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/ImagePreview/index.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/ImageUpload/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/ImageUpload/index.vue new file mode 100644 index 00000000..4068b672 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/ImageUpload/index.vue @@ -0,0 +1,212 @@ + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Pagination/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Pagination/index.vue new file mode 100644 index 00000000..9ec3e486 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Pagination/index.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/PanThumb/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/PanThumb/index.vue new file mode 100644 index 00000000..1bcf4170 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/PanThumb/index.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/ParentView/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/ParentView/index.vue new file mode 100644 index 00000000..7bf61489 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/ParentView/index.vue @@ -0,0 +1,3 @@ + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/RightPanel/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/RightPanel/index.vue new file mode 100644 index 00000000..fbf27eb4 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/RightPanel/index.vue @@ -0,0 +1,149 @@ + + + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/RightToolbar/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/RightToolbar/index.vue new file mode 100644 index 00000000..b8130345 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/RightToolbar/index.vue @@ -0,0 +1,97 @@ + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/RuoYi/Doc/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/RuoYi/Doc/index.vue new file mode 100644 index 00000000..75fa8641 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/RuoYi/Doc/index.vue @@ -0,0 +1,21 @@ + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/RuoYi/Git/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/RuoYi/Git/index.vue new file mode 100644 index 00000000..bdafbaef --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/RuoYi/Git/index.vue @@ -0,0 +1,21 @@ + + + \ No newline at end of file diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Screenfull/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Screenfull/index.vue new file mode 100644 index 00000000..d4e539c2 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/Screenfull/index.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/SizeSelect/index.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/SizeSelect/index.vue new file mode 100644 index 00000000..069b5de9 --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/SizeSelect/index.vue @@ -0,0 +1,56 @@ + + + diff --git a/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/SqlEditor/index copy.vue b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/SqlEditor/index copy.vue new file mode 100644 index 00000000..dbf1caaa --- /dev/null +++ b/sptcc_agile_etl/src/system/src/tags/agile-system-1.2.0/agile-system-console-ui/src/components/SqlEditor/index copy.vue @@ -0,0 +1,369 @@ +