¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | <parent> |
| | | <groupId>com.vci</groupId> |
| | | <artifactId>plt-web-parent</artifactId> |
| | | <version>2024.1-SNAPSHOT</version> |
| | | </parent> |
| | | |
| | | <artifactId>plt-poi</artifactId> |
| | | |
| | | <properties> |
| | | <maven.compiler.source>8</maven.compiler.source> |
| | | <maven.compiler.target>8</maven.compiler.target> |
| | | <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
| | | <poi.version>4.1.0</poi.version> |
| | | </properties> |
| | | |
| | | <dependencies> |
| | | <dependency> |
| | | <groupId>com.aspose</groupId> |
| | | <artifactId>aspose-words</artifactId> |
| | | <version>18.10.RELEASE</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.vci</groupId> |
| | | <artifactId>plt-web-base</artifactId> |
| | | </dependency> |
| | | <dependency><!--éè¦è¯»åexcel--> |
| | | <groupId>org.apache.poi</groupId> |
| | | <artifactId>poi</artifactId> |
| | | <version>${poi.version}</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.apache.poi</groupId> |
| | | <artifactId>poi-excelant</artifactId> |
| | | <version>${poi.version}</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.apache.poi</groupId> |
| | | <artifactId>poi-ooxml-schemas</artifactId> |
| | | <version>${poi.version}</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.apache.poi</groupId> |
| | | <artifactId>poi-ooxml</artifactId> |
| | | <version>${poi.version}</version> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.aspose.words; |
| | | |
| | | import com.aspose.words.internal.zz29; |
| | | import com.aspose.words.internal.zz2H; |
| | | import com.aspose.words.internal.zz2I; |
| | | import com.aspose.words.internal.zz6M; |
| | | import com.aspose.words.internal.zz97; |
| | | import com.aspose.words.internal.zzQB; |
| | | import com.aspose.words.internal.zzZ; |
| | | import org.w3c.dom.Document; |
| | | import org.w3c.dom.Element; |
| | | import org.w3c.dom.Node; |
| | | import org.w3c.dom.NodeList; |
| | | |
| | | import javax.xml.parsers.DocumentBuilder; |
| | | import javax.xml.parsers.DocumentBuilderFactory; |
| | | import java.io.ByteArrayInputStream; |
| | | import java.io.File; |
| | | import java.io.InputStream; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * ç ´è§£aspose-word |
| | | * @author weidy |
| | | */ |
| | | final class zzZLS |
| | | { |
| | | private String[] zzYRe; |
| | | private String zzYRd; |
| | | private Date zzYRc; |
| | | private Date zzYRb; |
| | | |
| | | final void zzY(String var1, Class var2) |
| | | throws Exception |
| | | { |
| | | if (!"".equals(var1)) { |
| | | zz2H var10000; |
| | | File var8; |
| | | if ((var8 = new File(var1)).exists()) { |
| | | var10000 = new zz2H(var8); |
| | | } else { |
| | | String var9 = zz29.zzC(this.getClass()); |
| | | if ((var8 = new File(var9, var1)).exists()) { |
| | | var10000 = new zz2H(var8); |
| | | } else { |
| | | var9 = zz29.zzC(var2); |
| | | if (!(var8 = new File(var9, var1)).exists()) { |
| | | throw new IllegalStateException("Cannot find license '" + var1 + "'."); |
| | | } |
| | | |
| | | var10000 = new zz2H(var8); |
| | | } |
| | | } |
| | | |
| | | zz2H var3 = var10000; |
| | | |
| | | try { |
| | | this.zzW(var3); |
| | | } finally { |
| | | var3.close(); |
| | | } |
| | | } else { |
| | | zzYR9 = this; |
| | | } |
| | | } |
| | | |
| | | final void zzW(InputStream paramInputStream) |
| | | throws Exception |
| | | { |
| | | this.zzYRa = 1;zzYR9 = this; |
| | | } |
| | | |
| | | static int zzZIV() |
| | | { |
| | | return 1; |
| | | } |
| | | |
| | | static int zzZIU() |
| | | { |
| | | return 1; |
| | | } |
| | | |
| | | private void zzV(InputStream paramInputStream) |
| | | throws Exception |
| | | { |
| | | byte[] arrayOfByte1 = zzZ.getBytesFromStream(paramInputStream);byte[] arrayOfByte2 = zz6M.zzZ(zz6M.zzBZ(), zz6M.zzUF(1252), arrayOfByte1); |
| | | DocumentBuilderFactory localDocumentBuilderFactory; |
| | | DocumentBuilder localDocumentBuilder; |
| | | Document localDocument; |
| | | Element localElement1; |
| | | Element localElement2 = zzX(localElement1 = (localDocument = (localDocumentBuilder = (localDocumentBuilderFactory = zz97.zzEc()).newDocumentBuilder()).parse(new ByteArrayInputStream(arrayOfByte2))).getDocumentElement(), "Data");Element localElement3 = zzX(localElement1, "Signature");zzZ(localElement2, localElement3); |
| | | Element localElement4; |
| | | NodeList localNodeList = (localElement4 = zzX(localElement2, "Products")).getElementsByTagName("Product");this.zzYRe = new String[localNodeList.getLength()]; |
| | | for (int i = 0; i < this.zzYRe.length; i++) { |
| | | this.zzYRe[i] = localNodeList.item(i).getFirstChild().getNodeValue(); |
| | | } |
| | | String str = zzZ(localElement2, "EditionType"); |
| | | if ((!"Professional".equals(str)) && (!"Enterprise".equals(str))) { |
| | | throw new IllegalStateException("Invalid edition type."); |
| | | } |
| | | this.zzYRd = zzZ(localElement2, "SerialNumber");this.zzYRc = zzY(localElement2, "SubscriptionExpiry");this.zzYRb = zzY(localElement2, "LicenseExpiry"); |
| | | } |
| | | |
| | | private static void zzZ(Node var0, Node var1) |
| | | throws Exception |
| | | { |
| | | byte[] var2; |
| | | if (var0 != null) { |
| | | StringBuilder var3; |
| | | zzZ(var3 = new StringBuilder(), var0); |
| | | var2 = var3.toString().getBytes("UTF-16LE"); |
| | | } else { |
| | | var2 = new byte[0]; |
| | | } |
| | | |
| | | byte[] var6; |
| | | if (var1 != null) { |
| | | var6 = zz2I.decode(var1.getFirstChild().getNodeValue()); |
| | | } else { |
| | | var6 = new byte[0]; |
| | | } |
| | | |
| | | zzZ(var2, var6, "0nRuwNEddXwLfXB7pw66G71MS93gW8mNzJ7vuh3Sf4VAEOBfpxtHLCotymv1PoeukxYe31K441Ivq0Pkvx1yZZG4O1KCv3Omdbs7uqzUB4xXHlOub4VsTODzDJ5MWHqlRCB1HHcGjlyT2sVGiovLt0Grvqw5+QXBuinoBY0suX0="); |
| | | if (zzYS0.zzZ9e() > 0) { |
| | | zzYS0.clear(); |
| | | zzZ(var2, var6, "qKFqqhFovZvEYCHeD3N8Oy+AuxrOA8cVvIl4u4qIBMQlzejGyXkiTUjoryuzlhlS2bG80FGmFsH+wUKbYiEkW/4zseZCV/Ej/usbu6yHACQKO/SCy3pYw68Pcv901pvywUnoaYCI2ccCG29+XM+FwpFQuiPb2H7YbI/++SQs6Hk="); |
| | | } |
| | | |
| | | if (zzYS0.zzZ9e() > 0) { |
| | | zzYS0.clear(); |
| | | zzZ(var2, var6, "3ki45T6C4lt12J5MbKfrADBCZcE8OTefdngc9IDKg+lzCGYLuxJFDt16awhJFnA23sX+kQ4/eZQ5pNAYjc+ZJ0+pWwvQR4h8GJ3eWvecdFs7KSWwNmFXZCSN+sbrxwEjzzns1kIHuLNf5r+Zaggns+8rqXR19RSJBOcuFqVipIHv56lF53Hc+hx+y9URIaadO1W8dkTqgwExyfjnbDOaCBEH0CqUL1YIICS/wIUTEKhM0ZlwEcIcHl8XTHLVx96DMX4bbVajj78L4KzevQc442DX28KGDJTveEB1pSKWsr0d4FTx7wKS36RBnWv5lwsRErtTZb5ciVIG1iIJrp87VQ=="); |
| | | } |
| | | } |
| | | |
| | | private static void zzZ(byte[] paramArrayOfByte1, byte[] paramArrayOfByte2, String paramString) |
| | | throws Exception |
| | | { |
| | | String str; |
| | | byte[] arrayOfByte1 = zz2I.decode(str = "AQAB"); |
| | | byte[] arrayOfByte2 = zz2I.decode(str = paramString); |
| | | zzZ3V localzzZ3V; |
| | | (localzzZ3V = new zzZ3V(arrayOfByte2, arrayOfByte1)).zzS(paramArrayOfByte1, paramArrayOfByte2); |
| | | } |
| | | |
| | | private static synchronized zzQB<String> zzPl(String paramString) |
| | | throws Exception |
| | | { |
| | | InputStream localInputStream; |
| | | if ((localInputStream = License.class.getResourceAsStream("/com/aspose/words/resources/" + paramString + ".Real.xml")) == null) { |
| | | throw new IllegalStateException("Cannot find black listed licenses resource. Please report this error to Aspose."); |
| | | } |
| | | try |
| | | { |
| | | DocumentBuilderFactory localDocumentBuilderFactory; |
| | | DocumentBuilder localDocumentBuilder; |
| | | Document localDocument; |
| | | Element localElement1; |
| | | Element localElement2 = zzX(localElement1 = (localDocument = (localDocumentBuilder = (localDocumentBuilderFactory = zz97.zzEc()).newDocumentBuilder()).parse(localInputStream)).getDocumentElement(), "Data");Element localElement3 = zzX(localElement1, "Signature");zzZ(localElement2, localElement3);zzQB localzzQB1 = new zzQB(); |
| | | |
| | | NodeList localNodeList = localElement2.getElementsByTagName("SN"); |
| | | for (int i = 0; i < localNodeList.getLength(); i++) { |
| | | localzzQB1.add(localNodeList.item(i).getFirstChild().getNodeValue()); |
| | | } |
| | | return localzzQB1; |
| | | } |
| | | finally |
| | | { |
| | | localInputStream.close(); |
| | | } |
| | | } |
| | | |
| | | private static String zzZ(Element paramElement, String paramString) |
| | | { |
| | | Element localElement; |
| | | if ((localElement = zzX(paramElement, paramString)) != null) { |
| | | return localElement.getFirstChild().getNodeValue(); |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | private static Date zzY(Element paramElement, String paramString) |
| | | throws ParseException |
| | | { |
| | | String str = zzZ(paramElement, paramString); |
| | | if (!"".equals(str)) { |
| | | return new SimpleDateFormat("yyyyMMdd").parse(str); |
| | | } |
| | | return new Date(253402300799999L); |
| | | } |
| | | |
| | | private static Element zzX(Element paramElement, String paramString) |
| | | { |
| | | NodeList localNodeList; |
| | | if ((localNodeList = paramElement.getElementsByTagName(paramString)).getLength() > 0) { |
| | | return (Element)localNodeList.item(0); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private static void zzZ(StringBuilder paramStringBuilder, Node paramNode) |
| | | { |
| | | if (paramNode.getNodeType() == 1) |
| | | { |
| | | paramStringBuilder.append('<');paramStringBuilder.append(paramNode.getNodeName());paramStringBuilder.append('>'); |
| | | NodeList localNodeList1; |
| | | NodeList localNodeList2; |
| | | Node localNode2; |
| | | if ((((localNodeList2 = localNodeList1 = paramNode.getChildNodes()) != null) && (localNodeList2.getLength() == 1) && ((localNode2 = localNodeList2.item(0)) != null) && (localNode2.getNodeType() == 3) ? 1 : 0) != 0) |
| | | { |
| | | Node localNode1; |
| | | String str = (str = (str = (str = (localNode1 = localNodeList1.item(0)).getNodeValue()).replace("&", "&")).replace("<", "<")).replace(">", ">");paramStringBuilder.append(str); |
| | | } |
| | | else |
| | | { |
| | | for (int i = 0; i < localNodeList1.getLength(); i++) { |
| | | zzZ(paramStringBuilder, localNodeList1.item(i)); |
| | | } |
| | | } |
| | | paramStringBuilder.append('<');paramStringBuilder.append('/'); |
| | | |
| | | paramStringBuilder.append(paramNode.getNodeName());paramStringBuilder.append('>'); |
| | | } |
| | | } |
| | | |
| | | private int zzYRa = 0; |
| | | private static zzZLS zzYR9 = null; |
| | | private static zzQB<String> zzYR8; |
| | | private static zzQB<String> zzYR7; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.poi.annotation; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * exceléçå |
| | | * @author weidy |
| | | * @date 2020/5/9 |
| | | */ |
| | | @Target({ java.lang.annotation.ElementType.FIELD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface ExcelColumn { |
| | | |
| | | /** |
| | | * 对åºexceléçå |
| | | * @return excelä¸çåå |
| | | */ |
| | | String value() ; |
| | | |
| | | /** |
| | | * 弿¯å¦å¯ä»¥ä¸ºç©º |
| | | * @return true |
| | | */ |
| | | boolean nullable() default true; |
| | | |
| | | /** |
| | | * æå±æä¸¾çç¼å· |
| | | * @return æä¸¾ç¼å· |
| | | */ |
| | | String enumId() default ""; |
| | | |
| | | /** |
| | | * æ ¡éªçæ£åè¡¨è¾¾å¼ |
| | | * @return ææ£å表达å¼çæ¶åï¼ä¼ç´æ¥æ ¡éªæ¯å¦æ£ç¡® |
| | | */ |
| | | String regExg() default ""; |
| | | |
| | | /** |
| | | * 䏿»¡è¶³æ£å表达å¼çæ¶åçæç¤ºå¼ï¼å¯ä»¥æ¯å¤è¯è¨ç¼å· |
| | | * @return é»è®¤ä¸ºç©º |
| | | */ |
| | | String regExgTitle() default ""; |
| | | |
| | | /** |
| | | * 屿§åç»ï¼å¸¸ç¨äºæ©å±å±æ§çæ¹å¼ |
| | | * @return åç»ä¿¡æ¯ |
| | | */ |
| | | String group() default ""; |
| | | |
| | | /** |
| | | * æ¯å¦ä¸ºè¡å·çå |
| | | * @return true表示ä¼å°å
容å å°è¡å·ä¸ |
| | | */ |
| | | boolean rowIndexColumn() default false; |
| | | |
| | | /** |
| | | * åªè¯»-导åºçæ¶åä½¿ç¨ |
| | | * @return true表示åªè¯» |
| | | */ |
| | | boolean readOnly() default false; |
| | | |
| | | /** |
| | | * åå
æ ¼å®½åº¦,å使¯åç±³ï¼å·®ä¸å¤æ¯htmlä¸è¡¨æ ¼ç宽度é¤ä»¥10 |
| | | * @return 宽度 |
| | | */ |
| | | int width() default 0; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.poi.annotation; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * 使ç¨å
¶ä»ç对象æ¥è·åexcelçå
容 |
| | | * @author weidy |
| | | * @date 2020/6/18 |
| | | */ |
| | | @Target({ java.lang.annotation.ElementType.FIELD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface ExcelRefer { |
| | | /** |
| | | * å
å«çå
³èç±»ï¼åªè½æ¯ä¸ä¸ªï¼å¦åæ æ³åºåå
容 |
| | | * @return ç±» |
| | | */ |
| | | Class<?> value(); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.poi.annotation; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * 导åºå°excelçæ é¢è®¾ç½® |
| | | * @author weidy |
| | | * @date 2020/5/30 |
| | | */ |
| | | @Target({ ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface ExcelTitle { |
| | | /** |
| | | * æ 颿å¨çè¡å· |
| | | * @return |
| | | */ |
| | | int rowIndexForTitle() default 1; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.poi.bo; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * è¿½å æ°æ®å°excelä¸çé
ç½® |
| | | * @author weidy |
| | | * @date 2022/10/15 |
| | | */ |
| | | public class AppendDataExcelOption implements java.io.Serializable{ |
| | | |
| | | /** |
| | | * æ 颿å¨çè¡ |
| | | */ |
| | | private int titleRowIndex = 0; |
| | | |
| | | /** |
| | | * åå
¥æ°æ®çexcelè¡¨æ ¼ |
| | | */ |
| | | private String sheetName; |
| | | |
| | | /** |
| | | * åçåæ®µ |
| | | */ |
| | | private List<String> writeFields; |
| | | |
| | | /** |
| | | * åªè¯»çåæ®µ |
| | | */ |
| | | private List<String> readOnlyFields; |
| | | |
| | | /** |
| | | * ä»å段ä¸å»æ¾åªè¯»å±æ§ |
| | | */ |
| | | private boolean readOnlyFromField =false; |
| | | |
| | | public int getTitleRowIndex() { |
| | | return titleRowIndex; |
| | | } |
| | | |
| | | public void setTitleRowIndex(int titleRowIndex) { |
| | | this.titleRowIndex = titleRowIndex; |
| | | } |
| | | |
| | | public String getSheetName() { |
| | | return sheetName; |
| | | } |
| | | |
| | | public void setSheetName(String sheetName) { |
| | | this.sheetName = sheetName; |
| | | } |
| | | |
| | | public List<String> getWriteFields() { |
| | | return writeFields; |
| | | } |
| | | |
| | | public void setWriteFields(List<String> writeFields) { |
| | | this.writeFields = writeFields; |
| | | } |
| | | |
| | | public List<String> getReadOnlyFields() { |
| | | return readOnlyFields; |
| | | } |
| | | |
| | | public void setReadOnlyFields(List<String> readOnlyFields) { |
| | | this.readOnlyFields = readOnlyFields; |
| | | } |
| | | |
| | | public boolean isReadOnlyFromField() { |
| | | return readOnlyFromField; |
| | | } |
| | | |
| | | public void setReadOnlyFromField(boolean readOnlyFromField) { |
| | | this.readOnlyFromField = readOnlyFromField; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "AppendDataExcelOption{" + |
| | | "titleRowIndex=" + titleRowIndex + |
| | | ", sheetName='" + sheetName + '\'' + |
| | | ", writeFields=" + writeFields + |
| | | ", readOnlyFields=" + readOnlyFields + |
| | | ", readOnlyFromField=" + readOnlyFromField + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.poi.bo; |
| | | |
| | | /** |
| | | * ä¸è½½æ¨¡æ¿çæ¶åçé
ç½® |
| | | * @author weidy |
| | | * @date 2022/9/28 |
| | | */ |
| | | public class DownloadTempOption implements java.io.Serializable{ |
| | | |
| | | /** |
| | | * é»è®¤1000æ¡çï¼åªæå¨æä¸æçæ¶åæè½ä½ç° |
| | | */ |
| | | private Integer defaultRowSize = 1000; |
| | | |
| | | /** |
| | | * æä»¶çåç§° |
| | | */ |
| | | private String excelName; |
| | | |
| | | /** |
| | | * å·¥ä½è¡¨çåç§° |
| | | */ |
| | | private String sheetName; |
| | | |
| | | public DownloadTempOption(String excelName){ |
| | | this.excelName = excelName; |
| | | } |
| | | |
| | | public String getExcelName() { |
| | | return excelName; |
| | | } |
| | | |
| | | public void setExcelName(String excelName) { |
| | | this.excelName = excelName; |
| | | } |
| | | |
| | | public Integer getDefaultRowSize() { |
| | | return defaultRowSize; |
| | | } |
| | | |
| | | public void setDefaultRowSize(Integer defaultRowSize) { |
| | | this.defaultRowSize = defaultRowSize; |
| | | } |
| | | |
| | | public String getSheetName() { |
| | | return sheetName; |
| | | } |
| | | |
| | | public void setSheetName(String sheetName) { |
| | | this.sheetName = sheetName; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "DownloadTempOption{" + |
| | | "defaultRowSize=" + defaultRowSize + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.poi.bo; |
| | | |
| | | /** |
| | | * é对mapçæ¹å¼çè¯»åæ¶ï¼å
容 |
| | | * @author weidy |
| | | * @date 2020/6/18 |
| | | */ |
| | | public class ExcelColumnMap { |
| | | |
| | | /** |
| | | * æ é¢ä¸æ |
| | | */ |
| | | private String title; |
| | | |
| | | /** |
| | | * è±æåç§° |
| | | */ |
| | | private String columnName; |
| | | |
| | | /** |
| | | * æ¯å¦å¯ä»¥ä¸ºç©º |
| | | */ |
| | | private boolean nullable = true; |
| | | |
| | | /** |
| | | * æ£åè¡¨è¾¾å¼ |
| | | */ |
| | | private String regExg; |
| | | |
| | | /** |
| | | * 䏿»¡è¶³æ£å表达å¼çæ¶åçæç¤ºå¼ï¼å¯ä»¥æ¯å¤è¯è¨ç¼å· |
| | | * @return é»è®¤ä¸ºç©º |
| | | */ |
| | | private String regExgTitle; |
| | | |
| | | /** |
| | | * 屿§åç» |
| | | */ |
| | | private String group; |
| | | |
| | | public ExcelColumnMap(){ |
| | | |
| | | } |
| | | |
| | | public ExcelColumnMap(String title,String columnName){ |
| | | this.title = title; |
| | | this.columnName = columnName; |
| | | } |
| | | |
| | | public String getTitle() { |
| | | return title; |
| | | } |
| | | |
| | | public void setTitle(String title) { |
| | | this.title = title; |
| | | } |
| | | |
| | | public String getColumnName() { |
| | | return columnName; |
| | | } |
| | | |
| | | public void setColumnName(String columnName) { |
| | | this.columnName = columnName; |
| | | } |
| | | |
| | | public boolean isNullable() { |
| | | return nullable; |
| | | } |
| | | |
| | | public void setNullable(boolean nullable) { |
| | | this.nullable = nullable; |
| | | } |
| | | |
| | | public String getRegExg() { |
| | | return regExg; |
| | | } |
| | | |
| | | public void setRegExg(String regExg) { |
| | | this.regExg = regExg; |
| | | } |
| | | |
| | | public String getRegExgTitle() { |
| | | return regExgTitle; |
| | | } |
| | | |
| | | public void setRegExgTitle(String regExgTitle) { |
| | | this.regExgTitle = regExgTitle; |
| | | } |
| | | |
| | | public String getGroup() { |
| | | return group; |
| | | } |
| | | |
| | | public void setGroup(String group) { |
| | | this.group = group; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "ExcelColumnMap{" + |
| | | "title='" + title + '\'' + |
| | | ", columnName='" + columnName + '\'' + |
| | | ", nullable=" + nullable + |
| | | ", regExg='" + regExg + '\'' + |
| | | ", regExgTitle='" + regExgTitle + '\'' + |
| | | ", group='" + group + '\'' + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.poi.bo; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 读åexcelçé项 |
| | | * @author weidy |
| | | * @date 2020/5/9 |
| | | */ |
| | | public class ReadExcelOption { |
| | | |
| | | /** |
| | | * é¦è¡ï¼é»è®¤ä¸ºç¬¬äºè¡ï¼å 为ä¸è¬é¦è¡é½æ¯æ é¢ |
| | | */ |
| | | private int fristRow = 1; |
| | | |
| | | /** |
| | | * 读åé£ä¸ªå·¥ä½è¡¨ |
| | | */ |
| | | private int sheetIndex = 0; |
| | | |
| | | /** |
| | | * 读åé£ä¸ªåç§°çå·¥ä½è¡¨ |
| | | */ |
| | | private String sheetName ; |
| | | |
| | | /** |
| | | * æ¯å¦è¯»åå
¨é¨çå·¥ä½è¡¨ |
| | | */ |
| | | private boolean readAllSheet = false; |
| | | |
| | | /** |
| | | * æ©å±å±æ§çæ å°é
ç½®ï¼po对象ä¸å±æ§æ¯mapç形弿¶ä½¿ç¨ï¼keyä¸excelColumn注解çvalue()ç¸åï¼å¼æ¯å¯¹åºçæ é¢ |
| | | */ |
| | | private Map<String, List<ExcelColumnMap>> extendAttrMap ; |
| | | |
| | | public String getSheetName() { |
| | | return sheetName; |
| | | } |
| | | |
| | | public void setSheetName(String sheetName) { |
| | | this.sheetName = sheetName; |
| | | } |
| | | |
| | | public ReadExcelOption(){ |
| | | |
| | | } |
| | | public ReadExcelOption(int fristRow){ |
| | | this.fristRow = fristRow; |
| | | } |
| | | |
| | | public ReadExcelOption(int fristRow,boolean readAllSheet){ |
| | | this.fristRow = fristRow; |
| | | this.readAllSheet = readAllSheet; |
| | | } |
| | | |
| | | public int getFristRow() { |
| | | return fristRow; |
| | | } |
| | | |
| | | public void setFristRow(int fristRow) { |
| | | this.fristRow = fristRow; |
| | | } |
| | | |
| | | public int getSheetIndex() { |
| | | return sheetIndex; |
| | | } |
| | | |
| | | public void setSheetIndex(int sheetIndex) { |
| | | this.sheetIndex = sheetIndex; |
| | | } |
| | | |
| | | public boolean isReadAllSheet() { |
| | | return readAllSheet; |
| | | } |
| | | |
| | | public void setReadAllSheet(boolean readAllSheet) { |
| | | this.readAllSheet = readAllSheet; |
| | | } |
| | | |
| | | public Map<String, List<ExcelColumnMap>> getExtendAttrMap() { |
| | | return extendAttrMap; |
| | | } |
| | | |
| | | public void setExtendAttrMap(Map<String, List<ExcelColumnMap>> extendAttrMap) { |
| | | this.extendAttrMap = extendAttrMap; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "ReadExcelOption{" + |
| | | "fristRow=" + fristRow + |
| | | ", sheetIndex=" + sheetIndex + |
| | | ", sheetName='" + sheetName + '\'' + |
| | | ", readAllSheet=" + readAllSheet + |
| | | ", extendAttrMap=" + extendAttrMap + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.poi.bo; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * å·¥ä½è¡¨æ°æ®çéå |
| | | * @author weidy |
| | | */ |
| | | public class SheetDataSet { |
| | | /** |
| | | * å·¥ä½è¡¨åç§° |
| | | */ |
| | | private String sheetName; |
| | | |
| | | public String getSheetName() { |
| | | return sheetName; |
| | | } |
| | | |
| | | public void setSheetName(String sheetName) { |
| | | this.sheetName = sheetName; |
| | | } |
| | | |
| | | public List<SheetRowData> getRowData() { |
| | | return rowData; |
| | | } |
| | | |
| | | public void setRowData(List<SheetRowData> rowData) { |
| | | this.rowData = rowData; |
| | | } |
| | | |
| | | /** |
| | | * åçåç§° |
| | | */ |
| | | private List<String> colName = new ArrayList<String>(); |
| | | |
| | | |
| | | public List<String> getColName() { |
| | | return colName; |
| | | } |
| | | |
| | | public void setColName(List<String> colName) { |
| | | this.colName = colName; |
| | | } |
| | | |
| | | /** |
| | | * å
嫿°æ® |
| | | */ |
| | | private List<SheetRowData> rowData = new ArrayList<SheetRowData>(); |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "SheetDataSet{" + |
| | | "sheetName='" + sheetName + '\'' + |
| | | ", colName=" + colName + |
| | | ", rowData=" + rowData + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.poi.bo; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * excelæ¯è¡çæ°æ® |
| | | * @author weidy |
| | | */ |
| | | public class SheetRowData { |
| | | |
| | | /** |
| | | * è¡å· |
| | | */ |
| | | private String rowIndex; |
| | | |
| | | /** |
| | | * æ°æ®ï¼keyæ¯åå·ï¼ä»0å¼å§ï¼valueæ¯å
·ä½çå¼ |
| | | */ |
| | | private Map<Integer,String> data = new HashMap<Integer,String>(); |
| | | |
| | | /** |
| | | * è·åè¡å· |
| | | * @return è¡å· |
| | | */ |
| | | public String getRowIndex() { |
| | | return rowIndex; |
| | | } |
| | | |
| | | /** |
| | | * 设置è¡å· |
| | | * @param rowIndex è¡å· |
| | | */ |
| | | public void setRowIndex(String rowIndex) { |
| | | this.rowIndex = rowIndex; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ°æ®å¯¹è±¡ |
| | | * @return è¡çæ°æ® |
| | | */ |
| | | public Map<Integer, String> getData() { |
| | | return data; |
| | | } |
| | | |
| | | /** |
| | | * 设置è¡çæ°æ® |
| | | * @param data æ°æ®,keyæ¯åå·ï¼ä»0å¼å§ï¼valueæ¯åå
æ ¼çå¼ |
| | | */ |
| | | public void setData(Map<Integer, String> data) { |
| | | this.data = data; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "SheetRowData{" + |
| | | "rowIndex='" + rowIndex + '\'' + |
| | | ", data=" + data + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.poi.bo; |
| | | |
| | | import org.apache.poi.ss.usermodel.*; |
| | | |
| | | /** |
| | | * åå
æ ¼çæ ·å¼ï¼å 为Poiéå使ç¨workbook.createCellStyleï¼èpoiéçCellStyleä¸è½newåsetGet |
| | | * @author weidy |
| | | * @date 2022/12/19 |
| | | */ |
| | | public class VciCellStyle implements java.io.Serializable{ |
| | | |
| | | /** |
| | | * æ°´å¹³å¯¹é½ |
| | | */ |
| | | private HorizontalAlignment alignment; |
| | | |
| | | /** |
| | | * åç´å¯¹é½ |
| | | */ |
| | | private VerticalAlignment verticalAlignment; |
| | | |
| | | /** |
| | | * æ¯å¦èªå¨æ¢è¡ |
| | | */ |
| | | private Boolean wrapText; |
| | | |
| | | /** |
| | | * èæ¯è² |
| | | */ |
| | | private IndexedColors fillForegroundColor; |
| | | |
| | | /** |
| | | * å¡«å
æ¨¡å¼ |
| | | */ |
| | | private FillPatternType fillPattern; |
| | | |
| | | /** |
| | | * å使 ·å¼ |
| | | */ |
| | | private VciPoiFont font; |
| | | |
| | | /** |
| | | * é¡¶é¨è¾¹æ¡ |
| | | */ |
| | | private BorderStyle borderTop; |
| | | |
| | | /** |
| | | * å³ä¾§è¾¹æ¡ |
| | | */ |
| | | private BorderStyle borderRight; |
| | | |
| | | /** |
| | | * åºé¨è¾¹æ¡ |
| | | */ |
| | | private BorderStyle borderBottom; |
| | | |
| | | /** |
| | | * å·¦è¾¹è¾¹æ¡ |
| | | */ |
| | | private BorderStyle borderLeft; |
| | | |
| | | /** |
| | | * é¡¶é¨è¾¹æ¡é¢è² |
| | | */ |
| | | private IndexedColors topBorderColor; |
| | | |
| | | /** |
| | | * å³ä¾§è¾¹æ¡é¢è² |
| | | */ |
| | | private IndexedColors rightBorderColor; |
| | | |
| | | /** |
| | | * åºé¨è¾¹æ¡é¢è² |
| | | */ |
| | | private IndexedColors bottomBorderColor; |
| | | |
| | | /** |
| | | * 左边边æ¡é¢è² |
| | | */ |
| | | private IndexedColors leftBorderColor; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.poi.bo; |
| | | |
| | | import org.apache.poi.ss.usermodel.Font; |
| | | import org.apache.poi.ss.usermodel.IndexedColors; |
| | | |
| | | /** |
| | | * poiçåä½å¯¹è±¡ |
| | | * @author weidy |
| | | * @date 2022/12/19 |
| | | */ |
| | | public class VciPoiFont implements java.io.Serializable{ |
| | | |
| | | /** |
| | | * åä½åç§° |
| | | */ |
| | | private String fontName; |
| | | |
| | | /** |
| | | * åä½å¤§å° |
| | | */ |
| | | private Short fontHeight; |
| | | |
| | | /** |
| | | * åä½é¢è² |
| | | */ |
| | | private IndexedColors color; |
| | | |
| | | /** |
| | | * æ¯å¦å ç² |
| | | */ |
| | | private Boolean bold; |
| | | |
| | | /** |
| | | * æä½ |
| | | */ |
| | | private Boolean italic; |
| | | |
| | | /** |
| | | * ä¸å线,使ç¨Font.U_NONE,Font.U_SINGLE,Font.U_DOUBLE |
| | | */ |
| | | private byte underLine = Font.U_NONE; |
| | | |
| | | /** |
| | | * åä½ä¸æ 䏿 , Font.SS_NONE, Font.SS_SUPER, Font.SS_SUB |
| | | */ |
| | | private byte typeOffset = Font.SS_NONE; |
| | | |
| | | /** |
| | | * å é¤çº¿ |
| | | */ |
| | | private Boolean strikeout; |
| | | |
| | | public String getFontName() { |
| | | return fontName; |
| | | } |
| | | |
| | | public void setFontName(String fontName) { |
| | | this.fontName = fontName; |
| | | } |
| | | |
| | | public Short getFontHeight() { |
| | | return fontHeight; |
| | | } |
| | | |
| | | public void setFontHeight(Short fontHeight) { |
| | | this.fontHeight = fontHeight; |
| | | } |
| | | |
| | | public IndexedColors getColor() { |
| | | return color; |
| | | } |
| | | |
| | | public void setColor(IndexedColors color) { |
| | | this.color = color; |
| | | } |
| | | |
| | | public Boolean getBold() { |
| | | return bold; |
| | | } |
| | | |
| | | public void setBold(Boolean bold) { |
| | | this.bold = bold; |
| | | } |
| | | |
| | | public Boolean getItalic() { |
| | | return italic; |
| | | } |
| | | |
| | | public void setItalic(Boolean italic) { |
| | | this.italic = italic; |
| | | } |
| | | |
| | | public byte getUnderLine() { |
| | | return underLine; |
| | | } |
| | | |
| | | public void setUnderLine(byte underLine) { |
| | | this.underLine = underLine; |
| | | } |
| | | |
| | | public byte getTypeOffset() { |
| | | return typeOffset; |
| | | } |
| | | |
| | | public void setTypeOffset(byte typeOffset) { |
| | | this.typeOffset = typeOffset; |
| | | } |
| | | |
| | | public Boolean getStrikeout() { |
| | | return strikeout; |
| | | } |
| | | |
| | | public void setStrikeout(Boolean strikeout) { |
| | | this.strikeout = strikeout; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.poi.bo; |
| | | |
| | | import org.apache.poi.ss.usermodel.CellStyle; |
| | | import org.apache.poi.ss.usermodel.Font; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * åå
¥å°exceléçæ°æ® |
| | | * @author weidy |
| | | */ |
| | | public class WriteExcelData { |
| | | |
| | | //é»è®¤ç屿§ |
| | | /** |
| | | * è¡å·ï¼ä»0å¼å§ |
| | | */ |
| | | private int row; |
| | | /** |
| | | * åå·ï¼ä»0å¼å§ |
| | | */ |
| | | private int col; |
| | | /** |
| | | * 读åæè
åå
¥çå¼å¯¹è±¡ |
| | | */ |
| | | private Object obj; |
| | | |
| | | //åå¹¶åæ ·å¼ |
| | | /** |
| | | * æ¯å¦éè¦åå¹¶åå
æ ¼ |
| | | */ |
| | | private boolean merged = false; |
| | | /** |
| | | * åå¹¶è¡çç®æ è¡å·ï¼ä»0å¼å§ |
| | | */ |
| | | private int rowTo; |
| | | /** |
| | | * åå¹¶åçç®æ åå·ï¼ä»0å¼å§ |
| | | */ |
| | | private int colTo; |
| | | /** |
| | | * æ¯å¦æ·è´æ ·å¼ |
| | | */ |
| | | private boolean copyStyle = false; |
| | | /** |
| | | * æ·è´æ ·å¼çè¡ |
| | | */ |
| | | private int copyStyleRow; |
| | | /** |
| | | * æ·è´æ ·å¼çå |
| | | */ |
| | | private int copyStyleCol; |
| | | /** |
| | | * æ¯å¦å±
ä¸ |
| | | */ |
| | | private boolean center; |
| | | |
| | | |
| | | //å
¬å¼ |
| | | |
| | | /** |
| | | * æ¯å¦ä¸ºå
¬å¼,å
¬å¼çå¼è®¾ç½®å°obj屿§ä¸ |
| | | */ |
| | | private boolean formula = false; |
| | | |
| | | //å称管çå¨ |
| | | |
| | | /** |
| | | * å称管çå¨ï¼çº§èéæ©çæ¶åå®ä¹ï¼å称为obj屿§ï¼èå´æ¯row,rowto,col,colto |
| | | */ |
| | | private boolean nameRefer = false; |
| | | |
| | | //æ°æ®æææ§ |
| | | /** |
| | | * æ°æ®æææ§,å
¬å¼æ¯Obj屿§ï¼èå´æ¯row,rowto,col,colto |
| | | */ |
| | | private boolean validation = false; |
| | | |
| | | /** |
| | | * æææ§åºåçå¼ |
| | | */ |
| | | private List<String> validationDataList; |
| | | |
| | | /** |
| | | * æææ§æ ¡éªå¤±è´¥çæ¶åçæç¤ºä¿¡æ¯ï¼å¦æè®¾ç½®å°±è¡¨ç¤ºä¼æ¾ç¤ºé误 |
| | | */ |
| | | private String validationErrorMsg ; |
| | | |
| | | /** |
| | | * åä½é¢è² |
| | | */ |
| | | private String fontColor; |
| | | |
| | | |
| | | /** |
| | | * æ¶é´æ ¼å¼ |
| | | */ |
| | | private String dateFormat; |
| | | |
| | | /** |
| | | * åªè¯» |
| | | */ |
| | | private boolean readOnly; |
| | | |
| | | /** |
| | | * åå
æ ¼å®½åº¦,å·®ä¸å¤æ¯htmlä¸è¡¨æ ¼å®½åº¦é¤ä»¥10 |
| | | */ |
| | | private Integer width; |
| | | |
| | | |
| | | public String getFontColor() { |
| | | return fontColor; |
| | | } |
| | | |
| | | public void setFontColor(String fontColor) { |
| | | this.fontColor = fontColor; |
| | | } |
| | | |
| | | |
| | | public List<String> getValidationDataList() { |
| | | return validationDataList; |
| | | } |
| | | |
| | | public void setValidationDataList(List<String> validationDataList) { |
| | | this.validationDataList = validationDataList; |
| | | } |
| | | |
| | | /** |
| | | * é»è®¤çæé æ¹æ³ |
| | | */ |
| | | public WriteExcelData(){ |
| | | |
| | | } |
| | | |
| | | /** |
| | | * æé æ¹æ³ |
| | | * @param row è¡ |
| | | * @param col å |
| | | * @param obj å¼ |
| | | */ |
| | | public WriteExcelData(int row, int col, Object obj){ |
| | | this.row = row; |
| | | this.col = col; |
| | | this.obj = obj; |
| | | } |
| | | |
| | | /** |
| | | * åå
¬å¼ |
| | | * @param row è¡å· ä»0 å¼å§ |
| | | * @param col åå·ä»0å¼å§ |
| | | * @param foumula å
¬å¼çå¼ |
| | | */ |
| | | public void writeFormula(int row,int col, String foumula){ |
| | | this.row = row; |
| | | this.col = col; |
| | | this.obj = foumula; |
| | | this.formula = true; |
| | | } |
| | | |
| | | /** |
| | | * åå称管çå¨ |
| | | * @param row è¡å· |
| | | * @param col åå· |
| | | * @param rowTo ç»æè¡çè¡å· |
| | | * @param colTo ç»æåçåå· |
| | | * @param name å称管çå¨çåç§° |
| | | */ |
| | | public void writeNameRefer(int row,int col, int rowTo,int colTo,String name){ |
| | | this.row = row; |
| | | this.col = col; |
| | | this.obj = name; |
| | | this.nameRefer = true; |
| | | this.rowTo = rowTo; |
| | | this.colTo = colTo; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * åå
¥ä¸æå表çå¼ |
| | | * @param comboBoxData 䏿èåçå¼ |
| | | * @param row è¡å· |
| | | * @param col åå· |
| | | * @param rowTo ç»æè¡å· |
| | | * @param colTo ç»æåå· |
| | | */ |
| | | public void writeComboBox( List<String> comboBoxData,int row,int col,int rowTo,int colTo){ |
| | | writeComboBox(comboBoxData,null,row,col,rowTo,colTo); |
| | | } |
| | | |
| | | /** |
| | | * åå
¥ä¸æå表çå¼ |
| | | * @param comboBoxData 䏿èåçå¼ |
| | | * @param errorMsg é误çæç¤ºä¿¡æ¯ |
| | | * @param row è¡å· |
| | | * @param col åå· |
| | | * @param rowTo ç»æè¡å· |
| | | * @param colTo ç»æåå· |
| | | */ |
| | | public void writeComboBox( List<String> comboBoxData,String errorMsg,int row,int col,int rowTo,int colTo){ |
| | | this.validationDataList = comboBoxData; |
| | | this.validation= true; |
| | | this.validationErrorMsg = errorMsg; |
| | | this.row = row; |
| | | this.col = col; |
| | | this.rowTo = rowTo; |
| | | this.colTo = colTo; |
| | | } |
| | | |
| | | /** |
| | | * æææ§åºåå¼ç¨å
¶ä»ç |
| | | * @param referFormula å¼ç¨çå
¬å¼ |
| | | * @param row è¡å· |
| | | * @param col åå· |
| | | * @param rowTo ç»æè¡å· |
| | | * @param colTo ç»æåå· |
| | | */ |
| | | public void writeUseRefer(String referFormula,int row,int col,int rowTo,int colTo){ |
| | | writeUseRefer(referFormula,null,row,col,rowTo,colTo); |
| | | } |
| | | |
| | | /** |
| | | * æææ§åºåå¼ç¨å
¶ä»ç |
| | | * @param referFormula å¼ç¨çå
¬å¼ |
| | | * @param errorMsg é误çæç¤ºä¿¡æ¯ |
| | | * @param row è¡å· |
| | | * @param col åå· |
| | | * @param rowTo ç»æè¡å· |
| | | * @param colTo ç»æåå· |
| | | */ |
| | | public void writeUseRefer(String referFormula,String errorMsg,int row,int col,int rowTo,int colTo){ |
| | | this.validation= true; |
| | | this.obj = referFormula; |
| | | this.validationErrorMsg = errorMsg; |
| | | this.row = row; |
| | | this.col = col; |
| | | this.rowTo = rowTo; |
| | | this.colTo = colTo; |
| | | } |
| | | |
| | | |
| | | public boolean isReadOnly() { |
| | | return readOnly; |
| | | } |
| | | |
| | | public void setReadOnly(boolean readOnly) { |
| | | this.readOnly = readOnly; |
| | | } |
| | | |
| | | public int getRow() { |
| | | return row; |
| | | } |
| | | |
| | | public void setRow(int row) { |
| | | this.row = row; |
| | | } |
| | | |
| | | public int getCol() { |
| | | return col; |
| | | } |
| | | |
| | | public void setCol(int col) { |
| | | this.col = col; |
| | | } |
| | | |
| | | public Object getObj() { |
| | | return obj; |
| | | } |
| | | |
| | | public void setObj(Object obj) { |
| | | this.obj = obj; |
| | | } |
| | | |
| | | public boolean isMerged() { |
| | | return merged; |
| | | } |
| | | |
| | | public void setMerged(boolean merged) { |
| | | this.merged = merged; |
| | | } |
| | | |
| | | public int getRowTo() { |
| | | return rowTo; |
| | | } |
| | | |
| | | public void setRowTo(int rowTo) { |
| | | this.rowTo = rowTo; |
| | | } |
| | | |
| | | public int getColTo() { |
| | | return colTo; |
| | | } |
| | | |
| | | public void setColTo(int colTo) { |
| | | this.colTo = colTo; |
| | | } |
| | | |
| | | public boolean isCopyStyle() { |
| | | return copyStyle; |
| | | } |
| | | |
| | | public void setCopyStyle(boolean copyStyle) { |
| | | this.copyStyle = copyStyle; |
| | | } |
| | | |
| | | public int getCopyStyleRow() { |
| | | return copyStyleRow; |
| | | } |
| | | |
| | | public void setCopyStyleRow(int copyStyleRow) { |
| | | this.copyStyleRow = copyStyleRow; |
| | | } |
| | | |
| | | public int getCopyStyleCol() { |
| | | return copyStyleCol; |
| | | } |
| | | |
| | | public void setCopyStyleCol(int copyStyleCol) { |
| | | this.copyStyleCol = copyStyleCol; |
| | | } |
| | | |
| | | public boolean isCenter() { |
| | | return center; |
| | | } |
| | | |
| | | public void setCenter(boolean center) { |
| | | this.center = center; |
| | | } |
| | | |
| | | public boolean isFormula() { |
| | | return formula; |
| | | } |
| | | |
| | | public void setFormula(boolean formula) { |
| | | this.formula = formula; |
| | | } |
| | | |
| | | public boolean isNameRefer() { |
| | | return nameRefer; |
| | | } |
| | | |
| | | public void setNameRefer(boolean nameRefer) { |
| | | this.nameRefer = nameRefer; |
| | | } |
| | | |
| | | public boolean isValidation() { |
| | | return validation; |
| | | } |
| | | |
| | | public void setValidation(boolean validation) { |
| | | this.validation = validation; |
| | | } |
| | | |
| | | public String getValidationErrorMsg() { |
| | | return validationErrorMsg; |
| | | } |
| | | |
| | | public void setValidationErrorMsg(String validationErrorMsg) { |
| | | this.validationErrorMsg = validationErrorMsg; |
| | | } |
| | | |
| | | public String getDateFormat() { |
| | | return dateFormat; |
| | | } |
| | | |
| | | public void setDateFormat(String dateFormat) { |
| | | this.dateFormat = dateFormat; |
| | | } |
| | | |
| | | public Integer getWidth() { |
| | | return width; |
| | | } |
| | | |
| | | public void setWidth(Integer width) { |
| | | this.width = width; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "WriteExcelData{" + |
| | | "row=" + row + |
| | | ", col=" + col + |
| | | ", obj=" + obj + |
| | | ", merged=" + merged + |
| | | ", rowTo=" + rowTo + |
| | | ", colTo=" + colTo + |
| | | ", copyStyle=" + copyStyle + |
| | | ", copyStyleRow=" + copyStyleRow + |
| | | ", copyStyleCol=" + copyStyleCol + |
| | | ", center=" + center + |
| | | ", formula=" + formula + |
| | | ", nameRefer=" + nameRefer + |
| | | ", validation=" + validation + |
| | | ", validationDataList=" + validationDataList + |
| | | ", validationErrorMsg='" + validationErrorMsg + '\'' + |
| | | ", fontColor='" + fontColor + '\'' + |
| | | ", dateFormat='" + dateFormat + '\'' + |
| | | ", readOnly=" + readOnly + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.poi.bo; |
| | | |
| | | import org.apache.commons.collections4.map.LinkedMap; |
| | | |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * åå
¥æ°æ®å°excelçé
ç½®ä¿¡æ¯ |
| | | * @author weidy |
| | | * @date 2020/5/29 |
| | | */ |
| | | public class WriteExcelOption { |
| | | |
| | | |
| | | /** |
| | | * è¦åå
¥çæ°æ® |
| | | */ |
| | | private LinkedMap<String/**å·¥ä½è¡¨çåç§°**/, LinkedList<WriteExcelData> /**è¦åå
¥çæ°æ®**/> writeDataMap ; |
| | | |
| | | /** |
| | | * è¦éèçå·¥ä½è¡¨åç§° |
| | | */ |
| | | private List<String> hideSheetList; |
| | | |
| | | /** |
| | | * æ¯å¦ä¸ºè¿½å çå
容ï¼å³å·¥ä½è¡¨å·²ç»åå¨ |
| | | */ |
| | | private boolean append = false; |
| | | |
| | | /** |
| | | * æ¯å¦07ççæ¬ |
| | | */ |
| | | private boolean revision07 = false; |
| | | |
| | | /** |
| | | * æ©å±å±æ§çæ å°é
ç½®ï¼po对象ä¸å±æ§æ¯mapç形弿¶ä½¿ç¨ï¼keyä¸excelColumn注解çvalue()ç¸åï¼å¼æ¯å¯¹åºçæ é¢ |
| | | */ |
| | | private LinkedMap<String,List<ExcelColumnMap>> extendAttrMap ; |
| | | |
| | | /** |
| | | * é»è®¤æé æ¹æ³ |
| | | */ |
| | | public WriteExcelOption(){ |
| | | |
| | | } |
| | | |
| | | /** |
| | | * å
å«ä¸ä¸ªå·¥ä½è¡¨çå
容 |
| | | * @param excelDataList è¦åå
¥çå·¥ä½è¡¨å
容ï¼å·¥ä½è¡¨çåç§°é»è®¤ä¸ºSheet1 |
| | | */ |
| | | public WriteExcelOption(List<WriteExcelData> excelDataList){ |
| | | writeDataMap = new LinkedMap<>(); |
| | | LinkedList newList=new LinkedList(); |
| | | newList.addAll(excelDataList); |
| | | writeDataMap.put("Sheet1",newList); |
| | | } |
| | | |
| | | /** |
| | | * å
å«ä¸ä¸ªå·¥ä½è¡¨çå
容 |
| | | * @param excelDataList è¦åå
¥çå·¥ä½è¡¨å
容ï¼å·¥ä½è¡¨çåç§°é»è®¤ä¸ºSheet1 |
| | | */ |
| | | public WriteExcelOption(LinkedList<WriteExcelData> excelDataList){ |
| | | writeDataMap = new LinkedMap<>(); |
| | | writeDataMap.put("Sheet1",excelDataList); |
| | | } |
| | | |
| | | /** |
| | | * æ·»å å·¥ä½è¡¨çæ°æ®å¯¹è±¡ |
| | | * @param sheetName å·¥ä½è¡¨åç§° |
| | | * @param excelDataList å·¥ä½è¡¨çæ°æ®å表 |
| | | */ |
| | | public void addSheetDataList(String sheetName,LinkedList<WriteExcelData> excelDataList){ |
| | | if(writeDataMap == null){ |
| | | writeDataMap = new LinkedMap<>(); |
| | | } |
| | | writeDataMap.put(sheetName,excelDataList); |
| | | } |
| | | |
| | | /** |
| | | * æ·»å å·¥ä½è¡¨çæ°æ®å¯¹è±¡ |
| | | * @param sheetName å·¥ä½è¡¨åç§° |
| | | * @param excelDataList å·¥ä½è¡¨çæ°æ®å表 |
| | | */ |
| | | public void addSheetDataList(String sheetName,List<WriteExcelData> excelDataList){ |
| | | if(writeDataMap == null){ |
| | | writeDataMap = new LinkedMap<>(); |
| | | } |
| | | LinkedList newList=new LinkedList(); |
| | | newList.addAll(excelDataList); |
| | | writeDataMap.put(sheetName,newList); |
| | | } |
| | | |
| | | /** |
| | | * æ·»å éè¦å½±åçå·¥ä½è¡¨åç§° |
| | | * @param sheetName å·¥ä½è¡¨åç§° |
| | | */ |
| | | public void addHideSheet(String sheetName){ |
| | | if(hideSheetList == null){ |
| | | hideSheetList = new ArrayList<>(); |
| | | } |
| | | hideSheetList.add(sheetName); |
| | | } |
| | | |
| | | public Map<String, LinkedList<WriteExcelData>> getWriteDataMap() { |
| | | return writeDataMap; |
| | | } |
| | | |
| | | public void setWriteDataMap(LinkedMap<String, LinkedList<WriteExcelData>> writeDataMap) { |
| | | this.writeDataMap = writeDataMap; |
| | | } |
| | | |
| | | public List<String> getHideSheetList() { |
| | | return hideSheetList; |
| | | } |
| | | |
| | | public void setHideSheetList(List<String> hideSheetList) { |
| | | this.hideSheetList = hideSheetList; |
| | | } |
| | | |
| | | public boolean isAppend() { |
| | | return append; |
| | | } |
| | | |
| | | public void setAppend(boolean append) { |
| | | this.append = append; |
| | | } |
| | | |
| | | public boolean isRevision07() { |
| | | return revision07; |
| | | } |
| | | |
| | | public void setRevision07(boolean revision07) { |
| | | this.revision07 = revision07; |
| | | } |
| | | |
| | | public LinkedMap<String, List<ExcelColumnMap>> getExtendAttrMap() { |
| | | return extendAttrMap; |
| | | } |
| | | |
| | | public void setExtendAttrMap(LinkedMap<String, List<ExcelColumnMap>> extendAttrMap) { |
| | | this.extendAttrMap = extendAttrMap; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "WriteExcelOption{" + |
| | | "writeDataMap=" + writeDataMap + |
| | | ", hideSheetList=" + hideSheetList + |
| | | ", append=" + append + |
| | | ", revision07=" + revision07 + |
| | | ", extendAttrMap=" + extendAttrMap + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.poi.constant; |
| | | |
| | | /** |
| | | * excelç¸å
³æä½çå¤è¯è¨ç代ç |
| | | * @author weidy |
| | | * @date 2020/5/5 |
| | | */ |
| | | public class ExcelLangCodeConstant { |
| | | /** |
| | | * 读å导å
¥çæä»¶åºé |
| | | */ |
| | | public static final String READ_IMPORT_FILE_FAIL = "readImportFileFail"; |
| | | |
| | | /** |
| | | * 导å
¥çæä»¶å
容为空 |
| | | */ |
| | | public static final String IMPORT_CONTENT_NULL = "importContentNull"; |
| | | |
| | | /** |
| | | * æä»¶ä¸åå¨ |
| | | */ |
| | | public static final String FILE_NOT_FOUND = "fileNotFound"; |
| | | |
| | | /** |
| | | * æä»¶åå
¥é误 |
| | | */ |
| | | public static final String FILE_IO_EXCEPTION = "fileIoException"; |
| | | |
| | | /** |
| | | * æä»¶å建å¼å¸¸ |
| | | */ |
| | | public static final String FILE_CREATE_EXCEPTION = "fileCreateException"; |
| | | |
| | | /** |
| | | * è¾å
¥æµæ¯ç©º |
| | | */ |
| | | public static final String INPUT_STREAM_IS_NULL = "inputStreamIsNull"; |
| | | |
| | | /** |
| | | * è¾åºæµæ¯ç©º |
| | | */ |
| | | public static final String OUTPUT_STREAM_IS_NULL = "outputStreamIsNull"; |
| | | |
| | | /** |
| | | * å·¥ä½ç°¿åå§å失败 |
| | | */ |
| | | public static final String WORKBOOK_INIT_FAIL = "workBookInitFail"; |
| | | |
| | | /** |
| | | * åå
æ ¼çå¼ä¸è½ä¸ºç©º |
| | | */ |
| | | public static final String CELL_VALUE_CAN_NOT_NULL = "cellValueCanNotNull"; |
| | | |
| | | /** |
| | | * å ä¸ºè¦æ ¡éªæ£å表达å¼ï¼æä»¥åå
æ ¼çå¼ä¸è½ä¸ºç©º |
| | | */ |
| | | public static final String CELL_VALUE_CAN_NOT_NULL_FOR_REG = "cellValueCanNotNullForReg"; |
| | | |
| | | /** |
| | | * åå
æ ¼çå¼ä¸ç¬¦åæ£å表达å¼çè¦æ± |
| | | */ |
| | | public static final String CELL_VALUE_NOT_EQUAL_REG = "cellValueNotEqualReg"; |
| | | |
| | | /** |
| | | * åå
æ ¼ä¸æ¯ææçæ¶é´æ ¼å¼ |
| | | */ |
| | | public static final String CELL_NOT_DATE_FORMATE = "cellNotDateFormate"; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.poi.util; |
| | | |
| | | import com.vci.starter.poi.annotation.ExcelColumn; |
| | | import com.vci.starter.poi.annotation.ExcelTitle; |
| | | import com.vci.starter.poi.bo.*; |
| | | import com.vci.starter.web.annotation.VciFieldType; |
| | | import com.vci.starter.web.enumpck.BooleanEnum; |
| | | import com.vci.starter.web.enumpck.VciFieldTypeEnum; |
| | | import com.vci.starter.web.exception.VciBaseException; |
| | | import com.vci.starter.web.util.LangBaseUtil; |
| | | import com.vci.starter.web.util.LocalFileUtil; |
| | | import com.vci.starter.web.util.VciBaseUtil; |
| | | import com.vci.starter.web.util.VciDateUtil; |
| | | import org.apache.commons.io.IOUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.poi.hssf.usermodel.*; |
| | | |
| | | import org.apache.poi.hssf.util.HSSFColor; |
| | | import org.apache.poi.ss.usermodel.*; |
| | | import org.apache.poi.ss.util.CellRangeAddress; |
| | | import org.apache.poi.ss.util.CellRangeAddressList; |
| | | import org.apache.poi.xssf.usermodel.*; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.io.*; |
| | | import java.lang.reflect.Field; |
| | | import java.math.BigDecimal; |
| | | import java.nio.channels.FileChannel; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static com.vci.starter.poi.constant.ExcelLangCodeConstant.*; |
| | | |
| | | /** |
| | | * excelæä½ç±» |
| | | * 2020/5/8ï¼å¼å
¥4.1çæ¬çpoiï¼å
¨é¨çæ¥å£åçåå |
| | | * @author weidy |
| | | * @date 2020/2/19 |
| | | */ |
| | | public class ExcelUtil { |
| | | |
| | | /** |
| | | * æ¥å¿ |
| | | */ |
| | | private static Logger logger = LoggerFactory.getLogger(ExcelUtil.class); |
| | | |
| | | /** |
| | | * å¨è¯»åæä»¶çå
å®¹çæ¶åï¼poiä¼èªå¨å¤ææä»¶æ¯å¦ä¸ºexcelï¼æä»¥ä¸éè¦åç¬çæ¹æ³ï¼å¦å¤07è¿æ¯03ä¹ä¸éè¦æ¨æ |
| | | * æä¾åå
¥å°excelçæ¹æ³ï¼å
æ¬ææåå
æ ¼å对象çä¸¤ç§æ¹å¼ |
| | | * æä¾è¯»åexcelçæ¹æ³ï¼å
æ¬è¿å对象åmapæ°æ®çä¸¤ç§æ¹å¼ |
| | | */ |
| | | |
| | | |
| | | /** |
| | | * æ·è´æä»¶ |
| | | * |
| | | * @param source æºæä»¶ |
| | | * @param target ç®æ æä»¶ |
| | | * @throws VciBaseException æ·è´æä»¶åºç°é误æè
æä»¶ä¸åå¨çæ¶å伿¥é |
| | | */ |
| | | public static void copyFile(File source, File target) throws VciBaseException { |
| | | VciBaseUtil.alertNotNull(source, "æ¥æºæä»¶", target, "ç®æ æä»¶"); |
| | | if (!source.exists()) { |
| | | throw new VciBaseException(FILE_NOT_FOUND, new String[]{source.getName()}); |
| | | } |
| | | if (!target.exists()) { |
| | | File folder = target.getParentFile(); |
| | | folder.mkdirs(); |
| | | try { |
| | | target.createNewFile(); |
| | | } catch (IOException e) { |
| | | throw new VciBaseException(FILE_IO_EXCEPTION, new String[]{target.getName()}); |
| | | } |
| | | } |
| | | FileInputStream is = null; |
| | | FileOutputStream os = null; |
| | | try { |
| | | is = new FileInputStream(source); |
| | | } catch (FileNotFoundException e) { |
| | | throw new VciBaseException(FILE_NOT_FOUND, new String[]{source.getName()}); |
| | | } |
| | | try { |
| | | os = new FileOutputStream(target); |
| | | } catch (FileNotFoundException e) { |
| | | IOUtils.closeQuietly(is); |
| | | throw new VciBaseException(FILE_NOT_FOUND, new String[]{target.getName()}); |
| | | } |
| | | try { |
| | | copyFile(is, os); |
| | | } catch (VciBaseException e) { |
| | | throw e; |
| | | } catch (Throwable e) { |
| | | throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{source.getName(), target.getName()}, e); |
| | | } finally { |
| | | //鲿¢å 为å¼å¸¸æ²¡æå
³é |
| | | IOUtils.closeQuietly(is); |
| | | IOUtils.closeQuietly(os); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ·è´æä»¶ |
| | | * |
| | | * @param in æä»¶è¾å
¥æµ |
| | | * @param os æä»¶è¾åºæµ |
| | | * @throws VciBaseException æä»¶ä¸å卿è
åå
¥éè¯¯çæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static void copyFile(FileInputStream in, FileOutputStream os) throws VciBaseException { |
| | | try { |
| | | FileChannel sourceChannel = in.getChannel(); |
| | | FileChannel targetChannel = os.getChannel(); |
| | | int i = 0; |
| | | int length = 2097152; |
| | | while (true) { |
| | | if (sourceChannel.position() == sourceChannel.size()) { |
| | | sourceChannel.close(); |
| | | targetChannel.close(); |
| | | break; |
| | | } |
| | | if ((sourceChannel.size() - sourceChannel.position()) < 20971520) { |
| | | length = (int) (sourceChannel.size() - sourceChannel.position()); |
| | | } else { |
| | | length = 20971520; |
| | | } |
| | | sourceChannel.transferTo(sourceChannel.position(), length, targetChannel); |
| | | sourceChannel.position(sourceChannel.position() + length); |
| | | i++; |
| | | } |
| | | } catch (IOException e) { |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("æ·è´æºæä»¶å°ç®æ æä»¶åºç°äºé误", e); |
| | | } |
| | | throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{}, e); |
| | | } catch (Throwable e) { |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("æ·è´æºæä»¶å°ç®æ æä»¶åºç°äºé误", e); |
| | | } |
| | | throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{}, e); |
| | | } finally { |
| | | IOUtils.closeQuietly(in); |
| | | IOUtils.closeQuietly(os); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å°jarä¸çæä»¶æ·è´å°ç®æ æä»¶ |
| | | * |
| | | * @param filePathInJar å¨jarä¸çç¸å¯¹è·¯å¾ |
| | | * @param targetFile ç®æ æä»¶ |
| | | * @throws VciBaseException æ·è´åºéçæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static void copyFileFromJar(String filePathInJar, File targetFile) throws VciBaseException { |
| | | VciBaseUtil.alertNotNull(filePathInJar, "æ¥æºæä»¶", targetFile, "ç®æ æä»¶"); |
| | | if (!targetFile.exists()) { |
| | | File folder = targetFile.getParentFile(); |
| | | folder.mkdirs(); |
| | | try { |
| | | targetFile.createNewFile(); |
| | | } catch (IOException e) { |
| | | throw new VciBaseException(FILE_IO_EXCEPTION, new String[]{targetFile.getName()}); |
| | | } |
| | | } |
| | | FileOutputStream os = null; |
| | | InputStream ins = null; |
| | | try { |
| | | os = new FileOutputStream(targetFile); |
| | | } catch (FileNotFoundException e) { |
| | | throw new VciBaseException(FILE_NOT_FOUND, new String[]{targetFile.getName()}); |
| | | } |
| | | try { |
| | | ins = ExcelUtil.class.getResourceAsStream(filePathInJar); |
| | | IOUtils.copy(ins, os); |
| | | } catch (IOException e) { |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("æ·è´æºæä»¶å°ç®æ æä»¶åºç°äºé误", e); |
| | | } |
| | | throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{}, e); |
| | | } catch (Throwable e) { |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("æ·è´æºæä»¶å°ç®æ æä»¶åºç°äºé误", e); |
| | | } |
| | | throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{}, e); |
| | | } finally { |
| | | IOUtils.closeQuietly(ins); |
| | | IOUtils.closeQuietly(os); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * åå
¥æ°æ®å°excelæä»¶ä¸ |
| | | * |
| | | * @param fileName æä»¶çåç§°ï¼ä¸è½æ¯jarä¸çæä»¶ï¼è¦å
æ¬ç»å¯¹è·¯å¾ |
| | | * @param writeExcelOption è¦åå
¥çæ°æ®åé
ç½® |
| | | * @throws VciBaseException æä»¶æªæ¾å°,åå
¥æ°æ®åºç°äºé误 |
| | | */ |
| | | public static void writeDataToFile(String fileName, WriteExcelOption writeExcelOption) throws VciBaseException { |
| | | writeDataToFile(new File(fileName), writeExcelOption); |
| | | } |
| | | /** |
| | | * åå
¥æ°æ®å°excelæä»¶ä¸ |
| | | * |
| | | * @param file æä»¶å¯¹è±¡ |
| | | * @param writeExcelOption è¦åå
¥çæ°æ®åé
ç½® |
| | | * @param writeExcelOption è¦åå
¥çæ°æ®åé
ç½® |
| | | * @throws VciBaseException æä»¶æªæ¾å°,åå
¥æ°æ®åºç°äºé误 |
| | | */ |
| | | public static void writeDataToFile(File file, WriteExcelOption writeExcelOption) throws VciBaseException { |
| | | if (file == null) { |
| | | throw new VciBaseException("æä»¶ä¸ºç©ºï¼æ æ³æ¾å°æä»¶"); |
| | | } |
| | | if (!file.exists()) { |
| | | File folder = file.getParentFile(); |
| | | if (!folder.exists()) { |
| | | folder.mkdirs(); |
| | | } |
| | | try { |
| | | file.createNewFile(); |
| | | } catch (IOException e) { |
| | | throw new VciBaseException(FILE_NOT_FOUND, new String[]{file.getName()}); |
| | | } |
| | | } |
| | | Workbook workbook = null; |
| | | if(writeExcelOption!=null && writeExcelOption.isAppend()){ |
| | | try { |
| | | if (file.length() == 0) { |
| | | workbook = createWorkbook(false); |
| | | }else { |
| | | workbook = getWorkbookByInputStream(new FileInputStream(file)); |
| | | } |
| | | } catch (FileNotFoundException e) { |
| | | throw new VciBaseException("fileNotExist",new String[]{file.getName()},e); |
| | | } |
| | | } |
| | | OutputStream os = null; |
| | | try { |
| | | os = new FileOutputStream(file); |
| | | } catch (FileNotFoundException e) { |
| | | throw new VciBaseException(FILE_NOT_FOUND, new String[]{e.getMessage()}, e); |
| | | } |
| | | try { |
| | | writeDataToFile(os, writeExcelOption,workbook); |
| | | } catch (VciBaseException e) { |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("åå
¥æ°æ®å°excelåºé", e); |
| | | } |
| | | throw e; |
| | | } catch (Throwable e) { |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("åå
¥æ°æ®å°excelåºé", e); |
| | | } |
| | | throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{}, e); |
| | | } finally { |
| | | //鲿¢ä¹åå 为å¼å¸¸æ²¡æå
³é |
| | | IOUtils.closeQuietly(os); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * åå
¥æ°æ®å°excelæä»¶ä¸ |
| | | * |
| | | * @param os æä»¶è¾åºæµï¼å¿
é¡»æ¯excelæä»¶çè¾åºæµ |
| | | * @param writeExcelOption è¦åå
¥çæ°æ®åé
ç½® |
| | | * @throws VciBaseException æä»¶æªæ¾å°,åå
¥æ°æ®åºç°äºé误 |
| | | */ |
| | | public static void writeDataToFile(OutputStream os, WriteExcelOption writeExcelOption) throws VciBaseException { |
| | | writeDataToFile(os,writeExcelOption,null); |
| | | } |
| | | /** |
| | | * åå
¥æ°æ®å°excelæä»¶ä¸ |
| | | * |
| | | * @param os æä»¶è¾åºæµï¼å¿
é¡»æ¯excelæä»¶çè¾åºæµ |
| | | * @param writeExcelOption è¦åå
¥çæ°æ®åé
ç½® |
| | | * @param workbook å·¥ä½ç°¿å¯¹è±¡ï¼æ¯è¿½å æ°æ®çæ¶åå
è·åworkbook |
| | | * @throws VciBaseException æä»¶æªæ¾å°,åå
¥æ°æ®åºç°äºé误 |
| | | */ |
| | | public static void writeDataToFile(OutputStream os, WriteExcelOption writeExcelOption,Workbook workbook) throws VciBaseException { |
| | | if (os == null) { |
| | | throw new VciBaseException(OUTPUT_STREAM_IS_NULL); |
| | | } |
| | | if (writeExcelOption == null ) { |
| | | IOUtils.closeQuietly(os); |
| | | } else { |
| | | //ææ°æ®ææ§è¡åå
¥ |
| | | Workbook wb = null; |
| | | if(writeExcelOption.isAppend() && workbook !=null){ |
| | | wb = workbook; |
| | | }else{ |
| | | wb = createWorkbook(writeExcelOption.isRevision07()); |
| | | } |
| | | Workbook finalWb = wb; |
| | | writeExcelOption.getWriteDataMap().forEach((sheetName, excelDataList) ->{ |
| | | Sheet sheet = getSheetByWorkbook(finalWb, sheetName); |
| | | try { |
| | | writeDataToCell(sheet, excelDataList); |
| | | } catch (VciBaseException e) { |
| | | IOUtils.closeQuietly(os); |
| | | throw e; |
| | | } catch (Throwable e) { |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("åå
¥æ°æ®å°å·¥ä½ç°¿åºé", e); |
| | | } |
| | | IOUtils.closeQuietly(os); |
| | | throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{}, e); |
| | | } |
| | | }); |
| | | //æ¯å¦æéèå·¥ä½è¡¨ |
| | | if(!CollectionUtils.isEmpty(writeExcelOption.getHideSheetList())){ |
| | | writeExcelOption.getHideSheetList().stream().forEach(sheetName ->{ |
| | | Sheet sheet = getSheetByWorkbook(finalWb, sheetName); |
| | | finalWb.setSheetHidden(finalWb.getSheetIndex(sheet),true); |
| | | }); |
| | | } |
| | | |
| | | //å°è¿é说æå·²ç»åå°å·¥ä½ç°¿ |
| | | try { |
| | | wb.write(os); |
| | | } catch (IOException e) { |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("æå·¥ä½ç°¿ä¸çæ°æ®åå
¥å°æä»¶åºé", e); |
| | | } |
| | | throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{}, e); |
| | | } finally { |
| | | IOUtils.closeQuietly(os); |
| | | try { |
| | | wb.close(); |
| | | } catch (Throwable e) { |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("å
³éå·¥ä½ç°¿", e); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·åexcelæä¸ªå±æ§æå¨çåç´¢å¼ |
| | | * @param excelFileName excelæä»¶çåç§° |
| | | * @param poClass poi导å
¥å¯¼åºå¯¹è±¡æå±çç±» |
| | | * @param poFieldName è¦æ¥è¯¢ç屿§çåç§° |
| | | * @param sheetName å·¥ä½è¡¨çåç§° |
| | | * @return åçç´¢å¼ï¼ä¸åå¨çæ¶åè¿å-1 |
| | | */ |
| | | public static int getCellIndexForPoField(String excelFileName,String sheetName,Class<?> poClass,String poFieldName) throws VciBaseException{ |
| | | return getCellIndexForPoField(new File(excelFileName),sheetName,poClass,poFieldName); |
| | | } |
| | | |
| | | /** |
| | | * è·åexcelæä¸ªå±æ§æå¨çåç´¢å¼ |
| | | * @param excelFile excelæä»¶çåç§° |
| | | * @param poClass poi导å
¥å¯¼åºå¯¹è±¡æå±çç±» |
| | | * @param poFieldName è¦æ¥è¯¢ç屿§çåç§° |
| | | * @param sheetName å·¥ä½è¡¨çåç§° |
| | | * @return åçç´¢å¼ï¼ä¸åå¨çæ¶åè¿å-1 |
| | | */ |
| | | public static int getCellIndexForPoField(File excelFile,String sheetName,Class<?> poClass,String poFieldName) throws VciBaseException{ |
| | | VciBaseUtil.alertNotNull(excelFile,"excelçæä»¶",poClass,"poi导å
¥å¯¼åºå¯¹è±¡æå±çç±»",poFieldName,"屿§çåç§°"); |
| | | if(!excelFile.exists()){ |
| | | throw new VciBaseException("fileNotExist",new String[]{excelFile.getAbsolutePath()}); |
| | | } |
| | | if(StringUtils.isBlank(sheetName)){ |
| | | sheetName = "Sheet1"; |
| | | } |
| | | Field field = VciBaseUtil.getFieldForObject(poFieldName, poClass); |
| | | if(field == null){ |
| | | throw new VciBaseException("对象ä¸ä¸å卿¤å±æ§ï¼{0}ï¼{1}",new String[]{poFieldName,poClass.getName()}); |
| | | } |
| | | if(field.isAnnotationPresent(ExcelColumn.class)){ |
| | | ExcelColumn ec = getExcelColumnAnnotation(field); |
| | | String columnName = ec.value(); |
| | | Workbook workbook = null; |
| | | try { |
| | | workbook = getWorkbookByInputStream(new FileInputStream(excelFile)); |
| | | } catch (FileNotFoundException e) { |
| | | throw new VciBaseException("fileNotExist",new String[]{excelFile.getAbsolutePath()}); |
| | | } |
| | | if(workbook!=null){ |
| | | Sheet sheet = workbook.getSheet(sheetName); |
| | | if(sheet!=null){ |
| | | Row row = sheet.getRow(getRowIndexForTitle(poClass)); |
| | | if(row!=null){ |
| | | short lastCellNum = row.getLastCellNum(); |
| | | for(short i = 0;i<lastCellNum; i ++){ |
| | | Cell cell = row.getCell(i); |
| | | if(columnName.equals(cell.getStringCellValue())){ |
| | | try { |
| | | workbook.close(); |
| | | } catch (IOException e) { |
| | | logger.error("å
³éå·¥ä½è¡¨åºç°é误",e); |
| | | } |
| | | return i; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return -1; |
| | | } |
| | | |
| | | /** |
| | | * 读åpo对象éçåä¸ªå±æ§çæå¨åçä½ç½® |
| | | * @param excelFile excelæä»¶ |
| | | * @param sheetName åçåç§° |
| | | * @param poClass 导å
¥å¯¼åºç对象 |
| | | * @return keyæ¯å±æ§åç§°ï¼valueæ¯åæå¨çä½ç½® |
| | | * @throws VciBaseException æä»¶ä¸åå¨ï¼è¯»ååºéçæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static Map<String,Integer> listCellIndexForPO(File excelFile,String sheetName,Class<?> poClass) throws VciBaseException{ |
| | | VciBaseUtil.alertNotNull(excelFile,"excelçæä»¶",poClass,"poi导å
¥å¯¼åºå¯¹è±¡æå±çç±»"); |
| | | if(!excelFile.exists()){ |
| | | throw new VciBaseException("fileNotExist",new String[]{excelFile.getAbsolutePath()}); |
| | | } |
| | | if(StringUtils.isBlank(sheetName)){ |
| | | sheetName = "Sheet1"; |
| | | } |
| | | List<Field> fields = VciBaseUtil.getAllFieldForObj(poClass); |
| | | //åç´¢å¼æ å°ï¼keyæ¯å±æ§çåç§°ï¼valueæ¯åç´¢å¼ |
| | | Map<String,Integer> cellIndexMap = new HashMap<>(); |
| | | if(!CollectionUtils.isEmpty(fields)){ |
| | | Workbook workbook = null; |
| | | try { |
| | | workbook = getWorkbookByInputStream(new FileInputStream(excelFile)); |
| | | } catch (FileNotFoundException e) { |
| | | throw new VciBaseException("fileNotExist",new String[]{excelFile.getAbsolutePath()}); |
| | | } |
| | | if(workbook!=null) { |
| | | Sheet sheet = workbook.getSheet(sheetName); |
| | | if (sheet != null) { |
| | | Row row = sheet.getRow(getRowIndexForTitle(poClass)); |
| | | if (row != null) { |
| | | Map<String,String> columnNamesMap = new HashMap<>(); |
| | | fields.stream().forEach(field -> { |
| | | if(field.isAnnotationPresent(ExcelColumn.class)) { |
| | | ExcelColumn ec = getExcelColumnAnnotation(field); |
| | | String columnName = ec.value(); |
| | | columnNamesMap.put(columnName,field.getName()); |
| | | } |
| | | }); |
| | | short lastCellNum = row.getLastCellNum(); |
| | | for(short i = 0;i<lastCellNum; i ++){ |
| | | Cell cell = row.getCell(i); |
| | | String cellName = cell.getStringCellValue(); |
| | | if(columnNamesMap.containsKey(cellName)){ |
| | | cellIndexMap.put(columnNamesMap.get(cellName),Integer.valueOf(i)); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | try { |
| | | workbook.close(); |
| | | } catch (IOException e) { |
| | | logger.error("å
³éå·¥ä½è¡¨åºç°é误",e); |
| | | } |
| | | } |
| | | } |
| | | return cellIndexMap; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ 颿å¨çè¡ |
| | | * @param poClass poi导åºå¯¼å
¥å¯¹è±¡ |
| | | * @return è¡ç´¢å¼ |
| | | */ |
| | | public static int getRowIndexForTitle(Class<?> poClass){ |
| | | if(poClass.isAnnotationPresent(ExcelTitle.class)){ |
| | | ExcelTitle ec = poClass.getAnnotation(ExcelTitle.class); |
| | | if (ec == null) { |
| | | ec = poClass.getDeclaredAnnotation(ExcelTitle.class); |
| | | } |
| | | if(ec !=null){ |
| | | return ec.rowIndexForTitle(); |
| | | } |
| | | } |
| | | return 0; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®ååºå·è·ååçåç§° |
| | | * @param colIndex ååºå· |
| | | * @return åçåç§° |
| | | */ |
| | | public static String getCellNameByIndex(int colIndex){ |
| | | //A~Z |
| | | //AA~AZ |
| | | //BA~BZ |
| | | if(colIndex<26){ |
| | | return String.valueOf((char)('A' + colIndex)); |
| | | }else{ |
| | | // |
| | | //大äºçäº26ï¼ååæ°å使° |
| | | int balance = colIndex%26; |
| | | int multiple = (colIndex-balance)/26; |
| | | String prefix = String.valueOf((char)('A' + (multiple-1))); |
| | | String suffix = String.valueOf((char)('A' + balance)); |
| | | return prefix+suffix; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å建工ä½ç°¿ï¼æ³¨æé½æ¯03çæ¬çï¼ä¸ºäºå
¼å®¹ |
| | | * |
| | | * @return å·¥ä½ç°¿å¯¹è±¡ |
| | | */ |
| | | public static Workbook createWorkbook(boolean is07) { |
| | | Workbook wb = null; |
| | | if(is07){ |
| | | wb = new XSSFWorkbook(); |
| | | }else{ |
| | | wb = new HSSFWorkbook(); |
| | | } |
| | | //导åºé½æ¯äº2003çæ¬çï¼ç¨äºå
¼å®¹ |
| | | return wb; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * è·åå·¥ä½ç°¿å¯¹è±¡ |
| | | * |
| | | * @param ins æä»¶è¾å
¥æµ |
| | | * @return å·¥ä½ç°¿ï¼poi3.15以ä¸çæ¬ä¸åºå03è¿07 |
| | | * @throws VciBaseException 妿䏿¯excelæä»¶ï¼ä¼ç´æ¥æ¥é |
| | | */ |
| | | public static Workbook getWorkbookByInputStream(InputStream ins) throws VciBaseException { |
| | | Workbook wb = null; |
| | | try { |
| | | wb = WorkbookFactory.create(ins); |
| | | } catch (IOException e) { |
| | | IOUtils.closeQuietly(ins); |
| | | throw new VciBaseException(WORKBOOK_INIT_FAIL, new String[]{LangBaseUtil.getErrorMsg(e)}); |
| | | } |
| | | return wb; |
| | | } |
| | | |
| | | /** |
| | | * è·åå·¥ä½è¡¨ï¼å¦æå·¥ä½è¡¨åç§°ä¸åå¨ï¼åä¼å建ä¸ä¸ª |
| | | * |
| | | * @param wb å·¥ä½ç°¿ |
| | | * @param sheetName å·¥ä½è¡¨çåç§° |
| | | * @return å·¥ä½è¡¨å¯¹è±¡ |
| | | */ |
| | | private static Sheet getSheetByWorkbook(Workbook wb, String sheetName) { |
| | | if (StringUtils.isBlank(sheetName)) { |
| | | sheetName = "Sheet1"; |
| | | } |
| | | Sheet sheet = wb.getSheet(sheetName); |
| | | if (sheet == null) { |
| | | sheet = wb.createSheet(sheetName); |
| | | } |
| | | return sheet; |
| | | } |
| | | |
| | | /** |
| | | * è·åè¡ç对象 |
| | | * |
| | | * @param sheet å·¥ä½è¡¨å¯¹è±¡ |
| | | * @param rowIndex è¡å·ï¼ä»0å¼å§ |
| | | * @return è¡ç对象ï¼ä¸åå¨ä¼å建ä¸è¡ |
| | | */ |
| | | private static Row getRowBySheet(Sheet sheet, int rowIndex) { |
| | | Row row = sheet.getRow(rowIndex); |
| | | if (row == null) { |
| | | //说æè¿ä¸ªæ¶åè¿æ²¡æå建è¿è¡--峿²¡æå¼ |
| | | row = sheet.createRow(rowIndex); |
| | | } |
| | | return row; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®è¡è·ååå
æ ¼å¯¹è±¡ |
| | | * |
| | | * @param row è¡å¯¹è±¡ |
| | | * @param cellIndex ååºå·ï¼ä»0å¼å§ |
| | | * @return åå
æ ¼ç对象ï¼ä¸åå¨ä¼å建 |
| | | */ |
| | | private static Cell getCellByRow(Row row, int cellIndex) { |
| | | Cell cell = row.getCell(cellIndex); |
| | | if (cell == null) { |
| | | //说æè¿æ²¡æå建è¿ä¸ªåå
æ ¼ |
| | | cell = row.createCell(cellIndex); |
| | | } |
| | | return cell; |
| | | } |
| | | |
| | | /** |
| | | * åå
¥æ°æ® |
| | | * |
| | | * @param sheet è¡¨æ ¼å¯¹è±¡ |
| | | * @param excelDataList è¦åå
¥çæ°æ®å¯¹è±¡ |
| | | */ |
| | | private static void writeDataToCell(Sheet sheet, List<WriteExcelData> excelDataList) throws VciBaseException { |
| | | if (sheet != null && !CollectionUtils.isEmpty(excelDataList)) { |
| | | List<WriteExcelData> mergedDataList = new ArrayList<>(); |
| | | excelDataList.stream().forEach(ed -> { |
| | | Row row = getRowBySheet(sheet, ed.getRow()); |
| | | Cell cell = getCellByRow(row, ed.getCol()); |
| | | //åå¹¶åå
æ ¼ |
| | | if (ed.isMerged() && (ed.getRowTo() > ed.getRow() || ed.getColTo() > ed.getCol())) { |
| | | mergedDataList.add(ed); |
| | | } |
| | | copyStyle(sheet, cell, ed); |
| | | if(ed.isReadOnly() && ed.getObj() !=null && !(ed.getObj() instanceof RichTextString) && CollectionUtils.isEmpty(ed.getValidationDataList())){ |
| | | //ed.setValidation(true); |
| | | List<String> list = new ArrayList<>(); |
| | | list.add(ed.getObj().toString()); |
| | | ed.setValidationDataList(list ); |
| | | setValidation(sheet,ed); |
| | | } |
| | | centerCell(cell, ed); |
| | | Object value = ed.getObj(); |
| | | if(StringUtils.isNotBlank(ed.getFontColor())){ |
| | | String rtsValue = value ==null?"":value.toString(); |
| | | RichTextString ts = (cell instanceof HSSFCell)?new HSSFRichTextString(rtsValue):new XSSFRichTextString(rtsValue); |
| | | Font font = sheet.getWorkbook().createFont(); |
| | | font.setColor(VciBaseUtil.getShort(ed.getFontColor())); |
| | | ts.applyFont(font); |
| | | value = ts; |
| | | } |
| | | if(ed.isFormula()){ |
| | | //设置å
¬å¼ï¼å¦æå³æå¼ï¼è¿è¦è®¾ç½®å
¬å¼å设置为两个对象 |
| | | setFormula(cell,ed); |
| | | }else if(ed.isNameRefer()){ |
| | | //设置å称管çå¨ï¼ä¸è¬åæææ§é
åä½¿ç¨ |
| | | setNameRefer(sheet,ed); |
| | | }else if(ed.isValidation()){ |
| | | //è¯´ææ¯ç´æ¥åæææ§çå¼ |
| | | setValidation(sheet,ed); |
| | | }else{ |
| | | //åå¼ |
| | | setCellValue(cell, value); |
| | | } |
| | | if(ed.getWidth()!=null && ed.getWidth()>0){ |
| | | sheet.setColumnWidth(cell.getColumnIndex(),(int)(ed.getWidth() + 0.72)*256); |
| | | } |
| | | }); |
| | | mergedRegion(sheet, mergedDataList); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 为åå
æ ¼è®¾ç½®å
¬å¼ |
| | | * @param cell åå
æ ¼ç对象 |
| | | * @param ed æ°æ®å¯¹è±¡ |
| | | */ |
| | | private static void setFormula(Cell cell ,WriteExcelData ed){ |
| | | if (ed.getObj() != null) { |
| | | cell.setCellFormula(ed.getObj().toString()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 设置å称管çå¨ |
| | | * @param sheet å·¥ä½è¡¨ |
| | | * @param ed æ°æ®å¯¹è±¡ |
| | | */ |
| | | private static void setNameRefer(Sheet sheet,WriteExcelData ed){ |
| | | if(ed.getObj() !=null){ |
| | | Name name = sheet.getWorkbook().createName(); |
| | | name.setNameName(ed.getObj().toString()); |
| | | name.setRefersToFormula(sheet.getSheetName() + "!"+getRange(ed)); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è®¾ç½®æ°æ®æææ§ |
| | | * @param sheet å·¥ä½è¡¨ |
| | | * @param ed æ°æ®å¯¹è±¡ |
| | | */ |
| | | private static void setValidation(Sheet sheet,WriteExcelData ed){ |
| | | if(ed.getRowTo()<ed.getRow()){ |
| | | ed.setRowTo(ed.getRow()); |
| | | } |
| | | if(ed.getColTo()<ed.getCol()){ |
| | | ed.setColTo(ed.getCol()); |
| | | } |
| | | CellRangeAddressList regions=new CellRangeAddressList(ed.getRow(),ed.getRowTo(),ed.getCol(),ed.getColTo()); |
| | | DataValidation validation = null; |
| | | if (sheet instanceof XSSFSheet) { |
| | | XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet)sheet); |
| | | XSSFDataValidationConstraint dvConstraint = null; |
| | | if(!CollectionUtils.isEmpty(ed.getValidationDataList())){ |
| | | //è¯´ææ¯ç´æ¥åå
容ç |
| | | dvConstraint = (XSSFDataValidationConstraint)dvHelper.createExplicitListConstraint(ed.getValidationDataList().toArray(new String[0])); |
| | | }else{ |
| | | VciBaseUtil.alertNotNull(ed.getObj(),"åå
¥æææ§çæ¶åï¼æ²¡æè®¾ç½®æææ§çå
¬å¼è¡¨è¾¾å¼"); |
| | | dvConstraint = (XSSFDataValidationConstraint) dvHelper.createFormulaListConstraint(ed.getObj().toString()); |
| | | } |
| | | validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, regions); |
| | | }else{ |
| | | HSSFDataValidationHelper dvHelper = new HSSFDataValidationHelper((HSSFSheet)sheet); |
| | | DataValidationConstraint dvConstraint = null; |
| | | if(!CollectionUtils.isEmpty(ed.getValidationDataList())){ |
| | | //è¯´ææ¯ç´æ¥åå
容ç |
| | | dvConstraint = dvHelper.createExplicitListConstraint(ed.getValidationDataList().toArray(new String[0])); |
| | | }else{ |
| | | VciBaseUtil.alertNotNull(ed.getObj(),"åå
¥æææ§çæ¶åï¼æ²¡æè®¾ç½®æææ§çå
¬å¼è¡¨è¾¾å¼"); |
| | | dvConstraint = dvHelper.createFormulaListConstraint(ed.getObj().toString()); |
| | | } |
| | | validation = (HSSFDataValidation)(new HSSFDataValidation(regions,dvConstraint)); |
| | | } |
| | | if(validation instanceof XSSFDataValidation) { |
| | | validation.setSuppressDropDownArrow(true); |
| | | validation.setShowErrorBox(true); |
| | | }else { |
| | | validation.setSuppressDropDownArrow(false); |
| | | } |
| | | if(StringUtils.isNotBlank(ed.getValidationErrorMsg())){ |
| | | validation.createErrorBox("error",ed.getValidationErrorMsg()); |
| | | } |
| | | sheet.addValidationData(validation); |
| | | } |
| | | |
| | | /** |
| | | * è·åèå´çè¡¨è¾¾å¼ |
| | | * @param excelData æ°æ®å¯¹è±¡ |
| | | * @return èå´çè¡¨è¾¾å¼ |
| | | */ |
| | | private static String getRange(WriteExcelData excelData){ |
| | | //忝ä»Aå¼å§ç |
| | | char start = (char)('A' + excelData.getCol()); |
| | | int rowId = excelData.getRow() + 1; |
| | | int endRowId = excelData.getRowTo() +1; |
| | | if (excelData.getColTo() <= 25) { |
| | | char end = (char)('A' +excelData.getColTo()); |
| | | return "$" + start + "$" + rowId + ":$" + end + "$" + endRowId; |
| | | } else { |
| | | char endPrefix = 'A'; |
| | | char endSuffix = 'A'; |
| | | if ((excelData.getColTo() - 25) / 26 == 0 || excelData.getColTo() == 51) {// 26-51ä¹é´ï¼å
æ¬è¾¹çï¼ä»
ä¸¤æ¬¡åæ¯è¡¨è®¡ç®ï¼ |
| | | if ((excelData.getColTo() - 25) % 26 == 0) {// è¾¹çå¼ |
| | | endSuffix = (char)('A' + 25); |
| | | } else { |
| | | endSuffix = (char)('A' + (excelData.getColTo() - 25) % 26 - 1); |
| | | } |
| | | } else {// 51ä»¥ä¸ |
| | | if ((excelData.getColTo() - 25) % 26 == 0) { |
| | | endSuffix = (char)('A' + 25); |
| | | endPrefix = (char)(endPrefix + (excelData.getColTo() - 25) / 26 - 1); |
| | | } else { |
| | | endSuffix = (char)('A' + (excelData.getColTo() - 25) % 26 - 1); |
| | | endPrefix = (char)(endPrefix + (excelData.getColTo() - 25) / 26); |
| | | } |
| | | } |
| | | return "$" + start + "$" + rowId + ":$" + endPrefix + endSuffix + "$" + endRowId; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å¾åå
æ ¼éåå
¥å¼ |
| | | * |
| | | * @param cell åå
æ ¼å¯¹è±¡ |
| | | * @param value è¦åå
¥çå¼ |
| | | */ |
| | | private static void setCellValue(Cell cell, Object value) { |
| | | if (value != null) { |
| | | if (value instanceof Date) { |
| | | cell.setCellValue((Date) value); |
| | | } else if (value instanceof String) { |
| | | cell.setCellValue(value.toString()); |
| | | } else if (value instanceof Boolean) { |
| | | cell.setCellValue((Boolean)value); |
| | | } else if (value instanceof Integer) { |
| | | cell.setCellValue((Integer) value); |
| | | } else if (value instanceof Long) { |
| | | cell.setCellValue((Long) value); |
| | | } else if (value instanceof BigDecimal) { |
| | | cell.setCellValue(((BigDecimal) value).doubleValue()); |
| | | } else if (value instanceof Double) { |
| | | cell.setCellValue((Double) value); |
| | | } else if (value instanceof RichTextString) { |
| | | cell.setCellValue((RichTextString) value); |
| | | } else { |
| | | cell.setCellValue(value.toString()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ·è´æ ·å¼ |
| | | * |
| | | * @param sheet å·¥ä½è¡¨ |
| | | * @param cell åå
æ ¼ |
| | | * @param excelData è¦æ·è´çä¿¡æ¯ |
| | | */ |
| | | private static void copyStyle(Sheet sheet, Cell cell, WriteExcelData excelData) { |
| | | if (excelData.isCopyStyle()) { |
| | | //æ·è´æ ·å¼ |
| | | Row copyStyleRow = sheet.getRow(excelData.getCopyStyleRow()); |
| | | if (copyStyleRow != null) { |
| | | Cell copyStyleCell = copyStyleRow.getCell(excelData.getCopyStyleCol()); |
| | | copyStyleForCell(copyStyleCell,cell); |
| | | if(StringUtils.isNotBlank(excelData.getDateFormat())){ |
| | | HSSFDataFormat format= (HSSFDataFormat) sheet.getWorkbook().createDataFormat(); |
| | | cell.getCellStyle().setDataFormat(format.getFormat(excelData.getDateFormat())); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ·è´åå
æ ¼çæ ·å¼ |
| | | * @param fromCell æ¥æºç«¯åå
æ ¼ |
| | | * @param toCell ç®æ 端åå
æ ¼ |
| | | */ |
| | | private static void copyStyleForCell(Cell fromCell,Cell toCell){ |
| | | // æ ·å¼ |
| | | CellStyle cellStyle = toCell.getCellStyle(); |
| | | CellStyle fromStyle = fromCell.getCellStyle(); |
| | | cellStyle.cloneStyleFrom(fromStyle); |
| | | cellStyle.setAlignment(fromStyle.getAlignment()); |
| | | cellStyle.setBorderBottom(fromStyle.getBorderBottom()); |
| | | cellStyle.setBorderLeft(fromStyle.getBorderLeft()); |
| | | cellStyle.setBorderRight(fromStyle.getBorderRight()); |
| | | cellStyle.setBorderTop(fromStyle.getBorderTop()); |
| | | cellStyle.setDataFormat(fromStyle.getDataFormat()); |
| | | cellStyle.setFillBackgroundColor(fromStyle.getFillBackgroundColor()); |
| | | cellStyle.setFillForegroundColor(fromStyle.getFillForegroundColor()); |
| | | cellStyle.setFillPattern(fromStyle.getFillPattern()); |
| | | cellStyle.setVerticalAlignment(fromStyle.getVerticalAlignment()); |
| | | cellStyle.setWrapText(fromStyle.getWrapText()); |
| | | cellStyle.setLocked(fromStyle.getLocked()); |
| | | cellStyle.setBottomBorderColor(fromStyle.getBottomBorderColor()); |
| | | cellStyle.setLeftBorderColor(fromStyle.getLeftBorderColor()); |
| | | cellStyle.setTopBorderColor(fromStyle.getTopBorderColor()); |
| | | cellStyle.setRightBorderColor(fromStyle.getRightBorderColor()); |
| | | } |
| | | |
| | | /** |
| | | * å±
䏿°æ® |
| | | * |
| | | * @param cell åå
æ ¼ |
| | | * @param excelData è¦å±
ä¸çå
容 |
| | | */ |
| | | private static void centerCell(Cell cell, WriteExcelData excelData) { |
| | | if (excelData.isCenter()) { |
| | | CellStyle cellStyle = cell.getCellStyle(); |
| | | cellStyle.setAlignment(HorizontalAlignment.CENTER);//æ°´å¹³å±
ä¸ |
| | | cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//åç´å±
ä¸ |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * åå¹¶åå
æ ¼ |
| | | * |
| | | * @param sheet å·¥ä½è¡¨ |
| | | * @param mergedDataList è¦åå¹¶çæ°æ®ä¿¡æ¯ |
| | | */ |
| | | private static void mergedRegion(Sheet sheet, Collection<WriteExcelData> mergedDataList) { |
| | | if (!CollectionUtils.isEmpty(mergedDataList)) { |
| | | mergedDataList.stream().forEach(ed -> { |
| | | if (ed.getRowTo() < ed.getRow()) { |
| | | ed.setRowTo(ed.getRow()); |
| | | } |
| | | if (ed.getColTo() < ed.getCol()) { |
| | | ed.setColTo(ed.getCol()); |
| | | } |
| | | sheet.addMergedRegion(new CellRangeAddress(ed.getRow(), ed.getRowTo(), ed.getCol(), ed.getColTo())); |
| | | }); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * ä»excelä¸è¯»åæ°æ® |
| | | * |
| | | * @param file æä»¶ |
| | | * @return æ°æ®å表 |
| | | * @throws VciBaseException æ§è¡åºéçæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static List<SheetDataSet> readDataObjectFromExcel(File file) throws VciBaseException { |
| | | return readDataObjectFromExcel(file, SheetDataSet.class); |
| | | } |
| | | |
| | | /** |
| | | * ä»excelä¸è¯»åæ°æ® |
| | | * |
| | | * @param file æä»¶ |
| | | * @param doClass æ°æ®å¯¹è±¡çç±»å |
| | | * @param <T> æ°æ®å¯¹è±¡çç±»å |
| | | * @return æ°æ®å表 |
| | | * @throws VciBaseException æ§è¡åºéçæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static <T> List<T> readDataObjectFromExcel(File file, Class<T> doClass) throws VciBaseException { |
| | | return readDataObjectFromExcel(file, doClass, null); |
| | | } |
| | | |
| | | /** |
| | | * ä»excelä¸è¯»åæ°æ® |
| | | * |
| | | * @param file æä»¶ |
| | | * @param excelOption 读åçç±»åï¼å
æ¬æ°æ®çé¦è¡ï¼ |
| | | * @param doClass æ°æ®å¯¹è±¡çç±» |
| | | * @param <T> æ°æ®å¯¹è±¡çç±»å |
| | | * @return æ°æ®å表 |
| | | * @throws VciBaseException æ§è¡åºéçæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static <T> List<T> readDataObjectFromExcel(File file, Class<T> doClass, ReadExcelOption excelOption) throws VciBaseException { |
| | | return readDataObjectFromExcel(file, doClass,excelOption, null); |
| | | } |
| | | |
| | | /** |
| | | * ä»excelä¸è¯»åæ°æ® |
| | | * |
| | | * @param file æä»¶ |
| | | * @param excelOption 读åçç±»åï¼å
æ¬æ°æ®çé¦è¡ï¼ |
| | | * @param doClass æ°æ®å¯¹è±¡çç±» |
| | | * @param <T> æ°æ®å¯¹è±¡çç±»å |
| | | * @param processer 转æ¢å¨ |
| | | * @return æ°æ®å表 |
| | | * @throws VciBaseException æ§è¡åºéçæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static <T> List<T> readDataObjectFromExcel(File file, Class<T> doClass,ReadExcelOption excelOption, PoiImportProcesser<T> processer) throws VciBaseException { |
| | | InputStream ins = null; |
| | | try { |
| | | ins = new FileInputStream(file); |
| | | } catch (Throwable e) { |
| | | String msg = READ_IMPORT_FILE_FAIL; |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error(msg, e); |
| | | } |
| | | throw new VciBaseException(msg + LangBaseUtil.getErrorMsg(e), new String[]{}, e); |
| | | } |
| | | try { |
| | | return readDataObjectFromExcel(ins, doClass, excelOption,processer); |
| | | } catch (VciBaseException e) { |
| | | throw e; |
| | | } catch (Throwable e) { |
| | | throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{}, e); |
| | | } finally { |
| | | IOUtils.closeQuietly(ins); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * ä»excelä¸è¯»åæ°æ® |
| | | * |
| | | * @param ins æä»¶æµ |
| | | * @param excelOption 读åçç±»åï¼å
æ¬æ°æ®çé¦è¡ï¼é»è®¤1ï¼ï¼å·¥ä½è¡¨ï¼é»è®¤0ï¼åæ¯å¦å
¨é¨å·¥ä½è¡¨ï¼é»è®¤å¦ï¼ |
| | | * @param doClass æ°æ®ç对象 |
| | | * @param <T> æ°æ®å¯¹è±¡æå±çç±»å |
| | | * @param processer 转æ¢å¨ |
| | | * @return æ°æ®å表 |
| | | * @throws VciBaseException æ§è¡åºéçæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static <T> List<T> readDataObjectFromExcel(InputStream ins, Class<T> doClass,ReadExcelOption excelOption, PoiImportProcesser<T> processer) throws VciBaseException { |
| | | if (ins == null) { |
| | | throw new VciBaseException(INPUT_STREAM_IS_NULL); |
| | | } |
| | | if (doClass == null) { |
| | | doClass = (Class<T>) SheetDataSet.class; |
| | | } |
| | | boolean isDataSet = false; |
| | | if (doClass.equals(SheetDataSet.class)) { |
| | | isDataSet = true; |
| | | } |
| | | //è·å对象ä¸çåçåç§° |
| | | Map<Field, ExcelColumn> excelColumnSet = getExcelColumnAnnotations(doClass); |
| | | Map<String/**æ é¢**/, ExcelColumn> excelTitleMap = Optional.of(excelColumnSet).get().values().stream().collect(Collectors.toMap(s -> s.value(), t -> t)); |
| | | Map<String/**æ é¢**/,Field> excelTitleFieldMap = new HashMap<>(); |
| | | Map<String/**æ é¢**/,ExcelColumnMap> extendAttrTitleMap = new HashMap<>(); |
| | | final Field[] rowIndexFields = {null}; |
| | | ReadExcelOption finalExcelOption = excelOption; |
| | | excelColumnSet.forEach(((field, excelColumn) -> { |
| | | excelTitleFieldMap.put(excelColumn.value(),field); |
| | | if (excelColumn.rowIndexColumn()) { |
| | | rowIndexFields[0] = field; |
| | | } |
| | | field.setAccessible(true); |
| | | if((field.getType().equals(Map.class) || field.getType().getSuperclass().equals(Map.class)) |
| | | && !CollectionUtils.isEmpty(finalExcelOption.getExtendAttrMap()) |
| | | && finalExcelOption.getExtendAttrMap().containsKey(excelColumn.value())){ |
| | | //è¯´ææ¯mapç±»å,è¿ç§ä¸è¬æ¯æ©å±å±æ§ï¼å°ä¸å 屿§è½¬æ¢ä¸ºmapéçå¼ |
| | | List<ExcelColumnMap> excelColumnMaps = finalExcelOption.getExtendAttrMap().get(excelColumn.value()); |
| | | if(!CollectionUtils.isEmpty(excelColumnMaps)){ |
| | | excelColumnMaps.stream().forEach(ss->{ |
| | | excelTitleFieldMap.put(ss.getTitle(),field); |
| | | extendAttrTitleMap.put(ss.getTitle(),ss); |
| | | }); |
| | | } |
| | | } |
| | | })); |
| | | Field rowIndexField = null; |
| | | if (rowIndexFields[0] != null) { |
| | | rowIndexField = rowIndexFields[0]; |
| | | } |
| | | |
| | | Workbook workbook = getWorkbookByInputStream(ins); |
| | | if (excelOption == null) { |
| | | excelOption = new ReadExcelOption(); |
| | | } |
| | | FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); |
| | | List<T> dataSet = new ArrayList<>(); |
| | | try { |
| | | for (int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) { |
| | | Sheet sheet = workbook.getSheetAt(sheetIndex); |
| | | if(StringUtils.isNotBlank(excelOption.getSheetName())){ |
| | | if(!sheet.getSheetName().equalsIgnoreCase(excelOption.getSheetName())){ |
| | | continue; |
| | | } |
| | | }else { |
| | | if (!excelOption.isReadAllSheet() && sheetIndex != excelOption.getSheetIndex()) { |
| | | continue; |
| | | } |
| | | } |
| | | SheetDataSet sheetDataSet = new SheetDataSet(); |
| | | sheetDataSet.setSheetName(sheet.getSheetName()); |
| | | if (isDataSet) { |
| | | dataSet.add((T) sheetDataSet); |
| | | } |
| | | //å¤çæ é¢ |
| | | Map<Integer, String> colsNameIndexMap = new HashMap<>(); |
| | | if (excelOption.getFristRow() > 0) { |
| | | //çäº0è¡¨ç¤ºæ²¡ææ»æ é¢ |
| | | try { |
| | | Row titleRow = sheet.getRow(excelOption.getFristRow()-1); |
| | | int colsCount = titleRow.getLastCellNum(); |
| | | List<String> titleList = new LinkedList<>(); |
| | | for (int i = 0; i < colsCount; i++) { |
| | | String title = VciBaseUtil.getStringValueFromObject(getCellValue(titleRow.getCell(i),evaluator)); |
| | | if (StringUtils.isNotBlank(title)) { |
| | | title= title.replace("*","").replace("â",""); |
| | | colsNameIndexMap.put(i, title); |
| | | titleList.add(title); |
| | | } |
| | | } |
| | | if (isDataSet) { |
| | | sheetDataSet.setColName(titleList); |
| | | } |
| | | } catch (Exception e) { |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("读åexcelæä»¶ä¸çæ é¢ä¿¡æ¯åºç°äºé误", e); |
| | | } |
| | | throw e; |
| | | } |
| | | } |
| | | |
| | | //读åå¼ |
| | | List<SheetRowData> rowDataList = new LinkedList<SheetRowData>(); |
| | | if (sheet.getLastRowNum() > 0) { |
| | | for (int rowIndex = excelOption.getFristRow(); rowIndex <= sheet.getLastRowNum(); rowIndex++) { |
| | | Row rowDataSet = sheet.getRow(rowIndex); |
| | | if (rowDataSet == null) { |
| | | continue; |
| | | } |
| | | boolean notValue = false; |
| | | for (int i = 0; i < rowDataSet.getLastCellNum(); i++) { |
| | | Cell cellTemp = rowDataSet.getCell(i); |
| | | Object valueTemp = getCellValue(cellTemp, evaluator); |
| | | if((valueTemp != null && !(valueTemp instanceof String) ) |
| | | || (valueTemp instanceof String && valueTemp !=null && StringUtils.isNotBlank(valueTemp.toString())) ){ |
| | | notValue = true; |
| | | break; |
| | | } |
| | | } |
| | | if(!notValue){ |
| | | //æ´è¡é½æ¯ç©ºï¼ç´æ¥è·³è¿ |
| | | continue; |
| | | } |
| | | //å®ä¾åæ°æ®å¯¹è±¡ |
| | | SheetRowData rd = (isDataSet ? new SheetRowData() : null); |
| | | T obj = null; |
| | | if (!isDataSet) { |
| | | try { |
| | | obj = doClass.newInstance(); |
| | | } catch (Throwable e) { |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("å®ä¾åæ°æ®å¯¹è±¡", e); |
| | | } |
| | | throw new VciBaseException("å®ä¾åæ°æ®å¯¹è±¡," + LangBaseUtil.getErrorMsg(e)); |
| | | } |
| | | } |
| | | |
| | | //å¤çè¡å· |
| | | if (isDataSet) { |
| | | rd.setRowIndex(String.valueOf(rowIndex)); |
| | | } |
| | | if (!isDataSet && rowIndexField != null) { |
| | | VciBaseUtil.setValueForField(rowIndexField, obj, String.valueOf(rowIndex)); |
| | | } |
| | | |
| | | //æ¯è¡çæ°æ® |
| | | Map<Integer, String> rowDataMap = new HashMap<>(); |
| | | //éåè¿è¡çæ¯ä¸ä¸ªåå
æ ¼çæ°æ® |
| | | for (int columnIndex = 0; columnIndex < rowDataSet.getLastCellNum(); columnIndex++) { |
| | | Cell cell = rowDataSet.getCell(columnIndex); |
| | | Object value = getCellValue(cell, evaluator); |
| | | //è¯´ææ¯å¯¹è±¡ |
| | | String title = colsNameIndexMap.containsKey(columnIndex)?colsNameIndexMap.get(columnIndex):""; |
| | | //屿§æ¯å¦ä¸ºmapå½¢å¼ |
| | | boolean isMapField = false; |
| | | Field thisField = null; |
| | | if (StringUtils.isNotBlank(title) && excelTitleFieldMap.containsKey(title)) { |
| | | thisField = excelTitleFieldMap.get(title); |
| | | } |
| | | if(thisField!=null){ |
| | | thisField.setAccessible(true); |
| | | if(thisField.getType().equals(Map.class) || thisField.getType().getSuperclass().equals(Map.class)){ |
| | | isMapField = true; |
| | | } |
| | | } |
| | | |
| | | ExcelColumn excelColumn = null; |
| | | if (StringUtils.isNotBlank(title) && excelTitleMap.containsKey(title)) { |
| | | excelColumn = excelTitleMap.get(title); |
| | | } |
| | | ExcelColumnMap columnMap = null; |
| | | if(isMapField){ |
| | | columnMap = extendAttrTitleMap.get(title); |
| | | } |
| | | boolean isNull = false; |
| | | if(value == null || (value instanceof String && StringUtils.isBlank(value.toString()))){ |
| | | isNull = true; |
| | | } |
| | | if (!isNull) { |
| | | if (!isDataSet) { |
| | | if (thisField != null && (excelColumn != null || columnMap!=null)) { |
| | | if(!isMapField) { |
| | | if (value.getClass().equals(thisField.getType())) { |
| | | try { |
| | | thisField.set(obj, value); |
| | | } catch (IllegalAccessException e) { |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("读åexcelçåå
æ ¼çå¼åï¼ä¸ºå¯¹è±¡èµå¼åºç°äºé误", e); |
| | | } |
| | | } |
| | | } else { |
| | | VciBaseUtil.setValueForField(thisField, obj, VciBaseUtil.getStringValueFromObject(value)); |
| | | } |
| | | if (thisField.getType().equals(Date.class) && thisField.get(obj) == null) { |
| | | throw new VciBaseException(CELL_NOT_DATE_FORMATE, new String[]{title, (rowIndex + 1) + ""}); |
| | | } |
| | | if (StringUtils.isNotBlank(excelColumn.regExg()) && !VciBaseUtil.getStringValueFromObject(value).matches(excelColumn.regExg())) { |
| | | throw new VciBaseException(CELL_VALUE_NOT_EQUAL_REG, new String[]{title, (rowIndex + 1) + "", excelColumn.regExgTitle()}); |
| | | } |
| | | }else{ |
| | | //è¯´ææ¯map |
| | | Object fieldValue = thisField.get(obj); |
| | | Map<String,String> data ; |
| | | if(fieldValue==null){ |
| | | data = new HashMap<>(); |
| | | }else{ |
| | | data = (Map<String,String>)fieldValue; |
| | | } |
| | | data.put(columnMap.getColumnName(),value==null?"":value.toString()); |
| | | try { |
| | | thisField.set(obj, data); |
| | | } catch (IllegalAccessException e) { |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("设置mapç±»åçæ°æ®æ¶ååºç°äºé误", e); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (processer != null && thisField != null) { |
| | | processer.process(value, obj, thisField); |
| | | } |
| | | } else { |
| | | //说æåªæ¯è¯»åæ°æ® |
| | | rowDataMap.put(columnIndex, VciBaseUtil.getStringValueFromObject(value)); |
| | | } |
| | | }else{ |
| | | //éè¦å¤æä¸ä¸ï¼æ¯ä¸æ¯æ´è¡é½æ¯ç©ºç |
| | | if (!isDataSet && thisField != null && excelColumn != null ) { |
| | | if(!excelColumn.nullable() ) { |
| | | throw new VciBaseException(CELL_VALUE_CAN_NOT_NULL, new String[]{title, (rowIndex + 1) + ""}); |
| | | } |
| | | if(StringUtils.isNotBlank(excelColumn.regExg())){ |
| | | throw new VciBaseException(CELL_VALUE_CAN_NOT_NULL_FOR_REG, new String[]{title, (rowIndex + 1) + ""}); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (isDataSet) { |
| | | rd.setData(rowDataMap); |
| | | rowDataList.add(rd); |
| | | } else { |
| | | dataSet.add(obj); |
| | | } |
| | | } |
| | | } |
| | | if(isDataSet){ |
| | | sheetDataSet.setRowData(rowDataList); |
| | | } |
| | | } |
| | | }catch (Throwable e){ |
| | | throw new VciBaseException(LangBaseUtil.getErrorMsg(e),new String[0],e); |
| | | }finally { |
| | | IOUtils.closeQuietly(ins); |
| | | try { |
| | | workbook.close(); |
| | | } catch (IOException e) { |
| | | if(logger.isErrorEnabled()){ |
| | | logger.error("å
³éå·¥ä½ç°¿åºç°äºé误",e); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return dataSet; |
| | | } |
| | | |
| | | /** |
| | | * ä»cellåå
æ ¼ä¸è·åå¼ |
| | | * @param cell åå
æ ¼å¯¹è±¡ |
| | | * @param evaluator å
¬å¼è½¬æ¢ |
| | | * @return åå
æ ¼çå¼ï¼æ²¡æè½¬æ¢ä¸ºå符串 |
| | | */ |
| | | private static Object getCellValue(Cell cell,FormulaEvaluator evaluator){ |
| | | if(cell !=null ){ |
| | | Object cellValue = null; |
| | | CellType cellTypeEnum = cell.getCellType(); |
| | | switch (cellTypeEnum){ |
| | | case STRING: |
| | | String thisCellValue = cell.getStringCellValue(); |
| | | cellValue = StringUtils.isEmpty(thisCellValue)?"":thisCellValue.trim(); |
| | | break; |
| | | case BOOLEAN: |
| | | boolean boolValue = cell.getBooleanCellValue(); |
| | | cellValue = boolValue; |
| | | break; |
| | | case FORMULA: |
| | | cellValue = getCellValue(evaluator.evaluate(cell)); |
| | | break; |
| | | case NUMERIC: |
| | | if(DateUtil.isCellDateFormatted(cell)){ |
| | | cellValue = cell.getDateCellValue(); |
| | | }else{ |
| | | cellValue = cell.getNumericCellValue(); |
| | | } |
| | | break; |
| | | default: |
| | | cellValue = ""; |
| | | break; |
| | | } |
| | | return cellValue; |
| | | }else{ |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * é对å
¬å¼ç计ç®å¼ |
| | | * @param cell å
¬å¼è½¬æ¢åçåå
æ ¼å¯¹è±¡ |
| | | * @return å
¬å¼çå®é
å¼ |
| | | */ |
| | | private static Object getCellValue(CellValue cell) { |
| | | Object cellValue = null; |
| | | switch (cell.getCellTypeEnum()) { |
| | | case STRING: |
| | | String thisCellValue = cell.getStringValue(); |
| | | cellValue = StringUtils.isEmpty(thisCellValue)?"":thisCellValue.trim(); |
| | | break; |
| | | case NUMERIC: |
| | | //å
¬å¼è®¡ç®ä¸ä¼ææ¥æå |
| | | cellValue=cell.getNumberValue(); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | return cellValue; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * è·åçµåè¡¨æ ¼ç¸å
³ç注解 |
| | | * |
| | | * @param doClass è¿åçç±» |
| | | * @return 䏿¯SheetDataSetçæ¶åéè¦è¿åææå
å«äºexcelcolumn注解ç屿§ |
| | | */ |
| | | public static <T> Map<Field, ExcelColumn> getExcelColumnAnnotations(Class<T> doClass) { |
| | | Map<Field, ExcelColumn> excelColumnMap = new HashMap(); |
| | | if (!doClass.equals(SheetDataSet.class)) { |
| | | List<Field> allFields = VciBaseUtil.getAllFieldForObj(doClass); |
| | | List<Field> hasExcelColumnFields = allFields.stream().filter(field -> field.isAnnotationPresent(ExcelColumn.class)).collect(Collectors.toList()); |
| | | if (!CollectionUtils.isEmpty(hasExcelColumnFields)) { |
| | | hasExcelColumnFields.stream().forEach(field -> { |
| | | ExcelColumn ec = getExcelColumnAnnotation(field); |
| | | excelColumnMap.put(field, ec); |
| | | }); |
| | | } |
| | | } |
| | | return excelColumnMap; |
| | | } |
| | | |
| | | /** |
| | | * è·å屿§ä¸çexcelColumnçæ³¨è§£ |
| | | * @param field 屿§å¯¹è±¡ |
| | | * @return excelColumn |
| | | */ |
| | | public static ExcelColumn getExcelColumnAnnotation(Field field){ |
| | | ExcelColumn ec = field.getAnnotation(ExcelColumn.class); |
| | | if (ec == null) { |
| | | ec = field.getDeclaredAnnotation(ExcelColumn.class); |
| | | } |
| | | return ec; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®PO对象ï¼å¯¼åºæ¨¡æ¿ |
| | | * @param doClass 导åºç对象 |
| | | * @param downloadTempOption ä¸è½½çé项 |
| | | * @param processer è°ç¨å½æ°ï¼è·åæä¸¾çå¼ |
| | | * @param <T> ç±»å |
| | | * @return æä»¶çè·¯å¾ |
| | | */ |
| | | public static <T> String downloadImportTempByClass(Class<T> doClass,DownloadTempOption downloadTempOption,PoiTemplateProcesser<T> processer){ |
| | | if(downloadTempOption == null){ |
| | | downloadTempOption = new DownloadTempOption(""); |
| | | } |
| | | //ok,åexcel |
| | | String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + (StringUtils.isNotBlank(downloadTempOption.getExcelName())?downloadTempOption.getExcelName():"导å
¥æ¨¡æ¿.xls"); |
| | | try { |
| | | new File(excelName).createNewFile(); |
| | | } catch (Throwable e) { |
| | | throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelName}, e); |
| | | } |
| | | List<WriteExcelData> excelDataList = new ArrayList<>(); |
| | | //å
å¤çæ é¢ |
| | | Map<Field, ExcelColumn> fieldExcelColumnMap = getExcelColumnAnnotations(doClass); |
| | | Map<String,ExcelColumn> fieldNameExcelColumnMap = new HashMap<>(); |
| | | fieldExcelColumnMap.forEach((field,ec)->{ |
| | | field.setAccessible(true); |
| | | fieldNameExcelColumnMap.put(field.getName(),ec); |
| | | }); |
| | | //todo åé¢å¤çæ é¢çå
容 |
| | | //è·å顺åºï¼å¦ææ¯ç»§æ¿ä¸çº§çï¼å°±æ¾åé¢éæå¤ç |
| | | Field fields[] = doClass.getDeclaredFields(); |
| | | Set<String> finedFields = new HashSet<>(); |
| | | Workbook workbook = new HSSFWorkbook(); |
| | | int index = 0; |
| | | for (int i = 0; i < fields.length; i++) { |
| | | //TODO, ç»§æ¿çè¿æ²¡å¤ç |
| | | Field field = fields[i]; |
| | | field.setAccessible(true); |
| | | String fieldName = field.getName(); |
| | | if(fieldNameExcelColumnMap.containsKey(fieldName)){ |
| | | finedFields.add(fieldName); |
| | | ExcelColumn column = fieldNameExcelColumnMap.get(fieldName); |
| | | if(column.rowIndexColumn()){ |
| | | continue; |
| | | } |
| | | WriteExcelData excelData = new WriteExcelData(0,index,StringUtils.isNotBlank(column.value())?column.value():fieldName); |
| | | if(!column.nullable()){ |
| | | excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex())); |
| | | excelData.setObj(excelData.getObj() +"*"); |
| | | } |
| | | //æ é¢é½ä¸è®©æ¹ |
| | | excelData.setReadOnly(true); |
| | | excelData.setCenter(true); |
| | | if(column.width()>0){ |
| | | excelData.setWidth(column.width()); |
| | | } |
| | | /** |
| | | * ä¸é¢çå
容,æ¶é´æ ¼å¼ï¼ä¸æèåï¼æ¯å¦å¼å
³ |
| | | */ |
| | | List<WriteExcelData> thisRowNextDatas = new ArrayList<>(); |
| | | if(downloadTempOption.getDefaultRowSize() ==null || downloadTempOption.getDefaultRowSize()<0){ |
| | | downloadTempOption.setDefaultRowSize(1); |
| | | } |
| | | Integer defaultRowSize = downloadTempOption.getDefaultRowSize(); |
| | | for (int j = 0; j < defaultRowSize; j++) { |
| | | thisRowNextDatas.add(new WriteExcelData(1+j,index,"")); |
| | | } |
| | | //ççæ¯å¦ææä¸¾ |
| | | if(StringUtils.isNotBlank(column.enumId()) && processer!=null){ |
| | | Map<String, String> enumMap = processer.wrapperEnumMap(column.enumId(), doClass, field); |
| | | if(!CollectionUtils.isEmpty(enumMap)){ |
| | | WriteExcelData thisRowNext = thisRowNextDatas.get(0); |
| | | thisRowNext.setValidation(true); |
| | | thisRowNext.setRowTo(defaultRowSize); |
| | | thisRowNext.setColTo(thisRowNext.getCol()); |
| | | thisRowNext.setValidationDataList(enumMap.values().stream().collect(Collectors.toList())); |
| | | } |
| | | } |
| | | if(field.isAnnotationPresent(VciFieldType.class)){ |
| | | VciFieldType fieldType = field.getDeclaredAnnotation(VciFieldType.class); |
| | | if(fieldType ==null){ |
| | | fieldType = field.getAnnotation(VciFieldType.class); |
| | | } |
| | | if(fieldType!=null){ |
| | | String dateFormat = ""; |
| | | if(VciFieldTypeEnum.VTDateTime.equals(fieldType.value())){ |
| | | dateFormat = VciDateUtil.DateTimeFormat; |
| | | }else if(VciFieldTypeEnum.VTDate.equals(fieldType.value())){ |
| | | dateFormat = VciDateUtil.DateFormat; |
| | | }else if(VciFieldTypeEnum.VTTime.equals(fieldType.value())){ |
| | | dateFormat = VciDateUtil.TimeFormat; |
| | | } |
| | | if(StringUtils.isNotBlank(dateFormat)){ |
| | | String finalDateFormat = dateFormat; |
| | | thisRowNextDatas.stream().forEach(thisRowNext->{ |
| | | thisRowNext.setDateFormat(finalDateFormat); |
| | | }); |
| | | } |
| | | //booleanç±»å |
| | | if(VciFieldTypeEnum.VTBoolean.equals(fieldType.value())){ |
| | | List<String> trueFlase = new ArrayList<>(); |
| | | trueFlase.add("æ¯"); |
| | | trueFlase.add("å¦"); |
| | | WriteExcelData thisRowNext = thisRowNextDatas.get(0); |
| | | thisRowNext.setValidation(true); |
| | | thisRowNext.setRowTo(defaultRowSize); |
| | | thisRowNext.setColTo(thisRowNext.getCol()); |
| | | thisRowNext.setValidationDataList(trueFlase); |
| | | } |
| | | //æä¸¾å 为æ¯åºå®çï¼æä»¥å¯ä»¥é个å»å¤çï¼åç
§å¯¼åºçæ¶åï¼ä¸è½ææ°æ®å¯¼åº |
| | | } |
| | | } |
| | | excelDataList.addAll(thisRowNextDatas); |
| | | excelDataList.add(excelData); |
| | | index++; |
| | | } |
| | | } |
| | | WriteExcelOption excelOption = new WriteExcelOption(); |
| | | excelOption.addSheetDataList(StringUtils.isNotBlank(downloadTempOption.getSheetName())?downloadTempOption.getSheetName():"Sheet1",excelDataList); |
| | | writeDataToFile(excelName, excelOption); |
| | | return excelName; |
| | | } |
| | | |
| | | /** |
| | | * * åå¹¶å¤ä¸ªExcelSheet |
| | | * https://blog.csdn.net/lingerlan510/article/details/121943788 |
| | | * @param files æä»¶å符串(file.toString)éå,æé¡ºåºè¿è¡åå¹¶ï¼åå¹¶çExcelä¸Sheetåç§°ä¸å¯éå¤ |
| | | * @param excelName åå¹¶åExcelåç§°(å
å«åç¼åè·¯å¾) |
| | | * @Date: 2020/9/18 15:31 |
| | | */ |
| | | public static void mergeExcel(List<String> files, String excelName) { |
| | | Workbook newExcelCreat = excelName.toLowerCase(Locale.ROOT).endsWith(".xlsx")? new XSSFWorkbook():new HSSFWorkbook(); |
| | | // éåæ¯ä¸ªæºexcelæä»¶ï¼TmpListä¸ºæºæä»¶çåç§°éå |
| | | for (int i = 0 ; i < files.size(); i ++) { |
| | | String fromExcelName = files.get(i); |
| | | try (InputStream in = new FileInputStream(fromExcelName)) { |
| | | Workbook fromExcel = null; |
| | | if(fromExcelName.toLowerCase(Locale.ROOT).endsWith(".xlsx")){ |
| | | fromExcel = new XSSFWorkbook(in); |
| | | }else{ |
| | | fromExcel = new HSSFWorkbook(in); |
| | | } |
| | | int length = fromExcel.getNumberOfSheets(); |
| | | if (length <= 1) { //é¿åº¦ä¸º1æ¶ |
| | | Sheet oldSheet = fromExcel.getSheetAt(0); |
| | | Sheet existSheet = newExcelCreat.getSheet(oldSheet.getSheetName()); |
| | | String newSheetName = oldSheet.getSheetName(); |
| | | if(existSheet!=null){ |
| | | newSheetName += "_" +i; |
| | | } |
| | | Sheet newSheet = newExcelCreat.createSheet(newSheetName); |
| | | copySheet(newExcelCreat, oldSheet, newSheet); |
| | | } else { |
| | | for (int j = 0; j < length; j++) {// éåæ¯ä¸ªsheet |
| | | Sheet oldSheet = fromExcel.getSheetAt(j); |
| | | Sheet existSheet = newExcelCreat.getSheet(oldSheet.getSheetName()); |
| | | String newSheetName = oldSheet.getSheetName(); |
| | | if(existSheet!=null){ |
| | | newSheetName += "_" +i + "_" + j; |
| | | } |
| | | Sheet newSheet = newExcelCreat.createSheet(newSheetName); |
| | | copySheet(newExcelCreat, oldSheet, newSheet); |
| | | } |
| | | } |
| | | |
| | | //å称管çå¨ |
| | | List<? extends Name> allNames = fromExcel.getAllNames(); |
| | | if(!CollectionUtils.isEmpty(allNames)){ |
| | | allNames.stream().forEach(name->{ |
| | | Name name1 = newExcelCreat.createName(); |
| | | name1.setNameName(name.getNameName()); |
| | | name1.setRefersToFormula(name.getRefersToFormula()); |
| | | }); |
| | | } |
| | | } catch (IOException e) { |
| | | throw new VciBaseException("åå¹¶excelåºéçäº",new String[]{},e); |
| | | } |
| | | } |
| | | // å®ä¹æ°çæçxlxsè¡¨æ ¼æä»¶ |
| | | String allFileName = excelName; |
| | | try (FileOutputStream fileOut = new FileOutputStream(allFileName)) { |
| | | newExcelCreat.write(fileOut); |
| | | fileOut.flush(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | try { |
| | | newExcelCreat.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * åå¹¶åå
æ ¼ |
| | | * |
| | | * @param fromSheet æ¥æº |
| | | * @param toSheet ç®æ |
| | | */ |
| | | private static void mergeSheetAllRegion(Sheet fromSheet, Sheet toSheet) { |
| | | int num = fromSheet.getNumMergedRegions(); |
| | | CellRangeAddress cellR = null; |
| | | for (int i = 0; i < num; i++) { |
| | | cellR = fromSheet.getMergedRegion(i); |
| | | toSheet.addMergedRegion(cellR); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å¤å¶åå
æ ¼ |
| | | * |
| | | * @param fromCell æ¥æº |
| | | * @param toCell ç®æ |
| | | */ |
| | | private static void copyCell(Cell fromCell, Cell toCell) { |
| | | |
| | | copyStyleForCell(fromCell,toCell); |
| | | if (fromCell.getCellComment() != null) { |
| | | toCell.setCellComment(fromCell.getCellComment()); |
| | | } |
| | | // ä¸åæ°æ®ç±»åå¤ç |
| | | CellType fromCellType = fromCell.getCellType(); |
| | | toCell.setCellType(fromCellType); |
| | | if (fromCellType == CellType.NUMERIC) { |
| | | if (DateUtil.isCellDateFormatted(fromCell)) { |
| | | toCell.setCellValue(fromCell.getDateCellValue()); |
| | | } else { |
| | | toCell.setCellValue(fromCell.getNumericCellValue()); |
| | | } |
| | | } else if (fromCellType == CellType.STRING) { |
| | | RichTextString value = fromCell.getRichStringCellValue(); |
| | | if(value !=null && StringUtils.isNotBlank(value.toString())){ |
| | | Font fontAt = fromCell.getSheet().getWorkbook().getFontAt(fromCell.getCellStyle().getFontIndexAsInt()); |
| | | value.applyFont(fontAt); |
| | | } |
| | | toCell.setCellValue(value); |
| | | } else if (fromCellType == CellType.BLANK) { |
| | | // nothing21 |
| | | } else if (fromCellType == CellType.BOOLEAN) { |
| | | toCell.setCellValue(fromCell.getBooleanCellValue()); |
| | | } else if (fromCellType == CellType.ERROR) { |
| | | toCell.setCellErrorValue(fromCell.getErrorCellValue()); |
| | | } else if (fromCellType == CellType.FORMULA) { |
| | | toCell.setCellFormula(fromCell.getCellFormula()); |
| | | } else { |
| | | // nothing29 |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è¡å¤å¶åè½ |
| | | * |
| | | * @param wb å·¥ä½è¡¨ |
| | | * @param oldRow æ¥æº |
| | | * @param toRow ç®æ |
| | | */ |
| | | private static void copyRow(Workbook wb, Row oldRow, Row toRow) { |
| | | toRow.setHeight(oldRow.getHeight()); |
| | | for (Iterator cellIt = oldRow.cellIterator(); cellIt.hasNext(); ) { |
| | | Cell tmpCell = (Cell)cellIt.next(); |
| | | Cell newCell = toRow.createCell(tmpCell.getColumnIndex()); |
| | | copyCell(tmpCell, newCell); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Sheetå¤å¶ |
| | | * |
| | | * @param wb å·¥ä½è¡¨ |
| | | * @param fromSheet æ¥æº |
| | | * @param toSheet ç®æ |
| | | */ |
| | | private static void copySheet(Workbook wb, Sheet fromSheet, Sheet toSheet) { |
| | | mergeSheetAllRegion(fromSheet, toSheet); |
| | | // 设置å宽 |
| | | int length = fromSheet.getRow(fromSheet.getFirstRowNum()).getLastCellNum(); |
| | | for (int i = 0; i <= length; i++) { |
| | | toSheet.setColumnWidth(i, fromSheet.getColumnWidth(i)); |
| | | } |
| | | for (Iterator rowIt = fromSheet.rowIterator(); rowIt.hasNext(); ) { |
| | | Row oldRow = (Row) rowIt.next(); |
| | | Row newRow = toSheet.createRow(oldRow.getRowNum()); |
| | | copyRow(wb, oldRow, newRow); |
| | | } |
| | | //ä¸ææ¡ |
| | | List<? extends DataValidation> dataValidations = fromSheet.getDataValidations(); |
| | | if(!CollectionUtils.isEmpty(dataValidations)){ |
| | | dataValidations.stream().forEach(dv->{ |
| | | toSheet.addValidationData(dv); |
| | | }); |
| | | } |
| | | } |
| | | /** |
| | | * å
³é®å±æ§ |
| | | */ |
| | | public static final String KEY_ATTR_CHAR = "â"; |
| | | |
| | | /** |
| | | * å¿
è¾ |
| | | */ |
| | | public static final String REQUIRED_CHAR = "*"; |
| | | |
| | | /** |
| | | * è¿½å æ°æ®å°excelä¸ï¼ |
| | | * @param data æ°æ®ï¼å¿
é¡»æ¯po对象 |
| | | * @param excelName ç®æ çæä»¶åç§° |
| | | * @param excelOption åå
¥çç¸å
³é
ç½® |
| | | * @param <T> 对象类å |
| | | */ |
| | | public static <T> void appendDataToExcel(Collection<T> data,String excelName,AppendDataExcelOption excelOption){ |
| | | if(!CollectionUtils.isEmpty(data)){ |
| | | T t1 = data.stream().findFirst().get(); |
| | | //è·å对象ä¸çåçåç§° |
| | | Map<Field, ExcelColumn> excelColumnSet = getExcelColumnAnnotations(t1.getClass()); |
| | | Map<String/**æ é¢**/,String> excelTitleFieldNameMap =new HashMap<>(); |
| | | Set<String> readOnlyFields = new HashSet<>(); |
| | | excelColumnSet.forEach((field,excelColumn)->{ |
| | | excelTitleFieldNameMap.put(excelColumn.value(),field.getName()); |
| | | if(excelColumn.readOnly()){ |
| | | readOnlyFields.add(field.getName()); |
| | | } |
| | | }); |
| | | |
| | | //读åå
容 |
| | | ReadExcelOption readExcelOption = new ReadExcelOption(); |
| | | readExcelOption.setSheetName(excelOption.getSheetName()); |
| | | readExcelOption.setFristRow(excelOption.getTitleRowIndex()+1); |
| | | List<SheetDataSet> sheetDataSets = ExcelUtil.readDataObjectFromExcel(new File(excelName),SheetDataSet.class,readExcelOption); |
| | | if(!CollectionUtils.isEmpty(sheetDataSets)) { |
| | | SheetDataSet sheetDataSet = sheetDataSets.get(0); |
| | | Map<String/**åæ®µ**/, Integer> fieldColumnMap = new HashMap<>(); |
| | | List<String> colName = sheetDataSet.getColName(); |
| | | if (!CollectionUtils.isEmpty(colName)) { |
| | | for (int i = 0; i < colName.size(); i++) { |
| | | String col= colName.get(i).replace(REQUIRED_CHAR,"").replace(KEY_ATTR_CHAR,""); |
| | | if(excelTitleFieldNameMap.containsKey(col)){ |
| | | fieldColumnMap.put(excelTitleFieldNameMap.get(col),i); |
| | | } |
| | | } |
| | | //æä»¬å°è£
æ°æ® |
| | | List<WriteExcelData> writeExcelDataList = new ArrayList<>(); |
| | | final Integer[] index = {excelOption.getTitleRowIndex()+1}; |
| | | data.stream().forEach(d->{ |
| | | Map<String, String> dataMap = VciBaseUtil.objectToMapString(d); |
| | | fieldColumnMap.forEach((field,col)->{ |
| | | if(CollectionUtils.isEmpty(excelOption.getWriteFields()) || excelOption.getWriteFields().contains(field)) { |
| | | WriteExcelData excelData = new WriteExcelData(index[0], col, dataMap.getOrDefault(field, "")); |
| | | excelData.setReadOnly((excelOption.isReadOnlyFromField() && readOnlyFields.contains(field)) |
| | | || (!CollectionUtils.isEmpty(excelOption.getReadOnlyFields()) && excelOption.getReadOnlyFields().contains(field))); |
| | | writeExcelDataList.add(excelData); |
| | | } |
| | | }); |
| | | index[0]++; |
| | | }); |
| | | WriteExcelOption writeExcelOption = new WriteExcelOption(); |
| | | writeExcelOption.addSheetDataList(excelOption.getSheetName(),writeExcelDataList); |
| | | writeExcelOption.setAppend(true); |
| | | writeDataToFile(excelName,writeExcelOption); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.poi.util; |
| | | |
| | | import java.lang.reflect.Field; |
| | | |
| | | /** |
| | | * ä»excel导å
¥çæ¶åï¼å±æ§ç转æ¢å¨ |
| | | * @author weidy |
| | | * @date 2020/5/5 |
| | | */ |
| | | @FunctionalInterface |
| | | public interface PoiImportProcesser<T> { |
| | | |
| | | /*** |
| | | * å¯¹ç¹æ®ççç±»åè¿è¡å¤ç. |
| | | * @param value è¯¥å±æ§å¯¹åºçå¼ |
| | | * @param obj javaBean对象. |
| | | * @param field 屿§å段. |
| | | * @return è¿åjavaBean对象. |
| | | */ |
| | | void process(Object value, T obj, Field field); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.poi.util; |
| | | |
| | | import java.lang.reflect.Field; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * çæexcel项ç®ç模æ¿çæ¶åï¼è·åæä¸¾çå
容 |
| | | * @author weidy |
| | | * @date 2022/09/28 |
| | | */ |
| | | @FunctionalInterface |
| | | public interface PoiTemplateProcesser<T> { |
| | | |
| | | /*** |
| | | * è·åæä¸¾çå
容 |
| | | * @param enumId æä¸¾çç¼å· |
| | | * @param tClass javaBean对象. |
| | | * @param field 屿§å段. |
| | | * @return æä¸¾çå
容 |
| | | */ |
| | | Map<String,String> wrapperEnumMap(String enumId, Class<T> tClass, Field field); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.word.bo; |
| | | |
| | | import com.aspose.words.IMailMergeDataSource; |
| | | import com.aspose.words.ref.Ref; |
| | | import com.vci.starter.web.util.VciBaseUtil; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * ç¨äºmergeFieldçè¡¨æ ¼å½¢å¼çæ°æ®åå
¥å¯¹è±¡ï¼å 为aspose.word䏿¯æHashMap |
| | | * @author weidy,dangsn |
| | | */ |
| | | public class WordMergeListDataSource implements IMailMergeDataSource { |
| | | /** |
| | | * æ°æ®å¯¹è±¡ |
| | | */ |
| | | private List<Map<String, Object>> dataList; |
| | | |
| | | /** |
| | | * ç´¢å¼ |
| | | */ |
| | | private int index; |
| | | |
| | | /** |
| | | * è¡¨æ ¼åç§° |
| | | */ |
| | | private String tableName; |
| | | |
| | | /** |
| | | * åè¡¨æ ¼çåç§° |
| | | */ |
| | | private String childTableName; |
| | | |
| | | /** |
| | | * @param dataList æ°æ®é ï¼æ°æ®éä¸Mapçkeyï¼éè¦è·TableStart,TableEndå
å«çåç§°å¯¹åº |
| | | * @param tableName 䏿¨¡æ¿ä¸çTableStart,TableEndå¯¹åº |
| | | */ |
| | | public WordMergeListDataSource(List<Map<String, Object>> dataList, String tableName) { |
| | | this.dataList = dataList; |
| | | this.tableName = tableName; |
| | | index = -1; |
| | | this.setChildTableName(listChildTableNameFromData(this.dataList)); |
| | | } |
| | | |
| | | /** |
| | | * @param data åä¸ªæ°æ®é |
| | | * @param tableName 䏿¨¡æ¿ä¸çNameå¯¹åº |
| | | */ |
| | | public WordMergeListDataSource(Map<String, Object> data, String tableName) { |
| | | if(this.dataList == null) { |
| | | this.dataList = new ArrayList<Map<String,Object>>(); |
| | | this.dataList.add(data); |
| | | } |
| | | this.tableName = tableName; |
| | | index = -1; |
| | | this.setChildTableName(listChildTableNameFromData(this.dataList)); |
| | | } |
| | | |
| | | /** |
| | | * è·åå表åç§° |
| | | * @return å表åç§°ï¼å¤ä¸ªä¼ä»¥éå·åé |
| | | */ |
| | | public String getChildTableName() { |
| | | return childTableName; |
| | | } |
| | | |
| | | /** |
| | | * 设置å表åç§° |
| | | * @param childTableName å表åç§°ï¼å¤ä¸ªä»¥éå·åé |
| | | */ |
| | | public void setChildTableName(String childTableName) { |
| | | this.childTableName = childTableName; |
| | | } |
| | | |
| | | /** |
| | | * è·åç»æéæ»æ° |
| | | * @return ä¸ªæ° |
| | | */ |
| | | public int getCount() { |
| | | return this.dataList.size(); |
| | | } |
| | | |
| | | /** |
| | | * è·åæ°æ®å表 |
| | | * @return æ°æ®å表 |
| | | */ |
| | | public List<Map<String, Object>> getDataList(){ |
| | | return this.dataList; |
| | | } |
| | | |
| | | /** |
| | | * è·åè¡¨æ ¼åç§° |
| | | * @return è¡¨æ ¼çåç§° |
| | | */ |
| | | public String getTableName() { |
| | | return this.tableName; |
| | | } |
| | | |
| | | /** |
| | | * è·åå
·ä½çå¼ï¼æ¥å£æéè¦ç |
| | | * @param key åæ®µåç§° |
| | | * @param ref å¼ |
| | | * @return æ¯å¦æå¼ |
| | | * @throws Exception è·åçæ¶åè½åºé |
| | | */ |
| | | @Override |
| | | public boolean getValue(String key, Ref<Object> ref) throws Exception { |
| | | if(index < 0 || index >= this.getCount()){ |
| | | return false; |
| | | } |
| | | if(ref != null){ |
| | | ref.set(this.dataList.get(index).get(key)); |
| | | return true; |
| | | }else{ |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 仿°æ®ä¸æ¾å°listçä½ä¸ºå表ç对象 |
| | | * @param dataList æ°æ®å表 |
| | | * @return å
å«å表çåç§°çè¿æ¥å符串 |
| | | */ |
| | | private String listChildTableNameFromData(List<Map<String,Object>> dataList ){ |
| | | List<String> nextChildNameList = new ArrayList<>(); |
| | | if(!CollectionUtils.isEmpty(dataList)){ |
| | | dataList.get(0).forEach((k,v) ->{ |
| | | if(v != null && v instanceof List){ |
| | | nextChildNameList.add(k); |
| | | } |
| | | }); |
| | | } |
| | | return nextChildNameList.stream().collect(Collectors.joining(",")); |
| | | } |
| | | |
| | | /** |
| | | * å®ç°çæ¥å£ |
| | | * @param tableName å表çåç§° |
| | | * @return å表对象ï¼ä¸ç¬¦åçä¼è¿ånull |
| | | * @throws Exception è·ååºéçæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | @Override |
| | | public IMailMergeDataSource getChildDataSource(String tableName) throws Exception { |
| | | if(StringUtils.isNotBlank(getChildTableName())){ |
| | | List<String> childrenTableName = VciBaseUtil.str2List(getChildTableName()); |
| | | if(childrenTableName.contains(tableName)){ |
| | | Object childData = this.dataList.get(index).get(tableName); |
| | | if(childData != null && childData instanceof List) { |
| | | List<Map<String,Object>> childDataList = (List<Map<String,Object>>)childData; |
| | | if(!CollectionUtils.isEmpty(childDataList)) { |
| | | WordMergeListDataSource childDataSource = new WordMergeListDataSource(childDataList, tableName); |
| | | childDataSource.setChildTableName(listChildTableNameFromData(childDataList)); |
| | | return childDataSource; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * å®ç°æ¥å£ |
| | | * 夿æ¯å¦è¿æä¸ä¸æ¡è®°å½ |
| | | * @return trueç§»å¨å°ä¸ä¸æ¡ |
| | | */ |
| | | @Override |
| | | public boolean moveNext() { |
| | | index += 1; |
| | | if(index >= this.getCount()) { |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.word.bo; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 使ç¨å代ç çæ¹å¼å¾wordçè¡¨æ ¼ éåå
¥æ°æ®ï¼éè¦<TableStart:xxx><aa><bb><TableEnd:xxx>è¿æ ·çæ¹å¼ |
| | | * @author weidy |
| | | * @date 2019/8/13 15:47 |
| | | */ |
| | | public class WordMergeStartTableDataBO implements java.io.Serializable { |
| | | |
| | | /** |
| | | * ç¦æ¢ä¿®æ¹è¿ä¸ªå¼ |
| | | */ |
| | | private static final long serialVersionUID = -5247054966349871652L; |
| | | /** |
| | | * 表åï¼éè¦åwordçå代ç ä¸ç¸å¯¹åºï¼æ¯å¦<TableStart:xxx><aa><bb><TableEnd:xxx> ,表å为xxx |
| | | */ |
| | | private String tableName; |
| | | |
| | | /** |
| | | * åè¡¨æ°æ®ï¼å
¶ä¸æ¯ä¸è¡çæ°æ®ä¸çMapçkeyæ¯ååæ®µåç§°,ä¸å®è¦æ³¨æï¼å¦ææå表ï¼å表çé£ä¸ªå¼ä¸è½ä¸ºnullï¼å¦åæ æ³å¤æ |
| | | */ |
| | | private List<Map<String,Object>> tableDataList; |
| | | |
| | | /** |
| | | * è¦åå¹¶åå
æ ¼çååºå·ï¼ä»1å¼å§ |
| | | */ |
| | | private String mergeColumn ; |
| | | |
| | | /** |
| | | * è·åè¡¨æ ¼åç§° |
| | | * @return è¡¨æ ¼åç§° |
| | | */ |
| | | public String getTableName() { |
| | | return tableName; |
| | | } |
| | | |
| | | /** |
| | | * è®¾ç½®è¡¨æ ¼åç§° |
| | | * @param tableName è¡¨æ ¼åç§° |
| | | */ |
| | | public void setTableName(String tableName) { |
| | | this.tableName = tableName; |
| | | } |
| | | |
| | | /** |
| | | * è·åè¡¨æ ¼çæ°æ® |
| | | * @return è·åè¡¨æ ¼çåç§° |
| | | */ |
| | | public List<Map<String, Object>> getTableDataList() { |
| | | return tableDataList; |
| | | } |
| | | |
| | | /** |
| | | * è®¾ç½®è¡¨æ ¼çæ°æ® |
| | | * @param tableDataList è¡¨æ ¼æ°æ® |
| | | */ |
| | | public void setTableDataList(List<Map<String, Object>> tableDataList) { |
| | | this.tableDataList = tableDataList; |
| | | } |
| | | |
| | | /** |
| | | * éè¦åå¹¶åå
æ ¼çå |
| | | * @return ååç§°ï¼å¤ä¸ªä»¥éå·åé |
| | | */ |
| | | public String getMergeColumn() { |
| | | return mergeColumn; |
| | | } |
| | | |
| | | /** |
| | | * 设置è¦åå¹¶çåå
æ ¼ |
| | | * @param mergeColumn åå
æ ¼åå·ï¼ä»0å¼å§ï¼å¤ä¸ªä»¥éå·åé |
| | | */ |
| | | public void setMergeColumn(String mergeColumn) { |
| | | this.mergeColumn = mergeColumn; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "WordSignMergeTableData{" + |
| | | "tableName='" + tableName + '\'' + |
| | | ", tableDataList=" + tableDataList + |
| | | ", mergeColumn='" + mergeColumn + '\'' + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.word.util; |
| | | |
| | | import com.aspose.words.*; |
| | | import com.vci.starter.web.exception.VciBaseException; |
| | | import com.vci.starter.word.bo.WordMergeListDataSource; |
| | | import com.vci.starter.word.bo.WordMergeStartTableDataBO; |
| | | import org.apache.commons.io.IOUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.io.File; |
| | | import java.io.FileInputStream; |
| | | import java.io.FileNotFoundException; |
| | | import java.io.InputStream; |
| | | import java.util.List; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * wordæä½ç±» |
| | | * @author weidy |
| | | * @date 2020/2/19 |
| | | */ |
| | | public class WordUtil { |
| | | |
| | | /** |
| | | * æ¥å¿ |
| | | */ |
| | | private static Logger logger = LoggerFactory.getLogger(WordUtil.class); |
| | | |
| | | /** |
| | | * æç¤ºåæ°ä¸ºç©º |
| | | * @param s ç¸å
³çåæ°ï¼ä¸¤ä¸¤ç»åï¼ç¬¬ä¸ä¸ªä¸ºåæ°ç对象ï¼ç¬¬äºä¸ªä¸ºæ¾ç¤ºçåç§° |
| | | * @throws VciBaseException å¦æåæ°ä¸ºç©ºçæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static void alertNotNull(Object... s) throws VciBaseException { |
| | | if(s!=null && s.length>0){ |
| | | for(int i = 0 ; i < s.length ; i ++){ |
| | | Object obj = s[i]; |
| | | if(obj==null || StringUtils.isBlank(obj.toString())){ |
| | | String param = ""; |
| | | try{ |
| | | i++; |
| | | param = s[i].toString(); |
| | | }catch(Exception e){ |
| | | |
| | | } |
| | | throw new VciBaseException("åæ°[{0}]ä¸è½ä¸ºç©º",new String[]{param}); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 带éå·çå符串转为list |
| | | * @param s å符串 |
| | | * @return å符串å表 |
| | | */ |
| | | public static List<String> str2List(String s){ |
| | | if (isNull(s)) { |
| | | return null; |
| | | } else { |
| | | List<String> l = new ArrayList<String>(); |
| | | Collections.addAll(l,removeComma(s).split(",")); |
| | | return l; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å»é¤æåé¢çéå·ï¼å»é¤åé¢çéå· |
| | | * @param s å符串 |
| | | * @return å»é¤æ«å°¾éå· |
| | | */ |
| | | public static String removeComma(String s){ |
| | | if(s == null || s.trim().length() == 0) { |
| | | return s; |
| | | } |
| | | else{ |
| | | if(s.startsWith(",")) { |
| | | s = s.substring(1, s.length()); |
| | | } |
| | | if(s.endsWith(",")) { |
| | | s = s.substring(0, s.length() - 1); |
| | | } |
| | | return s; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 夿å符串æ¯ä¸æ¯ç©º,ä¸å¤ætrim |
| | | * @param o å符串 |
| | | * @return true表示空 |
| | | */ |
| | | public static boolean isNull(String o){ |
| | | return StringUtils.isEmpty(o); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * å¾wordåå
¥è¡¨æ ¼æ°æ®ï¼è¿ç§æ¯ä½¿ç¨startTableçæ¹å¼ï¼ä¸ä¼èªå¨æ·è´æ ¼å¼ |
| | | * @param fileName æä»¶åï¼å¿
é¡»æ¯wordæä»¶ |
| | | * @param tableDataBOList è¦åå
¥å°æä»¶çä¿¡æ¯ |
| | | * @throws FileNotFoundException æä»¶ä¸åå¨çæ¶å伿åºå¼å¸¸ |
| | | * @throws VciBaseException åå
¥æ°æ®åºéæ¶ä¼æåºå¼å¸¸ |
| | | */ |
| | | public static void setTableDataToWord(String fileName, List<WordMergeStartTableDataBO> tableDataBOList) throws FileNotFoundException, VciBaseException{ |
| | | alertNotNull(fileName,"wordçæä»¶åç§°"); |
| | | setTableDataToWord(new File(fileName),tableDataBOList); |
| | | } |
| | | |
| | | /** |
| | | * å¾wordåå
¥è¡¨æ ¼æ°æ®ï¼è¿ç§æ¯ä½¿ç¨startTableçæ¹å¼ï¼ä¸ä¼èªå¨æ·è´æ ¼å¼ |
| | | * @param file æä»¶,å¿
é¡»æ¯wordæä»¶ |
| | | * @param tableDataBOList è¦åå
¥å°æä»¶çä¿¡æ¯ |
| | | * @throws FileNotFoundException æä»¶ä¸åå¨çæ¶å伿åºå¼å¸¸ |
| | | * @throws VciBaseException åå
¥æ°æ®åºéæ¶ä¼æåºå¼å¸¸ |
| | | */ |
| | | public static void setTableDataToWord(File file, List<WordMergeStartTableDataBO> tableDataBOList) throws FileNotFoundException, VciBaseException{ |
| | | alertNotNull(file,"wordæä»¶"); |
| | | if(!file.exists()){ |
| | | throw new FileNotFoundException(file.getName()); |
| | | } |
| | | InputStream in = null; |
| | | Document document = null; |
| | | try{ |
| | | in = new FileInputStream(file); |
| | | document = new Document(in); |
| | | }catch (Exception e){ |
| | | IOUtils.closeQuietly(in); |
| | | //ä¸è½å¨finallyéå
³éï¼å 为åé¢è¿éè¦ç¨ |
| | | throw new VciBaseException("åå§åwordææ¡£å¯¹è±¡çæ¶ååºç°äºé误,{0}",new String[]{file.getAbsolutePath()},e); |
| | | } |
| | | try { |
| | | setTableDataToWord(document, tableDataBOList); |
| | | }catch (VciBaseException e){ |
| | | throw e; |
| | | }catch (Throwable e){ |
| | | throw new VciBaseException("åwordéåå
¥tableStartç±»åçååæ®µçæ¶ååºé,{0}",new String[]{file.getAbsolutePath()},e); |
| | | }finally { |
| | | IOUtils.closeQuietly(in); |
| | | } |
| | | try{ |
| | | document.save(file.getAbsolutePath()); |
| | | }catch (Exception e) { |
| | | throw new VciBaseException("å°wordçå
容è¿å¡«å°æä»¶ä¸åºç°äºé误,{0}",new String[]{file.getAbsolutePath()},e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æä¿¡æ¯åå
¥wordä¸çååæ®µä¸ï¼ååæ®µä¼ä¿çï¼ä½æ¯ç®åæå°ä¼ä¾ç¶æ¾ç¤ºå代ç ) |
| | | * @param fileName æä»¶å |
| | | * @param dataMap è¦åå
¥çæ°æ® |
| | | * @throws FileNotFoundException æä»¶ä¸å卿¶æåºå¼å¸¸ |
| | | * @throws VciBaseException åå
¥åºéçæ¶åæåºæ¤å¼å¸¸ |
| | | */ |
| | | public static void setFieldDataToWord(String fileName,Map<String,String> dataMap) throws FileNotFoundException, VciBaseException{ |
| | | alertNotNull(fileName,"wordçæä»¶åç§°"); |
| | | setFieldDataToWord(new File(fileName), dataMap,true); |
| | | } |
| | | |
| | | /** |
| | | * æä¿¡æ¯åå
¥wordä¸çååæ®µä¸,ååæ®µä¼ä¿çï¼ä½æ¯ç®åæå°ä¼ä¾ç¶æ¾ç¤ºå代ç ) |
| | | * @param file æä»¶ |
| | | * @param dataMap è¦åå
¥çæ°æ® |
| | | * @throws FileNotFoundException æä»¶ä¸å卿¶æåºå¼å¸¸ |
| | | * @throws VciBaseException åå
¥åºéçæ¶åæåºæ¤å¼å¸¸ |
| | | */ |
| | | public static void setFieldDataToWord(File file,Map<String,String> dataMap) throws FileNotFoundException, VciBaseException{ |
| | | setFieldDataToWord(file, dataMap,true); |
| | | } |
| | | |
| | | /** |
| | | * æä¿¡æ¯åå
¥wordä¸çååæ®µä¸,ååæ®µä¼ä¿çï¼ä½æ¯ç®åæå°ä¼ä¾ç¶æ¾ç¤ºå代ç ) |
| | | * @param file æä»¶ |
| | | * @param dataMap è¦åå
¥çæ°æ® |
| | | * @param retainFieldCode trueä¼ä¿çååæ®µ(使¯ç®åæå°ä¼ä¾ç¶æ¾ç¤ºå代ç ),falseä¸ä¼ä¿çååæ®µï¼æå°æ é®é¢ |
| | | * @throws FileNotFoundException æä»¶ä¸å卿¶æåºå¼å¸¸ |
| | | * @throws VciBaseException åå
¥åºéçæ¶åæåºæ¤å¼å¸¸ |
| | | */ |
| | | public static void setFieldDataToWord(File file,Map<String,String> dataMap,boolean retainFieldCode ) throws FileNotFoundException, VciBaseException{ |
| | | alertNotNull(file,"wordæä»¶"); |
| | | if(!file.exists()){ |
| | | throw new FileNotFoundException(file.getName()); |
| | | } |
| | | InputStream in = null; |
| | | Document document = null; |
| | | try{ |
| | | in = new FileInputStream(file); |
| | | document = new Document(in); |
| | | }catch (Exception e){ |
| | | IOUtils.closeQuietly(in); |
| | | //ä¸è½å¨finallyéå
³éï¼å 为åé¢è¿éè¦ç¨ |
| | | throw new VciBaseException("åå§åwordææ¡£å¯¹è±¡çæ¶ååºç°äºé误,{0}",new String[]{file.getAbsolutePath()},e); |
| | | } |
| | | try { |
| | | if(retainFieldCode) { |
| | | mergeMapForField(document, dataMap); |
| | | }else{ |
| | | mergeMapForFieldUnFormate(document, dataMap); |
| | | } |
| | | }catch (VciBaseException e){ |
| | | throw e; |
| | | }catch (Throwable e){ |
| | | throw new VciBaseException("åwordéçååæ®µåå
¥ä¿¡æ¯çæ¶ååºé,{0}",new String[]{file.getAbsolutePath()},e); |
| | | }finally { |
| | | IOUtils.closeQuietly(in); |
| | | } |
| | | try{ |
| | | document.save(file.getAbsolutePath()); |
| | | }catch (Exception e) { |
| | | throw new VciBaseException("å°wordçå
容è¿å¡«å°æä»¶ä¸åºç°äºé误,{0}",new String[]{file.getAbsolutePath()},e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å¾wordåå
¥è¡¨æ ¼æ°æ®ï¼è¿ç§æ¯ä½¿ç¨startTableçæ¹å¼ï¼ä¸ä¼èªå¨æ·è´æ ¼å¼ |
| | | * @param document wordææ¡£å¯¹è±¡ |
| | | * @param tableDataBOList è¦åå
¥å°æä»¶çä¿¡æ¯ |
| | | * @throws FileNotFoundException æä»¶ä¸åå¨çæ¶å伿åºå¼å¸¸ |
| | | * @throws VciBaseException åå
¥æ°æ®åºéæ¶ä¼æåºå¼å¸¸ |
| | | */ |
| | | public static void setTableDataToWord(Document document, List<WordMergeStartTableDataBO> tableDataBOList) throws VciBaseException{ |
| | | alertNotNull(document,"wordææ¡£å¯¹è±¡"); |
| | | if(!CollectionUtils.isEmpty(tableDataBOList)){ |
| | | try { |
| | | mergeBeanListUnFormate(document,tableDataBOList); |
| | | } catch (Exception e) { |
| | | logger.error("åwordéåå
¥tableStartç±»åçååæ®µçæ¶ååºé",e); |
| | | throw new VciBaseException("åwordéåå
¥tableStartç±»åçååæ®µçæ¶ååºé,{0}" ,new String[]{e.getLocalizedMessage()},e); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * åå
¥è¡¨æ ¼æ°æ®ï¼æ°çæ°æ®è¡çæ ¼å¼ä¸ä¼èªå¨ç»§æ¿ |
| | | * @param doc wordææ¡£ |
| | | * @param wordSignMergeTableDataList è¦åå
¥çæ°æ® |
| | | * @throws Exception åå
¥å¤±è´¥æè
è¡¨æ ¼ä¸åå¨çæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static void mergeBeanListUnFormate(Document doc, List<WordMergeStartTableDataBO> wordSignMergeTableDataList) throws Exception { |
| | | if(!CollectionUtils.isEmpty(wordSignMergeTableDataList)) { |
| | | for (WordMergeStartTableDataBO tableData : wordSignMergeTableDataList) { |
| | | boolean needMergeColumn = false; |
| | | String tableName = tableData.getTableName(); |
| | | Table thisTable = null; |
| | | boolean finedField = false; |
| | | int startRowIndex = -1; |
| | | Map<String,Integer> mergeColumnNameIndexMap = new HashMap<String, Integer>(); |
| | | List<String> mergeColumnList = str2List(tableData.getMergeColumn()); |
| | | if (StringUtils.isNotBlank(tableData.getMergeColumn()) && tableData.getTableDataList().size()> 1){ |
| | | needMergeColumn = true; |
| | | //æ¾å°ææçè¡¨æ ¼ä¸çåå
æ ¼ï¼çæ¯å¦æè¿ä¸ªè¡¨æ ¼çtableStartæ è®° |
| | | NodeCollection tableNodes = doc.getChildNodes(NodeType.TABLE, true); |
| | | Iterator tableIt = tableNodes.iterator(); |
| | | while (tableIt.hasNext()) { |
| | | Table table = (Table) tableIt.next(); |
| | | int rowCount = table.getRows().getCount(); |
| | | if (rowCount > 0) { |
| | | //说æè¿ä¸ªè¡¨æ ¼æè¡ |
| | | RowCollection rowCollection = table.getRows(); |
| | | for (int i = 0; i < rowCount; i++) { |
| | | Row row = rowCollection.get(i); |
| | | CellCollection cellCollection = row.getCells(); |
| | | if (cellCollection != null) { |
| | | for (int z = 0; z < cellCollection.getCount(); z++) { |
| | | Cell cell = cellCollection.get(z); |
| | | NodeCollection mergeCollection = cell.getChildNodes(NodeType.FIELD_START, true); |
| | | Iterator fieldNodes = mergeCollection.iterator(); |
| | | if (mergeCollection.getCount() > 0) { |
| | | while (fieldNodes.hasNext()) { |
| | | FieldStart fdStart = (FieldStart) fieldNodes.next(); |
| | | if (fdStart.getFieldType() == FieldType.FIELD_MERGE_FIELD) { |
| | | FieldMergeField fdMerge = (FieldMergeField) fdStart.getField(); |
| | | String fieldName = fdMerge.getFieldName(); |
| | | if (fieldName.equalsIgnoreCase("TableStart:" + tableName)) { |
| | | thisTable = table; |
| | | startRowIndex = i; |
| | | } |
| | | if(mergeColumnList.contains(fieldName)){ |
| | | mergeColumnNameIndexMap.put(fieldName,z); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if(thisTable != null){ |
| | | finedField = true; |
| | | break; |
| | | } |
| | | } |
| | | if(finedField){ |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | WordMergeListDataSource dataSource = new WordMergeListDataSource(tableData.getTableDataList(),tableName); |
| | | doc.getMailMerge().executeWithRegions(dataSource); |
| | | //å¤çäºå®æ°æ®åï¼æå¯è½éè¦å°è¡åå¹¶åå
æ ¼ |
| | | if (needMergeColumn && thisTable != null && mergeColumnNameIndexMap.size() > 0) { |
| | | List<Map<String, Object>> thisTableData = dataSource.getDataList(); |
| | | for (String mergeColumnName : mergeColumnList) { |
| | | //æ¾ææçæ°æ®ï¼è®°å½ç¸åè¡çæ°æ® |
| | | if(mergeColumnNameIndexMap.containsKey(mergeColumnName)) { |
| | | int columnIndex = mergeColumnNameIndexMap.get(mergeColumnName) + 1; |
| | | Map<Integer, Integer> mergeRowMap = new HashMap<Integer, Integer>(); |
| | | Object lastRowValue = ""; |
| | | int lastRowIndex = 0; |
| | | for (int i = 0; i < thisTableData.size(); i++) { |
| | | Map<String, Object> thisRowData = thisTableData.get(i); |
| | | Object thisCellValue = thisRowData.get(mergeColumnName); |
| | | if (thisCellValue == null) { |
| | | thisCellValue = ""; |
| | | } |
| | | if (i == 0) { |
| | | lastRowValue = thisCellValue; |
| | | lastRowIndex = startRowIndex; |
| | | //çäºèµ·å§è¡ï¼1 |
| | | } else if (i != thisTableData.size() - 1) { |
| | | if (!thisCellValue.toString().equalsIgnoreCase(lastRowValue.toString())) { |
| | | //说æåä¸ä¸è¡ä¸ä¸æ ·äº |
| | | mergeRowMap.put(lastRowIndex, i+startRowIndex-1); |
| | | lastRowValue = thisCellValue; |
| | | lastRowIndex = startRowIndex + i; |
| | | } |
| | | } else { |
| | | if (!thisCellValue.toString().equalsIgnoreCase(lastRowValue.toString())) { |
| | | //说æåä¸ä¸è¡ä¸ä¸æ ·äº |
| | | mergeRowMap.put(lastRowIndex, i+startRowIndex-1); |
| | | lastRowValue = thisCellValue; |
| | | lastRowIndex = startRowIndex + i; |
| | | // mergeRowMap.put(startRowIndex +i, startRowIndex +i); |
| | | }else{ |
| | | mergeRowMap.put(lastRowIndex, startRowIndex +i); |
| | | lastRowValue = thisCellValue; |
| | | lastRowIndex = startRowIndex + i; |
| | | } |
| | | |
| | | } |
| | | } |
| | | //æ¾å°äºææçç¸åçå
容ï¼è¯å®ä¼æå¼ |
| | | doMerge(thisTable,mergeRowMap,columnIndex); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ§è¡åå¹¶åå
æ ¼ |
| | | * @param thisTable è¡¨æ ¼å¯¹è±¡ |
| | | * @param mergeRowMap è¦åå¹¶çè¡ï¼keyæ¯å
¶å®è¡ï¼valueæ¯ç»æè¡ï¼ä»0å¼å§ |
| | | * @param columnIndex åçéè¦ï¼ä»0å¼å§ |
| | | */ |
| | | private static void doMerge(Table thisTable, Map<Integer, Integer> mergeRowMap, int columnIndex){ |
| | | if (mergeRowMap.size() > 0) { |
| | | for (Integer startRowIndex : mergeRowMap.keySet()) { |
| | | Integer endRowIndex = mergeRowMap.get(startRowIndex); |
| | | for (int x = startRowIndex; x <= endRowIndex; x++) { |
| | | //å¼å§çè¡è®¾ç½®ä¸ºFIRST,å
¶ä»çè¡è®¾ç½®ä¸ºPREVIOUS |
| | | if (x == startRowIndex) { |
| | | Cell cell = thisTable.getRows().get(x).getCells().get(columnIndex - 1); |
| | | cell.getCellFormat().setVerticalMerge(CellMerge.FIRST); |
| | | } else { |
| | | Cell cell = thisTable.getRows().get(x).getCells().get(columnIndex - 1); |
| | | cell.getCellFormat().setVerticalMerge(CellMerge.PREVIOUS); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 设置ååæ®µçå¼ï¼è¿ä¸ªååæ®µä¿®æ¹åå代ç è¿å¨ï¼ä¸è½åæ¢å代ç ï¼å¦åæ°æ®ä¸¢å¤±(注æï¼ç®ååç°æå°çæ¶åè¿æ¯æ¾ç¤ºå代ç ) |
| | | * @param doc wordææ¡£ |
| | | * @param dataMap æ°æ®æ å° |
| | | * @throws VciBaseException åå
¥å¤±è´¥æ¶ä¼æåºå¼å¸¸ |
| | | */ |
| | | public static void mergeMapForField(Document doc, Map<String, String> dataMap) throws VciBaseException{ |
| | | NodeCollection fieldStartNodes=doc.getChildNodes(NodeType.FIELD_START,true); |
| | | Iterator fieldNodes=fieldStartNodes.iterator(); |
| | | while(fieldNodes.hasNext()) { |
| | | FieldStart fdStart = (FieldStart) fieldNodes.next(); |
| | | if (fdStart.getFieldType() == FieldType.FIELD_MERGE_FIELD) { |
| | | FieldMergeField fdMerge = (FieldMergeField)fdStart.getField(); |
| | | String fieldName = fdMerge.getFieldName(); |
| | | if (dataMap.containsKey(fieldName)) { |
| | | try { |
| | | fdMerge.setResult(dataMap.get(fieldName)); |
| | | } catch (Exception e) { |
| | | throw new VciBaseException("åååæ®µçå
容åºé,{0}",new String[]{fieldName}); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 设置ååæ®µçå¼ï¼è¿ä¸ªååæ®µä¿®æ¹åå代ç ä¸ä¼ååå¨ï¼ä¹å°±æ¯ä¸è½åæ¬¡ä½¿ç¨ |
| | | * @param doc wordææ¡£ |
| | | * @param dataMap æ°æ®æ å° |
| | | * @throws VciBaseException åå
¥å¤±è´¥æ¶ä¼æåºå¼å¸¸ |
| | | */ |
| | | public static void mergeMapForFieldUnFormate(Document doc, Map<String, String> dataMap) throws VciBaseException{ |
| | | String[] fieldName = new String[dataMap.size()]; |
| | | Object[] values = new Object[dataMap.size()]; |
| | | int i = 0 ; |
| | | for(String field:dataMap.keySet()){ |
| | | fieldName[i] = field; |
| | | values[i] = dataMap.get(field); |
| | | i++; |
| | | } |
| | | |
| | | try { |
| | | doc.getMailMerge().execute(fieldName,values); |
| | | } catch (Exception e) { |
| | | throw new VciBaseException("åååæ®µçå
容åºé",new String[]{},e); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | <version>${plt.version}</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.apache.commons</groupId> |
| | | <artifactId>commons-lang3</artifactId> |
| | | <version>3.1</version> |
| | | </dependency> |
| | | <!--æä½xmléè¦--> |
| | | <dependency> |
| | | <groupId>dom4j</groupId> |
| | | <artifactId>dom4j</artifactId> |
| | | <version>1.6.1</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.alibaba</groupId> |
| | | <artifactId>fastjson</artifactId> |
| | | <version>1.2.83</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.freemarker</groupId> |
| | |
| | | <version>4.8</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.apache.logging.log4j</groupId> |
| | | <artifactId>log4j-api</artifactId> |
| | | <version>2.12.4</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.apache.logging.log4j</groupId> |
| | | <artifactId>log4j-core</artifactId> |
| | | <version>2.12.4</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>javax.mail</groupId> |
| | | <artifactId>mail</artifactId> |
| | | <version>1.4</version> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>org.jbpm</groupId> |
| | | <artifactId>jbpm-core</artifactId> |
| | | <version>4.3.2</version> |
| | | </dependency> |
| | | <!--commonsçå 个ç»ä»¶--> |
| | | <dependency> |
| | | <groupId>commons-net</groupId> |
| | | <artifactId>commons-net</artifactId> |
| | | <version>1.4.1</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>commons-io</groupId> |
| | | <artifactId>commons-io</artifactId> |
| | | <version>2.5</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>commons-fileupload</groupId> |
| | | <artifactId>commons-fileupload</artifactId> |
| | | <version>1.3.1</version> |
| | | </dependency> |
| | | <!---zipå缩 æ¿æ¢antzip--> |
| | | <dependency> |
| | | <groupId>net.lingala.zip4j</groupId> |
| | | <artifactId>zip4j</artifactId> |
| | | <version>1.3.2</version> |
| | | </dependency> |
| | | <!--zipå缩æéè¦çjar--> |
| | | <dependency> |
| | | <groupId>org.apache.commons</groupId> |
| | | <artifactId>commons-compress</artifactId> |
| | | <version>1.9</version> |
| | | </dependency> |
| | | |
| | | |
| | | </dependencies> |
| | | </project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | <parent> |
| | | <groupId>com.vci</groupId> |
| | | <artifactId>plt-web-parent</artifactId> |
| | | <version>2024.1-SNAPSHOT</version> |
| | | </parent> |
| | | |
| | | <artifactId>plt-web-base</artifactId> |
| | | |
| | | <properties> |
| | | <maven.compiler.source>8</maven.compiler.source> |
| | | <maven.compiler.target>8</maven.compiler.target> |
| | | <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
| | | </properties> |
| | | |
| | | <dependencies> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-thymeleaf</artifactId> |
| | | <version>${spring.version}</version> |
| | | </dependency> |
| | | <!--åç¬ä½¿ç¨feign--> |
| | | <dependency> |
| | | <groupId>org.springframework.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-openfeign</artifactId> |
| | | <version>${spring.version}</version> |
| | | </dependency> |
| | | <!--ç±äºfeignèªå¸¦çHttp客æ·ç«¯å®ç°æ¯HttpURLConnection,æææ¢æokHttpç¨äºæ¯æè¿æ¥æ± --> |
| | | <!-- https://mvnrepository.com/artifact/io.github.openfeign/feign-okhttp --> |
| | | <dependency> |
| | | <groupId>io.github.openfeign</groupId> |
| | | <artifactId>feign-okhttp</artifactId> |
| | | <version>10.2.3</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.freemarker</groupId> |
| | | <artifactId>freemarker</artifactId> |
| | | <version>2.3.23</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>cn.hutool</groupId> |
| | | <artifactId>hutool-all</artifactId> |
| | | <version>5.4.3</version> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.common.log; |
| | | |
| | | import com.vci.starter.web.annotation.log.VciUnLog; |
| | | import com.vci.starter.common.log.autoconfigure.VciAutoLogConfigure; |
| | | import com.vci.starter.web.enumpck.LogLevelEnum; |
| | | import com.vci.starter.web.util.LangBaseUtil; |
| | | import org.aspectj.lang.JoinPoint; |
| | | import org.aspectj.lang.annotation.*; |
| | | import org.aspectj.lang.reflect.MethodSignature; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.core.DefaultParameterNameDiscoverer; |
| | | import org.springframework.core.ParameterNameDiscoverer; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.lang.reflect.Method; |
| | | import java.util.Arrays; |
| | | import java.util.Collection; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æ¥å¿è®°å½åé¢ |
| | | * @author weidy |
| | | * @date 2020/4/10 |
| | | */ |
| | | @Aspect |
| | | @Component |
| | | public class VciComponentLogAspect { |
| | | |
| | | /** |
| | | * å½åç±»çæ¥å¿è¾åº |
| | | */ |
| | | private Logger logger = LoggerFactory.getLogger(getClass()); |
| | | |
| | | /** |
| | | * æ¥å¿çé
ç½® |
| | | */ |
| | | @Autowired |
| | | private VciAutoLogConfigure logConfigure; |
| | | |
| | | /** |
| | | * ææçcontroller,component,serviceé½çæ§ |
| | | */ |
| | | @Pointcut("execution(public * com.vci..*.*(..)) && (@target(org.springframework.web.bind.annotation.RestController) " + |
| | | "|| @target(org.springframework.stereotype.Controller) || @target(org.springframework.stereotype.Service)" + |
| | | "|| @target(org.springframework.stereotype.Component)) && !(@target(com.vci.starter.web.annotation.log.VciUnLog)) ") |
| | | public void vciComponentLog(){} |
| | | |
| | | /** |
| | | * å¨åå
¥ç¹çæ¹æ³æ§è¡ä¹åï¼è·åæ¹æ³çåæ° |
| | | * @param joinPoint åå
¥ç¹ |
| | | */ |
| | | @Before("vciComponentLog()") |
| | | public void enterMethodLog(JoinPoint joinPoint){ |
| | | Method method = getMethod(joinPoint); |
| | | try { |
| | | if (logConfigure.isShowLog() && !checkIsUnLog(method)) { |
| | | //说æè¦è®°å½æ¥å¿ |
| | | Logger beforeLogger = LoggerFactory.getLogger(joinPoint.getTarget().getClass()); |
| | | //è¦æåæ°æå°åºæ¥ |
| | | ParameterNameDiscoverer pnd = new DefaultParameterNameDiscoverer(); |
| | | if (method != null) { |
| | | String[] parameterNames = pnd.getParameterNames(method); |
| | | Object[] args = joinPoint.getArgs(); |
| | | String logMsg = "è°ç¨äº" + joinPoint.getSignature().getName() + "æ¹æ³"; |
| | | if (parameterNames != null && parameterNames.length > 0) { |
| | | logMsg += "ï¼åæ°ä¸ºç©º"; |
| | | } else { |
| | | for (int i = 0; i < parameterNames.length; i++) { |
| | | logMsg += parameterNames[i] + "=" + getParamString(args[i]) + ";"; |
| | | } |
| | | } |
| | | if (LogLevelEnum.INFO.name().equalsIgnoreCase(logConfigure.getVciLogLevel()) && beforeLogger.isInfoEnabled()) { |
| | | beforeLogger.info(logMsg); |
| | | } |
| | | if (LogLevelEnum.DEBUG.name().equalsIgnoreCase(logConfigure.getVciLogLevel()) && beforeLogger.isDebugEnabled()) { |
| | | beforeLogger.debug(logMsg); |
| | | } |
| | | } else { |
| | | if (logger.isInfoEnabled()) { |
| | | logger.info(joinPoint.getTarget().getClass() + "." + joinPoint.getSignature().getName() + "è¿ä¸ªæ¹æ³æ²¡ææ¾å°Methodå¯¹è±¡ï¼æ¤å¤ç¨åºå¯è½æé®é¢"); |
| | | } |
| | | } |
| | | } |
| | | }catch (Throwable e1){ |
| | | //æ¥å¿é误äºä¸è¦å½±åå«ç |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 卿åºå¼å¸¸æ¶è®°å½ |
| | | * @param joinPoint åå
¥ç¹ |
| | | * @param e å¼å¸¸çåé |
| | | */ |
| | | @AfterThrowing(pointcut = "vciComponentLog()",throwing = "e") |
| | | public void exceptionMethodLog(JoinPoint joinPoint,Throwable e){ |
| | | Method method = getMethod(joinPoint); |
| | | try { |
| | | if (logConfigure.isShowLog() && !checkIsUnLog(method)) { |
| | | //说æè¦è®°å½æ¥å¿ |
| | | Logger exceptionLogger = LoggerFactory.getLogger(joinPoint.getTarget().getClass()); |
| | | //è¦æå¼å¸¸æå°åºæ¥ |
| | | if (exceptionLogger.isErrorEnabled()) { |
| | | exceptionLogger.error("è°ç¨äº" + joinPoint.getSignature().getName() + "æ¹æ³ï¼åºç°äºé误ï¼" + LangBaseUtil.getErrorMsg(e), e); |
| | | } |
| | | } |
| | | }catch (Throwable e1){ |
| | | //æ¥å¿é误äºä¸è¦å½±åå«ç |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å¨è°ç¨æååæ¶è®°å½ |
| | | * @param joinPoint åå
¥ç¹ |
| | | * @param returnVal è¿åå¼ |
| | | */ |
| | | @AfterReturning(pointcut = "vciComponentLog()",returning = "returnVal") |
| | | public void returnMethodLog(JoinPoint joinPoint,Object returnVal){ |
| | | Method method = getMethod(joinPoint); |
| | | try { |
| | | if (logConfigure.isShowLog() && !checkIsUnLog(method)) { |
| | | //说æè¦è®°å½æ¥å¿ |
| | | Logger returnLogger = LoggerFactory.getLogger(joinPoint.getTarget().getClass()); |
| | | //æè¿åç»ææå°åºæ¥ |
| | | String logMsg = "è°ç¨" + joinPoint.getSignature().getName() + "æ¹æ³æå," + getParamString(returnVal); |
| | | if (LogLevelEnum.INFO.name().equalsIgnoreCase(logConfigure.getVciLogLevel()) && returnLogger.isInfoEnabled()) { |
| | | returnLogger.info(logMsg); |
| | | } |
| | | if (LogLevelEnum.DEBUG.name().equalsIgnoreCase(logConfigure.getVciLogLevel()) && returnLogger.isDebugEnabled()) { |
| | | returnLogger.debug(logMsg); |
| | | } |
| | | } |
| | | }catch (Throwable e){ |
| | | //æ¥å¿é误äºä¸è¦å½±åå«ç |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·å被è°ç¨çæ¹æ³ |
| | | * @param joinPoint åå
¥ç¹ |
| | | * @return è°ç¨çæ¹æ³ |
| | | */ |
| | | public Method getMethod(JoinPoint joinPoint){ |
| | | MethodSignature signature = (MethodSignature) joinPoint.getSignature(); |
| | | Method method = signature.getMethod(); |
| | | return method; |
| | | } |
| | | |
| | | /** |
| | | * è·ååæ°çå
容å符串 |
| | | * @param obj åæ°å¯¹è±¡ |
| | | * @return åæ°è½¬æå符串 |
| | | */ |
| | | public String getParamString(Object obj){ |
| | | if(obj == null){ |
| | | return "没æè¿åå¼"; |
| | | }else{ |
| | | //ççæ¯å¦éå |
| | | if(obj instanceof Collection){ |
| | | final String[] paStr = {"["}; |
| | | ((Collection)obj).stream().limit(10).forEach(s->{ |
| | | if(s!=null) { |
| | | paStr[0] += s.toString() + ","; |
| | | }else{ |
| | | paStr[0] += "null,"; |
| | | } |
| | | }); |
| | | return paStr[0] + "]"; |
| | | }else if(obj instanceof Map){ |
| | | final String[] paStr = {"{"}; |
| | | ((Map)obj).forEach((k,v)->{ |
| | | if(v!=null) { |
| | | paStr[0] += k + ":" + v.toString() + ","; |
| | | }else{ |
| | | paStr[0] += k + ":null,"; |
| | | } |
| | | }); |
| | | return paStr[0] + "}"; |
| | | }else if(obj.getClass().isArray()){ |
| | | //è¯´ææ¯æ°ç» |
| | | final String[] paStr = {"["}; |
| | | Arrays.stream(((Object[]) obj)).limit(10).forEach( s->{ |
| | | if(s instanceof String) { |
| | | if (s != null ) { |
| | | paStr[0] += s.toString() + ","; |
| | | } else { |
| | | paStr[0] += "null,"; |
| | | } |
| | | } |
| | | }); |
| | | return paStr[0] + "]"; |
| | | }else { |
| | | return obj.toString(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¹æ³æ¯å¦è®°å½æ¥å¿ |
| | | * @param method 被è°ç¨çæ¹æ³ |
| | | * @return true 表示ä¸è®°å½æ¥å¿ |
| | | */ |
| | | private boolean checkIsUnLog(Method method){ |
| | | //妿æ´ä¸ªç±»æ·»å äºvciUnLog注解æ¶ï¼ä¸ä¼è¿å
¥å°è¿ä¸ªæ¹æ³ä¸ |
| | | if(method != null && method.isAnnotationPresent(VciUnLog.class)){ |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.common.log.autoconfigure; |
| | | |
| | | import org.springframework.boot.context.properties.ConfigurationProperties; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * æ¥å¿èªå¨è¯»åçé
ç½® |
| | | * @author weidy |
| | | * @date 2020/4/14 |
| | | */ |
| | | @Configuration |
| | | @ConfigurationProperties(prefix = "logging") |
| | | public class VciAutoLogConfigure { |
| | | |
| | | /** |
| | | * æ¯å¦èªå¨è®°å½è°ç¨æ¥å¿ |
| | | */ |
| | | private boolean showLog = false; |
| | | |
| | | /** |
| | | * èªå¨è®°å½çæ¥å¿ç级å«ï¼åªè½æ¯Infoæè
debug |
| | | */ |
| | | private String vciLogLevel = "info"; |
| | | |
| | | public boolean isShowLog() { |
| | | return showLog; |
| | | } |
| | | |
| | | public void setShowLog(boolean showLog) { |
| | | this.showLog = showLog; |
| | | } |
| | | |
| | | public String getVciLogLevel() { |
| | | return vciLogLevel; |
| | | } |
| | | |
| | | public void setVciLogLevel(String vciLogLevel) { |
| | | this.vciLogLevel = vciLogLevel; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "VciAutoLogConfigure{" + |
| | | "showLog=" + showLog + |
| | | ", vciLogLevel='" + vciLogLevel + '\'' + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.revision.bo; |
| | | |
| | | import com.vci.starter.web.pagemodel.TreeQueryObject; |
| | | |
| | | /** |
| | | * 转æ¢ä¸ºæ åæ°æ®æ¶çé
ç½®ä¿¡æ¯ |
| | | * @author weidy |
| | | * @date 2020/4/22 |
| | | */ |
| | | public class TreeWrapperOptions implements java.io.Serializable{ |
| | | /** |
| | | * 请å¿ä¿®æ¹è¿ä¸ªå¼ |
| | | */ |
| | | private static final long serialVersionUID = 3183500138266494574L; |
| | | |
| | | /** |
| | | * æ¾ç¤ºææ¬æä½¿ç¨ç屿§ |
| | | */ |
| | | private String textFieldName = "name"; |
| | | |
| | | /** |
| | | * å¤ä¸ªæ¾ç¤ºææ¬ç屿§æ¶çåéç¬¦ï¼æç»æ¾ç¤ºçå¼çåéç¬¦ï¼ |
| | | */ |
| | | private String textValueSep = " "; |
| | | /** |
| | | * ä¸çº§æ°æ®ç屿§åç§° |
| | | */ |
| | | private String parentFieldName; |
| | | |
| | | /** |
| | | * 主é®ç屿§åç§° |
| | | */ |
| | | private String oidFieldName = "oid"; |
| | | |
| | | /** |
| | | * å¤ä¸ªå¼å±æ§æ¶çåé符 |
| | | */ |
| | | private String oidValueSep = ","; |
| | | |
| | | /** |
| | | * æ¯å¦æ¥è¯¢ææç屿§ |
| | | */ |
| | | private boolean allAttributes = true; |
| | | |
| | | /** |
| | | * ä¸çº§ç主é®çå¼ |
| | | */ |
| | | private String parentOid; |
| | | |
| | | /** |
| | | * æ¯å¦å¤é |
| | | */ |
| | | private boolean multipleSelect = false; |
| | | |
| | | /** |
| | | * æ¯å¦æ¾ç¤ºå¤éæ¡ |
| | | */ |
| | | private boolean showCheckBox = false; |
| | | |
| | | /** |
| | | * æé 彿° |
| | | */ |
| | | public TreeWrapperOptions(){ |
| | | } |
| | | |
| | | /** |
| | | * 常ç¨çæé 彿°ï¼åªè®¾ç½®ä¸çº§å±æ§çåç§° |
| | | * @param parentFieldName ä¸çº§å±æ§çåç§° |
| | | */ |
| | | public TreeWrapperOptions(String parentFieldName){ |
| | | this.parentFieldName = parentFieldName; |
| | | } |
| | | |
| | | /** |
| | | * 常ç¨çæé 彿°ï¼è®¾ç½®æ¾ç¤ºtextåä¸çº§å±æ§çåç§° |
| | | * @param textFieldName æ¾ç¤ºææ¬å±æ§çåç§° |
| | | * @param parentFieldName ä¸çº§å±æ§çåç§° |
| | | */ |
| | | public TreeWrapperOptions(String textFieldName,String parentFieldName){ |
| | | this.textFieldName = textFieldName; |
| | | this.parentFieldName = parentFieldName; |
| | | } |
| | | |
| | | /** |
| | | * 常ç¨çæé 彿°ï¼è®¾ç½®æ¾ç¤ºtextãä¸çº§å±æ§çåç§°ã |
| | | * @param textFieldName æ¾ç¤ºææ¬å±æ§çåç§° |
| | | * @param parentFieldName ä¸çº§å±æ§çåç§° |
| | | * @param parentOid ä¸çº§ä¸»é® |
| | | */ |
| | | public TreeWrapperOptions(String textFieldName,String parentFieldName,String parentOid){ |
| | | this.textFieldName = textFieldName; |
| | | this.parentFieldName = parentFieldName; |
| | | this.parentOid = parentOid; |
| | | } |
| | | |
| | | /** |
| | | * 仿 å½¢æ¥è¯¢å¯¹è±¡ä¸æ·è´ |
| | | * @param treeQueryObject æ å½¢æ¥è¯¢å¯¹è±¡ |
| | | */ |
| | | public void copyFromTreeQuery(TreeQueryObject treeQueryObject){ |
| | | if(treeQueryObject != null){ |
| | | this.parentOid = treeQueryObject.getParentOid(); |
| | | this.multipleSelect = treeQueryObject.isMultipleSelect(); |
| | | this.showCheckBox = treeQueryObject.isShowCheckBox(); |
| | | } |
| | | } |
| | | |
| | | public String getTextFieldName() { |
| | | return textFieldName; |
| | | } |
| | | |
| | | public void setTextFieldName(String textFieldName) { |
| | | this.textFieldName = textFieldName; |
| | | } |
| | | |
| | | public String getParentFieldName() { |
| | | return parentFieldName; |
| | | } |
| | | |
| | | public void setParentFieldName(String parentFieldName) { |
| | | this.parentFieldName = parentFieldName; |
| | | } |
| | | |
| | | public String getOidFieldName() { |
| | | return oidFieldName; |
| | | } |
| | | |
| | | public void setOidFieldName(String oidFieldName) { |
| | | this.oidFieldName = oidFieldName; |
| | | } |
| | | |
| | | public boolean isAllAttributes() { |
| | | return allAttributes; |
| | | } |
| | | |
| | | public void setAllAttributes(boolean allAttributes) { |
| | | this.allAttributes = allAttributes; |
| | | } |
| | | |
| | | public String getParentOid() { |
| | | return parentOid; |
| | | } |
| | | |
| | | public void setParentOid(String parentOid) { |
| | | this.parentOid = parentOid; |
| | | } |
| | | |
| | | public boolean isMultipleSelect() { |
| | | return multipleSelect; |
| | | } |
| | | |
| | | public void setMultipleSelect(boolean multipleSelect) { |
| | | this.multipleSelect = multipleSelect; |
| | | } |
| | | |
| | | public boolean isShowCheckBox() { |
| | | return showCheckBox; |
| | | } |
| | | |
| | | public void setShowCheckBox(boolean showCheckBox) { |
| | | this.showCheckBox = showCheckBox; |
| | | } |
| | | |
| | | public String getTextValueSep() { |
| | | return textValueSep; |
| | | } |
| | | |
| | | public void setTextValueSep(String textValueSep) { |
| | | this.textValueSep = textValueSep; |
| | | } |
| | | |
| | | public String getOidValueSep() { |
| | | return oidValueSep; |
| | | } |
| | | |
| | | public void setOidValueSep(String oidValueSep) { |
| | | this.oidValueSep = oidValueSep; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "TreeWrapperOptions{" + |
| | | "textFieldName='" + textFieldName + '\'' + |
| | | ", textValueSep='" + textValueSep + '\'' + |
| | | ", parentFieldName='" + parentFieldName + '\'' + |
| | | ", oidFieldName='" + oidFieldName + '\'' + |
| | | ", oidValueSep='" + oidValueSep + '\'' + |
| | | ", allAttributes=" + allAttributes + |
| | | ", parentOid='" + parentOid + '\'' + |
| | | ", multipleSelect=" + multipleSelect + |
| | | ", showCheckBox=" + showCheckBox + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.revision.model; |
| | | |
| | | /** |
| | | * å·²åå¸çæ°æ® |
| | | * ä»
å¨æçæ¬ç®¡ççä¸å¡ç±»åæåå¨ |
| | | * @author weidy |
| | | * @date 2020/3/17 |
| | | */ |
| | | public class ReleasedObjDO implements java.io.Serializable{ |
| | | /** |
| | | * ç¦æ¢ä¿®æ¹è¿ä¸ªå¼ |
| | | */ |
| | | private static final long serialVersionUID = -7258896338253286905L; |
| | | |
| | | /** |
| | | * ä¸»é® |
| | | */ |
| | | private String oid; |
| | | |
| | | /** |
| | | * çæ¬çä¸»é® |
| | | */ |
| | | private String revisionOid; |
| | | |
| | | /** |
| | | * 对象çä¸»é® |
| | | */ |
| | | private String nameOid; |
| | | |
| | | /** |
| | | * ä¸å¡ç±»å |
| | | */ |
| | | private String btmName; |
| | | |
| | | public String getOid() { |
| | | return oid; |
| | | } |
| | | |
| | | public void setOid(String oid) { |
| | | this.oid = oid; |
| | | } |
| | | |
| | | public String getRevisionOid() { |
| | | return revisionOid; |
| | | } |
| | | |
| | | public void setRevisionOid(String revisionOid) { |
| | | this.revisionOid = revisionOid; |
| | | } |
| | | |
| | | public String getNameOid() { |
| | | return nameOid; |
| | | } |
| | | |
| | | public void setNameOid(String nameOid) { |
| | | this.nameOid = nameOid; |
| | | } |
| | | |
| | | public String getBtmName() { |
| | | return btmName; |
| | | } |
| | | |
| | | public void setBtmName(String btmName) { |
| | | this.btmName = btmName; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "ReleasedObjDO{" + |
| | | "oid='" + oid + '\'' + |
| | | ", revisionOid='" + revisionOid + '\'' + |
| | | ", nameOid='" + nameOid + '\'' + |
| | | ", btmName='" + btmName + '\'' + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.revision.model; |
| | | |
| | | /** |
| | | * çæ¬çä¿¡æ¯ |
| | | * @author weidy |
| | | * @date 2020/4/15 |
| | | */ |
| | | public class RevisionInfo implements java.io.Serializable { |
| | | |
| | | /** |
| | | * ç¦æ¢ä¿®æ¹è¿ä¸ªå¼ |
| | | */ |
| | | private static final long serialVersionUID = 7167255550437885283L; |
| | | |
| | | /** |
| | | * 主é®ï¼å¦æèªå·±ç对象ï¼ä¸æ¯oidä½ä¸ºä¸»é®çè¯ï¼éè¦ç¨idè¿ä¸ªæ³¨è§£ |
| | | */ |
| | | private String oid; |
| | | |
| | | /** |
| | | * 对象çä¸»é® |
| | | */ |
| | | private String nameOid; |
| | | |
| | | /** |
| | | * çæ¬çä¸»é® |
| | | */ |
| | | private String revisionOid; |
| | | |
| | | /** |
| | | * æ¯å¦æåçæ¬¡----å¨éç¨äºçº§çæ¬ç®¡çæ¶ææç次ï¼å¯ä»¥ç解为å°çæ¬ |
| | | */ |
| | | private String lastR; |
| | | |
| | | |
| | | /** |
| | | * æ¯å¦æåçæ¬¡ |
| | | */ |
| | | private String firstR; |
| | | |
| | | |
| | | /** |
| | | * æ¯å¦ææ°çæ¬ |
| | | */ |
| | | private String lastV; |
| | | |
| | | |
| | | /** |
| | | * æ¯å¦ææ©çæ¬ |
| | | */ |
| | | private String firstV; |
| | | |
| | | /** |
| | | * çæ¬è§å |
| | | */ |
| | | private String revisionRule; |
| | | |
| | | |
| | | /** |
| | | * çæ¬åºå· |
| | | */ |
| | | private Integer revisionSeq; |
| | | |
| | | /** |
| | | * çæ¬å¼ |
| | | */ |
| | | private String revisionValue; |
| | | |
| | | |
| | | /** |
| | | * çæ¬¡è§å |
| | | */ |
| | | private String versionRule; |
| | | |
| | | /** |
| | | * çæ¬¡æåº |
| | | */ |
| | | private Integer versionSeq; |
| | | |
| | | /** |
| | | * çæ¬¡å¼ |
| | | */ |
| | | private String versionValue; |
| | | |
| | | /** |
| | | * ä¸å¡ç±»åçåç§° |
| | | */ |
| | | private String btmname; |
| | | |
| | | public String getBtmname() { |
| | | return btmname; |
| | | } |
| | | |
| | | public void setBtmname(String btmname) { |
| | | this.btmname = btmname; |
| | | } |
| | | |
| | | public String getOid() { |
| | | return oid; |
| | | } |
| | | |
| | | public void setOid(String oid) { |
| | | this.oid = oid; |
| | | } |
| | | |
| | | public String getNameOid() { |
| | | return nameOid; |
| | | } |
| | | |
| | | public void setNameOid(String nameOid) { |
| | | this.nameOid = nameOid; |
| | | } |
| | | |
| | | public String getRevisionOid() { |
| | | return revisionOid; |
| | | } |
| | | |
| | | public void setRevisionOid(String revisionOid) { |
| | | this.revisionOid = revisionOid; |
| | | } |
| | | |
| | | public String getLastR() { |
| | | return lastR; |
| | | } |
| | | |
| | | public void setLastR(String lastR) { |
| | | this.lastR = lastR; |
| | | } |
| | | |
| | | public String getFirstR() { |
| | | return firstR; |
| | | } |
| | | |
| | | public void setFirstR(String firstR) { |
| | | this.firstR = firstR; |
| | | } |
| | | |
| | | public String getLastV() { |
| | | return lastV; |
| | | } |
| | | |
| | | public void setLastV(String lastV) { |
| | | this.lastV = lastV; |
| | | } |
| | | |
| | | public String getFirstV() { |
| | | return firstV; |
| | | } |
| | | |
| | | public void setFirstV(String firstV) { |
| | | this.firstV = firstV; |
| | | } |
| | | |
| | | public String getRevisionRule() { |
| | | return revisionRule; |
| | | } |
| | | |
| | | public void setRevisionRule(String revisionRule) { |
| | | this.revisionRule = revisionRule; |
| | | } |
| | | |
| | | public int getRevisionSeq() { |
| | | return revisionSeq; |
| | | } |
| | | |
| | | public void setRevisionSeq(Integer revisionSeq) { |
| | | this.revisionSeq = revisionSeq; |
| | | } |
| | | |
| | | public String getRevisionValue() { |
| | | return revisionValue; |
| | | } |
| | | |
| | | public void setRevisionValue(String revisionValue) { |
| | | this.revisionValue = revisionValue; |
| | | } |
| | | |
| | | public String getVersionRule() { |
| | | return versionRule; |
| | | } |
| | | |
| | | public void setVersionRule(String versionRule) { |
| | | this.versionRule = versionRule; |
| | | } |
| | | |
| | | public int getVersionSeq() { |
| | | return versionSeq; |
| | | } |
| | | |
| | | public void setVersionSeq(Integer versionSeq) { |
| | | this.versionSeq = versionSeq; |
| | | } |
| | | |
| | | public String getVersionValue() { |
| | | return versionValue; |
| | | } |
| | | |
| | | public void setVersionValue(String versionValue) { |
| | | this.versionValue = versionValue; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "RevisionInfo{" + |
| | | "oid='" + oid + '\'' + |
| | | ", nameOid='" + nameOid + '\'' + |
| | | ", revisionOid='" + revisionOid + '\'' + |
| | | ", lastR='" + lastR + '\'' + |
| | | ", firstR='" + firstR + '\'' + |
| | | ", lastV='" + lastV + '\'' + |
| | | ", firstV='" + firstV + '\'' + |
| | | ", revisionRule='" + revisionRule + '\'' + |
| | | ", revisionSeq=" + revisionSeq + |
| | | ", revisionValue='" + revisionValue + '\'' + |
| | | ", versionRule='" + versionRule + '\'' + |
| | | ", versionSeq=" + versionSeq + |
| | | ", versionValue='" + versionValue + '\'' + |
| | | ", btmname='" + btmname + '\'' + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.revision.provider; |
| | | |
| | | import com.vci.starter.web.pagemodel.BaseQueryObject; |
| | | import com.vci.starter.web.pagemodel.BaseResult; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 注éçè°ç¨å¨ |
| | | * @author weidy |
| | | * @date 2020/4/17 |
| | | */ |
| | | @FeignClient(name="commonAnnotationProvider",url="${vciPlatform.objectServiceUrl}",path = "annotationController") |
| | | public interface CommonAnnotationProvider { |
| | | |
| | | /** |
| | | * æ¹éè·åç±»ä¸é¢ç注é |
| | | * @param queryObject æ¥è¯¢æ¡ä»¶ï¼å
¶ä¸å¦ææå®ç±»çåç§°æ¶ï¼ä½¿ç¨classnameåæ°ï¼å¼ç¨éå·åéï¼å¦ææå®å
åæ¶ï¼ä½¿ç¨packagenameåæ°ï¼å¼ç¨éå·åé |
| | | * @return 夿successåè·ådata屿§ï¼å
¶ä¸å±æ§çå
容为Map<ç±»å
¨è·¯å¾,Map<屿§è±æåç§°å°å,屿§ä¸æåç§°>>æ ¼å¼ |
| | | */ |
| | | @PostMapping("/batchListFieldNameAnnotation") |
| | | BaseResult<Map<String,Map<String,String>>> batchListFieldNameAnnotation(BaseQueryObject queryObject); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.revision.provider; |
| | | |
| | | import com.vci.starter.web.pagemodel.BaseResult; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | |
| | | /** |
| | | * éç¨ççå½å¨æçè°ç¨ |
| | | * @author weidy |
| | | * @date 2020/4/15 |
| | | */ |
| | | @FeignClient(name="commonLifeCycleProvider",url="${vciPlatform.objectServiceUrl}",path = "lifeCycleController") |
| | | public interface CommonLifeCycleProvider { |
| | | |
| | | /** |
| | | * è·åçå½å¨æçèµ·å§ç¶æçå¼ |
| | | * @param lifeCycleId çå½å¨æçè±æåç§°ï¼ä¸åºå大å°å |
| | | * @return å
夿successï¼ç¶ååobjçå¼ |
| | | */ |
| | | @GetMapping("/getStartStatus") |
| | | BaseResult getStartStatus(@RequestParam("lifeCycleId")String lifeCycleId); |
| | | |
| | | /** |
| | | * æ¥è¯¢ç¶æçææ¬ |
| | | * @param lcStatus ç¶æçå¼ |
| | | * @param btmTypeId ä¸å¡ç±»åçç¼å· |
| | | * @return ç¶æçæ¾ç¤ºææ¬ |
| | | */ |
| | | @GetMapping("/getStatusText") |
| | | BaseResult getStatusText(@RequestParam("lcStatus")String lcStatus,@RequestParam("btmTypeId")String btmTypeId); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.revision.provider; |
| | | |
| | | import com.vci.starter.web.pagemodel.BaseResult; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | |
| | | /** |
| | | * çæ¬çè°ç¨å¨ |
| | | * @author weidy |
| | | * @date 2020/4/15 |
| | | */ |
| | | @FeignClient(name="commonRevisionRuleProvider",url="${vciPlatform.objectServiceUrl}",path = "revisionRuleController") |
| | | public interface CommonRevisionRuleProvider { |
| | | |
| | | /** |
| | | * æ ¹æ®è§åè·åä¸ä¸ä¸ªçæ¬å· |
| | | * @param ruleId çæ¬è§åçè±æåç§° |
| | | * @param currentRevisionValue å½åçå¼ |
| | | * @return å
夿successï¼ååobj屿§ |
| | | */ |
| | | @GetMapping("/getNextRevisionValue") |
| | | BaseResult getNextRevisionValue(@RequestParam("ruleId") String ruleId, @RequestParam("currentRevisionValue") String currentRevisionValue); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.revision.service; |
| | | |
| | | import com.sun.org.apache.xpath.internal.operations.Bool; |
| | | import com.vci.starter.revision.bo.TreeWrapperOptions; |
| | | import com.vci.starter.revision.model.*; |
| | | import com.vci.starter.revision.provider.*; |
| | | import com.vci.starter.web.annotation.Column; |
| | | import com.vci.starter.web.annotation.VciBtmType; |
| | | import com.vci.starter.web.annotation.VciColumnDefinition; |
| | | import com.vci.starter.web.constant.RevisionConstant; |
| | | import com.vci.starter.web.constant.RegExpConstant; |
| | | import com.vci.starter.web.enumpck.DataSecretEnum; |
| | | import com.vci.starter.web.enumpck.UserSecretEnum; |
| | | import com.vci.starter.web.exception.VciBaseException; |
| | | import com.vci.starter.web.model.BaseLinkModel; |
| | | import com.vci.starter.web.model.BaseModel; |
| | | import com.vci.starter.web.pagemodel.BaseResult; |
| | | import com.vci.starter.web.pagemodel.PageHelper; |
| | | import com.vci.starter.web.pagemodel.Tree; |
| | | import com.vci.starter.web.pagemodel.TreeQueryObject; |
| | | import com.vci.starter.web.service.VciSecretServiceI; |
| | | import com.vci.starter.web.util.BeanUtil; |
| | | import com.vci.starter.web.util.BeanUtilForVCI; |
| | | import com.vci.starter.web.util.VciBaseUtil; |
| | | import com.vci.starter.web.util.VciDateUtil; |
| | | import com.vci.starter.web.wrapper.VciQueryWrapperForDO; |
| | | import com.vci.starter.web.wrapper.VciQueryWrapperOption; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.util.CollectionUtils; |
| | | import java.lang.reflect.Field; |
| | | import java.util.*; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | | import java.util.function.Function; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * çæ¬å对象模åçå·¥å
·ç±» |
| | | * @author weidy |
| | | * @date 2020/4/15 |
| | | */ |
| | | @Component |
| | | public class RevisionModelUtil implements VciSecretServiceI { |
| | | |
| | | /** |
| | | * æ¥å¿å¯¹è±¡ |
| | | */ |
| | | private Logger logger = LoggerFactory.getLogger(getClass()); |
| | | |
| | | /** |
| | | * åå¨å¯¹è±¡ç±»ç屿§ç注é |
| | | */ |
| | | public volatile static Map<String, Map<String,String>> modelColumnAnnotationMap = new ConcurrentHashMap<>(); |
| | | |
| | | /** |
| | | * å®ä½ç±»åæ³¨è§£çæ å°ï¼å¨springbootçå è½½çæ¶åä¸å®è¦æ¸
é¤ |
| | | */ |
| | | public volatile static Map<String,VciBtmType> modelAnnotationMap = new ConcurrentHashMap<>(); |
| | | |
| | | /** |
| | | * 夿å¹çæ§ï¼ä½¿ç¨redis |
| | | */ |
| | | public static boolean CHECK_IDEMPOTENCE = false; |
| | | |
| | | /** |
| | | * çæ¬çæ°æ®æä½å± |
| | | */ |
| | | @Autowired(required = false) |
| | | private VciRevisionServiceI revisionMapper; |
| | | |
| | | /** |
| | | * çæ¬çè°ç¨å¨ |
| | | */ |
| | | @Autowired(required = false) |
| | | private CommonRevisionRuleProvider revisionRuleProvider; |
| | | |
| | | /** |
| | | * çå½å¨æçè°ç¨å¨ |
| | | */ |
| | | @Autowired(required = false) |
| | | private CommonLifeCycleProvider lifeCycleProvider; |
| | | |
| | | /** |
| | | * 注éçè°ç¨æ¥å£ |
| | | */ |
| | | @Autowired(required = false) |
| | | private CommonAnnotationProvider annotationProvider; |
| | | |
| | | /** |
| | | * æ¯ææ°çæ¬çå¼ |
| | | */ |
| | | public static final String LAST_REV_VALUE = "1"; |
| | | |
| | | /** |
| | | * 䏿¯ææ°çæ¬çå¼ |
| | | */ |
| | | public static final String UN_LAST_REV_VALUE = "0"; |
| | | |
| | | |
| | | /** |
| | | * 卿°æ®æ°å¢çæ¶åå°è£
屿§ï¼å
æ¬å建è
åçå½å¨æçï¼,并䏿 ¡éªå¿
è¾é¡¹ï¼å¯ä¸é¡¹(å
¶ä¸å¯ä¸é¡¹å¯¹äºæ¶é´æ æ³å¤æï¼ï¼å¯çº§ |
| | | * @param baseModel åºç¡æ°æ®å¯¹è±¡ |
| | | */ |
| | | public void wrapperForAdd(BaseModel baseModel){ |
| | | wrapperForAddOrUpVersion(baseModel,false,false); |
| | | } |
| | | |
| | | /** |
| | | * æ¹éæ·»å æ°æ® |
| | | * @param baseModelCollection æ°æ®å¯¹è±¡éå |
| | | */ |
| | | public void wrapperForBatchAdd(Collection<? extends BaseModel> baseModelCollection ){ |
| | | VciBaseUtil.alertCollectionNotNull("è¦æ°å¢çæ°æ®å¯¹è±¡",baseModelCollection); |
| | | BaseModel fristModel = baseModelCollection.iterator().next(); |
| | | VciBtmType vciBtmType = getBtmTypeAnnotation(fristModel); |
| | | if(vciBtmType == null){ |
| | | throw new VciBaseException("å®ä½å¯¹è±¡ä¸æ²¡ææ·»å VciBtmType注解"); |
| | | } |
| | | //æcolumn注解ç屿§ï¼æè¿ä¸ªæ³¨è§£æéè¦æ ¡éªå¿
è¾é¡¹åå¯ä¸é¡¹ |
| | | List<Field> hasColumnAnnoFields = filterHasColumnAnnoFields(VciBaseUtil.getAllFieldForObj(fristModel.getClass())); |
| | | //å¿
è¾é¡¹ |
| | | List<Field> checkNullFields = filterCheckNullFields(hasColumnAnnoFields); |
| | | //å¯ä¸é¡¹çï¼å
å«ä¸åºå大å°åååºå大å°åç |
| | | Map<Field/**è¦æ ¡éªå¯ä¸é¡¹ç屿§**/, Boolean/**æ¯å¦ä¸åºå大å°å**/> checkUniqueFieldsMap = filterCheckUniqueFieldsHasUnCase(fristModel.getClass()); |
| | | |
| | | //å¯ä¸ç屿§çå¼ |
| | | Map<String/**屿§çåç§°**/,Set<Object>> unqiueFieldValueMap = new HashMap<>(); |
| | | |
| | | String creator = VciBaseUtil.getCurrentUserId(); |
| | | Date currentDate= new Date(); |
| | | String btmName = vciBtmType.name(); |
| | | |
| | | //è·åé»è®¤ççæ¬å·ï¼çå½å¨æï¼å¯çº§ |
| | | |
| | | wrapperFristRevision(fristModel); |
| | | wrapperLifeCycle(fristModel); |
| | | boolean manageRevision = isManageRevision(vciBtmType); |
| | | boolean manageLifeCycle = isManageLifeCycle(vciBtmType); |
| | | boolean checkSecret = isCheckSecret(vciBtmType); |
| | | |
| | | //éåï¼å®é
乿¯æ¯ä¸ä¸ªå¤ç䏿¬¡ï¼åªæ¯çæ¬åçå½å¨æçä¸éå¤è·å |
| | | baseModelCollection.stream().forEach(s -> { |
| | | VciBaseUtil.alertNotNull(s,"è¦æ·»å çæ°æ®å¯¹è±¡"); |
| | | setBaseFieldValue(s,creator,currentDate,btmName); |
| | | //æ ¡éªå¿
è¾é¡¹ |
| | | checkFieldsRequired(checkNullFields,s); |
| | | //å
夿å½åéåä¸å¯ä¸é¡¹æ¯å¦æéå¤ |
| | | if(!CollectionUtils.isEmpty(checkUniqueFieldsMap)){ |
| | | checkUniqueFieldsMap.forEach( (field,unCase) ->{ |
| | | checkUniqueValues(field,unCase,s,unqiueFieldValueMap,false); |
| | | }); |
| | | } |
| | | |
| | | //å 为æ°å¢é½ä¸å®æ¯ç¬¬ä¸ä¸ªçæ¬åçæ¬¡ï¼æä»¥å¦ææ²¡æè®¾ç½®çæ¶åï¼å
¨é¨ç¨åå§çæ¬å· |
| | | if(manageRevision){ |
| | | if(StringUtils.isBlank(s.getNameOid())){ |
| | | s.setNameOid(VciBaseUtil.getPk()); |
| | | } |
| | | if(StringUtils.isBlank(s.getRevisionOid())){ |
| | | s.setRevisionOid(VciBaseUtil.getPk()); |
| | | } |
| | | s.setRevisionRule(fristModel.getRevisionRule()); |
| | | s.setRevisionValue(fristModel.getRevisionValue()); |
| | | s.setRevisionSeq(1); |
| | | s.setFirstR("1"); |
| | | s.setLastR("1"); |
| | | s.setVersionRule(fristModel.getVersionRule()); |
| | | s.setVersionValue(fristModel.getVersionValue()); |
| | | s.setVersionSeq(1); |
| | | s.setLastV("1"); |
| | | s.setFirstV("1"); |
| | | } |
| | | if(manageLifeCycle && StringUtils.isBlank(s.getLcStatus())){ |
| | | s.setLcStatus(fristModel.getLcStatus()); |
| | | } |
| | | if(checkSecret){ |
| | | checkDataSecret(s); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 卿°æ®ä¿®æ¹çæ¶åå°è£
屿§ |
| | | * @param baseModel åºç¡æ°æ®å¯¹è±¡ |
| | | */ |
| | | public void wrapperForEdit(BaseModel baseModel){ |
| | | VciBaseUtil.alertNotNull(baseModel,"è¦ä¿®æ¹çæ°æ®å¯¹è±¡",baseModel.getOid(),"æ°æ®ç主é®"); |
| | | Date currentDate = new Date(); |
| | | baseModel.setTs(currentDate); |
| | | baseModel.setLastModifier(VciBaseUtil.getCurrentUserId()); |
| | | baseModel.setLastModifyTime(currentDate); |
| | | // |
| | | VciBtmType vciBtmType = getBtmTypeAnnotation(baseModel); |
| | | if(StringUtils.isBlank(baseModel.getBtmname()) && vciBtmType!=null){ |
| | | baseModel.setBtmname(vciBtmType.name()); |
| | | } |
| | | //è·åå
å«äºcolumn注解ç屿§ï¼å 为ä¸å
å«è¿ä¸ªæ³¨è§£çæ¶åæ¯é»è®¤nullable为trueï¼unique为false |
| | | List<Field> hasColumnAnnoFields = filterHasColumnAnnoFields(baseModel); |
| | | //夿æ¯å¦æç©ºç屿§ |
| | | checkFieldsRequired(filterCheckNullFields(hasColumnAnnoFields),baseModel); |
| | | Map<Field,Boolean> checkUniqueFields = filterCheckUniqueFieldsHasUnCase(hasColumnAnnoFields); |
| | | if(!CollectionUtils.isEmpty(checkUniqueFields)){ |
| | | checkUniqueFields.forEach((field,unCase) ->{ |
| | | checkUniqueValues(field,unCase,baseModel,new HashMap<>(),true); |
| | | }); |
| | | } |
| | | //æ ¡éªå¯çº§ |
| | | checkDataSecret(baseModel); |
| | | //ä¿®æ¹çæ¶åçæ¬å·åçå½å¨æä¸åºè¯¥åå |
| | | } |
| | | |
| | | /** |
| | | * æ¹éä¿®æ¹æ°æ®å¯¹è±¡æ¶å°è£
屿§ï¼å
æ¬å¯ä¸é¡¹ï¼å¿
è¾é¡¹ååºæ¬å±æ§è®¾ç½® |
| | | * @param baseModelCollection æ°æ®å¯¹è±¡éå |
| | | */ |
| | | public void wrapperForBatchEdit(List<? extends BaseModel> baseModelCollection){ |
| | | VciBaseUtil.alertCollectionNotNull("è¦ä¿®æ¹çæ°æ®å¯¹è±¡",baseModelCollection); |
| | | BaseModel fristModel = baseModelCollection.iterator().next(); |
| | | VciBtmType vciBtmType = getBtmTypeAnnotation(fristModel); |
| | | if(vciBtmType == null){ |
| | | throw new VciBaseException("å®ä½å¯¹è±¡ä¸æ²¡ææ·»å VciBtmType注解"); |
| | | } |
| | | //æcolumn注解ç屿§ï¼æè¿ä¸ªæ³¨è§£æéè¦æ ¡éªå¿
è¾é¡¹åå¯ä¸é¡¹ |
| | | List<Field> hasColumnAnnoFields = filterHasColumnAnnoFields(VciBaseUtil.getAllFieldForObj(fristModel.getClass())); |
| | | //å¿
è¾é¡¹ |
| | | List<Field> checkNullFields = filterCheckNullFields(hasColumnAnnoFields); |
| | | //å¯ä¸é¡¹çï¼å
å«ä¸åºå大å°åååºå大å°åç |
| | | Map<Field/**è¦æ ¡éªå¯ä¸é¡¹ç屿§**/, Boolean/**æ¯å¦ä¸åºå大å°å**/> checkUniqueFieldsMap = filterCheckUniqueFieldsHasUnCase(fristModel.getClass()); |
| | | |
| | | //å¯ä¸ç屿§çå¼ |
| | | Map<String/**屿§çåç§°**/,Set<Object>> unqiueFieldValueMap = new HashMap<>(); |
| | | |
| | | String creator = VciBaseUtil.getCurrentUserId(); |
| | | Date currentDate= new Date(); |
| | | String btmName = vciBtmType.name(); |
| | | |
| | | boolean checkSecret = isCheckSecret(vciBtmType); |
| | | |
| | | //éåï¼å®é
乿¯æ¯ä¸ä¸ªå¤ç䏿¬¡ï¼åªæ¯çæ¬åçå½å¨æçä¸éå¤è·å |
| | | baseModelCollection.stream().forEach(s -> { |
| | | VciBaseUtil.alertNotNull(s,"è¦æ·»å çæ°æ®å¯¹è±¡"); |
| | | setBaseFieldValueEdit(s,creator,currentDate); |
| | | //æ ¡éªå¿
è¾é¡¹ |
| | | checkFieldsRequired(checkNullFields,s); |
| | | //å
夿å½åéåä¸å¯ä¸é¡¹æ¯å¦æéå¤ |
| | | if(!CollectionUtils.isEmpty(checkUniqueFieldsMap)){ |
| | | checkUniqueFieldsMap.forEach( (field,unCase) ->{ |
| | | checkUniqueValues(field,unCase,s,unqiueFieldValueMap,true); |
| | | }); |
| | | } |
| | | //ä¿®æ¹çæ¶åï¼çæ¬åçå½å¨æé½ä¸è½ä¿®æ¹ï¼å¯çº§éè¦ä¿®æ¹ï¼æä»¥éè¦åæ¬¡æ ¡éª |
| | | if(checkSecret){ |
| | | checkDataSecret(s); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * åçæ¬å· |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | */ |
| | | public void wrapperForUpRevision(BaseModel baseModel){ |
| | | wrapperForAddOrUpVersion(baseModel,true,false); |
| | | } |
| | | |
| | | /** |
| | | * åçæ¬¡ |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | */ |
| | | public void wrapperForUpVersion(BaseModel baseModel){ |
| | | wrapperForAddOrUpVersion(baseModel,true,true); |
| | | } |
| | | |
| | | /** |
| | | * å¨ä¿®æ¹çæ¶åæ·è´ï¼é²æ¢å端没æä¼ éé»è®¤ç屿§ |
| | | * @param dto æ°æ®ä¼ è¾å¯¹è±¡ |
| | | * @param baseModel æ°æ®åºä¸çæ°æ®å¯¹è±¡ |
| | | */ |
| | | public void copyFromDTO(Object dto,BaseModel baseModel){ |
| | | VciBaseUtil.alertNotNull(dto,"æ°æ®ä¼ è¾å¯¹è±¡",baseModel,"æ°æ®åºä¸çæ°æ®å¯¹è±¡"); |
| | | //å端å¯è½ä¸ä¼æé»è®¤çææå±æ§ä¼ éè¿æ¥ï¼æä»¥å
仿°æ®åºä¸çæ°æ®å¯¹è±¡æ·è´å°ä¸´æ¶çå¯¹è±¡ä¸ |
| | | BaseModel tempModel = new BaseModel(); |
| | | BeanUtil.convert(baseModel,tempModel); |
| | | BeanUtil.convert(dto,baseModel); |
| | | //BeanUtil.convert(tempModel,baseModel); |
| | | //ä¸ç¥é为å¥ï¼çªç¶BeanUtil.convert(tempModel,baseModel);ä¸å¥½ä½¿äº |
| | | BeanUtilForVCI.copyPropertiesIgnoreCase(tempModel,baseModel); |
| | | //为äºé²æ¢å端没æä¼ éé»è®¤ç屿§ï¼æä»¥å¾å
æ·è´å°baseModelä¸ï¼ç¶ådtoæ·è´ä¸æ¬¡åï¼åææ°æ®åºä¸æ·è´åæ¥ã |
| | | //使¯å 为id,name,descriptionæå¤§æ¦çå端ä¼ä¼ éï¼æä»¥è¿éä¹è®¾ç½®ä¸ä¸ |
| | | baseModel.setId(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("id",dto))); |
| | | baseModel.setName(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("name",dto))); |
| | | baseModel.setDescription(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("description",dto))); |
| | | tempModel = null; |
| | | } |
| | | |
| | | /** |
| | | * ä»DTO䏿·è´ï¼å¿½ç¥å±æ§å¤§å°å |
| | | * @param dto DTO对象 |
| | | * @param baseModel ç®æ 对象 |
| | | */ |
| | | public void copyFromDTOIgnore(Object dto,BaseModel baseModel){ |
| | | VciBaseUtil.alertNotNull(dto,"æ°æ®ä¼ è¾å¯¹è±¡",baseModel,"æ°æ®åºä¸çæ°æ®å¯¹è±¡"); |
| | | //å端å¯è½ä¸ä¼æé»è®¤çææå±æ§ä¼ éè¿æ¥ï¼æä»¥å
仿°æ®åºä¸çæ°æ®å¯¹è±¡æ·è´å°ä¸´æ¶çå¯¹è±¡ä¸ |
| | | BaseModel tempModel = new BaseModel(); |
| | | BeanUtilForVCI.copyPropertiesIgnoreCase(baseModel,tempModel); |
| | | BeanUtilForVCI.copyPropertiesIgnoreCase(dto,baseModel); |
| | | BeanUtilForVCI.copyPropertiesIgnoreCase(tempModel,baseModel); |
| | | //为äºé²æ¢å端没æä¼ éé»è®¤ç屿§ï¼æä»¥å¾å
æ·è´å°baseModelä¸ï¼ç¶ådtoæ·è´ä¸æ¬¡åï¼åææ°æ®åºä¸æ·è´åæ¥ã |
| | | //使¯å 为id,name,descriptionæå¤§æ¦çå端ä¼ä¼ éï¼æä»¥è¿éä¹è®¾ç½®ä¸ä¸ |
| | | baseModel.setId(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("id",dto))); |
| | | baseModel.setName(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("name",dto))); |
| | | baseModel.setDescription(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("description",dto))); |
| | | tempModel = null; |
| | | } |
| | | |
| | | /** |
| | | * 卿°æ®æ°å¢çæ¶åä¸ºé¾æ¥ç±»åå°è£
屿§ |
| | | * @param linkModel 龿¥ç±»åæ°æ®å¯¹è±¡ |
| | | */ |
| | | public void wrapperForAddLink(BaseLinkModel linkModel){ |
| | | VciBaseUtil.alertNotNull(linkModel,"è¦æ°å¢ç龿¥ç±»åæ°æ®å¯¹è±¡"); |
| | | if(StringUtils.isBlank(linkModel.getOid())){ |
| | | linkModel.setOid(VciBaseUtil.getPk()); |
| | | } |
| | | linkModel.setCreator(VciBaseUtil.getCurrentUserId()); |
| | | Date currentDate = new Date(); |
| | | linkModel.setCreateTime(currentDate); |
| | | linkModel.setTs(currentDate); |
| | | linkModel.setLastModifier(linkModel.getCreator()); |
| | | linkModel.setLastModifytime(currentDate); |
| | | } |
| | | |
| | | /** |
| | | * 卿°å¢æ°æ®çæ¶åä¸ºé¾æ¥ç±»åå°è£
屿§ |
| | | * @param linkModel 龿¥ç±»å对象 |
| | | * @param fromModel from端ä¸å¡æ°æ® |
| | | * @param toModel to端ä¸å¡æ°æ® |
| | | */ |
| | | public void wrapperForAddLink(BaseLinkModel linkModel,BaseModel fromModel,BaseModel toModel){ |
| | | wrapperForAddLink(linkModel); |
| | | VciBaseUtil.alertNotNull(fromModel,"龿¥ç±»åfrom端",toModel,"龿¥ç±»åto端"); |
| | | linkModel.setFoid(fromModel.getOid()); |
| | | linkModel.setFbtmname(fromModel.getBtmname()); |
| | | linkModel.setFnameoid(fromModel.getNameOid()); |
| | | |
| | | linkModel.setToid(toModel.getOid()); |
| | | linkModel.setTbtmname(toModel.getBtmname()); |
| | | linkModel.setTnameoid(toModel.getNameOid()); |
| | | linkModel.setTrevisionoid(toModel.getRevisionOid()); |
| | | } |
| | | |
| | | /** |
| | | * 卿°æ®ä¿®æ¹çæ¶åä¸ºé¾æ¥ç±»åå°è£
屿§ |
| | | * @param linkModel åºç¡æ°æ®å¯¹è±¡ |
| | | */ |
| | | public void wrapperForEditLink(BaseLinkModel linkModel){ |
| | | VciBaseUtil.alertNotNull(linkModel,"è¦ä¿®æ¹ç龿¥ç±»åæ°æ®å¯¹è±¡"); |
| | | Date currentDate = new Date(); |
| | | linkModel.setTs(currentDate); |
| | | linkModel.setLastModifier(VciBaseUtil.getCurrentUserId()); |
| | | linkModel.setLastModifytime(currentDate); |
| | | } |
| | | |
| | | /** |
| | | * 夿æ¶é´æ³æ¯å¦ç¸å |
| | | * @param dtoTs æ°æ®ä¼ è¾å¯¹è±¡ä¸çts |
| | | * @param doTs æ°æ®å¯¹è±¡ä¸çts |
| | | * @return true表示ç¸å |
| | | */ |
| | | public boolean checkTs(Date dtoTs,Date doTs){ |
| | | if(dtoTs!=null && doTs!=null){ |
| | | if(dtoTs.getTime() == doTs.getTime()){ |
| | | return true; |
| | | } |
| | | String dtoTsString = VciDateUtil.date2Str(dtoTs,VciDateUtil.DateTimeMillFormat); |
| | | String doTsString = VciDateUtil.date2Str(doTs,VciDateUtil.DateTimeMillFormat); |
| | | if(dtoTsString.equalsIgnoreCase(doTsString)){ |
| | | return true; |
| | | }else{ |
| | | throw new VciBaseException("tsNotEqual"); |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 夿å¯çº§æ¯å¦ç¬¦åè¦æ± |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | * @return true 表示符åè¦æ± |
| | | * @throws VciBaseException ä¸ç¬¦åè¦æ±æ¶ä¼æåºå¼å¸¸ |
| | | */ |
| | | public boolean checkDataSecret(BaseModel baseModel) throws VciBaseException{ |
| | | VciBaseUtil.alertNotNull(baseModel,"è¦æ ¡éªå¯çº§çæ°æ®å¯¹è±¡"); |
| | | if(isCheckSecret(baseModel) && VciBaseUtil.getCurrentUserSecret()>0) { |
| | | if (baseModel.getSecretGrade() == null ) { |
| | | baseModel.setSecretGrade(DataSecretEnum.NONE.getValue()); |
| | | } |
| | | Integer userSecret = VciBaseUtil.getCurrentUserSecret(); |
| | | if (!checkUserSecret(baseModel.getSecretGrade())) { |
| | | throw new VciBaseException("å½åç¨æ·çå¯çº§ä½äºæ°æ®çå¯çº§ï¼ç¨æ·å¯çº§ä¸º" + UserSecretEnum.getSecretText(userSecret) + ",æ°æ®å¯çº§ä¸º" + DataSecretEnum.getSecretText(baseModel.getSecretGrade())); |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * åå¸å½åçæ¬ |
| | | * @param baseModel è¦åå¸çæ°æ®å¯¹è±¡ |
| | | */ |
| | | public void saveRelease(BaseModel baseModel){ |
| | | VciBaseUtil.alertNotNull(baseModel,"æ°æ®å¯¹è±¡"); |
| | | VciBtmType btmType = getBtmTypeAnnotation(baseModel); |
| | | if(isManageRevision(btmType)) { |
| | | //å¿
须管ççæ¬æä¼æ§è¡åå¸ |
| | | VciBaseUtil.alertNotNull( baseModel.getOid(), "æ°æ®å¯¹è±¡ç主é®", baseModel.getNameOid(), "对象ç主é®",baseModel.getRevisionOid(),"çæ¬ç主é®"); |
| | | ReleasedObjDO releasedObjDO = new ReleasedObjDO(); |
| | | BeanUtil.convert(baseModel,releasedObjDO); |
| | | if(StringUtils.isBlank(releasedObjDO.getBtmName())){ |
| | | releasedObjDO.setBtmName(btmType.name()); |
| | | } |
| | | revisionMapper.saveReleased(releasedObjDO); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ°æ®æ°å¢çæ¶åå°è£
屿§ï¼å¯ä»¥åçæ¬ï¼å¯ä»¥åçæ¬¡ |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | * @param upRevsion åçå· |
| | | * @param upVersion åçæ¬¡ |
| | | */ |
| | | private void wrapperForAddOrUpVersion(BaseModel baseModel,boolean upRevsion,boolean upVersion){ |
| | | VciBaseUtil.alertNotNull(baseModel,"æ°æ®å¯¹è±¡"); |
| | | //å°è£
åºæ¬å±æ§ |
| | | setBaseFieldValue(baseModel); |
| | | //æ ¡éªå¿
è¾é¡¹åå¯ä¸é¡¹ |
| | | List<Field> fields = VciBaseUtil.getAllFieldForObj(baseModel.getClass()); |
| | | if(!CollectionUtils.isEmpty(fields)){ |
| | | //è·åå
å«äºcolumn注解ç屿§ï¼å 为ä¸å
å«çé»è®¤nullable为trueï¼unique为false |
| | | List<Field> hasColumnAnnoFields = fields.stream().filter(s->s.isAnnotationPresent(Column.class)).distinct().collect(Collectors.toList()); |
| | | if(!CollectionUtils.isEmpty(hasColumnAnnoFields)){ |
| | | //å离åºéè¦å¤ææ¯å¦ä¸ºç©ºçåæ®µ |
| | | List<Field> notNullFields = filterCheckNullFields(hasColumnAnnoFields); |
| | | //夿æ¯å¦æç©ºç屿§ |
| | | checkFieldsRequired(notNullFields,baseModel); |
| | | Map<Field,Boolean> checkUniqueFields = filterCheckUniqueFieldsHasUnCase(hasColumnAnnoFields); |
| | | if(!CollectionUtils.isEmpty(checkUniqueFields)){ |
| | | checkUniqueFields.forEach((field,unCase) ->{ |
| | | checkUniqueValues(field,unCase,baseModel,new HashMap<>(),false); |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | //æ ¡éªå¯çº§ |
| | | checkDataSecret(baseModel); |
| | | //å¤ççå½å¨æ |
| | | wrapperLifeCycle(baseModel); |
| | | //妿æ§å¶çæ¬ï¼ä¼å建第ä¸ä¸ªçæ¬ |
| | | if(isManageRevision(baseModel)) { |
| | | if(!upVersion) { |
| | | if (StringUtils.isBlank(baseModel.getCopyFromVersion()) && !upRevsion) { |
| | | //è¯´ææ¯æ°å¢ |
| | | wrapperFristRevision(baseModel); |
| | | } else { |
| | | //è¯´ææ¯åçå· |
| | | wrapperRevisionModel(baseModel); |
| | | } |
| | | }else { |
| | | wrapperVersionModel(baseModel); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | *å¤çåºæ¬å±æ§ |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | */ |
| | | public void setBaseFieldValue(BaseModel baseModel){ |
| | | VciBaseUtil.alertNotNull(baseModel,"æ°æ®å¯¹è±¡"); |
| | | setBaseFieldValue(baseModel,null,null,null); |
| | | } |
| | | |
| | | /** |
| | | * å¤çåºæ¬å±æ§ |
| | | * @param currentUserId å½åç¨æ· |
| | | * @param currentDate å½åæ¶é´ |
| | | * @param btmName ä¸å¡ç±»ååç§° |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | */ |
| | | public void setBaseFieldValue(BaseModel baseModel,String currentUserId,Date currentDate,String btmName){ |
| | | if(StringUtils.isBlank(currentUserId)){ |
| | | currentUserId = VciBaseUtil.getCurrentUserId(); |
| | | } |
| | | if(currentDate == null){ |
| | | currentDate = new Date(); |
| | | } |
| | | if(StringUtils.isBlank(btmName)){ |
| | | btmName = VciBaseUtil.getBtmTypeNameFromDO(baseModel.getClass()); |
| | | } |
| | | //å¤çåºæ¬å±æ§ |
| | | if(StringUtils.isBlank(baseModel.getOid())){ |
| | | baseModel.setOid(VciBaseUtil.getPk()); |
| | | } |
| | | if(StringUtils.isBlank(baseModel.getCreator())) { |
| | | baseModel.setCreator(currentUserId); |
| | | } |
| | | baseModel.setCreateTime(currentDate); |
| | | baseModel.setTs(currentDate); |
| | | if(StringUtils.isBlank(baseModel.getLastModifier())) { |
| | | baseModel.setLastModifier(currentUserId); |
| | | } |
| | | baseModel.setLastModifyTime(currentDate); |
| | | if(StringUtils.isBlank(baseModel.getOwner())) { |
| | | baseModel.setOwner(baseModel.getCreator()); |
| | | } |
| | | baseModel.setBtmname(btmName); |
| | | } |
| | | |
| | | /** |
| | | * ç¼è¾çæ¶åå¤çåºæ¬å±æ§ |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | * @param currentUserId å½åç¨æ· |
| | | * @param currentDate å½åæ¶é´ |
| | | */ |
| | | public void setBaseFieldValueEdit(BaseModel baseModel,String currentUserId,Date currentDate){ |
| | | if(StringUtils.isBlank(currentUserId)){ |
| | | currentUserId = VciBaseUtil.getCurrentUserId(); |
| | | } |
| | | if(currentDate == null){ |
| | | currentDate = new Date(); |
| | | } |
| | | baseModel.setTs(currentDate); |
| | | baseModel.setLastModifier(currentUserId); |
| | | baseModel.setLastModifyTime(currentDate); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * æ¹éæ§è¡çæ¶å,æ ¡éªå¯ä¸é¡¹ |
| | | * @param field 屿§ |
| | | * @param unCase æ¯å¦ä¸åºå大å°å |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | * @param unqiueFieldValueMap åå¨çæ°æ®éå |
| | | * @param edit æ¯å¦ä¸ºä¿®æ¹ |
| | | */ |
| | | private void checkUniqueValues(Field field,Boolean unCase,BaseModel baseModel, Map<String/**屿§çåç§°**/,Set<Object>> unqiueFieldValueMap ,boolean edit){ |
| | | field.setAccessible(true); |
| | | String fieldName = field.getName(); |
| | | Set<Object> fieldValueList ; |
| | | if(unqiueFieldValueMap.containsKey(fieldName)){ |
| | | fieldValueList = unqiueFieldValueMap.get(fieldName); |
| | | }else{ |
| | | fieldValueList = new HashSet<>(); |
| | | } |
| | | Object fieldValue = null; |
| | | try { |
| | | fieldValue = field.get(baseModel); |
| | | } catch (IllegalAccessException e) { |
| | | if(logger.isDebugEnabled()){ |
| | | logger.debug("è·å屿§çå¼åºç°äºé误ï¼{}",fieldName); |
| | | } |
| | | } |
| | | if(fieldValue!=null){ |
| | | if(unCase !=null && unCase){ |
| | | fieldValue = fieldValue.toString().toLowerCase(); |
| | | } |
| | | if(fieldValueList.contains(fieldValue) || (unCase?checkFieldNotUniqueUnCase(field,baseModel,edit):checkFieldNotUnique(field,baseModel,edit))){ |
| | | throw new VciBaseException("dataRepeat",new String[]{getColumnChineseText(field),fieldValue.toString()}); |
| | | }else{ |
| | | fieldValueList.add(fieldValue); |
| | | } |
| | | } |
| | | unqiueFieldValueMap.put(fieldName,fieldValueList); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * å°è£
æ°ççæ¬ä¿¡æ¯ï¼ä¼èªå¨å¤çèççæ¬åææ°çæ¬çé®é¢ |
| | | * @param newModel æ°çæ¬çæ°æ®å¯¹è±¡ |
| | | * @throws VciBaseException åæ°éè¯¯ï¼æ æ³¨è§£ï¼æå¡é
ç½®ä¸æ£ç¡®çæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public void wrapperRevisionModel(BaseModel newModel) throws VciBaseException{ |
| | | setBtmName(newModel); |
| | | VciBaseUtil.alertNotNull(newModel.getCopyFromVersion(),"å¼ç¨èçæ¬ç主é®"); |
| | | if (revisionMapper != null) { |
| | | RevisionInfo oldRevision = revisionMapper.selectByOid(newModel.getCopyFromVersion(),VciBaseUtil.getTableName(newModel.getBtmname())); |
| | | if(oldRevision == null || StringUtils.isBlank(oldRevision.getOid()) ){ |
| | | throw new VciBaseException("èçæ¬å¨æ°æ®åºä¸ä¸åå¨"); |
| | | } |
| | | BaseModel oldModel = new BaseModel(); |
| | | BeanUtil.convert(oldRevision,oldModel); |
| | | wrapperRevisionModel(oldModel,newModel); |
| | | }else{ |
| | | throw new VciBaseException("没æåå§åçæ¬è§åçæ°æ®æä½å±,请å¼åäººåæ£æ¥Mavenæ¯å¦å¼ç¨"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å°è£
æ°ççæ¬¡ä¿¡æ¯ï¼ä¼èªå¨å¤çèççæ¬¡åææ°çæ¬¡é®é¢ |
| | | * @param newModel æ°çæ¬¡çæ°æ®å¯¹è±¡ |
| | | * @throws VciBaseException åæ°é误ï¼ç¼ºå°æ³¨è§£ï¼é
ç½®é误é½ä¼æåºè¿ä¸ªå¼å¸¸ |
| | | */ |
| | | public void wrapperVersionModel(BaseModel newModel) throws VciBaseException{ |
| | | VciBaseUtil.alertNotNull(newModel,"æ°çæ¬¡çæ°æ®å¯¹è±¡",newModel.getCopyFromVersion(),"å¼ç¨èçæ¬¡ç主é®"); |
| | | if (revisionMapper != null) { |
| | | RevisionInfo oldRevision = revisionMapper.selectByOid(newModel.getCopyFromVersion(),VciBaseUtil.getTableName(newModel.getBtmname())); |
| | | if(oldRevision == null || StringUtils.isBlank(oldRevision.getOid()) ){ |
| | | throw new VciBaseException("èçæ¬¡æ°æ®å¨æ°æ®åºä¸ä¸åå¨"); |
| | | } |
| | | BaseModel oldModel = new BaseModel(); |
| | | BeanUtil.convert(oldRevision,oldModel); |
| | | wrapperVersionModel(oldModel,newModel); |
| | | }else{ |
| | | throw new VciBaseException("没æåå§åçæ¬è§åçæ°æ®æä½å±,请å¼åäººåæ£æ¥Mavenæ¯å¦å¼ç¨"); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * è·åæ°æ®å¯¹è±¡ä¸ææå
å«äºcolumnåç屿§ |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | * @return æ²¡ææ¶ä¼è¿åNull |
| | | */ |
| | | public List<Field> filterHasColumnAnnoFields(BaseModel baseModel){ |
| | | List<Field> fields = VciBaseUtil.getAllFieldForObj(baseModel.getClass()); |
| | | return filterHasColumnAnnoFields(fields); |
| | | } |
| | | |
| | | /** |
| | | * è¿æ»¤å
å«äºcolumnç屿§ |
| | | * @param fields ææç屿§ |
| | | * @return ç¬¦åæ¡ä»¶ç屿§ï¼ä¸åå¨çæ¶åä¼è¿ånull |
| | | */ |
| | | public List<Field> filterHasColumnAnnoFields( List<Field> fields){ |
| | | if(!CollectionUtils.isEmpty(fields)) { |
| | | return fields.stream().filter(s -> s.isAnnotationPresent(Column.class)).distinct().collect(Collectors.toList()); |
| | | }else{ |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è¿æ»¤éè¦æ ¡éªæ¯å¦è¾å
¥ç屿§ |
| | | * @param fields å
嫿column注解ç屿§ |
| | | * @return ç¬¦åæ¡ä»¶ç屿§ï¼ä¸åå¨çæ¶åä¼è¿ånull |
| | | */ |
| | | public List<Field> filterCheckNullFields(List<Field> fields){ |
| | | if(!CollectionUtils.isEmpty(fields)){ |
| | | return fields.stream().filter(s -> { |
| | | Column column = getColumnAnnotation(s); |
| | | //æå®äºä¸è½ä¸ºç©ºï¼æè
éè¦æ ¡éªå¯ä¸çä¸å®ä¸è½ä¸ºç©º |
| | | return ((column != null && column.nullable()) == false) || ((column != null && column.unique()) == true); |
| | | }).collect(Collectors.toList()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ ¡éªå¯ä¸é¡¹ï¼å
å« åºå大å°åå¯ä¸é¡¹ç屿§ |
| | | * @param doClass æ°æ®å¯¹è±¡æå±çç±» |
| | | * @return 屿§æ å°ï¼keyæ¯å±æ§å¯¹è±¡ï¼valueçå¼ä¸ºtrue表示ä¸åºå大å°åçæ¹å¼æ ¡éªå¯ä¸é¡¹ |
| | | */ |
| | | public Map<Field/**è¦æ ¡éªå¯ä¸é¡¹ç屿§**/, Boolean/**æ¯å¦ä¸åºå大å°å**/> filterCheckUniqueFieldsHasUnCase(Class<?> doClass){ |
| | | List<Field> hasColumnAnnoFields = filterHasColumnAnnoFields(VciBaseUtil.getAllFieldForObj(doClass)); |
| | | return filterCheckUniqueFieldsHasUnCase(hasColumnAnnoFields); |
| | | } |
| | | |
| | | /** |
| | | * è·åæ ¡éªå¯ä¸é¡¹ï¼å
å« åºå大å°åå¯ä¸é¡¹ç屿§ |
| | | * @param hasColumnAnnoFields æ°æ®å¯¹è±¡æå±çç±» |
| | | * @return 屿§æ å°ï¼keyæ¯å±æ§å¯¹è±¡ï¼valueçå¼ä¸ºtrue表示ä¸åºå大å°åçæ¹å¼æ ¡éªå¯ä¸é¡¹ |
| | | */ |
| | | public Map<Field/**è¦æ ¡éªå¯ä¸é¡¹ç屿§**/, Boolean/**æ¯å¦ä¸åºå大å°å**/> filterCheckUniqueFieldsHasUnCase(List<Field> hasColumnAnnoFields){ |
| | | |
| | | //å¯ä¸é¡¹çï¼å
å«ä¸åºå大å°åååºå大å°åç |
| | | Map<Field/**è¦æ ¡éªå¯ä¸é¡¹ç屿§**/, Boolean/**æ¯å¦ä¸åºå大å°å**/> checkUniqueFieldsMap = new HashMap<>(); |
| | | List<Field> checkUniqueFields = filterCheckUniqueFields(hasColumnAnnoFields); |
| | | if(!CollectionUtils.isEmpty(checkUniqueFields)){ |
| | | checkUniqueFields.stream().forEach(s -> { |
| | | checkUniqueFieldsMap.put(s,false); |
| | | }); |
| | | } |
| | | List<Field> checkUniqueUnCaseFields = filterCheckUniqueUnCaseFields(hasColumnAnnoFields); |
| | | if(!CollectionUtils.isEmpty(checkUniqueUnCaseFields)){ |
| | | checkUniqueUnCaseFields.stream().forEach(s -> { |
| | | //è¿ä¸ªæ¯ä¸åºå大å°å |
| | | checkUniqueFieldsMap.put(s,true); |
| | | }); |
| | | } |
| | | return checkUniqueFieldsMap; |
| | | } |
| | | |
| | | /** |
| | | * è·åéè¦æ ¡éªå¯ä¸ç屿§ |
| | | * @param fields å
嫿column注解ç屿§ |
| | | * @return ç¬¦åæ¡ä»¶ç屿§ï¼ä¸åå¨çæ¶åä¼è¿ånull |
| | | */ |
| | | public List<Field> filterCheckUniqueFields(List<Field> fields){ |
| | | if(!CollectionUtils.isEmpty(fields)){ |
| | | return fields.stream().filter(s -> { |
| | | Column column = getColumnAnnotation(s); |
| | | return (column != null && column.unique()) == true; |
| | | }).collect(Collectors.toList()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * è·åéè¦æ ¡éªå¯ä¸ç屿§ |
| | | * @param fields å
嫿column注解ç屿§ |
| | | * @return ç¬¦åæ¡ä»¶ç屿§ï¼ä¸åå¨çæ¶åä¼è¿ånull |
| | | */ |
| | | public List<Field> filterCheckUniqueUnCaseFields(List<Field> fields){ |
| | | if(!CollectionUtils.isEmpty(fields)){ |
| | | return fields.stream().filter(s -> { |
| | | Column column = getColumnAnnotation(s); |
| | | return (column != null && column.unique() && column.unUniqueCase()) == true; |
| | | }).collect(Collectors.toList()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªå±æ§ç弿¯å¦å¯ä¸ |
| | | * @param uniqueFields éè¦æ ¡éªå¯ä¸ç屿§å¼ |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | * @param editFlag æ¯å¦ä¸ºä¿®æ¹æ°æ®ï¼ä¿®æ¹çæ¶åéè¦æé¤å½åæ°æ® |
| | | */ |
| | | public void checkFieldsUnique(List<Field> uniqueFields, BaseModel baseModel, boolean editFlag) { |
| | | if(!CollectionUtils.isEmpty(uniqueFields)){ |
| | | List<Field> notUniqueFields = uniqueFields.stream().filter( s -> checkFieldNotUnique(s,baseModel,editFlag)).collect(Collectors.toList()); |
| | | if(!CollectionUtils.isEmpty(notUniqueFields)){ |
| | | //æ¾å¯¹åºç䏿åç§° |
| | | List<String> notUniqueFieldChineseNames = new ArrayList<>(); |
| | | notUniqueFields.stream().forEach( s -> { |
| | | //å
仿³¨éä¸ä¸è·åï¼ä½æ¯æçæ¯ä¹åæ²¡ææ³¨éï¼æä»¥å¯è½å¾ä»æ³¨è§£ä¸è·å |
| | | notUniqueFieldChineseNames.add(getColumnChineseText(s)); |
| | | }); |
| | | //æç说è¿ä¸ªé误信æ¯ä¸åºè¯¥åºç°çï¼æä»¥ä¸åå¤è¯ |
| | | throw new VciBaseException("屿§[" + notUniqueFieldChineseNames.stream().collect(Collectors.joining(",")) + "]对åºçæ°æ®å¨ç³»ç»ä¸å·²ç»åå¨",notUniqueFieldChineseNames.toArray()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªå±æ§ç弿¯å¦å¯ä¸,ä¸åºå屿§å¼ç大å°å |
| | | * @param uniqueFields éè¦æ ¡éªå¯ä¸ç屿§å¼ |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | * @param editFlag æ¯å¦ä¸ºä¿®æ¹æ°æ®ï¼ä¿®æ¹çæ¶åéè¦æé¤å½åæ°æ® |
| | | */ |
| | | public void checkFieldsUnUniqueCase(List<Field> uniqueFields, BaseModel baseModel, boolean editFlag){ |
| | | if(!CollectionUtils.isEmpty(uniqueFields)){ |
| | | List<Field> notUniqueFields = uniqueFields.stream().filter( s -> checkFieldNotUniqueUnCase(s,baseModel,editFlag)).collect(Collectors.toList()); |
| | | if(!CollectionUtils.isEmpty(notUniqueFields)){ |
| | | //æ¾å¯¹åºç䏿åç§° |
| | | List<String> notUniqueFieldChineseNames = new ArrayList<>(); |
| | | notUniqueFields.stream().forEach( s -> { |
| | | //å
仿³¨éä¸ä¸è·åï¼ä½æ¯æçæ¯ä¹åæ²¡ææ³¨éï¼æä»¥å¯è½å¾ä»æ³¨è§£ä¸è·å |
| | | notUniqueFieldChineseNames.add(getColumnChineseText(s)); |
| | | }); |
| | | //æç说è¿ä¸ªé误信æ¯ä¸åºè¯¥åºç°çï¼æä»¥ä¸åå¤è¯ |
| | | throw new VciBaseException("屿§[" + notUniqueFieldChineseNames.stream().collect(Collectors.joining(",")) + "]对åºçæ°æ®å¨ç³»ç»ä¸å·²ç»åå¨",notUniqueFieldChineseNames.toArray()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ£æ¥å±æ§æ¯å¦å¯ä¸ |
| | | * @param field éè¦æ ¡éªç屿§å¯¹è±¡ |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | * @param editFlag æ¯å¦ä¸ºä¿®æ¹æ°æ®ï¼ä¿®æ¹çæ¶åéè¦æé¤å½åæ°æ® |
| | | * @return true表示ä¸å¯ä¸ï¼falseå¯ä¸ |
| | | */ |
| | | public boolean checkFieldNotUnique(Field field,BaseModel baseModel,boolean editFlag){ |
| | | return checkFieldNotUnique(field,baseModel,editFlag,false); |
| | | } |
| | | |
| | | /** |
| | | * æ£æ¥å±æ§æ¯å¦å¯ä¸,å¹¶ä¸ä¸åºå大å°å |
| | | * @param field éè¦æ ¡éªç屿§å¯¹è±¡ |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | * @param editFlag æ¯å¦ä¸ºä¿®æ¹æ°æ®ï¼ä¿®æ¹çæ¶åéè¦æé¤å½åæ°æ® |
| | | * @return true表示ä¸å¯ä¸ï¼falseå¯ä¸ |
| | | */ |
| | | public boolean checkFieldNotUniqueUnCase(Field field,BaseModel baseModel,boolean editFlag){ |
| | | return checkFieldNotUnique(field,baseModel,editFlag,true); |
| | | } |
| | | |
| | | /** |
| | | * æ£æ¥å±æ§æ¯å¦å¯ä¸,å¯ä»¥è®¾ç½®ä¸åºå大å°å |
| | | * @param field éè¦æ ¡éªç屿§å¯¹è±¡ |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | * @param editFlag æ¯å¦ä¸ºä¿®æ¹æ°æ®ï¼ä¿®æ¹çæ¶åéè¦æé¤å½åæ°æ® |
| | | * @param unCase ä¸åºå大å°å |
| | | * @return true表示ä¸å¯ä¸ï¼falseå¯ä¸ |
| | | */ |
| | | private boolean checkFieldNotUnique(Field field,BaseModel baseModel,boolean editFlag,boolean unCase){ |
| | | String btmType = VciBaseUtil.getBtmTypeNameFromDO(baseModel.getClass()); |
| | | String className = baseModel.getClass().getName(); |
| | | String columnName =VciBaseUtil.getCboAttrNameFromField(field,baseModel.getClass()); |
| | | String tableName = VciBaseUtil.getTableName(btmType); |
| | | Object columnValue = null; |
| | | String oid = ""; |
| | | if(editFlag){ |
| | | oid = baseModel.getOid(); |
| | | } |
| | | field.setAccessible(true); |
| | | try { |
| | | columnValue = field.get(baseModel); |
| | | } catch (IllegalAccessException e) { |
| | | String msg = "夿æä¸ªå¯¹è±¡ç屿§æ¯å¦é夿¶åºç°äºé误"; |
| | | if(logger.isErrorEnabled()) { |
| | | logger.error(msg + ",{}.{}", className, field.getName(), e); |
| | | } |
| | | throw new VciBaseException(msg + "{0},{1}",new String[]{className,field.getName()},e); |
| | | } |
| | | if(unCase && columnValue instanceof String){ |
| | | //åªæå符串ææå¤§å°åï¼æ¥æåæ°åè¿äºä¸æ¯æ |
| | | columnName = "lower(" + columnName + ")"; |
| | | columnValue = columnValue.toString().toLowerCase(); |
| | | } |
| | | int count; |
| | | if(editFlag){ |
| | | count= revisionMapper.countByPropertiesNotIncludeSelf(columnName, columnValue, tableName, oid); |
| | | }else{ |
| | | count = revisionMapper.countByProperties(columnName,columnValue,tableName); |
| | | } |
| | | if(count>0){ |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * å¤ææ°æ®æ¯å¦ä¸ºç©º |
| | | * @param notNullFields éè¦å¤æç屿§ |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | */ |
| | | public void checkFieldsRequired(List<Field> notNullFields, BaseModel baseModel) { |
| | | if(!CollectionUtils.isEmpty(notNullFields)){ |
| | | String className = baseModel.getClass().getName(); |
| | | List<Field> nullValueFields = notNullFields.stream().filter( s -> checkFieldValueNull(s,baseModel)).collect(Collectors.toList()); |
| | | if(!CollectionUtils.isEmpty(nullValueFields)){ |
| | | //æ¾å¯¹åºç䏿åç§° |
| | | List<String> nullFieldChineseNames = new ArrayList<>(); |
| | | nullValueFields.stream().forEach( s -> { |
| | | //å
仿³¨éä¸ä¸è·åï¼ä½æ¯æçæ¯ä¹åæ²¡ææ³¨éï¼æä»¥å¯è½å¾ä»æ³¨è§£ä¸è·å |
| | | nullFieldChineseNames.add(getColumnChineseText(s)); |
| | | }); |
| | | //æç说è¿ä¸ªé误信æ¯ä¸åºè¯¥åºç°çï¼æä»¥ä¸åå¤è¯ |
| | | throw new VciBaseException("屿§[" + nullFieldChineseNames.stream().collect(Collectors.joining(",")) + "]ä¸è½ä¸ºç©º",nullFieldChineseNames.toArray()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªå±æ§ä¸ºç©º |
| | | * @param field 屿§å¯¹è±¡ |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | * @return true表示为空ï¼false表示ä¸ä¸ºç©º |
| | | */ |
| | | public boolean checkFieldValueNull(Field field,BaseModel baseModel){ |
| | | String className = baseModel.getClass().getName(); |
| | | field.setAccessible(true); |
| | | try { |
| | | Object value = field.get(baseModel); |
| | | if(value == null || (value instanceof String) && StringUtils.isBlank((String)value)){ |
| | | return true; |
| | | } |
| | | } catch (IllegalAccessException e) { |
| | | String msg = "夿æä¸ªå¯¹è±¡ç屿§æ¯å¦ä¸ºç©ºæ¶åºç°äºé误"; |
| | | if(logger.isErrorEnabled()) { |
| | | logger.error(msg + "ï¼{}.{}", className, field.getName(), e); |
| | | } |
| | | throw new VciBaseException(msg + "{0},{1}",new String[]{className,field.getName()},e); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * è·å |
| | | * @param field 屿§å¯¹è±¡ |
| | | * @return 䏿åç§°ï¼ä¼å
åæ³¨éï¼å¦ååæ³¨è§£ï¼æåè¿å屿§çè±æåç§° |
| | | */ |
| | | public String getColumnChineseText(Field field){ |
| | | String className = field.getDeclaringClass().getName(); |
| | | if(modelColumnAnnotationMap.containsKey(className) && modelColumnAnnotationMap.get(className.toLowerCase()).containsKey(field.getName().toLowerCase())){ |
| | | return modelColumnAnnotationMap.get(className.toLowerCase()).get(field.getName().toLowerCase()); |
| | | }else{ |
| | | Column column = getColumnAnnotation(field); |
| | | if(column!=null && StringUtils.isNotBlank(column.columnDefinition())){ |
| | | return column.columnDefinition(); |
| | | }else{ |
| | | //ççcolumnDefinition注解 |
| | | if(field.isAnnotationPresent(VciColumnDefinition.class)){ |
| | | VciColumnDefinition columnDefinition = field.getDeclaredAnnotation(VciColumnDefinition.class); |
| | | if(columnDefinition == null){ |
| | | columnDefinition = field.getAnnotation(VciColumnDefinition.class); |
| | | } |
| | | if(columnDefinition!=null) { |
| | | return columnDefinition.value(); |
| | | } |
| | | } |
| | | } |
| | | return field.getName(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·åæ°æ®å¯¹è±¡ä¸çåæ³¨è§£ |
| | | * @param field åæ®µç屿§å¯¹è±¡ |
| | | * @return æ²¡ææ³¨è§£çæ¶åè¿å空ï¼å¦åè¿å对åºç注解 |
| | | */ |
| | | public Column getColumnAnnotation(Field field){ |
| | | if(field.isAnnotationPresent(Column.class)) { |
| | | Column column = field.getDeclaredAnnotation(Column.class); |
| | | if (column == null) { |
| | | column = field.getAnnotation(Column.class); |
| | | } |
| | | return column; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * æ ¡éªæ¯å¦æ§å¶å¯çº§ |
| | | * @param doObject æ°æ®å¯¹è±¡ |
| | | * @return trueéè¦æ ¡éªå¯çº§ |
| | | */ |
| | | public boolean isCheckSecret(BaseModel doObject){ |
| | | VciBtmType btmType = getBtmTypeAnnotation(doObject); |
| | | return isCheckSecret(btmType); |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªæ¯å¦æ§å¶å¯çº§ |
| | | * @param btmType ä¸å¡ç±»åçæ³¨è§£ |
| | | * @return trueéè¦æ ¡éªå¯çº§ |
| | | */ |
| | | public boolean isCheckSecret(VciBtmType btmType){ |
| | | if(btmType !=null && btmType.secretAble()){ |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * å°è£
æ°ççæ¬ä¿¡æ¯ï¼ä¼èªå¨å¤çèççæ¬åææ°çæ¬çé®é¢ |
| | | * @param oldModel èçæ¬çæ°æ®å¯¹è±¡ |
| | | * @param newModel æ°çæ¬çæ°æ®å¯¹è±¡ |
| | | * @throws VciBaseException åæ°é误ï¼ç¼ºå°æ³¨è§£ï¼é
ç½®é误é½ä¼æåºè¿ä¸ªå¼å¸¸ |
| | | */ |
| | | public void wrapperRevisionModel(BaseModel oldModel, BaseModel newModel) throws VciBaseException { |
| | | VciBaseUtil.alertNotNull(oldModel,"èçæ¬çæ°æ®å¯¹è±¡",newModel,"æ°çæ¬çæ°æ®å¯¹è±¡"); |
| | | VciBtmType btmType = getBtmTypeAnnotation(newModel); |
| | | if(btmType == null){ |
| | | throw new VciBaseException("没æVciBtmTypeæ³¨è§£ï¼æ æ³å¤ææ¯å¦æ§å¶çæ¬"); |
| | | }else { |
| | | if ( isManageRevision(btmType)) { |
| | | //åççåææ¯æçæ¬è§åï¼å¹¶ä¸å¦ææ¯æå¨è¾å
¥çæ¶åï¼å¿
é¡»ä»å端è¾å
¥å¼ã |
| | | //1. 主é®ä¸è½ç¸å |
| | | if (StringUtils.isBlank(newModel.getOid()) || newModel.getOid().equalsIgnoreCase(oldModel.getOid())) { |
| | | newModel.setOid(VciBaseUtil.getPk()); |
| | | } |
| | | //2.nameOidè¦ç¸å |
| | | newModel.setNameOid(oldModel.getNameOid()); |
| | | //2.1 revisionOidä¸ç¸å |
| | | newModel.setRevisionOid(VciBaseUtil.getPk()); |
| | | //æ¥æ¾æåä¸ä¸ªçæ¬ççæ¬å¼ |
| | | RevisionInfo lastRevision = null; |
| | | if (revisionMapper != null) { |
| | | lastRevision = revisionMapper.selectLastRevision(newModel.getNameOid(),VciBaseUtil.getTableName(btmType.name())); |
| | | } else { |
| | | //没æè¿ä¸ªï¼é£å°±ç´æ¥ç¨oldModelå»è·åçæ¬å· |
| | | lastRevision = new RevisionInfo(); |
| | | BeanUtil.convert(oldModel, lastRevision); |
| | | } |
| | | newModel.setRevisionRule(lastRevision.getRevisionRule()); |
| | | newModel.setVersionRule(lastRevision.getVersionRule()); |
| | | //3.çæ¬å· |
| | | if(StringUtils.isBlank(newModel.getRevisionValue()) && !isInputRevision(newModel) && StringUtils.isBlank(lastRevision.getRevisionRule())){ |
| | | //ä¸å¤ç |
| | | }else { |
| | | if (StringUtils.isBlank(newModel.getRevisionValue())) { |
| | | wrapperRevisionValue(newModel, btmType, lastRevision); |
| | | } |
| | | } |
| | | |
| | | //妿æç次ï¼é£è¿ä¸ªå°±æ¯æ°çæ¬ç第ä¸ä¸ªç次 |
| | | if (isManageVersion(btmType)) { |
| | | wrapperFristVersion(newModel); |
| | | }else{ |
| | | //å¯è½æ²¡æå¤ççæ¬¡ï¼ä½æ¯å¿
é¡»è¦æ·»å ä¸ |
| | | newModel.setFirstV("1"); |
| | | newModel.setLastV("1"); |
| | | } |
| | | //4.æ°ççæ¬é¡ºåº |
| | | newModel.setRevisionSeq(lastRevision.getRevisionSeq() + 1); |
| | | newModel.setLastR("1"); |
| | | newModel.setFirstR("0"); |
| | | |
| | | //5.ä¿®æ¹èççæ¬çisLastR |
| | | saveOldModel(oldModel); |
| | | //èä¸å¯è½oldModel䏿¯æåçé£ä¸ªçæ¬ |
| | | } |
| | | //æ¯æå¯ä»¥ä½¿ç¨çæ¬è§åçæï¼ä¹åæ¶å¯ä»¥æå¨è¾å
¥ï¼æä»¥å½æå¨è¾å
¥èå¼å没æçæ¶åéè¦æ°çæ |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å°è£
æ°ççæ¬¡ä¿¡æ¯ï¼ä¼èªå¨å¤çèççæ¬¡åææ°çæ¬¡é®é¢ |
| | | * @param oldModel èçæ¬¡çæ°æ®å¯¹è±¡ |
| | | * @param newModel æ°çæ¬¡çæ°æ®å¯¹è±¡ |
| | | * @throws VciBaseException åæ°é误ï¼ç¼ºå°æ³¨è§£ï¼é
ç½®é误é½ä¼æåºè¿ä¸ªå¼å¸¸ |
| | | */ |
| | | public void wrapperVersionModel(BaseModel oldModel, BaseModel newModel) throws VciBaseException { |
| | | VciBaseUtil.alertNotNull(oldModel,"èçæ¬¡çæ°æ®å¯¹è±¡",newModel,"æ°çæ¬¡çæ°æ®å¯¹è±¡"); |
| | | VciBtmType btmType = getBtmTypeAnnotation(newModel); |
| | | if(btmType == null){ |
| | | throw new VciBaseException("没æVciBtmTypeæ³¨è§£ï¼æ æ³å¤ææ¯å¦æ§å¶ç次"); |
| | | }else { |
| | | if (isManageVersion(btmType)) { |
| | | //æå¤çæ°ççæ¬¡ |
| | | //主é®ä¸è½ç¸åï¼nameoidårevisionoidå¿
é¡»ç¸å |
| | | if (StringUtils.isBlank(newModel.getOid()) || newModel.getOid().equalsIgnoreCase(oldModel.getOid())) { |
| | | newModel.setOid(VciBaseUtil.getPk()); |
| | | } |
| | | if(StringUtils.isBlank(newModel.getNameOid()) || !newModel.getNameOid().equalsIgnoreCase(oldModel.getNameOid())){ |
| | | newModel.setNameOid(oldModel.getNameOid()); |
| | | } |
| | | if(StringUtils.isBlank(newModel.getRevisionOid()) |
| | | || !newModel.getRevisionOid().equalsIgnoreCase(oldModel.getRevisionOid())){ |
| | | newModel.setRevisionOid(oldModel.getRevisionOid()); |
| | | } |
| | | //æ¥è¯¢è¿ä¸ªç¸åççæ¬ä¸çææ°çæ¬¡ |
| | | RevisionInfo lastRevision = null; |
| | | if (revisionMapper != null) { |
| | | lastRevision = revisionMapper.selectLastVersion(newModel.getNameOid(),newModel.getRevisionOid(),VciBaseUtil.getTableName(btmType.name())); |
| | | } else { |
| | | //没æè¿ä¸ªï¼é£å°±ç´æ¥ç¨oldModelå»è·åçæ¬å· |
| | | lastRevision = new RevisionInfo(); |
| | | BeanUtil.convert(oldModel, lastRevision); |
| | | } |
| | | //çæ¬¡å·,å°±æ°åååæ¯ä¸¤ç§ |
| | | if(oldModel.getVersionValue().matches(RegExpConstant.LETTER)){ |
| | | //è¯´ææ¯åæ¯ç |
| | | newModel.setVersionValue(String.valueOf((char)(oldModel.getVersionValue().toCharArray()[0] + 1))); |
| | | }else{ |
| | | newModel.setVersionValue(String.valueOf(Integer.valueOf(oldModel.getVersionValue()) + 1)); |
| | | } |
| | | newModel.setVersionSeq(lastRevision.getVersionSeq() + 1); |
| | | newModel.setVersionRule(oldModel.getVersionRule()); |
| | | newModel.setLastV("1"); |
| | | newModel.setFirstV("0"); |
| | | //å¤çèçæ¬¡ |
| | | saveOldModelVersion(oldModel); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å¤çä¸å¡ç±»åçåç§° |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | */ |
| | | private void setBtmName(BaseModel baseModel){ |
| | | VciBaseUtil.alertNotNull(baseModel,"æ°æ®å¯¹è±¡"); |
| | | if(StringUtils.isBlank(baseModel.getBtmname())){ |
| | | VciBtmType btmType = getBtmTypeAnnotation(baseModel); |
| | | if(btmType == null){ |
| | | throw new VciBaseException("没æVciBtmTypeæ³¨è§£ï¼æ æ³å¤æä¸å¡ç±»å"); |
| | | } |
| | | baseModel.setBtmname(btmType.name()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * ä¿åæ§ççæ¬ï¼ä¼èªå¨æä»¥åææ°çæ¬çåªæ¡æ°æ®ä¿®æ¹ï¼åæ¶ä¼æèçè¿æ¡çæ¬ä¿®æ¹ |
| | | * @param oldModel èçæ¬çæ°æ®å¯¹è±¡ |
| | | */ |
| | | public void saveOldModel(BaseModel oldModel){ |
| | | setBtmName(oldModel); |
| | | if (revisionMapper != null) { |
| | | revisionMapper.resetLastRevision(oldModel.getNameOid(),VciBaseUtil.getTableName(oldModel.getBtmname())); |
| | | revisionMapper.resetOldRevision(oldModel.getOid(),VciBaseUtil.getTableName(oldModel.getBtmname())); |
| | | }else{ |
| | | throw new VciBaseException("没æåå§åçæ¬è§åçæ°æ®æä½å±ï¼è¯·å¼åäººåæ£æ¥mavenæ¯å¦å¼ç¨"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * ä¿åæ§ççæ¬¡ï¼ä¼èªå¨æä»¥åææ°çæ¬¡çåªæ¡æ°æ®ä¿®æ¹ï¼åæ¶ä¼æèçè¿æ¡çæ¬¡ä¿®æ¹ |
| | | * @param oldModel èçæ¬¡çæ°æ®å¯¹è±¡ |
| | | */ |
| | | public void saveOldModelVersion(BaseModel oldModel){ |
| | | setBtmName(oldModel); |
| | | if (revisionMapper != null) { |
| | | revisionMapper.resetLastVersion(oldModel.getNameOid(),oldModel.getRevisionOid(),VciBaseUtil.getTableName(oldModel.getBtmname())); |
| | | revisionMapper.resetOldVersion(oldModel.getOid(),VciBaseUtil.getTableName(oldModel.getBtmname())); |
| | | }else{ |
| | | throw new VciBaseException("没æåå§åçæ¬è§åçæ°æ®æä½å±ï¼è¯·å¼åäººåæ£æ¥mavenæ¯å¦å¼ç¨"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å°è£
çæ¬çä¿¡æ¯ï¼æ¯æç¬¬ä¸ä¸ªçæ¬ç第ä¸ä¸ªç次ï¼ååççæ
åµ |
| | | * @param newModel æ°çæ¬çæ°æ®ï¼è¯·å
è¡è®¾ç½®çæ¬è§åçå¼å¨è¿ä¸ªå¯¹è±¡ä¸ |
| | | * @param btmType å¯¹è±¡çæ³¨è§£ |
| | | * @param lastRevision å½åææ°çæ¬ææ°çæ¬¡çå¯¹è±¡ï¼æ¯ç¬¬ä¸ä¸ªçæ¬ç第ä¸ä¸ªçæ¬æ¶ä¼ énull |
| | | */ |
| | | public void wrapperRevisionValue(BaseModel newModel,VciBtmType btmType,RevisionInfo lastRevision){ |
| | | //没æçæ¬å·çæ¶åå¿
须使ç¨ç¼ç è§åæ¥çææ°ççæ¬å· |
| | | if (RevisionConstant.CHARACTER.equalsIgnoreCase(newModel.getRevisionRule())) { |
| | | //使ç¨åæ¯è¿ä¸ªé»è®¤çå符,è¿ä¸ªæ²¡æåç¼ï¼æ²¡æåç¼ï¼æ¥é¿ä¸º1ï¼æ²¡æè·³è·å符 |
| | | newRevisionForLetter(newModel, lastRevision, btmType != null ? btmType.revisionRulePrefix() : "", btmType != null ? btmType.revisionRuleSubfix() : ""); |
| | | } else if (RevisionConstant.NUMBER.equalsIgnoreCase(newModel.getRevisionRule())) { |
| | | newRevisionForNumber(newModel,lastRevision,btmType != null ? btmType.revisionRulePrefix() : "", btmType != null ? btmType.revisionRuleSubfix() : ""); |
| | | } else { |
| | | if (revisionRuleProvider != null) { |
| | | try { |
| | | BaseResult nextRevisionResult = revisionRuleProvider.getNextRevisionValue(newModel.getRevisionRule(), lastRevision==null?"":lastRevision.getRevisionValue()); |
| | | if (nextRevisionResult.isSuccess()) { |
| | | newModel.setRevisionValue((String) nextRevisionResult.getObj()); |
| | | } else { |
| | | throw new VciBaseException(nextRevisionResult.getMsg(), nextRevisionResult.getMsgObjs()); |
| | | } |
| | | } catch (Throwable e) { |
| | | throw new VciBaseException("è·åä¸ä¸ä¸ªçæ¬å·åºç°äºé误ï¼{0}", new String[]{newModel.getRevisionRule()}, e); |
| | | } |
| | | } else { |
| | | throw new VciBaseException("没æåå§åçæ¬è§åçè°ç¨å¨,请å¼åäººåæ£æ¥feign"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æ°åçè§åå°è£
æ°ççæ¬ |
| | | * @param baseModel åºç¡æ°æ®å¯¹è±¡ |
| | | * @param lastRevision æåççæ¬å¯¹è±¡ |
| | | * @param prefix åç¼ |
| | | * @param subfix åç¼ |
| | | */ |
| | | private void newRevisionForNumber(BaseModel baseModel, RevisionInfo lastRevision,String prefix,String subfix) { |
| | | if(prefix==null){ |
| | | prefix = ""; |
| | | } |
| | | if(subfix == null){ |
| | | subfix = ""; |
| | | } |
| | | if(lastRevision == null) { |
| | | //è¯´ææ¯ç¬¬ä¸ä¸ªçæ¬ |
| | | baseModel.setRevisionValue(prefix + "1" + subfix); |
| | | }else { |
| | | String ruleValue = replacePrefixAndSubfix(lastRevision, prefix, subfix); |
| | | if (ruleValue.matches(RegExpConstant.NUMBER)) { |
| | | //æ°åå¯ä»¥ä¸åå°å |
| | | ruleValue = String.valueOf(Integer.valueOf(ruleValue) + 1); |
| | | baseModel.setRevisionValue(prefix + ruleValue + subfix); |
| | | } else { |
| | | //æåä¸ä¸ªçæ¬å¯è½æ¯æå¨è¾å
¥çï¼é£å°±ç´æ¥æ¾ä¸ä¸æå䏿æ°åï¼ |
| | | if (ruleValue.matches(RegExpConstant.HAS_NUMBER)) { |
| | | String onlyNumber = getNumbers(ruleValue); |
| | | String nextNumber = String.valueOf(Integer.valueOf(onlyNumber) + 1); |
| | | if (ruleValue.startsWith(onlyNumber)) { |
| | | ruleValue = ruleValue.substring(onlyNumber.length()); |
| | | baseModel.setRevisionValue(prefix + onlyNumber + ruleValue + subfix); |
| | | } else if (ruleValue.endsWith(onlyNumber)) { |
| | | ruleValue = ruleValue.substring(0, ruleValue.length() - onlyNumber.length() - 1); |
| | | baseModel.setRevisionValue(prefix + ruleValue + nextNumber + subfix); |
| | | } else { |
| | | baseModel.setRevisionValue(prefix + ruleValue.substring(0, ruleValue.lastIndexOf(onlyNumber)) + nextNumber + ruleValue.substring(ruleValue.lastIndexOf(onlyNumber) + 1) + subfix); |
| | | } |
| | | } else { |
| | | //ä¸ä¸ªæ°å齿²¡æ |
| | | baseModel.setRevisionValue(prefix + ruleValue + "1" + subfix); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·åå符串ä¸çæ°åé¨å |
| | | * @param content å符串å
容 |
| | | * @return æ°åçé¨å,æåçé£é¨å |
| | | */ |
| | | private String getNumbers(String content) { |
| | | Pattern pattern = Pattern.compile("\\d+"); |
| | | Matcher matcher = pattern.matcher(content); |
| | | while (matcher.find()) { |
| | | return matcher.group(matcher.groupCount()-1); |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * æ¿æ¢åç¼ååç¼ |
| | | * @param lastRevision æåçæ¬ç对象 |
| | | * @param prefix åç¼ |
| | | * @param subfix åç¼ |
| | | * @return å»é¤åç¼ååç¼ççæ¬è§å |
| | | */ |
| | | private String replacePrefixAndSubfix(RevisionInfo lastRevision,String prefix,String subfix){ |
| | | String ruleValue = lastRevision.getRevisionValue(); |
| | | if(prefix==null){ |
| | | prefix = ""; |
| | | } |
| | | if(subfix == null){ |
| | | subfix = ""; |
| | | } |
| | | if(StringUtils.isNotBlank(prefix) && ruleValue.startsWith(prefix)){ |
| | | ruleValue = ruleValue.substring(prefix.length()); |
| | | } |
| | | if(StringUtils.isNotBlank(subfix) && ruleValue.endsWith(subfix)){ |
| | | ruleValue = ruleValue.substring(0,ruleValue.length()-subfix.length()-1); |
| | | } |
| | | return ruleValue; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®åæ¯çè§åå°è£
æ°ççæ¬ |
| | | * @param baseModel åºç¡æ°æ®å¯¹è±¡ |
| | | * @param lastRevision æåççæ¬å¯¹è±¡ |
| | | * @param prefix åç¼ |
| | | * @param subfix åç¼ |
| | | */ |
| | | private void newRevisionForLetter(BaseModel baseModel,RevisionInfo lastRevision,String prefix,String subfix){ |
| | | if(prefix==null){ |
| | | prefix = ""; |
| | | } |
| | | if(subfix == null){ |
| | | subfix = ""; |
| | | } |
| | | if(lastRevision == null){ |
| | | //è¯´ææ¯ç¬¬ä¸ä¸ªçæ¬ |
| | | baseModel.setRevisionValue(prefix + "A" + subfix); |
| | | }else { |
| | | String ruleValue = replacePrefixAndSubfix(lastRevision, prefix, subfix); |
| | | if (ruleValue.matches(RegExpConstant.LETTER)) { |
| | | //ä»Aå°ZZçå½¢å¼ |
| | | String lastLetter = ruleValue.substring(ruleValue.length() - 1); |
| | | if (lastLetter.equalsIgnoreCase("Z")) { |
| | | if (lastRevision.getRevisionValue().length() == 1) { |
| | | baseModel.setRevisionValue(prefix + "AA" + subfix); |
| | | } else { |
| | | lastLetter = ruleValue.substring(ruleValue.length() - 2, ruleValue.length() - 1); |
| | | lastLetter = String.valueOf((char) (lastLetter.toCharArray()[0] + 1)); |
| | | baseModel.setRevisionValue(prefix + ruleValue.substring(0, ruleValue.length() - 2) + lastLetter + subfix); |
| | | } |
| | | } else { |
| | | lastLetter = String.valueOf((char) (lastLetter.toCharArray()[0] + 1)); |
| | | baseModel.setRevisionValue(prefix + ruleValue.substring(0, ruleValue.length() - 1) + lastLetter + subfix); |
| | | } |
| | | } else { |
| | | //æåä¸ä¸ªçæ¬å¯è½æ¯æå¨è¾å
¥çï¼å¦ææä»¬ä¹é´åå¨Açè¯ï¼å¯è½ä¼é æéå¤ï¼æåä¸ä½æ¯åæ¯å°±å¨è¯¥åæ¯ä¸å 1ï¼æåä¸ä½ä¸æ¯åæ¯ï¼å°±åå¼ä¸å A |
| | | String lastLetter = ruleValue.substring(ruleValue.length() - 1); |
| | | if (lastLetter.matches(RegExpConstant.LETTER)) { |
| | | lastLetter = String.valueOf((char) (lastLetter.toCharArray()[0] + 1)); |
| | | baseModel.setRevisionValue(prefix + ruleValue.substring(0, ruleValue.length() - 1) + lastLetter + subfix); |
| | | } else { |
| | | baseModel.setRevisionValue(prefix + ruleValue + "A" + subfix); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å°è£
æä¸ªçæ¬ç第ä¸ä¸ªç次 |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | */ |
| | | public void wrapperFristVersion(BaseModel baseModel){ |
| | | VciBaseUtil.alertNotNull(baseModel,"æ°æ®å¯¹è±¡"); |
| | | VciBtmType btmType = getBtmTypeAnnotation(baseModel); |
| | | if(isManageVersion(btmType)) { |
| | | //åªæ¯æä»0,1ï¼æè
忝Aå¼å§ |
| | | if (StringUtils.isBlank(baseModel.getVersionRule())) { |
| | | baseModel.setVersionRule(btmType.versionRule().getValue()); |
| | | } |
| | | if (btmType.versionRule().equals(VciBtmType.VciBtmTypeVersionRule.INTSTART0)) { |
| | | baseModel.setVersionValue("0"); |
| | | } else if (btmType.versionRule().equals(VciBtmType.VciBtmTypeVersionRule.INTSTART1)) { |
| | | baseModel.setVersionValue("1"); |
| | | } else { |
| | | baseModel.setVersionValue("A"); |
| | | } |
| | | } |
| | | baseModel.setVersionSeq(1); |
| | | baseModel.setFirstV("1"); |
| | | baseModel.setLastV("1"); |
| | | } |
| | | |
| | | /** |
| | | * å°è£
第ä¸ä¸ªçæ¬ç第ä¸ä¸ªç次 |
| | | * @param baseModel æ°å¢çæ°æ®å¯¹è±¡ï¼ç¬¬ä¸ä¸ªçæ¬ç第ä¸ä¸ªç次 |
| | | */ |
| | | public void wrapperFristRevision(BaseModel baseModel){ |
| | | VciBaseUtil.alertNotNull(baseModel,"æ°æ®å¯¹è±¡"); |
| | | //éè¦å
夿æ¯å¦æ§å¶çæ¬ |
| | | VciBtmType btmType = getBtmTypeAnnotation(baseModel); |
| | | if(isManageRevision(btmType)) { |
| | | if (StringUtils.isBlank(baseModel.getOid())) { |
| | | baseModel.setOid(VciBaseUtil.getPk()); |
| | | } |
| | | //第ä¸ä¸ªçæ¬ç第ä¸ä¸ªç次 |
| | | if (StringUtils.isBlank(baseModel.getNameOid())) { |
| | | baseModel.setNameOid(VciBaseUtil.getPk()); |
| | | } |
| | | if (StringUtils.isBlank(baseModel.getRevisionOid())) { |
| | | baseModel.setRevisionOid(VciBaseUtil.getPk()); |
| | | } |
| | | |
| | | //第ä¸ä¸ªçæ¬ |
| | | if (btmType != null) { |
| | | baseModel.setRevisionRule(btmType.revisionRule()); |
| | | baseModel.setVersionValue(btmType.versionRule().getValue()); |
| | | } else { |
| | | throw new VciBaseException("没æVciBtmType注解ï¼{0}"); |
| | | } |
| | | //æ ¹æ®çæ¬è§åçæçæ¬å· |
| | | //3.çæ¬å· |
| | | //çæ¬å·ä¸ºç©ºï¼åªè½æ¯æå¨åè¾å
¥çæ¶åï¼åºè¯¥æ¯é误 |
| | | //å
¶ä»æ
åµä¸çæ¬å·ä¸ºç©ºé½è®¾ç½®çæ¬å· |
| | | if (StringUtils.isBlank(baseModel.getRevisionValue() )&& isInputRevision(baseModel) && StringUtils.isBlank(baseModel.getRevisionRule())){ |
| | | //ä¸å¤ç |
| | | }else { |
| | | if (StringUtils.isBlank(baseModel.getRevisionValue())) { |
| | | wrapperRevisionValue(baseModel, btmType, null); |
| | | } |
| | | } |
| | | //妿æç次ï¼é£è¿ä¸ªå°±æ¯æ°çæ¬ç第ä¸ä¸ªç次 |
| | | if (StringUtils.isNotBlank(baseModel.getVersionRule()) && StringUtils.isBlank(baseModel.getVersionValue())) { |
| | | wrapperFristVersion(baseModel); |
| | | } else { |
| | | baseModel.setFirstV("1"); |
| | | baseModel.setLastV("1"); |
| | | } |
| | | //4.çæ¬é¡ºåº |
| | | baseModel.setRevisionSeq(1); |
| | | baseModel.setFirstR("1"); |
| | | baseModel.setLastR("1"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å°è£
çå½å¨æ |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | */ |
| | | public void wrapperLifeCycle(BaseModel baseModel){ |
| | | VciBaseUtil.alertNotNull(baseModel,"æ°æ®å¯¹è±¡"); |
| | | VciBtmType btmType = getBtmTypeAnnotation(baseModel); |
| | | if(StringUtils.isBlank(baseModel.getLcStatus()) &&isManageLifeCycle(btmType) ){ |
| | | //å¼å§çæ¶åè·åçå½å¨æçåå§ç¶æ |
| | | if(StringUtils.isNotBlank(btmType.startStatus())){ |
| | | baseModel.setLcStatus(btmType.startStatus()); |
| | | }else { |
| | | if (lifeCycleProvider != null) { |
| | | try { |
| | | BaseResult lifeCycleResult = lifeCycleProvider.getStartStatus(btmType.lifeCycle()); |
| | | if (lifeCycleResult.isSuccess()) { |
| | | baseModel.setLcStatus((String) lifeCycleResult.getObj()); |
| | | } else { |
| | | throw new VciBaseException(lifeCycleResult.getMsg(), lifeCycleResult.getMsgObjs()); |
| | | } |
| | | } catch (Throwable e) { |
| | | throw new VciBaseException("è°ç¨ãçå½å¨æãæå¡è·ååå§ç¶ææ¶åºé,{0}", new String[]{btmType.lifeCycle()}, e); |
| | | } |
| | | } else { |
| | | throw new VciBaseException("没æåå§åçå½å¨æçè°ç¨å¨,请å¼åäººåæ£æ¥feign"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * æ¯å¦ç®¡ççå½å¨æ |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | * @return true表示管ç |
| | | */ |
| | | public boolean isManageLifeCycle(BaseModel baseModel){ |
| | | VciBtmType btmType = getBtmTypeAnnotation(baseModel); |
| | | return isManageLifeCycle(btmType); |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦ç®¡ççå½å¨æ |
| | | * @param btmType ä¸å¡ç±»å注解 |
| | | * @return true表示管ç |
| | | */ |
| | | public boolean isManageLifeCycle(VciBtmType btmType){ |
| | | if(btmType !=null && (StringUtils.isNotBlank(btmType.lifeCycle()) && !"defaultLC".equalsIgnoreCase(btmType.lifeCycle()))){ |
| | | return true; |
| | | }else{ |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦ç®¡ççæ¬ |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | * @return true 表示管ççæ¬ |
| | | */ |
| | | public boolean isManageRevision(BaseModel baseModel){ |
| | | VciBtmType btmType = getBtmTypeAnnotation(baseModel); |
| | | return isManageRevision(btmType); |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦ç®¡ççæ¬ |
| | | * @param btmType ä¸å¡ç±»åçæ³¨è§£ |
| | | * @return true 表示管ççæ¬ |
| | | */ |
| | | public boolean isManageRevision(VciBtmType btmType){ |
| | | if(btmType !=null && (btmType.revisionRuleInput() || StringUtils.isNotBlank(btmType.revisionRule()))){ |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦ç®¡ççæ¬¡ï¼å¿
须管ççæ¬æå¯ä»¥ç®¡ççæ¬¡ |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | * @return true 表示管ççæ¬ |
| | | */ |
| | | public boolean isManageVersion(BaseModel baseModel){ |
| | | VciBtmType btmType = getBtmTypeAnnotation(baseModel); |
| | | return isManageVersion(btmType); |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦ç®¡ççæ¬¡ï¼å¿
须管ççæ¬æå¯ä»¥ç®¡ççæ¬¡ |
| | | * @param btmType ä¸å¡ç±»åçæ³¨è§£ |
| | | * @return true 表示管ççæ¬ |
| | | */ |
| | | public boolean isManageVersion(VciBtmType btmType){ |
| | | if(isManageRevision(btmType) && !btmType.versionRule().equals(VciBtmType.VciBtmTypeVersionRule.NONE)){ |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * æ¯å¦å¯ä»¥æå¨è¾å
¥çæ¬å· |
| | | * @param baseModel åºæ¬æ°æ®å¯¹è±¡ |
| | | * @return trueå
许æå¨è¾å
¥çæ¬å· |
| | | */ |
| | | public boolean isInputRevision(BaseModel baseModel) { |
| | | VciBtmType btmType = getBtmTypeAnnotation(baseModel); |
| | | return isInputRevision(btmType); |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦å¯ä»¥æå¨è¾å
¥çæ¬å· |
| | | * @param btmType ä¸å¡ç±»åçæ³¨è§£ |
| | | * @return trueå
许æå¨è¾å
¥çæ¬å· |
| | | */ |
| | | public boolean isInputRevision(VciBtmType btmType) { |
| | | if(btmType !=null && btmType.revisionRuleInput()){ |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ°æ®å¯¹è±¡ä¸ç注解 |
| | | * @param baseModel æ°æ®å¯¹è±¡ |
| | | * @return ä¸å卿³¨è§£çæ¶åä¼è¿ånull |
| | | */ |
| | | public VciBtmType getBtmTypeAnnotation(BaseModel baseModel){ |
| | | VciBaseUtil.alertNotNull(baseModel,"æ°æ®å¯¹è±¡"); |
| | | return getBtmTypeAnnotation(baseModel.getClass()); |
| | | } |
| | | |
| | | /** |
| | | * è·åDO对象ä¸ç注解 |
| | | * @param doClass do对象çç±» |
| | | * @return ä¸å卿³¨è§£çæ¶åä¼è¿ånull |
| | | */ |
| | | public VciBtmType getBtmTypeAnnotation(Class<?> doClass){ |
| | | VciBaseUtil.alertNotNull(doClass,"è¦æ ¡éªä¸å¡ç±»åçç±»"); |
| | | if(modelAnnotationMap.containsKey(doClass.getName())){ |
| | | return modelAnnotationMap.get(doClass.getName()); |
| | | } |
| | | if(doClass.isAnnotationPresent(VciBtmType.class)){ |
| | | VciBtmType btmType = (VciBtmType)doClass.getAnnotation(VciBtmType.class); |
| | | if(btmType == null){ |
| | | btmType = doClass.getDeclaredAnnotation(VciBtmType.class); |
| | | } |
| | | modelAnnotationMap.put(doClass.getName(),btmType); |
| | | return btmType; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * å°è£
æ å½¢æ°æ®æ¥è¯¢å¨.è¿ä¸ªæ¹æ³è¢«åºå¼ï¼æ¹ä¸º VciQueryWrapperForDOéç parentQueryChild |
| | | * @param treeQueryObject æ å½¢æ¥è¯¢å¯¹è±¡ |
| | | * @param doClass å®ä½çç±» |
| | | * @param parentFieldName ä¸çº§å±æ§çåæ®µ |
| | | * @return æ¥è¯¢å°è£
å¨ |
| | | */ |
| | | @Deprecated |
| | | public VciQueryWrapperForDO wrapperForTree(TreeQueryObject treeQueryObject,Class<?> doClass,String parentFieldName){ |
| | | if(doClass == null){ |
| | | throw new VciBaseException("æ°æ®å¯¹è±¡æå±çç±»ä¸è½ä¸ºç©ºï¼ä¸è½å°è£
æ å½¢æ¥è¯¢å¨"); |
| | | } |
| | | if (treeQueryObject == null){ |
| | | treeQueryObject = new TreeQueryObject(); |
| | | } |
| | | VciQueryWrapperOption queryWrapperOption = new VciQueryWrapperOption(); |
| | | if(treeQueryObject.isQueryAllRev()){ |
| | | queryWrapperOption.setThisObjectQueryLastRevision(false); |
| | | queryWrapperOption.setThisObjectQueryRelease(false); |
| | | } |
| | | VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(treeQueryObject.getConditionMap(),doClass,new PageHelper(-1),true,queryWrapperOption); |
| | | if(StringUtils.isBlank(parentFieldName)){ |
| | | return queryWrapper; |
| | | } |
| | | if(StringUtils.isNotBlank(treeQueryObject.getParentOid()) ){ |
| | | //说æä¼ éäºä¸çº§ç |
| | | if(treeQueryObject.isQueryAllLevel()){ |
| | | //å
¨é¨çå±çº§é½è¦æ¥è¯¢ï¼æä»¬ä½¿ç¨start withå
æ¥è¯¢åºç»æåï¼åå¹é
æ¥è¯¢æ¡ä»¶ |
| | | queryWrapper.in(queryWrapper.getOidFieldName(), "select " + queryWrapper.getOidFieldName() + " from " + queryWrapper.getTableName() |
| | | + " start with " + parentFieldName + " = '" + treeQueryObject.getParentOid().trim() |
| | | + "' connect by prior " + queryWrapper.getOidFieldName() + " = " + parentFieldName ); |
| | | }else { |
| | | queryWrapper.eq(parentFieldName, treeQueryObject.getParentOid()); |
| | | } |
| | | }else{ |
| | | if(treeQueryObject.isQueryAllLevel()){ |
| | | //å
¨é¨çå±çº§é½è¦æ¥è¯¢ï¼æä»¬ä½¿ç¨start withå
æ¥è¯¢åºç»æåï¼åå¹é
æ¥è¯¢æ¡ä»¶ |
| | | queryWrapper.in(queryWrapper.getOidFieldName(), "select " + queryWrapper.getOidFieldName() + " from " + queryWrapper.getTableName() + " start with " + parentFieldName |
| | | + " is null connect by prior " + queryWrapper.getOidFieldName() + " = " + parentFieldName ); |
| | | }else{ |
| | | queryWrapper.isNull(parentFieldName); |
| | | } |
| | | } |
| | | return queryWrapper; |
| | | } |
| | | |
| | | /** |
| | | * å°æ°æ®å¯¹è±¡è½¬æ¢ä¸ºæ å½¢ |
| | | * @param doList æ°æ®å¯¹è±¡ |
| | | * @param wrapperOptions å°è£
çä¿¡æ¯ |
| | | * @return æ å表 |
| | | */ |
| | | public <T,R> List<Tree> doList2Trees(List<T> doList, TreeWrapperOptions wrapperOptions, Function<T,R> f){ |
| | | if(CollectionUtils.isEmpty(doList)){ |
| | | return new ArrayList<>(); |
| | | } |
| | | List<Tree> allTree = new ArrayList<Tree>(); |
| | | List<Tree> children = new ArrayList<Tree>(); |
| | | for (T doObject: doList) { |
| | | Tree tree =new Tree(); |
| | | List<String> oidFieldNames = VciBaseUtil.str2List(wrapperOptions.getOidFieldName()); |
| | | List<String> oidValues = new LinkedList<>(); |
| | | oidFieldNames.stream().forEach( s->{ |
| | | oidValues.add(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField(s,doObject))); |
| | | }); |
| | | tree.setOid(oidValues.stream().collect(Collectors.joining(wrapperOptions.getOidValueSep()))); |
| | | if(f !=null){ |
| | | tree.setText((String)f.apply(doObject)); |
| | | }else{ |
| | | List<String> textFieldNames = VciBaseUtil.str2List(wrapperOptions.getTextFieldName()); |
| | | List<String> textValues = new LinkedList<>(); |
| | | textFieldNames.stream().forEach( s->{ |
| | | textValues.add(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField(s,doObject))); |
| | | }); |
| | | tree.setText(textValues.stream().collect(Collectors.joining(wrapperOptions.getTextValueSep()))); |
| | | } |
| | | if(StringUtils.isNotBlank(wrapperOptions.getParentFieldName())){ |
| | | tree.setParentId(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField(wrapperOptions.getParentFieldName(),doObject))); |
| | | } |
| | | if(wrapperOptions.isAllAttributes()) { |
| | | try { |
| | | tree.setAttributes(VciBaseUtil.objectToMapString(doObject)); |
| | | } catch (Exception e) { |
| | | //è¿éä¸åå¤ç |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("æå¯¹è±¡è½¬æ¢ä¸ºmapæ¶åºç°äºé误ï¼ä½æ¯ä¸å½±åæ çå±ç¤ºï¼å¯¹ä¸å¡å¯è½æå½±å"); |
| | | } |
| | | } |
| | | } |
| | | if(wrapperOptions.isMultipleSelect() || wrapperOptions.isShowCheckBox()){ |
| | | tree.setShowCheckbox(true); |
| | | } |
| | | if(wrapperOptions.getParentOid() == null){ |
| | | wrapperOptions.setParentOid(""); |
| | | } |
| | | if(StringUtils.isBlank(tree.getParentId()) |
| | | || (StringUtils.isNotBlank(wrapperOptions.getParentOid()) && wrapperOptions.getParentOid().equalsIgnoreCase(tree.getParentId()))){ |
| | | allTree.add(tree); |
| | | }else { |
| | | children.add(tree); |
| | | } |
| | | } |
| | | new Tree().findChild(allTree,children); |
| | | |
| | | if(allTree.size()<=0){ |
| | | allTree.addAll(children); |
| | | } |
| | | return allTree; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.revision.service; |
| | | |
| | | import com.vci.starter.revision.model.*; |
| | | |
| | | /** |
| | | * çæ¬å¤çæéè¦çsqlæä½ãå ä¸ºè¦æ¥è¯¢æ°æ®åºï¼æä»¥æ¾å°dataBaseè¿ä¸ªstarterä¸ |
| | | * @author weidy |
| | | * @date 2020/4/15 |
| | | */ |
| | | public interface VciRevisionServiceI { |
| | | |
| | | /** |
| | | * è·åæåä¸ä¸ªçæ¬çä¿¡æ¯ |
| | | * @param nameOid å¯¹è±¡ä¸»é® |
| | | * @param tableName æ°æ®åºè¡¨æ ¼ |
| | | * @return æåä¸ä¸ªçæ¬ä¿¡æ¯ï¼å®ä¸ä¸å®æ¯åå¸ççæ¬ |
| | | */ |
| | | RevisionInfo selectLastRevision(String nameOid,String tableName); |
| | | |
| | | /** |
| | | * è·åæåä¸ä¸ªç次çä¿¡æ¯ |
| | | * @param nameOid 对象çä¸»é® |
| | | * @param revisionOid çæ¬çä¸»é® |
| | | * @param tableName æ°æ®åºè¡¨æ ¼ |
| | | * @return |
| | | */ |
| | | RevisionInfo selectLastVersion(String nameOid, String revisionOid,String tableName); |
| | | |
| | | /** |
| | | * è·åå·²åå¸ççæ¬çæ°æ®å¼ |
| | | * @param nameOid 对象çä¸»é® |
| | | * @param btmName ä¸å¡ç±»åçåç§° |
| | | * @param tableName æ°æ®åºè¡¨æ ¼ |
| | | * @return çæ¬ä¿¡æ¯ |
| | | */ |
| | | RevisionInfo selectRelease(String nameOid, String btmName, String tableName); |
| | | |
| | | /** |
| | | * æ·»å åå¸çæ°æ®,妿åå¨åæ´æ°ï¼å¦æä¸åå¨åæå
¥ |
| | | * @param releasedObj åå¸çæ¬çæ°æ® |
| | | * @return åå½±åçè¡æ° |
| | | */ |
| | | int saveReleased(ReleasedObjDO releasedObj); |
| | | |
| | | /** |
| | | * ææåä¸ä¸ªçæ¬éç½®isLastR |
| | | * @param nameOid 对象çä¸»é® |
| | | * @param tableName è¡¨æ ¼åç§° |
| | | * @return åå½±åçè¡æ° |
| | | */ |
| | | int resetLastRevision(String nameOid,String tableName); |
| | | |
| | | /** |
| | | * éç½®èçæ¬çisLastR |
| | | * @param oid èçæ¬çä¸»é® |
| | | * @param tableName è¡¨æ ¼åç§° |
| | | * @return åå½±åçè¡æ° |
| | | */ |
| | | int resetOldRevision(String oid,String tableName); |
| | | |
| | | /** |
| | | * éè¿èçæ¬ç䏻鮿¥è·åçæ¬ä¿¡æ¯ |
| | | * @param copyFromVersion æ°çæ¬ä½¿ç¨çèçæ¬çä¸»é® |
| | | * @param tableName è¡¨æ ¼åç§° |
| | | * @return çæ¬ä¿¡æ¯ |
| | | */ |
| | | RevisionInfo selectByOid(String copyFromVersion,String tableName); |
| | | |
| | | /** |
| | | * é置以åçææ°ç次 |
| | | * @param nameOid 对象çä¸»é® |
| | | * @param revisionOid çæ¬çä¸»é® |
| | | * @param tableName è¡¨æ ¼åç§° |
| | | * @return åå½±åçè¡æ° |
| | | */ |
| | | int resetLastVersion(String nameOid, String revisionOid,String tableName); |
| | | |
| | | /** |
| | | * éç½®èçæ¬¡ï¼å®ä¸ä¸å®æ¯ææ°çï¼ |
| | | * @param oid èçæ¬¡çä¸»é® |
| | | * @param tableName è¡¨æ ¼åç§° |
| | | * @return åå½±åçè¡æ° |
| | | */ |
| | | int resetOldVersion(String oid,String tableName); |
| | | |
| | | /** |
| | | * æ¥è¯¢å±æ§çäºæä¸ªå¼çæ°æ®æ¡æ°ï¼å¸¸ç¨äºå¤ææ°æ®æ¯å¦éå¤ |
| | | * @param key 屿§çåç§° |
| | | * @param value 屿§çå¼ |
| | | * @param tableName è¡¨æ ¼çåç§° |
| | | * @return ä¸ªæ° |
| | | */ |
| | | int countByProperties(String key,Object value,String tableName); |
| | | |
| | | /** |
| | | * æ¥è¯¢å±æ§çäºæä¸ªå¼å¹¶ä¸ä¸æ¯æä¸ªä¸»é®çæ°æ®æ¡æ°ï¼å¸¸ç¨äºä¿®æ¹æ°æ®æ¶å¤ææ°æ®æ¯å¦éå¤ |
| | | * @param key 屿§çåç§° |
| | | * @param value 屿§çå¼ |
| | | * @param tableName è¡¨æ ¼çåç§° |
| | | * @param oid ä¸»é® |
| | | * @return æ°æ®ä¸ªæ° |
| | | */ |
| | | int countByPropertiesNotIncludeSelf(String key,Object value,String tableName,String oid); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.undo.bo; |
| | | |
| | | import com.vci.starter.web.pagemodel.SessionInfo; |
| | | |
| | | /** |
| | | * å¾
åä»»å¡çå
容 |
| | | * @author weidy |
| | | * @date 2022/8/1 |
| | | */ |
| | | public class UndoTaskBO implements java.io.Serializable{ |
| | | |
| | | /** |
| | | * åºåå |
| | | */ |
| | | private static final long serialVersionUID = -4189123149238900765L; |
| | | /** |
| | | * ç¨æ·çä¼è¯ä¿¡æ¯ |
| | | */ |
| | | private SessionInfo sessionInfo; |
| | | |
| | | /** |
| | | * é»è®¤ç访é®è·¯å¾åç¼ï¼æä»¬èªè¡å³å®ç |
| | | */ |
| | | private String defaultUrl; |
| | | |
| | | /** |
| | | * ä»»å¡çç±»å |
| | | */ |
| | | private String taskType; |
| | | |
| | | public SessionInfo getSessionInfo() { |
| | | return sessionInfo; |
| | | } |
| | | |
| | | public void setSessionInfo(SessionInfo sessionInfo) { |
| | | this.sessionInfo = sessionInfo; |
| | | } |
| | | |
| | | public String getDefaultUrl() { |
| | | return defaultUrl; |
| | | } |
| | | |
| | | public void setDefaultUrl(String defaultUrl) { |
| | | this.defaultUrl = defaultUrl; |
| | | } |
| | | |
| | | public String getTaskType() { |
| | | return taskType; |
| | | } |
| | | |
| | | public void setTaskType(String taskType) { |
| | | this.taskType = taskType; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "UndoTaskBO{" + |
| | | "sessionInfo=" + sessionInfo + |
| | | ", defaultUrl='" + defaultUrl + '\'' + |
| | | ", taskType='" + taskType + '\'' + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.undo.query; |
| | | import com.vci.starter.web.pagemodel.SessionInfo; |
| | | |
| | | /** |
| | | * å¾
åä»»å¡çæ¥è¯¢å¯¹è±¡ |
| | | * @author weidy |
| | | * @date 2022/8/1 |
| | | */ |
| | | public class UndoTaskQuery implements java.io.Serializable{ |
| | | |
| | | /** |
| | | * åºåå |
| | | */ |
| | | private static final long serialVersionUID = 6668428964443134603L; |
| | | |
| | | /** |
| | | * å½å页 |
| | | */ |
| | | private Integer page; |
| | | |
| | | /** |
| | | * æ¥è¯¢ |
| | | */ |
| | | private String title; |
| | | |
| | | /** |
| | | * æ¯é¡µæ¾ç¤ºé¡µæ° |
| | | */ |
| | | private Integer limit = 25; |
| | | |
| | | /** |
| | | * å¼å§æ¶é´ |
| | | */ |
| | | private String startTime; |
| | | |
| | | /** |
| | | * å¼å§æ¶é´-èµ·å§ |
| | | */ |
| | | private String startTime_begin; |
| | | |
| | | /** |
| | | * å¼å§æ¶é´-ç»æ¢ |
| | | */ |
| | | private String startTime_end; |
| | | |
| | | /** |
| | | * ç»ææ¶é´ |
| | | */ |
| | | private String endTime; |
| | | |
| | | /** |
| | | * ç»ææ¶é´--èµ·å§ |
| | | */ |
| | | private String endTime_begin; |
| | | |
| | | /** |
| | | * ç»ææ¶é´--ç»æ¢ |
| | | */ |
| | | private String endTime_end; |
| | | |
| | | public Integer getPage() { |
| | | return page; |
| | | } |
| | | |
| | | public void setPage(Integer page) { |
| | | this.page = page; |
| | | } |
| | | |
| | | public String getTitle() { |
| | | return title; |
| | | } |
| | | |
| | | public void setTitle(String title) { |
| | | this.title = title; |
| | | } |
| | | |
| | | public Integer getLimit() { |
| | | return limit; |
| | | } |
| | | |
| | | public void setLimit(Integer limit) { |
| | | this.limit = limit; |
| | | } |
| | | |
| | | public String getStartTime() { |
| | | return startTime; |
| | | } |
| | | |
| | | public void setStartTime(String startTime) { |
| | | this.startTime = startTime; |
| | | } |
| | | |
| | | public String getStartTime_begin() { |
| | | return startTime_begin; |
| | | } |
| | | |
| | | public void setStartTime_begin(String startTime_begin) { |
| | | this.startTime_begin = startTime_begin; |
| | | } |
| | | |
| | | public String getStartTime_end() { |
| | | return startTime_end; |
| | | } |
| | | |
| | | public void setStartTime_end(String startTime_end) { |
| | | this.startTime_end = startTime_end; |
| | | } |
| | | |
| | | public String getEndTime() { |
| | | return endTime; |
| | | } |
| | | |
| | | public void setEndTime(String endTime) { |
| | | this.endTime = endTime; |
| | | } |
| | | |
| | | public String getEndTime_begin() { |
| | | return endTime_begin; |
| | | } |
| | | |
| | | public void setEndTime_begin(String endTime_begin) { |
| | | this.endTime_begin = endTime_begin; |
| | | } |
| | | |
| | | public String getEndTime_end() { |
| | | return endTime_end; |
| | | } |
| | | |
| | | public void setEndTime_end(String endTime_end) { |
| | | this.endTime_end = endTime_end; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "UndoTaskQuery{" + |
| | | ", page=" + page + |
| | | ", title='" + title + '\'' + |
| | | ", limit=" + limit + |
| | | ", startTime='" + startTime + '\'' + |
| | | ", startTime_begin='" + startTime_begin + '\'' + |
| | | ", startTime_end='" + startTime_end + '\'' + |
| | | ", endTime='" + endTime + '\'' + |
| | | ", endTime_begin='" + endTime_begin + '\'' + |
| | | ", endTime_end='" + endTime_end + '\'' + |
| | | "} " + super.toString(); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.undo.vo; |
| | | |
| | | /** |
| | | * å¾
åçä¿¡æ¯ |
| | | * @author weidy |
| | | * @date 2022/8/1 |
| | | */ |
| | | public class UndoTaskVO implements java.io.Serializable{ |
| | | |
| | | /** |
| | | * åºåå |
| | | */ |
| | | private static final long serialVersionUID = 393050238018013429L; |
| | | /** |
| | | * 主é®--å¯ä»¥ä¸ºç©º |
| | | */ |
| | | private String oid; |
| | | |
| | | /** |
| | | * ä»»å¡çåç§° |
| | | */ |
| | | private String taskName; |
| | | |
| | | /** |
| | | * å¤ç人å§å |
| | | */ |
| | | private String appSendName; |
| | | |
| | | /** |
| | | * ä»»å¡çç±»å |
| | | */ |
| | | private String taskType; |
| | | |
| | | /** |
| | | * åéæ¶é´ |
| | | */ |
| | | private String sendTime; |
| | | |
| | | /** |
| | | * ç»ææ¶é´-å¯è½ä¸ºç©º |
| | | */ |
| | | private String endTime; |
| | | |
| | | /** |
| | | * ç´§æ¥ç¨åº¦ï¼0-ç¹æ¥ï¼1-ç´§æ¥ï¼2ï¼-ä¸è¬ï¼ |
| | | */ |
| | | private Integer priority = 2; |
| | | |
| | | /** |
| | | * å¾
åçä»»å¡å°å |
| | | */ |
| | | private String url; |
| | | |
| | | /** |
| | | * å¾
åçæè¿° |
| | | */ |
| | | private String taskDesc; |
| | | |
| | | public String getOid() { |
| | | return oid; |
| | | } |
| | | |
| | | public void setOid(String oid) { |
| | | this.oid = oid; |
| | | } |
| | | |
| | | public String getTaskName() { |
| | | return taskName; |
| | | } |
| | | |
| | | public void setTaskName(String taskName) { |
| | | this.taskName = taskName; |
| | | } |
| | | |
| | | public String getAppSendName() { |
| | | return appSendName; |
| | | } |
| | | |
| | | public void setAppSendName(String appSendName) { |
| | | this.appSendName = appSendName; |
| | | } |
| | | |
| | | public String getTaskType() { |
| | | return taskType; |
| | | } |
| | | |
| | | public void setTaskType(String taskType) { |
| | | this.taskType = taskType; |
| | | } |
| | | |
| | | public String getSendTime() { |
| | | return sendTime; |
| | | } |
| | | |
| | | public void setSendTime(String sendTime) { |
| | | this.sendTime = sendTime; |
| | | } |
| | | |
| | | public String getEndTime() { |
| | | return endTime; |
| | | } |
| | | |
| | | public void setEndTime(String endTime) { |
| | | this.endTime = endTime; |
| | | } |
| | | |
| | | public Integer getPriority() { |
| | | return priority; |
| | | } |
| | | |
| | | public void setPriority(Integer priority) { |
| | | this.priority = priority; |
| | | } |
| | | |
| | | public String getUrl() { |
| | | return url; |
| | | } |
| | | |
| | | public void setUrl(String url) { |
| | | this.url = url; |
| | | } |
| | | |
| | | public String getTaskDesc() { |
| | | return taskDesc; |
| | | } |
| | | |
| | | public void setTaskDesc(String taskDesc) { |
| | | this.taskDesc = taskDesc; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "UndoTaskVO{" + |
| | | "oid='" + oid + '\'' + |
| | | ", taskName='" + taskName + '\'' + |
| | | ", appSendName='" + appSendName + '\'' + |
| | | ", taskType='" + taskType + '\'' + |
| | | ", sendTime='" + sendTime + '\'' + |
| | | ", endTime='" + endTime + '\'' + |
| | | ", priority=" + priority + |
| | | ", url='" + url + '\'' + |
| | | ", taskDesc='" + taskDesc + '\'' + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * æ°æ®åºçåæ®µæ å°,对象ä¸BO屿§æ å° |
| | | * @author weidy |
| | | * |
| | | */ |
| | | @Target({ java.lang.annotation.ElementType.FIELD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface Column { |
| | | /** |
| | | * åç§°ï¼å¦æç¸åï¼ä¸åºå大å°åï¼å¯ä»¥ä¸è¾å
¥ |
| | | * @return é»è®¤ä¸ºç©º |
| | | */ |
| | | String name() default ""; |
| | | |
| | | /** |
| | | * æ¯å¦å¯ä¸ |
| | | * @return é»è®¤ä¸å¯ä¸ |
| | | */ |
| | | boolean unique() default false; |
| | | |
| | | /** |
| | | * æ ¡éªå¯ä¸çæ¶åï¼ä¸åºå大å°å |
| | | * @return é»è®¤åºå |
| | | */ |
| | | boolean unUniqueCase() default false; |
| | | |
| | | /** |
| | | * æ¯å¦å¯ä»¥ä¸ºç©º true表示å¯ä»¥ä¸ºç©ºï¼false表示ä¸è½ä¸ºç©º |
| | | * @return é»è®¤å¯ä»¥ä¸ºç©º |
| | | */ |
| | | boolean nullable() default true; |
| | | |
| | | /** |
| | | * æè¿° |
| | | * @return é»è®¤ä¸ºç©º |
| | | */ |
| | | String columnDefinition() default ""; |
| | | |
| | | /** |
| | | * é¿åº¦ |
| | | * @return é»è®¤ä¸º0 |
| | | */ |
| | | int length() default 0; |
| | | |
| | | /** |
| | | * 精度 |
| | | * @return é»è®¤ä¸º0 |
| | | */ |
| | | int precision() default 0; |
| | | |
| | | /** |
| | | * å»åº¦-doubleä½¿ç¨ |
| | | * @return é»è®¤ä¸º2 |
| | | */ |
| | | int scale() default 2; |
| | | |
| | | |
| | | /** |
| | | * åç
§å段æ¾ç¤ºçåæ®µ |
| | | * @return é»è®¤ä¸ºç©º |
| | | */ |
| | | String showTextField() default ""; |
| | | |
| | | /** |
| | | * ä½¿ç¨æä¸¾ |
| | | * @return æä¸¾çè±æåç§° |
| | | */ |
| | | String useEnum() default ""; |
| | | |
| | | /** |
| | | * 使ç¨åç
§ |
| | | * @return å¼ç¨çä¸å¡ç±»åçè±æåç§° |
| | | */ |
| | | String useRefer() default ""; |
| | | |
| | | /** |
| | | * å¼èå´ |
| | | * @return å¤ä¸ªèå´çå¼ |
| | | */ |
| | | String[] range() default ""; |
| | | |
| | | /** |
| | | * é»è®¤å¼ï¼å¦ææ¯æ¥ææè
æ°åå½¢å¼çæ¶åï¼ä¹ç´æ¥è½¬æ¢å符串 |
| | | * @return é»è®¤ä¸ºç©º |
| | | */ |
| | | String defaultValue() default ""; |
| | | |
| | | /** |
| | | * 使ç¨å
¶ä»åç
§å段çå
³è屿§ |
| | | * @return é»è®¤ä¸ºç©º |
| | | */ |
| | | String referColumnName() default ""; |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | @Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface Id { |
| | | boolean value() default true; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * çå½å¨æäºä»¶å®ä¹ |
| | | * @author weidy |
| | | */ |
| | | @Target({java.lang.annotation.ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface LifeCycleEvent { |
| | | /** |
| | | * äºä»¶æ¾ç¤ºææ¬ |
| | | * @return |
| | | */ |
| | | String text() ; |
| | | |
| | | /** |
| | | * äºä»¶æè¿° |
| | | * @return |
| | | */ |
| | | String description() default ""; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * æå¡ç«¯å®ä¹ï¼ç¨æ·è®¾ç½®corbaçæå¡çåç§°ï¼é»è®¤ä¸ºä½¿ç¨è¿ä¸ªæ³¨è§£çç±»çé¦åæ¯å°å |
| | | * @author weidy |
| | | */ |
| | | @Target({java.lang.annotation.ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface SOAService { |
| | | /** |
| | | * æå¡çåå |
| | | * @return æå¡çåç§°ï¼å¦ææ²¡æè®¾ç½®é»è®¤ä¸ºæ³¨è§£ç±»çé¦åæ¯å°å |
| | | */ |
| | | String value() default ""; |
| | | |
| | | /** |
| | | * æå¡çç±»å |
| | | * @return æå¡ç±»åæä¸¾ |
| | | */ |
| | | SOASericeType serviceType() default SOASericeType.CORBA; |
| | | |
| | | /** |
| | | * æå¡çç±»åæä¸¾å®ä¹ |
| | | */ |
| | | public static enum SOASericeType{ |
| | | CORBA,THRIFT,WEBSERVICE,SOCKET |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | @Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface Transient { |
| | | boolean value() default true; |
| | | /** |
| | | * åç
§åæè
æä¸¾å;åç
§çå为xxx.nameï¼æä¸¾å为æä¸¾ç¼å·_æä¸¾å¼ç屿§ |
| | | * @return |
| | | */ |
| | | String referColumn() default ""; |
| | | |
| | | /** |
| | | * å
³èçå¼çåæ®µï¼é»è®¤ä¸ºoid |
| | | * @return åæ®µçåç§° |
| | | */ |
| | | String valueField() default "oid"; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | @Target({java.lang.annotation.ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciBtmType { |
| | | |
| | | /** |
| | | * è±æåç§° |
| | | * @return è±æåç§° |
| | | */ |
| | | String name() default ""; |
| | | |
| | | |
| | | /** |
| | | * æ¾ç¤ºææ¬ |
| | | * @return æ¾ç¤ºææ¬ |
| | | */ |
| | | String text() default ""; |
| | | |
| | | /** |
| | | * æè¿° |
| | | * @return æè¿° |
| | | */ |
| | | String description() default ""; |
| | | |
| | | /** |
| | | * è¡¨æ ¼åç§° |
| | | * @return è¡¨æ ¼åç§° |
| | | */ |
| | | String tableName() default ""; |
| | | |
| | | /** |
| | | *æ¯å¦å¯ä»¥æå¨è¾å
¥çæ¬ |
| | | * @return true表示æå¨è¾å
¥çæ¬ |
| | | */ |
| | | boolean revisionRuleInput() default false; |
| | | |
| | | /** |
| | | * çæ¬è§å |
| | | * @return çæ¬è§ç¨ |
| | | */ |
| | | String revisionRule() default ""; |
| | | |
| | | /** |
| | | * çæ¬¡å·è§å |
| | | * @return çæ¬¡å·è§å |
| | | */ |
| | | VciBtmTypeVersionRule versionRule() default VciBtmTypeVersionRule.NONE; |
| | | |
| | | /** |
| | | * 彿¯åæ¯åæ°åçè§åçæ¶åï¼å¯ä»¥è®¾ç½®åç¼ |
| | | * @return åç¼ |
| | | */ |
| | | String revisionRulePrefix() default ""; |
| | | |
| | | /** |
| | | * 彿¯åæ¯åæ°åçè§åçæ¶åï¼å¯ä»¥è®¾ç½®åç¼ |
| | | * @return åç¼çå¼ |
| | | */ |
| | | String revisionRuleSubfix() default ""; |
| | | |
| | | /** |
| | | * æå±çå½å¨æ |
| | | * @return 主çå½å¨æ |
| | | */ |
| | | String lifeCycle() ; |
| | | |
| | | /** |
| | | * çå½å¨æçåå§çå¼ï¼è¿ä¸ªæ³¨è§£çä¼å
级大äºçå½å¨æçèµ·å§ç¶æ |
| | | * @return åå§ç¶æï¼ä¼å
级æé« |
| | | */ |
| | | String startStatus() default ""; |
| | | |
| | | /** |
| | | * å¤ç¨çå½å¨æ |
| | | * @return å¤ç¨çå½å¨æå表æè
空 |
| | | */ |
| | | String[] subLifeCycle() default ""; |
| | | |
| | | /** |
| | | * æ¯å¦ç®¡çå¯çº§ |
| | | * @return true表示éè¦ç®¡ç |
| | | */ |
| | | boolean secretAble() default false; |
| | | |
| | | /** |
| | | * æ¯å¦å
¼å®¹ä»¥åçå¹³å° |
| | | * @return true表示å
¼å®¹ï¼ä¼å¯¹é»è®¤ç屿§æä¸åçå¤ç |
| | | */ |
| | | boolean compatbility() default false; |
| | | |
| | | /** |
| | | * ä¸çº§çåæ®µåå |
| | | * @return ä¸çº§å段 |
| | | */ |
| | | String parentField() default ""; |
| | | |
| | | /** |
| | | * çæ¬¡çæ¬çæä¸¾ |
| | | */ |
| | | public enum VciBtmTypeVersionRule { |
| | | /** |
| | | * ä»1å¼å§çèªç¶æ° |
| | | */ |
| | | INTSTART1("int1"), |
| | | /** |
| | | * ä»0å¼çèªç¶æ° |
| | | */ |
| | | INTSTART0("int0"), |
| | | /** |
| | | * ä¸ä½¿ç¨ç次 |
| | | */ |
| | | NONE("none"), |
| | | /** |
| | | * 大å忝Aå¼å§ |
| | | */ |
| | | LETTER("letter"); |
| | | private String value; |
| | | |
| | | /** |
| | | * æä¸¾æé 彿° |
| | | * @param value æä¸¾çå¼ |
| | | */ |
| | | private VciBtmTypeVersionRule(String value) { |
| | | this.value = value; |
| | | } |
| | | |
| | | /** |
| | | * è·åæä¸¾çå¼ |
| | | * @return æä¸¾çå¼ |
| | | */ |
| | | public String getValue() { |
| | | return value; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * åæè¿° |
| | | */ |
| | | @Target({ElementType.FIELD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciColumnDefinition { |
| | | |
| | | /** |
| | | * å
·ä½çå¼ |
| | | * @return |
| | | */ |
| | | String value(); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * æä¸¾å®ä¹ |
| | | * @author weidy |
| | | */ |
| | | @Target({java.lang.annotation.ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciEnum { |
| | | |
| | | /** |
| | | * è±æåç§° |
| | | * @return |
| | | */ |
| | | String name() default ""; |
| | | |
| | | /** |
| | | * å¼ç±»åï¼é»è®¤ä¸ºå符串 |
| | | * @return |
| | | */ |
| | | Class valueType() default java.lang.String.class; |
| | | |
| | | /** |
| | | * æ¾ç¤ºææ¬ |
| | | * @return |
| | | */ |
| | | String text() default ""; |
| | | |
| | | /** |
| | | * æè¿° |
| | | * @return |
| | | */ |
| | | String description() default ""; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | |
| | | import com.vci.starter.web.enumpck.VciFieldTypeEnum; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * VCIå¹³å°ä¸æå±çåæ®µç±»å |
| | | * @author weidy |
| | | */ |
| | | @Target({java.lang.annotation.ElementType.FIELD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciFieldType { |
| | | /** |
| | | * ç±»åçå¼ï¼é»è®¤ä¸ºå符串 |
| | | * @return |
| | | */ |
| | | VciFieldTypeEnum value() default VciFieldTypeEnum.VTString; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * çå½å¨æå¯¹è±¡å®ä¹ï¼å¨å
¶ä¸å®ä¹ä¸åºæ¬ä¿¡æ¯ï¼å¨ä½¿ç¨è¿ä¸ªæ³¨è§£ç对象ä¸å®ä¹ç¶æï¼åæµå |
| | | * @author weidy |
| | | */ |
| | | @Target({java.lang.annotation.ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciLifeCycle { |
| | | |
| | | /** |
| | | * è±æåç§° |
| | | * @return |
| | | */ |
| | | String name() default ""; |
| | | |
| | | /** |
| | | * èµ·å§ç¶æ |
| | | * @return |
| | | */ |
| | | String startStatus() default ""; |
| | | |
| | | /** |
| | | * æ¾ç¤ºææ¬ |
| | | * @return |
| | | */ |
| | | String text() default ""; |
| | | |
| | | /** |
| | | * æè¿° |
| | | * @return |
| | | */ |
| | | String description() default ""; |
| | | |
| | | /** |
| | | * è¿æ¥çº¿ |
| | | * @return |
| | | */ |
| | | VciLifeCycleTrans[] translations() default @VciLifeCycleTrans(source = "",target = "",name=""); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * çå½å¨æè¿æ¥çº¿çäºä»¶ |
| | | * @author weidy |
| | | */ |
| | | @Target({ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciLifeCycleTranEvent { |
| | | |
| | | /** |
| | | * ç±»å
¨è·¯å¾ |
| | | * @return 类路å¾åç§° |
| | | */ |
| | | String classFullName() ; |
| | | |
| | | /** |
| | | * æ¾ç¤ºåç§° |
| | | * @return æ¾ç¤ºåç§° |
| | | */ |
| | | String showName(); |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * çå½å¨æç¶ææµå |
| | | * @author weidy |
| | | */ |
| | | @Target({java.lang.annotation.ElementType.TYPE, ElementType.FIELD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciLifeCycleTrans { |
| | | |
| | | /** |
| | | * èµ·å§ç¶æ |
| | | * @return |
| | | */ |
| | | String source() default ""; |
| | | |
| | | /** |
| | | * ç®æ ç¶æ |
| | | * @return |
| | | */ |
| | | String target() default ""; |
| | | |
| | | /** |
| | | * åç§° |
| | | * @return |
| | | */ |
| | | String name() ; |
| | | |
| | | /** |
| | | * æéäºä»¶ |
| | | * @return |
| | | */ |
| | | VciLifeCycleTranEvent[] listeners() default @VciLifeCycleTranEvent(classFullName = "",showName = ""); |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * 龿¥ç±»å |
| | | */ |
| | | @Target({java.lang.annotation.ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciLinkType { |
| | | |
| | | /** |
| | | * è±æåç§° |
| | | * @return |
| | | */ |
| | | String name() default ""; |
| | | |
| | | |
| | | /** |
| | | * æ¾ç¤ºææ¬ |
| | | * @return |
| | | */ |
| | | String text() default ""; |
| | | |
| | | /** |
| | | * æè¿° |
| | | * @return |
| | | */ |
| | | String description() default ""; |
| | | |
| | | /** |
| | | * è¡¨æ ¼åç§° |
| | | * @return |
| | | */ |
| | | String tableName() default ""; |
| | | |
| | | /** |
| | | * from端 |
| | | * @return |
| | | */ |
| | | String[] fromBtmTypes() ; |
| | | |
| | | /** |
| | | * to端 |
| | | * @return |
| | | */ |
| | | String[] toBtmTypes(); |
| | | |
| | | /** |
| | | * æ¯å¦ç®¡çå¯çº§ |
| | | * @return true表示éè¦ç®¡ç |
| | | */ |
| | | boolean secretAble() default false; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * vci平尿«æçå
ï¼ä¼èªå¨æ«æä¸å¡ç±»åï¼é¾æ¥ç±»åï¼æä¸¾ï¼çå½å¨æï¼çæ¬è§å |
| | | * @author weidy |
| | | */ |
| | | @Target({java.lang.annotation.ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciPlatformScan { |
| | | |
| | | /** |
| | | * å
å,å°ä»ä¹å
å¼å§å°±è¡ï¼ä¼èªå¨æ¾å®çä¸çº§å
|
| | | * @return |
| | | */ |
| | | String[] value(); |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * çæ¬è§åå®ä¹ |
| | | * @author weidy |
| | | */ |
| | | @Target({java.lang.annotation.ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciRevisionRule { |
| | | |
| | | /** |
| | | * è±æåç§° |
| | | * @return |
| | | */ |
| | | String name() ; |
| | | |
| | | /** |
| | | * æ¾ç¤ºææ¬ |
| | | * @return |
| | | */ |
| | | String text() ; |
| | | |
| | | /** |
| | | * æè¿° |
| | | * @return |
| | | */ |
| | | String description() default ""; |
| | | |
| | | /** |
| | | * è·³è·å符 |
| | | * @return |
| | | */ |
| | | String skipChar() default ""; |
| | | |
| | | /** |
| | | * åå§å符 |
| | | * @return |
| | | */ |
| | | String startChar() ; |
| | | |
| | | /** |
| | | * æ¥é¿ |
| | | * @return |
| | | */ |
| | | int stepNumber() default 1; |
| | | |
| | | /** |
| | | * åç¼ |
| | | * @return |
| | | */ |
| | | String prefixString() default ""; |
| | | |
| | | /** |
| | | * åç¼ |
| | | * @return |
| | | */ |
| | | String suffixString() default ""; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * ä½¿ç¨æä¸¾ |
| | | * @author weidy |
| | | */ |
| | | @Target({ElementType.FIELD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciUseEnum { |
| | | |
| | | /** |
| | | * ä½¿ç¨æä¸¾çè±æåç§° |
| | | * @return |
| | | */ |
| | | String value() ; |
| | | |
| | | /** |
| | | * é»è®¤çå¼ |
| | | * @return |
| | | */ |
| | | String defaultValue() default ""; |
| | | |
| | | /** |
| | | * æ¾ç¤ºçåæ®µ |
| | | * @return |
| | | */ |
| | | String showTextField() ; |
| | | |
| | | /** |
| | | * æ¯å¦åå¨å¤ä¸ª |
| | | * @return |
| | | */ |
| | | boolean multiple() default false; |
| | | |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * 使ç¨åç
§ç注解 |
| | | * @author weidy |
| | | */ |
| | | @Target({ ElementType.FIELD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciUseRefer { |
| | | /** |
| | | * å¼ç¨çä¸å¡ç±»å |
| | | * @return |
| | | */ |
| | | String value(); |
| | | |
| | | /** |
| | | * æ¾ç¤ºææ¬çåæ®µ |
| | | * @return |
| | | */ |
| | | String showTextField() default ""; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * æ¯å¦ä¸ºxmltypeçæ ¼å¼(èå¹³å°ï¼ |
| | | * @author weidy |
| | | * @date 2022-2-15 |
| | | */ |
| | | @Target({ElementType.FIELD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface XmlType { |
| | | |
| | | /** |
| | | * å¼ |
| | | * @return æ¯å¦ |
| | | */ |
| | | boolean value() default true; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.bus; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | @Target({java.lang.annotation.ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface PortalTodoPublishImpl { |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.bus; |
| | | |
| | | import com.vci.starter.web.enumpck.VciChangeDocumentTypeEnum; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * ä¿®æ¹æ°æ®åçæ§è¡æä»¶ |
| | | * @author weidy |
| | | * @date 2020/1/29 |
| | | */ |
| | | @Target({ ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciChangeDataAfter { |
| | | |
| | | /** |
| | | * è¦çå¬çä¸å¡ç±»åçåç§° |
| | | * @return ä¸å¡ç±»åçåç§° |
| | | */ |
| | | String[] btmType() default ""; |
| | | |
| | | /** |
| | | * è¦çå¬ä¿®æ¹çç±»å |
| | | */ |
| | | VciChangeDocumentTypeEnum[] changeType() default VciChangeDocumentTypeEnum.ALL; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.bus; |
| | | |
| | | import com.vci.starter.web.enumpck.VciChangeDocumentTypeEnum; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * ä¿®æ¹æ°æ®ä¹åçæ§è¡æä»¶ |
| | | * @author weidy |
| | | * @date 2020/1/29 |
| | | */ |
| | | @Target({ ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciChangeDataBefore { |
| | | |
| | | /** |
| | | * è¦çå¬çä¸å¡ç±»åçåç§° |
| | | * @return ä¸å¡ç±»åçåç§° |
| | | */ |
| | | String[] btmType() default ""; |
| | | |
| | | /** |
| | | * è¦çå¬ä¿®æ¹çç±»å |
| | | */ |
| | | VciChangeDocumentTypeEnum[] changeType() default VciChangeDocumentTypeEnum.ALL; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.bus; |
| | | |
| | | import com.vci.starter.web.enumpck.VciChangeDocumentTypeEnum; |
| | | import org.springframework.core.annotation.AliasFor; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * æ°æ®ååçæ©å±æä»¶ |
| | | * @author weidy |
| | | * @date 2020/2/23 |
| | | */ |
| | | @Target({ ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Component |
| | | public @interface VciChangeDataPlugin { |
| | | /** |
| | | * beançåç§° |
| | | * @return é»è®¤ä¸ºé¦å忝å°å |
| | | */ |
| | | @AliasFor( |
| | | annotation = Component.class |
| | | ) |
| | | String value() default ""; |
| | | |
| | | /** |
| | | * è¦çå¬çä¸å¡ç±»åçåç§° |
| | | * @return ä¸å¡ç±»åçåç§° |
| | | */ |
| | | String[] btmType() default ""; |
| | | |
| | | /** |
| | | * è¦çå¬ä¿®æ¹çç±»å |
| | | */ |
| | | VciChangeDocumentTypeEnum[] changeType() default VciChangeDocumentTypeEnum.ALL; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.bus; |
| | | |
| | | |
| | | import com.vci.starter.web.enumpck.VciChangeDocumentTypeEnum; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * æ·»å ï¼ä¿®æ¹ï¼å 餿°æ® |
| | | * ç¼åæ´æ°ï¼å
¨ææ£ç´¢ï¼ç¼ç è§åçæ§ç |
| | | * @author weidy |
| | | * @date 2020/3/29 |
| | | */ |
| | | @Target({ ElementType.METHOD,ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciChangeDocument { |
| | | /** |
| | | * ä¸å¡ç±»åçåç§° |
| | | * @return ä¸å¡ç±»åçåç§° |
| | | */ |
| | | String[] btmType() default ""; |
| | | |
| | | /** |
| | | * 主é®çåæ®µï¼æ¯æspel(springç表达å¼ï¼åèç¼å |
| | | * @return 主é®çåæ®µ |
| | | */ |
| | | String[] oidField() default ""; |
| | | |
| | | /** |
| | | * å
³èçä¸å¡ç±»å |
| | | * @return å½åçä¸å¡ç±»åå
³èçä¸å¡ç±»å |
| | | */ |
| | | String[] linkBtmType() default ""; |
| | | |
| | | /** |
| | | * ä¿®æ¹çç±»å |
| | | */ |
| | | VciChangeDocumentTypeEnum changeType() default VciChangeDocumentTypeEnum.ADD; |
| | | |
| | | /** |
| | | * ä¸å
å«ç表达å¼ï¼æ¯æspel |
| | | * @return |
| | | */ |
| | | String unless() default ""; |
| | | |
| | | /** |
| | | * æ¥å£å¤æå¹çæ§ |
| | | * @return é»è®¤æ¯å¼å¯å¹çæ§ï¼å 为åªè¦å¯¹æ°æ®è¿è¡åæ´é½åºè¯¥æ³¨æ |
| | | */ |
| | | boolean idempotence() default true; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.bus; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * ç»å½åçäºä»¶ |
| | | * @author weidy |
| | | * @date 2020/1/29 |
| | | */ |
| | | @Target({ ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciLoginAfter { |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.bus; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * |
| | | * ç»å½ä¹åçäºä»¶ |
| | | * @author weidy |
| | | * @date 2020/1/29 |
| | | */ |
| | | @Target({ ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciLoginBefore { |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.bus; |
| | | |
| | | import org.springframework.core.annotation.AliasFor; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * ç»å½çæä»¶ |
| | | * @author weidy |
| | | * @date 2020/2/23 |
| | | */ |
| | | @Target({ ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Component |
| | | public @interface VciLoginPlugin { |
| | | /** |
| | | * beançåç§° |
| | | * @return |
| | | */ |
| | | @AliasFor( |
| | | annotation = Component.class |
| | | ) |
| | | String value() default ""; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.bus; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * éåºç³»ç»ä¹å |
| | | * @author weidy |
| | | * @date 2020/1/29 |
| | | */ |
| | | @Target({ ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciLogoutAfter { |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.bus; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * éåºç³»ç»ä¹åäºä»¶ |
| | | * @author weidy |
| | | * @date 2020/1/29 |
| | | */ |
| | | @Target({ ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciLogoutBefore { |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.bus; |
| | | |
| | | import org.springframework.core.annotation.AliasFor; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * éåºç»å½çæä»¶ |
| | | * @author weidy |
| | | * @date 2020/2/23 |
| | | */ |
| | | @Target({ ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Component |
| | | public @interface VciLogoutPlugin { |
| | | /** |
| | | * beançåç§° |
| | | * @return |
| | | */ |
| | | @AliasFor( |
| | | annotation = Component.class |
| | | ) |
| | | String value() default ""; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.bus; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * ä¸ä½¿ç¨ç»ä¸çæ°æ®å¯¹è±¡è¿å |
| | | * @author weidy |
| | | * @date 2019/12/3 8:36 PM |
| | | */ |
| | | @Target({ java.lang.annotation.ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciNoUseBaseResult { |
| | | boolean value() default true; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.bus; |
| | | |
| | | import com.vci.starter.web.enumpck.VciTaskBusTypeEnum; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * ä»»å¡åç½®çäºä»¶ |
| | | * @author weidy |
| | | * @date 2020/1/29 |
| | | */ |
| | | @Target({ ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciTaskAfter { |
| | | /** |
| | | * åæ´ç±»å |
| | | */ |
| | | VciTaskBusTypeEnum busTypeEnum(); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.bus; |
| | | |
| | | import com.vci.starter.web.enumpck.VciTaskBusTypeEnum; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * |
| | | * æ§è¡ä»»å¡ä¹å |
| | | * @author weidy |
| | | * @date 2020/1/29 |
| | | */ |
| | | @Target({ ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciTaskBefore { |
| | | /** |
| | | * åæ´ç±»å |
| | | */ |
| | | VciTaskBusTypeEnum busTypeEnum(); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.bus; |
| | | |
| | | import org.springframework.core.annotation.AliasFor; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * ä»»å¡ç¸å
³çæä»¶ |
| | | * @author weidy |
| | | * @date 2020/2/23 |
| | | */ |
| | | @Target({ ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Component |
| | | public @interface VciTaskPlugin { |
| | | /** |
| | | * beançåç§° |
| | | * @return é»è®¤ä¸ºé¦å忝å°å |
| | | */ |
| | | @AliasFor( |
| | | annotation = Component.class |
| | | ) |
| | | String value() default ""; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.config; |
| | | |
| | | import org.springframework.core.annotation.AliasFor; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * é
ç½®ä¸å¿ç模åä¸çé
ç½®åæ®µ |
| | | * @author weidy |
| | | * @date 2020/2/5 |
| | | */ |
| | | @Target(ElementType.FIELD) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciConfigField { |
| | | /** |
| | | * å¨é
ç½®ä¸å¿éçé
置项 |
| | | * @return |
| | | */ |
| | | @AliasFor("name") |
| | | String value() default ""; |
| | | |
| | | /** |
| | | * å¨é
ç½®ä¸å¿éçé
置项åç§° |
| | | * @return |
| | | */ |
| | | String name() default ""; |
| | | |
| | | /** |
| | | * å¨é
ç½®ä¸å¿éé
ç½®é¡¹çæ é¢ |
| | | * @return |
| | | */ |
| | | String title(); |
| | | |
| | | /** |
| | | * æå±æ¨¡åï¼èªå¨ç»§æ¿è¿ä¸ªæ³¨è§£æå±ç±»ä¸ç注解 |
| | | * @return |
| | | */ |
| | | String model() default ""; |
| | | |
| | | /** |
| | | * æ¯å¦ä¿®æ¹åç«å³çæ |
| | | * @return |
| | | */ |
| | | boolean effectOnEdit() default false; |
| | | |
| | | /** |
| | | * æ¯å¦å¤é |
| | | * @return |
| | | */ |
| | | boolean mutliValue() default false; |
| | | |
| | | /** |
| | | * æè¿° |
| | | * @return |
| | | */ |
| | | String description() default ""; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.config; |
| | | |
| | | import org.springframework.core.annotation.AliasFor; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * é
置项ç鿩页é¢é
ç½® |
| | | * @author weidy |
| | | * @date 2020/2/5 |
| | | */ |
| | | @Target(ElementType.FIELD) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciConfigFieldSelect { |
| | | |
| | | /** |
| | | * æ¾ç¤ºçUrlçå¼ |
| | | * @return |
| | | */ |
| | | @AliasFor("url") |
| | | String value(); |
| | | |
| | | /** |
| | | * æ¾ç¤ºéæ©å¼çurl |
| | | * @return |
| | | */ |
| | | @AliasFor("url") |
| | | String url(); |
| | | |
| | | /** |
| | | * å¼çåæ®µ |
| | | * @return |
| | | */ |
| | | String valueField() default "oid"; |
| | | |
| | | /** |
| | | * æ¾ç¤ºçåæ®µ |
| | | * @return |
| | | */ |
| | | String textField() default "name"; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.config; |
| | | |
| | | import org.springframework.core.annotation.AliasFor; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * é
ç½®ä¸å¿ç模å |
| | | * @author weidy |
| | | * @date 2020/2/5 |
| | | */ |
| | | @Target(ElementType.TYPE) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Component |
| | | public @interface VciConfigModule { |
| | | /** |
| | | * beançåç§° |
| | | * @return |
| | | */ |
| | | @AliasFor( |
| | | annotation = Component.class |
| | | ) |
| | | String value() default ""; |
| | | |
| | | /** |
| | | * åç§° |
| | | * @return å¨é
ç½®ä¸å¿çåç§° |
| | | */ |
| | | String name(); |
| | | |
| | | /** |
| | | * æ é¢ |
| | | * @return å¨é
ç½®ä¸å¿æ¾ç¤ºçæ é¢ |
| | | */ |
| | | String title(); |
| | | |
| | | /** |
| | | * æè¿°ä¿¡æ¯ |
| | | * @return æè¿°ä¿¡æ¯ |
| | | */ |
| | | String description() default ""; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.controller; |
| | | |
| | | import com.vci.starter.web.enumpck.VciReturnFileTypeEnum; |
| | | |
| | | /** |
| | | * ä½¿ç¨æä»¶è¿åéè¯¯ä¿¡æ¯ |
| | | * @author weidy |
| | | * @date 2020/2/19 |
| | | */ |
| | | public @interface VciReturnErrorUseFile { |
| | | |
| | | /** |
| | | * é»è®¤ä¸ºææ¬æä»¶ |
| | | * @return |
| | | */ |
| | | VciReturnFileTypeEnum value() default VciReturnFileTypeEnum.TXT; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.controller; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * 䏿 ¡éªæéçè·¯å¾ |
| | | * @author weidy |
| | | * @date 2020/2/28 |
| | | */ |
| | | @Target({ElementType.METHOD,ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciUnCheckRight { |
| | | |
| | | /** |
| | | * å¼ï¼å¯ä»¥ä¸è®¾ç½® |
| | | * @return trueè¡¨ç¤ºä¸æ ¡éª |
| | | */ |
| | | boolean value() default true; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.controller; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * ä¸ä½¿ç¨ç»ä¸çè¿åæ¥å£ |
| | | * @author weidy |
| | | * @date 2022/12/06 |
| | | */ |
| | | @Target({ElementType.METHOD,ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciUnUseResponseAdvice { |
| | | |
| | | /** |
| | | * å¼ï¼å¯ä»¥ä¸è®¾ç½® |
| | | * @return trueè¡¨ç¤ºä¸æ ¡éª |
| | | */ |
| | | boolean value() default true; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.log; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | @Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciBusinessLog { |
| | | /** |
| | | * æå±åè½æ¨¡å |
| | | * @return |
| | | */ |
| | | String modelName() default ""; |
| | | |
| | | /** |
| | | * æå±æä½åç§° |
| | | * @return |
| | | */ |
| | | String operateName() default ""; |
| | | |
| | | /** |
| | | * æ¥å¿ç±»å--ç»å½æ¥å¿ï¼æä½æ¥å¿ï¼æææ¥å¿ |
| | | * @return |
| | | */ |
| | | VciLogType logType() default VciLogType.Operate; |
| | | |
| | | /** |
| | | * æè¿°ä¿¡æ¯ |
| | | * @return |
| | | */ |
| | | String description() default ""; |
| | | |
| | | /** |
| | | * ä¸å卿¥å¿ |
| | | * @return |
| | | */ |
| | | boolean notStore() default false; |
| | | |
| | | public static enum VciLogType{ |
| | | Login,Operate,Audit |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.log; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * ä¸è®°å½è¿è¡æ¥å¿ |
| | | * @author weidy |
| | | * @date 2020/4/10 |
| | | */ |
| | | @Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciUnLog { |
| | | boolean value() default true; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.permission; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * æéæ§å¶ç注解 |
| | | * ç¨äºèªå¨æ§å¶åè½æéï¼æé®æéï¼åæ°æ®æé--æ°æ®æéä¼éè¿AOPçæ¹å¼å°æ°æ®æéçè§å注å
¥å°QueryMapä¸ |
| | | * @author weidy |
| | | * |
| | | */ |
| | | @Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciPermission { |
| | | /** |
| | | * æå±åè½æ¨¡åkey--ä¸åè½èåä¸çç¼å·å¯¹åº |
| | | * @return |
| | | */ |
| | | String[] modelKey() default ""; |
| | | |
| | | /** |
| | | * æå±æé®key--ä¼èªå¨æ³¨å
¥å°å¹³å°çæä½ç±»åä¸ |
| | | * @return |
| | | */ |
| | | String[] methodKey() default ""; |
| | | |
| | | /** |
| | | * æå±æé®çåç§° |
| | | * @return |
| | | */ |
| | | String[] methodName() default ""; |
| | | |
| | | /** |
| | | * æå±æé®çåç§° |
| | | * @return |
| | | */ |
| | | String[] methodAlias() default ""; |
| | | |
| | | /** |
| | | * æå±æé®çæè¿° |
| | | * @return |
| | | */ |
| | | String[] methodDesc() default ""; |
| | | |
| | | /** |
| | | * æå±æé®å¨èåä¸çæåº |
| | | * @return |
| | | */ |
| | | int[] methodOrder() default 0; |
| | | |
| | | /** |
| | | * åºå®çè§è²--è§è²çç¼ç ï¼å¤ä¸ªä½¿ç¨éå·åé |
| | | * æ¯æè¡¨è¾¾å¼${lt}è§è²çç±»åå¼ï¼è¡¨ç¤ºè®¿é®çç¨æ·çè§è²ç±»åå¿
é¡»å°äºæç§ç±»åï¼${eq}表示ç¸çï¼${more}è¡¨ç¤ºå¤§äº |
| | | * *å¯ä»¥ç¨äºåéé
符 |
| | | * @return |
| | | */ |
| | | String defineRole() default ""; |
| | | |
| | | /** |
| | | * å
许çå¯çº§ç级 |
| | | * @return |
| | | */ |
| | | int secretGrade() default -1; |
| | | |
| | | /** |
| | | * å
许ipå¯çº§ |
| | | * @return |
| | | */ |
| | | String ipSecret() default ""; |
| | | |
| | | /** |
| | | * æ¹æ³çæéæ§å¶ï¼å¦æä¸ºç©ºæ¶ådefineRoleçå¼ |
| | | * åºå®çè§è²--è§è²çç¼ç ï¼å¤ä¸ªä½¿ç¨éå·åé |
| | | * æ¯æè¡¨è¾¾å¼${lt}è§è²çç±»åå¼ï¼è¡¨ç¤ºè®¿é®çç¨æ·çè§è²ç±»åå¿
é¡»å°äºæç§ç±»åï¼${eq}表示ç¸çï¼${more}è¡¨ç¤ºå¤§äº |
| | | * *å¯ä»¥ç¨äºåéé
符 |
| | | * @return |
| | | */ |
| | | String defineRoleForMethod() default ""; |
| | | |
| | | /** |
| | | * æ¹æ³çæéå¯çº§æ§å¶ï¼å¦æä¸ºç©ºæ¶åsecretGradeçå¼ |
| | | * @return |
| | | */ |
| | | int secretGradeForMethod() default -2; |
| | | |
| | | /** |
| | | * æ¹æ³çæéIPæ§å¶ï¼å¦æä¸ºç©ºæ¶åipSecretçå¼ |
| | | * @return |
| | | */ |
| | | String ipSecretForMethod() default ""; |
| | | |
| | | /** |
| | | * æ°æ®æé夿æéçä¸å¡ç±»å |
| | | * @return |
| | | */ |
| | | String dataPermissionBtmType() default ""; |
| | | |
| | | /** |
| | | * æ°æ®æé夿æéçæ¹æ³keyãé»è®¤çäºmethodKey,æä»¥ä¸ç¨è®¾ç½® |
| | | * @return |
| | | */ |
| | | String[] dataPermissionMethodKey() default ""; |
| | | |
| | | /** |
| | | * æ¯å¦æ§å¶æ°æ®æé,妿å¨config.propertieséé
ç½®äºright.switchåï¼é»è®¤å¼ä¼å¤ç为é
ç½®çå¼ |
| | | * @return |
| | | */ |
| | | boolean controlDataPermission() default false; |
| | | |
| | | /** |
| | | * æ¯å¦æ§å¶åè½æéï¼å¦æå¨config.propertieséé
ç½®äºfunction.switchåï¼é»è®¤å¼ä¼å¤ç为é
ç½®çå¼ |
| | | * @return |
| | | */ |
| | | boolean controlModelPermission() default true; |
| | | |
| | | /** |
| | | * æ¯å¦æ§å¶æé®æéï¼å¦æå¨config.propertieséé
ç½®äºui.right.switchåï¼é»è®¤å¼ä¼å¤ç为é
ç½®çå¼ |
| | | * @return |
| | | */ |
| | | boolean controlMethodPermission() default true; |
| | | |
| | | /** |
| | | * ç¨æ·å¯çº§ |
| | | * none--éå¯ |
| | | * inner--å
é¨ |
| | | * secret--ç§å¯ |
| | | * privacy--æºå¯ |
| | | * @author weidy |
| | | * |
| | | */ |
| | | public static enum UserSecretGrade{ |
| | | none,inner,secret,privacy |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.permission; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * åç
§æ¹æ³æ³¨è§£ï¼è¡¨ç¤ºè¿ä¸ªæ¹æ³æ¯æä¾ç»å
¶ä»å°æ¹åç
§å¼ç¨ç |
| | | * @author weidy |
| | | */ |
| | | @Target({ java.lang.annotation.ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciReferPermission { |
| | | /** |
| | | * åç
§çkeyï¼éè¦å¯ä¸å¼ï¼å¨ç³»ç»å¯å¨çæ¶å伿«æ,建议使ç¨è¢«ä¸å¡ç±»åæ¥ä»£æ¿ |
| | | * @return |
| | | */ |
| | | String referedKey() ; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.permission; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * 使ç¨åç
§ç注解 |
| | | * @author weidy |
| | | */ |
| | | @Target({ java.lang.annotation.ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface VciUseReferMethod { |
| | | /** |
| | | * 使ç¨åç
§çkey |
| | | * @return |
| | | */ |
| | | String[] useReferKey() ; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.undo; |
| | | |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * å¾
åäºé¡¹çæ¥è¯¢æ»æ°æ¹æ³ |
| | | * @author weidy |
| | | * @date 2022/8/1 |
| | | */ |
| | | @Target({ ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface UndoTaskCount { |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.undo; |
| | | |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * å¾
åäºé¡¹çæ¥è¯¢æ¹æ³ |
| | | * @author weidy |
| | | * @date 2022/8/1 |
| | | */ |
| | | @Target({ ElementType.METHOD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface UndoTaskMethod { |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.undo; |
| | | |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * å¾
åäºé¡¹çæ¥è¯¢çå
容 |
| | | * æ¡ä»¶æ¯orçæ¹å¼å¤æ |
| | | * @author weidy |
| | | * @date 2022/8/1 |
| | | */ |
| | | @Target({ ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Component |
| | | public @interface UndoTaskPlugin { |
| | | |
| | | /** |
| | | * æåºå· |
| | | * @return æåºçå
容 |
| | | */ |
| | | int order() ; |
| | | /** |
| | | * ä»»å¡ç±»å |
| | | * @return ä»»å¡ç±»å |
| | | */ |
| | | String name() default ""; |
| | | |
| | | /** |
| | | * æéçåå |
| | | * @return æéçåå |
| | | */ |
| | | String[] funcNames() default ""; |
| | | |
| | | /** |
| | | * æå®è§è²çåç§° |
| | | * @return è§è²åç§° |
| | | */ |
| | | String[] roles() default ""; |
| | | |
| | | /** |
| | | * æå®çé¨é¨åç§° |
| | | * @return é¨é¨åç§° |
| | | */ |
| | | String[] depts() default ""; |
| | | |
| | | /** |
| | | * æå®çç¨æ·å |
| | | * @return ç¨æ·å |
| | | */ |
| | | String[] users() default ""; |
| | | |
| | | /** |
| | | * æå®çè§è²ç±»å |
| | | * @return è§è²ç±»å |
| | | */ |
| | | String[] roleTypes() default ""; |
| | | |
| | | /** |
| | | * æ§è¡çç¨æ·ç±»å |
| | | * @return ç¨æ·ç±»å |
| | | */ |
| | | String[] userTypes() default ""; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.workflow; |
| | | |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * æµç¨äºä»¶ |
| | | * ç®åæµç¨äºä»¶å¨é
ç½®æä»¶ä¸ï¼æ»æ¯åºç°é
ç½®é误çæ
åµï¼å 为æµç¨äºä»¶åºæ¬æ¯åºå®çï¼å æ¤å¼æ³¨è§£æ¥ä½¿ç¨ |
| | | * @author weidy |
| | | */ |
| | | @Target({java.lang.annotation.ElementType.TYPE}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface WorkflowEvent { |
| | | /** |
| | | * key,äºä»¶çå¯ä¸è¯å«ç ï¼é»è®¤åä½¿ç¨æ³¨è§£çç±»çåç§°ï¼é¦åæ¯å°åï¼ |
| | | * @return |
| | | */ |
| | | String value() default ""; |
| | | |
| | | /** |
| | | * 䏿ååï¼å¦æä¸ºç©ºçæ¶åï¼åä½¿ç¨æ³¨è§£çç±»çåç§°ï¼é¦åæ¯å°åï¼ |
| | | * @return |
| | | */ |
| | | String name() default ""; |
| | | |
| | | /** |
| | | * ç¨äºæµç¨ä»»å¡å¼å§äºä»¶ |
| | | * @return |
| | | */ |
| | | boolean useInStart() default true; |
| | | |
| | | /*** |
| | | * ç¨äºæµç¨ä»»å¡å®æäºä»¶ |
| | | * @return |
| | | */ |
| | | boolean useInComplete() default true; |
| | | |
| | | /** |
| | | * ç¨äºæµç¨ä»»å¡ç»æ¢äºä»¶ |
| | | * @return |
| | | */ |
| | | boolean useInEnd() default true; |
| | | |
| | | /** |
| | | * ç¨äºè·¯ç±çº¿äºä»¶ |
| | | * @return |
| | | */ |
| | | boolean useInTransition() default true; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.annotation.workflow; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * æµç¨äºä»¶ä¸çåæ®µ |
| | | * é
åWorkflowEvent使ç¨,èªå¨è¯»ååæ®µçåç§°åç±»å |
| | | * @author weidy |
| | | */ |
| | | @Target({ElementType.FIELD}) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface WorkflowEventField { |
| | | |
| | | /** |
| | | * æ¯å¦å¿
è¾ |
| | | * @return |
| | | */ |
| | | boolean required() default false; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.autoconfigure; |
| | | |
| | | import org.springframework.boot.context.properties.ConfigurationProperties; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * åºç¨ä¿¡æ¯é
ç½® |
| | | * @author weidy |
| | | */ |
| | | @Configuration |
| | | @ConfigurationProperties(prefix = "app") |
| | | public class AppAutoConfigure { |
| | | /** |
| | | * æå±ç»ç» |
| | | */ |
| | | private String group; |
| | | /** |
| | | * åºç¨åç§° |
| | | */ |
| | | private String name; |
| | | /** |
| | | * åºç¨æè¿° |
| | | */ |
| | | private String description; |
| | | /** |
| | | * ä½è
|
| | | */ |
| | | private String author; |
| | | /** |
| | | * é®ä»¶ |
| | | */ |
| | | private String email; |
| | | /** |
| | | * 龿¥å°å |
| | | */ |
| | | private String url; |
| | | |
| | | /** |
| | | * åºç¨ç§é¥ |
| | | */ |
| | | private String privateTokenKey; |
| | | |
| | | |
| | | |
| | | public String getGroup() { |
| | | return group; |
| | | } |
| | | |
| | | public void setGroup(String group) { |
| | | this.group = group; |
| | | } |
| | | |
| | | public String getName() { |
| | | return name; |
| | | } |
| | | |
| | | public void setName(String name) { |
| | | this.name = name; |
| | | } |
| | | |
| | | public String getDescription() { |
| | | return description; |
| | | } |
| | | |
| | | public void setDescription(String description) { |
| | | this.description = description; |
| | | } |
| | | |
| | | public String getAuthor() { |
| | | return author; |
| | | } |
| | | |
| | | public void setAuthor(String author) { |
| | | this.author = author; |
| | | } |
| | | |
| | | public String getEmail() { |
| | | return email; |
| | | } |
| | | |
| | | public void setEmail(String email) { |
| | | this.email = email; |
| | | } |
| | | |
| | | public String getUrl() { |
| | | return url; |
| | | } |
| | | |
| | | public void setUrl(String url) { |
| | | this.url = url; |
| | | } |
| | | |
| | | public String getPrivateTokenKey() { |
| | | return privateTokenKey; |
| | | } |
| | | |
| | | public void setPrivateTokenKey(String privateTokenKey) { |
| | | this.privateTokenKey = privateTokenKey; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "AppAutoConfigure{" + |
| | | "group='" + group + '\'' + |
| | | ", name='" + name + '\'' + |
| | | ", description='" + description + '\'' + |
| | | ", author='" + author + '\'' + |
| | | ", email='" + email + '\'' + |
| | | ", url='" + url + '\'' + |
| | | ", privateTokenKey='" + privateTokenKey + '\'' + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.autoconfigure; |
| | | |
| | | /** |
| | | * dubboçè°ç¨å¤çå¨ |
| | | * @author weidy |
| | | * @date 2020/6/16 |
| | | */ |
| | | public class DubboConfig { |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.autoconfigure; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.vci.starter.web.constant.TokenKeyConstant; |
| | | import com.vci.starter.web.pagemodel.SessionInfo; |
| | | import com.vci.starter.web.util.VciBaseUtil; |
| | | import feign.*; |
| | | import feign.form.spring.SpringFormEncoder; |
| | | import feign.okhttp.OkHttpClient; |
| | | import okhttp3.ConnectionPool; |
| | | import org.slf4j.MDC; |
| | | import org.springframework.beans.factory.ObjectFactory; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.boot.autoconfigure.AutoConfigureAfter; |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; |
| | | import org.springframework.boot.autoconfigure.http.HttpMessageConverters; |
| | | import org.springframework.cloud.commons.httpclient.OkHttpClientConnectionPoolFactory; |
| | | import org.springframework.cloud.commons.httpclient.OkHttpClientFactory; |
| | | import org.springframework.cloud.openfeign.support.FeignHttpClientProperties; |
| | | import org.springframework.cloud.openfeign.support.ResponseEntityDecoder; |
| | | import org.springframework.cloud.openfeign.support.SpringDecoder; |
| | | import org.springframework.cloud.openfeign.support.SpringEncoder; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.context.i18n.LocaleContextHolder; |
| | | import org.springframework.http.converter.HttpMessageConverter; |
| | | import org.springframework.http.converter.StringHttpMessageConverter; |
| | | import org.springframework.web.bind.annotation.RequestMethod; |
| | | |
| | | import javax.annotation.PreDestroy; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.Map; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | /** |
| | | * feign客æ·ç«¯é
ç½® |
| | | * @author weidy |
| | | * @date 2019/11/5 10:23 AM |
| | | */ |
| | | @AutoConfigureAfter(AppAutoConfigure.class) |
| | | @Configuration |
| | | public class FeignConfig implements RequestInterceptor { |
| | | |
| | | /** |
| | | * 使ç¨okHttpClientæ¥ä¼ è¾æ°æ® |
| | | */ |
| | | private okhttp3.OkHttpClient okHttpClient; |
| | | |
| | | /** |
| | | * å½ååºç¨ç¨åºçç§é¥ |
| | | */ |
| | | @Value("${app.privateTokenKey:}") |
| | | private String privateTokenKey; |
| | | |
| | | /** |
| | | * 客æ·ç«¯è¿æ¥æ± |
| | | * @param httpClientProperties http龿¥é
ç½® |
| | | * @param connectionPoolFactory è¿æ¥æ± å·¥ç¨ |
| | | * @return è¿æ¥æ± |
| | | */ |
| | | @Bean |
| | | @ConditionalOnMissingBean({ConnectionPool.class}) |
| | | public ConnectionPool httpClientConnectionPool(FeignHttpClientProperties httpClientProperties, OkHttpClientConnectionPoolFactory connectionPoolFactory) { |
| | | Integer maxTotalConnections = httpClientProperties.getMaxConnections(); |
| | | Long timeToLive = httpClientProperties.getTimeToLive(); |
| | | TimeUnit ttlUnit = httpClientProperties.getTimeToLiveUnit(); |
| | | return connectionPoolFactory.create(maxTotalConnections, timeToLive, ttlUnit); |
| | | } |
| | | |
| | | /** |
| | | * åå§åokHttpç客æ·ç«¯å¯¹è±¡ |
| | | * @param httpClientFactory 客æ·ç«¯é¾æ¥å·¥ç¨ |
| | | * @param connectionPool è¿æ¥æ± |
| | | * @param httpClientProperties 客æ·ç«¯é¾æ¥é
ç½® |
| | | * @return |
| | | */ |
| | | @Bean |
| | | public okhttp3.OkHttpClient client(OkHttpClientFactory httpClientFactory, ConnectionPool connectionPool, FeignHttpClientProperties httpClientProperties) { |
| | | Boolean followRedirects = httpClientProperties.isFollowRedirects(); |
| | | Integer connectTimeout = httpClientProperties.getConnectionTimeout(); |
| | | Boolean disableSslValidation = httpClientProperties.isDisableSslValidation(); |
| | | this.okHttpClient = httpClientFactory.createBuilder(disableSslValidation).connectTimeout((long)connectTimeout, TimeUnit.MILLISECONDS).followRedirects(followRedirects).readTimeout(30*60,TimeUnit.SECONDS).connectionPool(connectionPool).build(); |
| | | return this.okHttpClient; |
| | | } |
| | | |
| | | /** |
| | | * 鿝ä¹åå
³éokHttp |
| | | */ |
| | | @PreDestroy |
| | | public void destroy() { |
| | | if (this.okHttpClient != null) { |
| | | this.okHttpClient.dispatcher().executorService().shutdown(); |
| | | this.okHttpClient.connectionPool().evictAll(); |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * é
ç½®feignç客æ·ç«¯ç±» |
| | | * @param client 客æ·ç«¯é¾æ¥å¯¹è±¡ |
| | | * @return 客æ·ç«¯è¿æ¥å¯¹è±¡ |
| | | */ |
| | | @Bean |
| | | @ConditionalOnMissingBean({Client.class}) |
| | | public Client feignClient(okhttp3.OkHttpClient client) { |
| | | return new OkHttpClient(client); |
| | | } |
| | | |
| | | /** |
| | | * 设置请æ±çè¿æ¥æ¶é´å读åçæ¶é´ |
| | | * @param client 龿¥ç客æ·ç«¯ |
| | | * @return 龿¥ç客æ·ç«¯ |
| | | */ |
| | | @Bean |
| | | public Request.Options feignOptions(okhttp3.OkHttpClient client) { |
| | | return new Request.Options(client.connectTimeoutMillis(), client.readTimeoutMillis()); |
| | | } |
| | | |
| | | /** |
| | | * é
ç½®feignçæ¥å¿ç级 |
| | | * @return æ¥å¿ç级 |
| | | */ |
| | | @Bean |
| | | Logger.Level feignLoggerLevel() { |
| | | //è¿éè®°å½ææï¼æ ¹æ®å®é
æ
åµéæ©åéçæ¥å¿level |
| | | return Logger.Level.FULL; |
| | | } |
| | | |
| | | /** |
| | | * å°fastjson设置å°decoderä¸,è§£ç å¨ |
| | | * @return decoder |
| | | */ |
| | | @Bean |
| | | public ResponseEntityDecoder feignDecoder(){ |
| | | HttpMessageConverter fastJsonConverter = SpringMVCConfig.createFastJsonConverter(); |
| | | ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(new StringHttpMessageConverter(StandardCharsets.UTF_8),fastJsonConverter); |
| | | return new ResponseEntityDecoder(new SpringDecoder(objectFactory)); |
| | | } |
| | | |
| | | /** |
| | | * å°fastjson设置å°encoderä¸ï¼ç¼ç å¨ |
| | | * @return encoder |
| | | */ |
| | | @Bean |
| | | public SpringFormEncoder feignEncoder(){ |
| | | HttpMessageConverter fastJsonConverter = SpringMVCConfig.createFastJsonConverter(); |
| | | ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(new StringHttpMessageConverter(StandardCharsets.UTF_8),fastJsonConverter); |
| | | return new SpringFormEncoder(new SpringEncoder(objectFactory)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * å¨åé请æ±çæ¶åï¼è®¾ç½®æ¦æªå¨ï¼å°ç¨æ·çtokenåå½åæå¡çç§é¥ä¼ éè¿å»ï¼å¹¶ä¸ä¼ éå½åæå¡çåç§°ç¨äºè¿½æº¯æ¥å¿ |
| | | * @param requestTemplate 请æ±çç®æ |
| | | */ |
| | | @Override |
| | | public void apply(RequestTemplate requestTemplate) { |
| | | //妿æ¯GETï¼ä½æ¯bodyéæå
容 |
| | | Request.Body body = requestTemplate.requestBody(); |
| | | if(RequestMethod.GET.toString().equalsIgnoreCase(requestTemplate.method()) |
| | | && body != null && body.length() > 0){ |
| | | //ä¸»è¦æ¯å表æ¥è¯¢åæ æ¥è¯¢è¿å ä¸ªå°æ¹,æ¯æmapçä¼ è¾ |
| | | String bodyString = new String(body.asBytes(),requestTemplate.requestCharset()); |
| | | try{ |
| | | JSONObject jsonObject = JSONObject.parseObject(bodyString); |
| | | for(String key : jsonObject.keySet()){ |
| | | Object value = jsonObject.get(key); |
| | | if(value == null){ |
| | | requestTemplate.query(key,""); |
| | | }else{ |
| | | if(value instanceof Map){ |
| | | //说æè¿ä¸ªå±æ§æ¯map |
| | | Map mapValues = (Map)value; |
| | | for(Object mapKey : mapValues.keySet()){ |
| | | Object mapQueryValue = mapValues.get(mapKey); |
| | | String mapQueryValueString = ""; |
| | | if(mapQueryValue == null){ |
| | | mapQueryValueString = ""; |
| | | }else{ |
| | | mapQueryValueString = VciBaseUtil.getStringValueFromObject(mapQueryValue); |
| | | } |
| | | requestTemplate.query(key + "[\"" + mapKey.toString() + "\"]",mapQueryValueString); |
| | | } |
| | | }else{ |
| | | requestTemplate.query(key,VciBaseUtil.getStringValueFromObject(value)); |
| | | } |
| | | } |
| | | } |
| | | requestTemplate.body(Request.Body.empty()); |
| | | }catch (Throwable e){ |
| | | //å¯è½ä¸æ¯jsonçç±»å |
| | | } |
| | | } |
| | | |
| | | //éè¦ä¼ éç¨æ·çtoken |
| | | //ç³»ç»çtokenï¼ç¨äºæééªè¯ |
| | | //æ¥å¿ç龿¥ID |
| | | SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfoNotException(); |
| | | if(sessionInfo != null){ |
| | | requestTemplate.header(TokenKeyConstant.USER_TOKEN_KEY,sessionInfo.getToken()); |
| | | }else{ |
| | | requestTemplate.header(TokenKeyConstant.USER_TOKEN_KEY,""); |
| | | } |
| | | requestTemplate.header(TokenKeyConstant.SYSTEM_PRIVATE_KEY,getPrivateTokenKey()); |
| | | |
| | | String logTraceId = MDC.get(TokenKeyConstant.TRACE_ID); |
| | | if(logTraceId == null){ |
| | | logTraceId = ""; |
| | | } |
| | | requestTemplate.header(TokenKeyConstant.LOG_TRACE_ID_KEY,logTraceId); |
| | | //设置è¯è¨ |
| | | requestTemplate.header(TokenKeyConstant.LANGUAGE_KEY,LocaleContextHolder.getLocale().toLanguageTag()); |
| | | } |
| | | |
| | | public String getPrivateTokenKey() { |
| | | return privateTokenKey; |
| | | } |
| | | |
| | | public void setPrivateTokenKey(String privateTokenKey) { |
| | | this.privateTokenKey = privateTokenKey; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.autoconfigure; |
| | | |
| | | import com.vci.starter.web.annotation.controller.VciUnUseResponseAdvice; |
| | | import com.vci.starter.web.constant.TokenKeyConstant; |
| | | import com.vci.starter.web.pagemodel.BaseResult; |
| | | import com.vci.starter.web.pagemodel.DataGrid; |
| | | import com.vci.starter.web.pagemodel.Tree; |
| | | import com.vci.starter.web.util.MessageUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.slf4j.MDC; |
| | | import org.springframework.core.MethodParameter; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.http.converter.HttpMessageConverter; |
| | | import org.springframework.http.server.ServerHttpRequest; |
| | | import org.springframework.http.server.ServerHttpResponse; |
| | | import org.springframework.lang.Nullable; |
| | | import org.springframework.stereotype.Controller; |
| | | import org.springframework.web.bind.annotation.ControllerAdvice; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; |
| | | |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * å¨è¿åç»æåï¼å°è£
ç»ä¸çæ°æ®å¯¹è±¡ |
| | | * @author weidy |
| | | * @date 2019/11/7 4:05 PM |
| | | */ |
| | | @ControllerAdvice(annotations = {RestController.class, Controller.class}) |
| | | public class ResponseModifyAdvice implements ResponseBodyAdvice<Object>{ |
| | | /** |
| | | * è¿æ»¤åªäºéè¦æ¦æªå¤ç |
| | | * Whether this component supports the given controller method return type |
| | | * and the selected {@code HttpMessageConverter} type. |
| | | * |
| | | * @param returnType the return type |
| | | * @param converterType the selected converter type |
| | | * @return {@code true} if {@link #beforeBodyWrite} should be invoked; |
| | | * {@code false} otherwise |
| | | */ |
| | | @Override |
| | | public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) { |
| | | //å
¨é¨é½æ¯æ |
| | | if(returnType.getMethod().isAnnotationPresent(VciUnUseResponseAdvice.class)){ |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * Invoked after an {@code HttpMessageConverter} is selected and just before |
| | | * its write method is invoked. |
| | | * |
| | | * @param body the body to be written |
| | | * @param returnType the return type of the controller method |
| | | * @param selectedContentType the content type selected through content negotiation |
| | | * @param selectedConverterType the converter type selected to write to the response |
| | | * @param request the current request |
| | | * @param response the current response |
| | | * @return the body that was passed in or a modified (possibly new) instance |
| | | */ |
| | | @Nullable |
| | | @Override |
| | | public Object beforeBodyWrite(@Nullable Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { |
| | | String traceId = MDC.get(TokenKeyConstant.TRACE_ID); |
| | | if(returnType.getMethod().isAnnotationPresent(VciUnUseResponseAdvice.class)){ |
| | | return body; |
| | | } |
| | | String returnTypeName = returnType.getParameterType().getName(); |
| | | if("void".equalsIgnoreCase(returnTypeName)){ |
| | | BaseResult baseResult = BaseResult.success(); |
| | | baseResult.setFinishTime(System.currentTimeMillis()); |
| | | baseResult.setTraceId(traceId); |
| | | formateMsg(baseResult); |
| | | return baseResult; |
| | | } |
| | | if("com.vci.starter.web.pagemodel.BaseResult".equals(returnTypeName)){ |
| | | BaseResult baseResult = ((BaseResult)body); |
| | | baseResult.setTraceId(traceId); |
| | | baseResult.setFinishTime(System.currentTimeMillis()); |
| | | formateMsg(baseResult); |
| | | return baseResult; |
| | | } |
| | | if("com.vci.starter.web.pagemodel.DataGrid".equals(returnTypeName)){ |
| | | DataGrid dataGrid = ((DataGrid)body); |
| | | BaseResult baseResult = BaseResult.dataGrid(dataGrid); |
| | | baseResult.setTraceId(traceId); |
| | | baseResult.setFinishTime(System.currentTimeMillis()); |
| | | formateMsg(baseResult); |
| | | return baseResult; |
| | | } |
| | | if("com.vci.starter.web.pagemodel.Tree".equals(returnTypeName)){ |
| | | //returnType.getP |
| | | Tree tree = ((Tree)body); |
| | | List<Tree> treeList = new ArrayList<>(); |
| | | treeList.add(tree); |
| | | BaseResult baseResult = BaseResult.tree(treeList); |
| | | baseResult.setTraceId(traceId); |
| | | baseResult.setFinishTime(System.currentTimeMillis()); |
| | | formateMsg(baseResult); |
| | | return baseResult; |
| | | } |
| | | if(body instanceof Collection){ |
| | | //è¯´ææ¯éå |
| | | String genericParamterTypeName = returnType.getGenericParameterType().getTypeName(); |
| | | if(genericParamterTypeName.contains("<") |
| | | && genericParamterTypeName.contains(">")){ |
| | | String elementTypeName = genericParamterTypeName.substring(genericParamterTypeName.indexOf("<")+ 1,genericParamterTypeName.indexOf(">")); |
| | | if("com.vci.starter.web.pagemodel.Tree".equalsIgnoreCase(elementTypeName)){ |
| | | Collection<Tree> treeCollection = ((Collection<Tree>)body); |
| | | BaseResult baseResult = BaseResult.tree(treeCollection); |
| | | baseResult.setTraceId(traceId); |
| | | baseResult.setFinishTime(System.currentTimeMillis()); |
| | | formateMsg(baseResult); |
| | | return baseResult; |
| | | }else{ |
| | | //æ¾å°Obj屿§é |
| | | Collection<Object> objectCollection = ((Collection<Object>)body); |
| | | BaseResult baseResult = BaseResult.success(objectCollection); |
| | | baseResult.setTraceId(traceId); |
| | | baseResult.setFinishTime(System.currentTimeMillis()); |
| | | formateMsg(baseResult); |
| | | return baseResult; |
| | | } |
| | | } |
| | | } |
| | | if(body instanceof Object){ |
| | | BaseResult baseResult = BaseResult.success((Object)body); |
| | | baseResult.setTraceId(traceId); |
| | | baseResult.setFinishTime(System.currentTimeMillis()); |
| | | formateMsg(baseResult); |
| | | return baseResult; |
| | | } |
| | | return body; |
| | | } |
| | | |
| | | /** |
| | | * å¤è¯æ ¼å¼å |
| | | * @param baseResult ç»æå¯¹è±¡ |
| | | */ |
| | | private void formateMsg(BaseResult baseResult ){ |
| | | if(baseResult!=null && StringUtils.isNotBlank(baseResult.getMsg())){ |
| | | baseResult.setMsg(MessageUtils.get(baseResult.getMsg(),baseResult.getMsgObjs())); |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.autoconfigure; |
| | | |
| | | import com.alibaba.fastjson.serializer.SerializerFeature; |
| | | import com.alibaba.fastjson.support.config.FastJsonConfig; |
| | | import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; |
| | | import com.vci.starter.web.interceptor.VciLocaleInterceptor; |
| | | import com.vci.starter.web.interceptor.VciLogAfterInterceptor; |
| | | import com.vci.starter.web.interceptor.VciLogBeforeInterceptor; |
| | | import com.vci.starter.web.interceptor.VciSecurityInterceptor; |
| | | import com.vci.starter.web.properties.CorsProperties; |
| | | import com.vci.starter.web.toolmodel.String2DateConverterForSpringMvc; |
| | | import com.vci.starter.web.util.LocalFileUtil; |
| | | import com.vci.starter.web.util.VciDateUtil; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
| | | import org.springframework.boot.context.properties.ConfigurationProperties; |
| | | import org.springframework.context.ApplicationContext; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.format.FormatterRegistry; |
| | | import org.springframework.http.CacheControl; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.http.converter.HttpMessageConverter; |
| | | import org.springframework.http.converter.StringHttpMessageConverter; |
| | | import org.springframework.web.filter.FormContentFilter; |
| | | import org.springframework.web.servlet.LocaleResolver; |
| | | import org.springframework.web.servlet.config.annotation.*; |
| | | import org.springframework.web.servlet.i18n.SessionLocaleResolver; |
| | | |
| | | import java.io.File; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Locale; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * spring mvcçç¸å
³é
ç½® |
| | | * |
| | | * @author weidy |
| | | */ |
| | | @Configuration |
| | | @EnableWebMvc |
| | | @ConditionalOnProperty(prefix = "vcispringmvc",name="enabled",havingValue = "true",matchIfMissing = true) |
| | | @ConfigurationProperties(prefix = "vcispringmvc") |
| | | public class SpringMVCConfig implements WebMvcConfigurer { |
| | | |
| | | /** |
| | | * æ¥å¿å¯¹è±¡ |
| | | */ |
| | | private Logger log = LoggerFactory.getLogger(SpringMVCConfig.class); |
| | | |
| | | /** |
| | | * å¤é¨æä»¶å¤¹çæ å°å°å |
| | | */ |
| | | private Map<String,String> resourceFolderMap ; |
| | | |
| | | /** |
| | | * 䏿 ¡éªå®å
¨ç龿¥å°å |
| | | */ |
| | | private List<String> unCheckUrls; |
| | | |
| | | /** |
| | | * 䏿´æ°è¯·æ±æ¶é´ç龿¥å°å |
| | | */ |
| | | private List<String> unStorageRequestTimeUrls; |
| | | |
| | | /** |
| | | * è·¨åçé
ç½® |
| | | */ |
| | | @Autowired(required = false) |
| | | private CorsProperties corsProperties; |
| | | |
| | | /** |
| | | * é»è®¤å
许çåå |
| | | */ |
| | | private String[] DEFAULT_ORIGINS = {"*"}; |
| | | |
| | | /** |
| | | * é»è®¤å
许ç头 |
| | | */ |
| | | private String[] DEFAULT_ALLOWED_HEADERS = {"*"}; |
| | | |
| | | /** |
| | | * é»è®¤å
è®¸çæ¹æ³ |
| | | */ |
| | | private String[] DEFAULT_METHODS = {"PUT", "DELETE","GET","POST"}; |
| | | |
| | | /** |
| | | * é»è®¤æ´é²ç头 |
| | | */ |
| | | private String[] DEFAULT_EXPOSEDHEADERS = {"access-control-allow-headers", |
| | | "access-control-allow-methods", |
| | | "access-control-allow-origin", |
| | | "access-control-max-age", |
| | | "X-Frame-Options"}; |
| | | /** |
| | | * é»è®¤æ¯å¦å
许è¯ä¹¦ |
| | | */ |
| | | private boolean DEFAULT_ALLOW_CREDENTIALS = true; |
| | | /** |
| | | * é»è®¤çæå¤§å¼ |
| | | */ |
| | | private long DEFAULT_MAX_AGE = 1800; |
| | | |
| | | public Map<String, String> getResourceFolderMap() { |
| | | return resourceFolderMap; |
| | | } |
| | | |
| | | public void setResourceFolderMap(Map<String, String> resourceFolderMap) { |
| | | this.resourceFolderMap = resourceFolderMap; |
| | | } |
| | | |
| | | /** |
| | | * å¢å PUTåDELETEçæ¯æ |
| | | * @return è¿æ»¤å¨ |
| | | */ |
| | | @Bean |
| | | public FormContentFilter formContentFilter() { |
| | | return new FormContentFilter(); |
| | | } |
| | | |
| | | /** |
| | | * 使ç¨fastjsonè¿åå¼ |
| | | * @param converters ææçæ¶æ¯è½¬æ¢å¨ |
| | | */ |
| | | @Override |
| | | public void configureMessageConverters(List<HttpMessageConverter<?>> converters){ |
| | | converters.add(new StringHttpMessageConverter(StandardCharsets.UTF_8)); |
| | | converters.add(createFastJsonConverter()); |
| | | } |
| | | |
| | | /** |
| | | * è·åfastjsonç转æ¢å¨ï¼å³springmvcåfeginé½ä½¿ç¨fastjsonæ¥åºåå |
| | | * @return fastjson转æ¢å¨å¯¹è±¡ï¼æ¥ææ ¼å¼é½æ¯yyyy-MM-dd HH:mm:ss.SSS |
| | | */ |
| | | public static HttpMessageConverter createFastJsonConverter(){ |
| | | FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); |
| | | List<MediaType> supportedMediaTypes = new ArrayList<>(); |
| | | supportedMediaTypes.add(MediaType.APPLICATION_JSON); |
| | | supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); |
| | | supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML); |
| | | supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED); |
| | | supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM); |
| | | supportedMediaTypes.add(MediaType.APPLICATION_PDF); |
| | | supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML); |
| | | supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML); |
| | | supportedMediaTypes.add(MediaType.APPLICATION_XML); |
| | | supportedMediaTypes.add(MediaType.IMAGE_GIF); |
| | | supportedMediaTypes.add(MediaType.IMAGE_JPEG); |
| | | supportedMediaTypes.add(MediaType.IMAGE_PNG); |
| | | supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM); |
| | | supportedMediaTypes.add(MediaType.TEXT_HTML); |
| | | supportedMediaTypes.add(MediaType.TEXT_MARKDOWN); |
| | | //supportedMediaTypes.add(MediaType.TEXT_PLAIN); |
| | | supportedMediaTypes.add(MediaType.TEXT_XML); |
| | | fastConverter.setSupportedMediaTypes(supportedMediaTypes); |
| | | //å建é
置类 |
| | | FastJsonConfig fastJsonConfig = new FastJsonConfig(); |
| | | //ä¿®æ¹é
ç½®è¿åå
容çè¿æ»¤ |
| | | //WriteNullListAsEmpty ï¼Liståæ®µå¦æä¸ºnull,è¾åºä¸º[],èénull |
| | | //WriteNullStringAsEmpty ï¼ å符类ååæ®µå¦æä¸ºnull,è¾åºä¸º"",èénull |
| | | //DisableCircularReferenceDetect ï¼æ¶é¤å¯¹åä¸å¯¹è±¡å¾ªç¯å¼ç¨çé®é¢ï¼é»è®¤ä¸ºfalseï¼å¦æä¸é
ç½®æå¯è½ä¼è¿å
¥æ»å¾ªç¯ï¼ |
| | | //WriteNullBooleanAsFalseï¼Booleanåæ®µå¦æä¸ºnull,è¾åºä¸ºfalse,èénull |
| | | //WriteMapNullValueï¼æ¯å¦è¾åºå¼ä¸ºnullçåæ®µ,é»è®¤ä¸ºfalse |
| | | fastJsonConfig.setSerializerFeatures( |
| | | SerializerFeature.DisableCircularReferenceDetect, |
| | | SerializerFeature.WriteMapNullValue |
| | | ); |
| | | fastJsonConfig.setDateFormat(VciDateUtil.DateTimeMillFormat); |
| | | fastConverter.setFastJsonConfig(fastJsonConfig); |
| | | |
| | | |
| | | return fastConverter; |
| | | } |
| | | |
| | | /** |
| | | * è®¾ç½®æ ¼å¼è½¬æ¢å¨ï¼å¨æ¥æ¶å°åæ°å°è£
å°å¯¹è±¡æ¶ä½¿ç¨ |
| | | * @param registry æ ¼å¼æ³¨åå¨ |
| | | */ |
| | | @Override |
| | | public void addFormatters(FormatterRegistry registry) { |
| | | //æ·»å æ¥æç转æ¢å¨ |
| | | registry.addConverter(new String2DateConverterForSpringMvc()); |
| | | //registry.addConverter(new StringEscapeEditor()); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * æ·»å éè¦è½¬æ¢çè·¯å¾,常ç¨äºè¯»åtomcatå¤é¨çè·¯å¾ |
| | | * @param registry èµæºè½¬æ¢æ³¨åå¨ |
| | | */ |
| | | @Override |
| | | public void addResourceHandlers(ResourceHandlerRegistry registry){ |
| | | if(resourceFolderMap!=null){ |
| | | for(String resourceUrl :resourceFolderMap.keySet() ){ |
| | | String folder = resourceFolderMap.get(resourceUrl); |
| | | if(folder.contains("$[projectPath]")){ |
| | | folder = folder.replace("$[projectPath]", LocalFileUtil.getProjectFolder(LocalFileUtil.mainClass)); |
| | | } |
| | | log.info("注åäºå¤é¨è·¯å¾è½¬æ¢å¨, " + resourceUrl + ":" + folder); |
| | | registry.addResourceHandler("/" + resourceUrl + "/**").addResourceLocations("file:" + folder + File.separator); |
| | | } |
| | | } |
| | | String logs = "file:" + LocalFileUtil.getProjectFolder(LocalFileUtil.mainClass) + File.separator + "logs" +File.separator; |
| | | log.info("æ¥å¿çæä»¶å¤¹æ å°ä¸º" + logs); |
| | | registry.addResourceHandler("/log/**").addResourceLocations( logs); |
| | | registry.addResourceHandler("/doc/**").addResourceLocations( "classpath:/md/"); |
| | | registry.addResourceHandler("/**") |
| | | .addResourceLocations("classpath:/META-INF/resources/") |
| | | .addResourceLocations("classpath:/resources/") |
| | | .addResourceLocations("classpath:/static/") |
| | | .addResourceLocations("classpath:/html/") |
| | | .addResourceLocations("classpath:/public/").setCacheControl(CacheControl.noStore()); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * é
ç½®index |
| | | * @param registry 注åå¨ |
| | | */ |
| | | @Override |
| | | public void addViewControllers(ViewControllerRegistry registry) { |
| | | registry.addViewController("/").setViewName("forward:index.html"); |
| | | } |
| | | /** |
| | | * 设置é»è®¤çè¯è¨ä¸ºç®ä½ä¸æ |
| | | * @return é»è®¤è¯è¨è§£æå¨ |
| | | */ |
| | | @Bean |
| | | public LocaleResolver localeResolver(){ |
| | | SessionLocaleResolver localeResolver = new SessionLocaleResolver(); |
| | | localeResolver.setDefaultLocale(Locale.SIMPLIFIED_CHINESE); |
| | | return localeResolver; |
| | | } |
| | | |
| | | /** |
| | | * é
ç½®æ¦æªå¨ |
| | | * @param registry æ¦æªå¨æ³¨åå¨ |
| | | */ |
| | | @Override |
| | | public void addInterceptors(InterceptorRegistry registry){ |
| | | /* preHandleææ¦æªå¨å®ä¹é¡ºåºå°è°ç¨ |
| | | postHandleææ¦æªå¨å®ä¹éåºå°è°ç¨ |
| | | afterCompletionææ¦æªå¨å®ä¹éåºå°è°ç¨ |
| | | postHandle卿ªå¨é¾å
æææ¦æªå¨è¿åæåè°ç¨ |
| | | afterCompletionåªæå¨preHandleè¿åtrueæè°ç¨*/ |
| | | //1. éè¦é
ç½®å¤è¯çæ¦æªå¨ï¼é
ç½®å¤è¯ç¯å¢ |
| | | //2. éè¦é
ç½®tokençæ¦æªå¨ï¼è¿ä¸ªå¿
须卿鿦æªå¨ä¹åï¼éé¢å
æ¬ç¨æ·çsessionä¿¡æ¯ï¼æ¥å¿ç |
| | | //3. é
ç½®æéçæ¦æªå¨ï¼å¦æä¸ç¬¦åè¦æ±åè¿åå¼å¸¸ãéè¦å¤çç³»ç»è®¿é®çæéï¼æ¥å£è®¿é®çæéï¼æ°æ®è®¿é®çæéä¸ç§ç±»å |
| | | //4. æ´æ°ç¨æ·è¯·æ±çæåæ¶é´ |
| | | |
| | | //æ·»å æ¥å¿çMDC |
| | | registry.addInterceptor(vciLogBeforeInterceptor()); |
| | | //å¤è¯è¨ |
| | | registry.addInterceptor(vciLocaleInterceptor()); |
| | | registry.addInterceptor(vciSecurityInterceptor()).excludePathPatterns("/error").excludePathPatterns("/**.*"); |
| | | //ç§»é¤æ¥å¿çMDC |
| | | registry.addInterceptor(vciLogAfterInterceptor()); |
| | | } |
| | | |
| | | /** |
| | | * å¤è¯è¨ç¸å
³çæ¦æªå¨ |
| | | * @return å¤è¯è¨æ¦æªå¨ |
| | | */ |
| | | @Bean |
| | | public VciLocaleInterceptor vciLocaleInterceptor(){ |
| | | return new VciLocaleInterceptor(); |
| | | } |
| | | |
| | | /** |
| | | * å®å
¨ç¸å
³çæ¦æªå¨ |
| | | * @return å®å
¨ç¸å
³çæ¦æªå¨ |
| | | */ |
| | | @Bean |
| | | public VciSecurityInterceptor vciSecurityInterceptor(){ |
| | | return new VciSecurityInterceptor(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * æ¥å¿ç¸å
³çæ¦æªå¨ |
| | | * @return æ¥å¿æ¦æªå¨ |
| | | */ |
| | | @Bean |
| | | public VciLogBeforeInterceptor vciLogBeforeInterceptor(){ |
| | | return new VciLogBeforeInterceptor(); |
| | | } |
| | | |
| | | /** |
| | | * æ¥å¿ç¸å
³çæ¦æªå¨ |
| | | * @return æ¥å¿æ¦æªå¨ |
| | | */ |
| | | @Bean |
| | | public VciLogAfterInterceptor vciLogAfterInterceptor(){ |
| | | return new VciLogAfterInterceptor(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 设置跨å |
| | | * @param registry è·¨åæ³¨åå¨ |
| | | */ |
| | | @Override |
| | | public void addCorsMappings(CorsRegistry registry) { |
| | | log.info("è¿å
¥è·¨åé
ç½®"); |
| | | if(corsProperties !=null && "true".equalsIgnoreCase(corsProperties.getEnabled())) { |
| | | log.info("æå¼äºè·¨åå¼å
³"); |
| | | String[] allowedOrigins = corsProperties.getAllowedOrigins(); |
| | | |
| | | String[] allowedHeaders = corsProperties.getAllowedHeaders(); |
| | | |
| | | String[] allowedMethods = corsProperties.getAllowedMethods(); |
| | | |
| | | String[] exposedHeaders = corsProperties.getExposedHeaders(); |
| | | |
| | | Boolean allowCredentials = corsProperties.getAllowCredentials(); |
| | | |
| | | Long maxAge = corsProperties.getMaxAge(); |
| | | log.info("注åè·¨åå
容 = [" + allowedOrigins + "]"); |
| | | String mappings = corsProperties.getMappings(); |
| | | if (allowedHeaders == null || allowedHeaders.length == 0) { |
| | | allowedHeaders = DEFAULT_ALLOWED_HEADERS; |
| | | } |
| | | if (allowedOrigins == null || allowedOrigins.length == 0) { |
| | | allowedOrigins = DEFAULT_ORIGINS; |
| | | } |
| | | |
| | | if (exposedHeaders == null || exposedHeaders.length == 0) { |
| | | exposedHeaders = DEFAULT_EXPOSEDHEADERS; |
| | | } |
| | | if (allowedMethods == null || allowedMethods.length == 0){ |
| | | allowedMethods = DEFAULT_METHODS; |
| | | } |
| | | if (maxAge == null || maxAge == 0) { |
| | | maxAge = DEFAULT_MAX_AGE; |
| | | } |
| | | if (allowCredentials == null) { |
| | | allowCredentials = DEFAULT_ALLOW_CREDENTIALS; |
| | | } |
| | | if (mappings == null || mappings.trim() == "") { |
| | | mappings = "/**"; |
| | | } |
| | | log.info("è·¨åæ å°çURLï¼" + mappings); |
| | | registry.addMapping(mappings) |
| | | .allowedOrigins(allowedOrigins) |
| | | .allowedMethods(allowedMethods) |
| | | .allowedHeaders(allowedHeaders) |
| | | .exposedHeaders(exposedHeaders) |
| | | .allowCredentials(allowCredentials).maxAge(maxAge); |
| | | }else{ |
| | | log.info("没ææå¼è·¨åå¼å
³"); |
| | | } |
| | | } |
| | | |
| | | public CorsProperties getCorsProperties() { |
| | | return corsProperties; |
| | | } |
| | | |
| | | public void setCorsProperties(CorsProperties corsProperties) { |
| | | this.corsProperties = corsProperties; |
| | | } |
| | | |
| | | public String[] getDEFAULT_ORIGINS() { |
| | | return DEFAULT_ORIGINS; |
| | | } |
| | | |
| | | public void setDEFAULT_ORIGINS(String[] DEFAULT_ORIGINS) { |
| | | this.DEFAULT_ORIGINS = DEFAULT_ORIGINS; |
| | | } |
| | | |
| | | public String[] getDEFAULT_ALLOWED_HEADERS() { |
| | | return DEFAULT_ALLOWED_HEADERS; |
| | | } |
| | | |
| | | public void setDEFAULT_ALLOWED_HEADERS(String[] DEFAULT_ALLOWED_HEADERS) { |
| | | this.DEFAULT_ALLOWED_HEADERS = DEFAULT_ALLOWED_HEADERS; |
| | | } |
| | | |
| | | public String[] getDEFAULT_METHODS() { |
| | | return DEFAULT_METHODS; |
| | | } |
| | | |
| | | public void setDEFAULT_METHODS(String[] DEFAULT_METHODS) { |
| | | this.DEFAULT_METHODS = DEFAULT_METHODS; |
| | | } |
| | | |
| | | public boolean isDEFAULT_ALLOW_CREDENTIALS() { |
| | | return DEFAULT_ALLOW_CREDENTIALS; |
| | | } |
| | | |
| | | public void setDEFAULT_ALLOW_CREDENTIALS(boolean DEFAULT_ALLOW_CREDENTIALS) { |
| | | this.DEFAULT_ALLOW_CREDENTIALS = DEFAULT_ALLOW_CREDENTIALS; |
| | | } |
| | | |
| | | public long getDEFAULT_MAX_AGE() { |
| | | return DEFAULT_MAX_AGE; |
| | | } |
| | | |
| | | public void setDEFAULT_MAX_AGE(long DEFAULT_MAX_AGE) { |
| | | this.DEFAULT_MAX_AGE = DEFAULT_MAX_AGE; |
| | | } |
| | | |
| | | public List<String> getUnCheckUrls() { |
| | | return unCheckUrls; |
| | | } |
| | | |
| | | public void setUnCheckUrls(List<String> unCheckUrls) { |
| | | this.unCheckUrls = unCheckUrls; |
| | | } |
| | | |
| | | public List<String> getUnStorageRequestTimeUrls() { |
| | | return unStorageRequestTimeUrls; |
| | | } |
| | | |
| | | public void setUnStorageRequestTimeUrls(List<String> unStorageRequestTimeUrls) { |
| | | this.unStorageRequestTimeUrls = unStorageRequestTimeUrls; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.autoconfigure; |
| | | |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
| | | import org.springframework.boot.context.properties.ConfigurationProperties; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.scheduling.annotation.EnableAsync; |
| | | import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; |
| | | |
| | | import java.util.concurrent.Executor; |
| | | |
| | | /** |
| | | * timeréè¦çé»è®¤ççº¿ç¨æ± |
| | | * @author weidy |
| | | * @date 2021-2-2 |
| | | */ |
| | | @Configuration |
| | | @EnableAsync |
| | | @ConditionalOnProperty(prefix = "vciasync",name="enabled",havingValue = "true",matchIfMissing = false) |
| | | public class VciAsyncConfig { |
| | | |
| | | /** |
| | | * åå§åå¤§å° |
| | | */ |
| | | private int corePoolSize; |
| | | |
| | | /** |
| | | * æå¤§çå¼ |
| | | */ |
| | | private int maxPoolSize; |
| | | |
| | | /** |
| | | * éåçä¸ªæ° |
| | | */ |
| | | private int queueCapacity; |
| | | |
| | | /** |
| | | * åæ´»æ¶é´ |
| | | */ |
| | | private int keepAliveSeconds = 60; |
| | | |
| | | /** |
| | | * é»è®¤ççº¿ç¨æ± ï¼ |
| | | * @return çº¿ç¨æ± 对象 |
| | | */ |
| | | @Bean |
| | | @ConditionalOnMissingBean |
| | | public Executor taskExecutor() { |
| | | ThreadPoolTaskExecutor executor = new VciThreadPoolTaskExecutor(); |
| | | int cpu = Runtime.getRuntime().availableProcessors(); |
| | | if(getCorePoolSize() == 0){ |
| | | setCorePoolSize(cpu); |
| | | } |
| | | if(getMaxPoolSize() == 0){ |
| | | setMaxPoolSize(2* cpu); |
| | | } |
| | | if(getQueueCapacity() == 0){ |
| | | setQueueCapacity(100); |
| | | } |
| | | executor.setCorePoolSize(getCorePoolSize()); |
| | | executor.setMaxPoolSize(getMaxPoolSize()); |
| | | executor.setQueueCapacity(getQueueCapacity()); |
| | | executor.setKeepAliveSeconds(getKeepAliveSeconds()); |
| | | executor.initialize(); |
| | | return executor; |
| | | } |
| | | |
| | | public int getCorePoolSize() { |
| | | return corePoolSize; |
| | | } |
| | | |
| | | public void setCorePoolSize(int corePoolSize) { |
| | | this.corePoolSize = corePoolSize; |
| | | } |
| | | |
| | | public int getMaxPoolSize() { |
| | | return maxPoolSize; |
| | | } |
| | | |
| | | public void setMaxPoolSize(int maxPoolSize) { |
| | | this.maxPoolSize = maxPoolSize; |
| | | } |
| | | |
| | | public int getQueueCapacity() { |
| | | return queueCapacity; |
| | | } |
| | | |
| | | public void setQueueCapacity(int queueCapacity) { |
| | | this.queueCapacity = queueCapacity; |
| | | } |
| | | |
| | | public int getKeepAliveSeconds() { |
| | | return keepAliveSeconds; |
| | | } |
| | | |
| | | public void setKeepAliveSeconds(int keepAliveSeconds) { |
| | | this.keepAliveSeconds = keepAliveSeconds; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "VciAsyncConfig{" + |
| | | "corePoolSize=" + corePoolSize + |
| | | ", maxPoolSize=" + maxPoolSize + |
| | | ", queueCapacity=" + queueCapacity + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.autoconfigure; |
| | | |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; |
| | | import org.springframework.util.concurrent.ListenableFuture; |
| | | |
| | | import java.util.concurrent.Callable; |
| | | import java.util.concurrent.Future; |
| | | import java.util.concurrent.ThreadPoolExecutor; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | /** |
| | | * çº¿ç¨æ± ,å¢å çæ§ |
| | | * @author weidy |
| | | * @date 2021-2-2 |
| | | */ |
| | | public class VciThreadPoolTaskExecutor extends ThreadPoolTaskExecutor { |
| | | |
| | | /** |
| | | * æ¥å¿ |
| | | */ |
| | | private static final Logger logger = LoggerFactory.getLogger(VciThreadPoolTaskExecutor.class); |
| | | |
| | | /** |
| | | * æå°æ¥å¿ |
| | | * @param prefix åç¼ |
| | | */ |
| | | private void printLog(String prefix){ |
| | | ThreadPoolExecutor threadPoolExecutor = getThreadPoolExecutor(); |
| | | if (null == threadPoolExecutor) { |
| | | return; |
| | | } |
| | | logger.info(prefix + ", task_count [" + threadPoolExecutor.getTaskCount() |
| | | + "], completed_task_count [" + threadPoolExecutor.getCompletedTaskCount() |
| | | + "], active_thread_count [" + threadPoolExecutor.getActiveCount() |
| | | + "], blocking_queue_size [" + threadPoolExecutor.getQueue().size() |
| | | + "], thread_pool_size [" + threadPoolExecutor.getPoolSize() |
| | | + "], largest_pool_size_ever [" + threadPoolExecutor.getLargestPoolSize() |
| | | + "], core_thread_pool_size [" + threadPoolExecutor.getCorePoolSize() |
| | | + "], max_thread_pool_size [" + threadPoolExecutor.getMaximumPoolSize() |
| | | + "], thread_keep_alive_time [" + threadPoolExecutor.getKeepAliveTime(TimeUnit.SECONDS) |
| | | + "]"); |
| | | } |
| | | |
| | | /** |
| | | * æ§è¡ |
| | | * @param task ä»»å¡ç对象 |
| | | */ |
| | | @Override |
| | | public void execute(Runnable task) { |
| | | printLog("1. do execute æ§è¡ä»»å¡"); |
| | | super.execute(task); |
| | | } |
| | | |
| | | /** |
| | | * æ§è¡ä»»å¡ï¼å¹¶è®¾ç½®è¶
æ¶ |
| | | * @param task ä»»å¡ç对象 |
| | | * @param startTimeout è¶
æ¶ |
| | | */ |
| | | @Override |
| | | public void execute(Runnable task, long startTimeout) { |
| | | printLog("2. do executeï¼æ§è¡ä»»å¡ï¼å¹¶ä¸è®¾ç½®è¶
æ¶" ); |
| | | super.execute(task, startTimeout); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤ |
| | | * @param task ä»»å¡ |
| | | * @return æ§è¡ |
| | | */ |
| | | @Override |
| | | public Future<?> submit(Runnable task) { |
| | | printLog("1. do submitï¼æäº¤"); |
| | | return super.submit(task); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤ |
| | | * @param task ä»»å¡ |
| | | * @param <T> ç±»å |
| | | * @return ç±»å |
| | | */ |
| | | @Override |
| | | public <T> Future<T> submit(Callable<T> task) { |
| | | printLog("2. do submit"); |
| | | return super.submit(task); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤å¯çå¬ |
| | | * @param task ä»»å¡ |
| | | * @return çå¬ |
| | | */ |
| | | @Override |
| | | public ListenableFuture<?> submitListenable(Runnable task) { |
| | | printLog("1. do submitListenable"); |
| | | return super.submitListenable(task); |
| | | } |
| | | |
| | | /** |
| | | * æäº¤å¯çå¬ |
| | | * @param task ä»»å¡ |
| | | * @param <T> ç±»å |
| | | * @return çå¬çç±»å |
| | | */ |
| | | @Override |
| | | public <T> ListenableFuture<T> submitListenable(Callable<T> task) { |
| | | printLog("2. do submitListenable"); |
| | | return super.submitListenable(task); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.clientutil; |
| | | |
| | | import com.vci.starter.web.exception.VciBaseException; |
| | | import com.vci.starter.web.pagemodel.BaseResult; |
| | | import com.vci.starter.web.pagemodel.DataGrid; |
| | | import com.vci.starter.web.util.LangBaseUtil; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * é»è®¤ç客æ·ç«¯è°ç¨ç±» |
| | | * @author weidy |
| | | */ |
| | | public interface BaseClientUtil{ |
| | | |
| | | /** |
| | | * 使ç¨è°ç¨å¨æ¥è¯¢dataç±»åç屿§ |
| | | * @param interfaceName æ¥å£çåç§°ï¼å¯ä»¥ä¸è¦å¤è¯ |
| | | * @param clientUtilProcesser è°ç¨å¨æ§è¡å½æ° |
| | | * @param <T> è¿åç»æçç±»å |
| | | * @return åè¡¨æ°æ® |
| | | * @throws VciBaseException åæ°é误ï¼è°ç¨éè¯¯ä¼æåºå¼å¸¸ |
| | | */ |
| | | default <T> List<T> queryData(String interfaceName,ClientUtilProcesser<T> clientUtilProcesser) throws VciBaseException { |
| | | List<T> dataList = new ArrayList<>(); |
| | | BaseResult<T> result = queryByProvider(interfaceName,clientUtilProcesser); |
| | | dataList.addAll(result.getData()); |
| | | return dataList; |
| | | } |
| | | |
| | | /** |
| | | * 使ç¨è°ç¨å¨æ¥è¯¢ |
| | | * @param interfaceName æ¥å£çåç§° |
| | | * @param clientUtilProcesser è°ç¨å¨æ§è¡å½æ° |
| | | * @param <T> è¿åçç±»å |
| | | * @return æ§è¡çç»æ |
| | | * @throws VciBaseException è°ç¨éè¯¯çæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | default <T> BaseResult<T> queryByProvider(String interfaceName,ClientUtilProcesser<T> clientUtilProcesser) throws VciBaseException { |
| | | try{ |
| | | BaseResult<T> result = null; |
| | | if (clientUtilProcesser != null ) { |
| | | result = clientUtilProcesser.queryByProvider(); |
| | | } |
| | | if(result == null){ |
| | | throw new VciBaseException("è°ç¨ã{0}ãæ¥å£ï¼æå¡ç«¯æ²¡æè¿åå¼",new String[]{interfaceName}); |
| | | } |
| | | if(!result.isSuccess()){ |
| | | throw new VciBaseException(result.getMsg(),result.getMsgObjs()); |
| | | } |
| | | return result; |
| | | }catch (VciBaseException e){ |
| | | throw e; |
| | | }catch (Throwable e){ |
| | | throw new VciBaseException(LangBaseUtil.getErrorMsg(e),new String[0],e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 使ç¨è°ç¨æ¥è¯¢objç±»åç屿§ |
| | | * @param interfaceName æ¥å£æ¹æ³çåå |
| | | * @param clientUtilProcesser è°ç¨å¨æ§è¡å½æ° |
| | | * @param <T> è¿åçç»æç´¯æï¼åå³äºè°ç¨å¨çè¿åå¼ |
| | | * @return obj屿§çå¼ |
| | | * @throws VciBaseException è°ç¨é误æ¶ä¼æåºå¼å¸¸ |
| | | */ |
| | | default <T> T queryObj(String interfaceName,ClientUtilProcesser<T> clientUtilProcesser) throws VciBaseException { |
| | | return queryByProvider(interfaceName,clientUtilProcesser).getObj(); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢åè¡¨æ°æ® |
| | | * @param interfaceName æ¥å£æ¹æ³çåå |
| | | * @param clientUtilProcesser è°ç¨å¨æ§è¡å½æ° |
| | | * @param <T> è¿åçç»æï¼åå³äºè°ç¨å¨çè¿åå¼ |
| | | * @return åè¡¨æ°æ® |
| | | * @throws VciBaseException è°ç¨é误æ¶ä¼æåºå¼å¸¸ |
| | | */ |
| | | default <T> DataGrid<T> queryGrid(String interfaceName,ClientUtilProcesser<T> clientUtilProcesser) throws VciBaseException{ |
| | | BaseResult<T> result = queryByProvider(interfaceName,clientUtilProcesser); |
| | | DataGrid<T> dataGrid = new DataGrid<>(); |
| | | if(result.getData()!=null) { |
| | | dataGrid.setData(result.getData().stream().collect(Collectors.toList())); |
| | | } |
| | | dataGrid.setTotal(result.getTotal()); |
| | | return dataGrid; |
| | | } |
| | | |
| | | /** |
| | | * æ§è¡æ°æ®ï¼è¿åæ§è¡ç»æ |
| | | * @param interfaceName æ¥å£æ¹æ³çåå |
| | | * @param clientUtilProcesser è°ç¨å¨æ§è¡å½æ° |
| | | * @param <T> è¿åçç»æï¼åå³äºè°ç¨å¨çè¿åå¼ |
| | | * @return true表示æåï¼å¤±è´¥çæ¶åä¼ç´æ¥æåºå¼å¸¸ |
| | | * @throws VciBaseException è°ç¨é误æ¶ä¼æåºå¼å¸¸ |
| | | */ |
| | | default <T> boolean executeData(String interfaceName,ClientUtilProcesser<T> clientUtilProcesser) throws VciBaseException{ |
| | | BaseResult<T> result = queryByProvider(interfaceName,clientUtilProcesser); |
| | | return result.isSuccess(); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.clientutil; |
| | | |
| | | import com.vci.starter.web.pagemodel.BaseResult; |
| | | |
| | | |
| | | /** |
| | | * 客æ·ç«¯è°ç¨ç±»çéç¨ |
| | | * @author weidy |
| | | */ |
| | | @FunctionalInterface |
| | | public interface ClientUtilProcesser<T> { |
| | | |
| | | /** |
| | | * 使ç¨è°ç¨å¨æ¥è¯¢ |
| | | * @return æ§è¡çç»æ |
| | | */ |
| | | BaseResult<T> queryByProvider(); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.constant; |
| | | |
| | | /** |
| | | * 常ç¨è¿åå¼ |
| | | * @author weidy |
| | | */ |
| | | public class CommonReturnCodeConstant { |
| | | |
| | | /** |
| | | * 没æç»å½ |
| | | */ |
| | | public static final String NO_LOGIN = "NO_LOGIN"; |
| | | |
| | | /** |
| | | * 没ææé |
| | | */ |
| | | public static final String NO_RIGHT = "NO_RIGHT"; |
| | | |
| | | /** |
| | | * 被强å¶ä¸çº¿ |
| | | */ |
| | | public static final String POP_OFFLINE ="POP_OFFLINE"; |
| | | |
| | | /** |
| | | * æ²¡ææ°æ®æé |
| | | */ |
| | | public static final String NO_DATA_RIGHT = "NO_DATA_RIGHT"; |
| | | |
| | | /** |
| | | * 没æUIæé |
| | | */ |
| | | public static final String NO_UI_RIGHT = "NO_UI_RIGHT"; |
| | | |
| | | /** |
| | | * ç¨æ·å¯çº§ä¸å
许 |
| | | */ |
| | | public static final String USER_SECRET_LOW = "USER_SECRET_LOW"; |
| | | |
| | | /** |
| | | * 请æ±è·¯å¾æ²¡ææ¾å° |
| | | */ |
| | | public static final String URL_NOT_FOUND = "URL_NOT_FOUND"; |
| | | |
| | | /** |
| | | * åºç°äºå¼å¸¸ |
| | | */ |
| | | public static final String EXCEPTION = "EXCEPTION"; |
| | | |
| | | /** |
| | | * åæ°é误 |
| | | */ |
| | | public static final String PARAM_ERROR="PARAM_ERROR"; |
| | | |
| | | /** |
| | | * æ°æ®éå¤ |
| | | */ |
| | | public static final String DATA_REPEAT = "dataRepeat"; |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.constant; |
| | | |
| | | /** |
| | | * å¸¸ç¨æä»¶çåç¼å |
| | | * @author weidy |
| | | * @date 2020/5/5 |
| | | */ |
| | | public class FileExtensionConstant { |
| | | |
| | | /** |
| | | * excel2003æä»¶ |
| | | */ |
| | | public static final String XLS = "xls"; |
| | | |
| | | /** |
| | | * excel2007å以ä¸çæ¬æä»¶ |
| | | */ |
| | | public static final String XLSX = "xlsx"; |
| | | |
| | | /** |
| | | * word2003æä»¶ |
| | | */ |
| | | public static final String DOC = "doc"; |
| | | |
| | | /** |
| | | * word2007å以ä¸çæ¬æä»¶ |
| | | */ |
| | | public static final String DOCX = "docx"; |
| | | |
| | | /** |
| | | * å¹»ç¯ç2003æä»¶ |
| | | */ |
| | | public static final String PPT = "ppt"; |
| | | |
| | | /** |
| | | * å¹»ç¯ç2007å以ä¸çæ¬ |
| | | */ |
| | | public static final String PPTX = "pptx"; |
| | | |
| | | /** |
| | | * Pdfæä»¶ |
| | | */ |
| | | public static final String PDF = "pdf"; |
| | | |
| | | /** |
| | | * ææ¬æä»¶ |
| | | */ |
| | | public static final String TXT ="txt"; |
| | | |
| | | /** |
| | | * ç½é¡µæä»¶ |
| | | */ |
| | | public static final String HTML = "html"; |
| | | |
| | | /** |
| | | * 表åæä»¶ |
| | | */ |
| | | public static final String DVF = "dvf"; |
| | | |
| | | /** |
| | | * æ¨¡æ¿ |
| | | */ |
| | | public static final String DTF = "dtf"; |
| | | |
| | | /** |
| | | * å¾ç |
| | | */ |
| | | public static final String PNG = "png"; |
| | | |
| | | /** |
| | | * jpgå¾ç |
| | | */ |
| | | public static final String JPG = "jpg"; |
| | | |
| | | /** |
| | | * XPS |
| | | */ |
| | | public static final String XPS = "xps"; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.constant; |
| | | |
| | | /** |
| | | * 平尿¡æ¶ççå½å¨æçç¼å· |
| | | * @author weidy |
| | | * @date 2019/12/27 |
| | | */ |
| | | public class FrameWorkLcStatusConstant { |
| | | |
| | | /** |
| | | * 平尿¡æ¶çä¸å¡æ¡£æ¡éç¨ççå½å¨æ |
| | | */ |
| | | public static final String FRAME_WORK_LIFE_CYCLE_NAME = "frameworkDataLc"; |
| | | |
| | | /** |
| | | * é»è®¤ççå½å¨æ |
| | | */ |
| | | public static final String EMTYPE_LIFE_CYCLE = "defaultLC"; |
| | | |
| | | /** |
| | | * éç¨çåå¸çå½å¨æï¼ç¼å¶ï¼å®¡æ ¸ï¼åå¸ |
| | | */ |
| | | public static final String RELEASE_LIFE_CYCLE = "releaseDataLc"; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.constant; |
| | | |
| | | /** |
| | | * æ¥è¯¢ç±»å |
| | | * @author weidy |
| | | */ |
| | | public class QueryOptionConstant { |
| | | |
| | | /** |
| | | * IN |
| | | */ |
| | | public static final String IN = "\\IN"; |
| | | |
| | | /** |
| | | * NOT IN |
| | | */ |
| | | public static final String NOTIN ="\\NOTIN"; |
| | | |
| | | /** |
| | | * ä¸çäº |
| | | */ |
| | | public static final String NOTEQUAL = "!="; |
| | | |
| | | /** |
| | | * å¤§äº |
| | | */ |
| | | public static final String MORE=">"; |
| | | |
| | | /** |
| | | * 大äºçäº |
| | | */ |
| | | public static final String MORETHAN=">="; |
| | | |
| | | /** |
| | | * å°äº |
| | | */ |
| | | public static final String LESS = "<"; |
| | | |
| | | /** |
| | | * å°äºçäº |
| | | */ |
| | | public static final String LESSTHAN = "<="; |
| | | |
| | | /** |
| | | * æè
|
| | | */ |
| | | public static final String OR = "\\OR"; |
| | | |
| | | /** |
| | | * çäºç©º |
| | | */ |
| | | public static final String ISNULL ="=null"; |
| | | |
| | | /** |
| | | * ä¸çäºç©º |
| | | */ |
| | | public static final String ISNOTNULL="!=null"; |
| | | |
| | | /** |
| | | * çäº |
| | | */ |
| | | public static final String EQUAL = "="; |
| | | |
| | | /** |
| | | * ä¸ |
| | | */ |
| | | public static final String AND = "and"; |
| | | |
| | | /** |
| | | * æ¢ä¸æ¯and,ä¹ä¸æ¯orçæ¹å¼ãè¿ç§æ¯ç´æ¥æ¼æ¥å°whereå |
| | | */ |
| | | public static final String NO_OR_AND = "${no_or_and}"; |
| | | |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.constant; |
| | | |
| | | /** |
| | | * æ£åè¡¨è¾¾å¼ |
| | | * @author weidy |
| | | * @date 2019/10/18 17:35 |
| | | */ |
| | | public class RegExpConstant { |
| | | |
| | | /** |
| | | * å
å«ä¸æ |
| | | */ |
| | | public static final String INCLUDE_CHINESE = "[\u0391-\uFFE5]"; |
| | | |
| | | /** |
| | | * å
¨é¨æ¯æ°å |
| | | */ |
| | | public static final String NUMBER = "^[0-9]*$"; |
| | | |
| | | /** |
| | | * æ´æ° |
| | | */ |
| | | public static final String INT = "/^-?[1-9]+[0-9]*$/"; |
| | | |
| | | /** |
| | | * é¿æ´å½¢ |
| | | */ |
| | | public static final String LONG = "/^-?[1-9]+[0-9]*$/"; |
| | | |
| | | /** |
| | | * å精度 |
| | | */ |
| | | public static final String DOUBLE = "[0-9]*(\\.[0-9]*|[eE][+-][0-9]*)$"; |
| | | |
| | | /** |
| | | * å
¨é¨é½æ¯åæ¯ |
| | | */ |
| | | public static final String LETTER = "^[A-Za-z]+$"; |
| | | |
| | | /** |
| | | * 忝忰å |
| | | */ |
| | | public static final String LETTER_AND_NUMBER = "^[A-Za-z0-9]+$"; |
| | | |
| | | /** |
| | | * å
¨é¨æ¯å¤§å忝 |
| | | */ |
| | | public static final String UP_LETTER = "^[A-Z]+$"; |
| | | |
| | | /** |
| | | * å
¨é¨æ¯å°å忝 |
| | | */ |
| | | public static final String LOW_LETTER = "^[a-z]+$"; |
| | | |
| | | /** |
| | | * å
¨é¨ç¹æ®å符 |
| | | */ |
| | | public static final String SPECIAL_CHARACTER = "^[` ~!@#$%^&*()_\\-+=<>?:\"{}|,.\\/;'\\[\\]·~ï¼@#ï¿¥%â¦â¦&*ï¼ï¼ââ\\-+={}|ããï¼ï¼ââãããï¼ââï¼ãã]+$"; |
| | | /** |
| | | * å
嫿忝 |
| | | */ |
| | | public static final String HAS_LETTER = ".*[a-z][A-Z]{1,}.*"; |
| | | |
| | | /** |
| | | * å
嫿大å忝 |
| | | */ |
| | | public static final String HAS_UP_LETTER = ".*[A-Z]{1,}.*"; |
| | | |
| | | /** |
| | | * å
嫿å°å忝 |
| | | */ |
| | | public static final String HAS_LOW_LETTER = ".*[a-z]{1,}.*"; |
| | | |
| | | /** |
| | | * å
å«æé¿æä¼¯æ°å |
| | | */ |
| | | public static final String HAS_NUMBER = ".*[0-9]{1,}.*"; |
| | | |
| | | /** |
| | | * å
å«æç¹æ®å符 |
| | | */ |
| | | public static final String HAS_SPECIAL_CHARACTER = ".*[` ~!@#$%^&*()_\\-+=<>?:\"{}|,.\\/;'\\[\\]·~ï¼@#ï¿¥%â¦â¦&*ï¼ï¼ââ\\-+={}|ããï¼ï¼ââãããï¼ââï¼ãã]{1,}.*"; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.constant; |
| | | |
| | | /** |
| | | * é»è®¤ççæ¬è§åçåç§° |
| | | * @author weidy |
| | | * @date 2020/4/15 |
| | | */ |
| | | public class RevisionConstant { |
| | | |
| | | /** |
| | | * 以忝大Aå¼å§çç¼ç è§åï¼æ²¡æåç¼ååç¼ï¼æ¥é¿ä¸º1ï¼å¹¶ä¸ä¹æ²¡æè·³è·å符 |
| | | */ |
| | | public static final String CHARACTER = "characterversionrule"; |
| | | |
| | | /** |
| | | * 以æ°å |
| | | */ |
| | | public static final String NUMBER = "numberversionrule"; |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.constant; |
| | | |
| | | /** |
| | | * ç¹æ®ç符å·,为äºç¬¦åè§èï¼è¯·å¿å¨å¤æè¯å¥ä¸ç´æ¥å符å·å
容 |
| | | * @author weidy |
| | | * @date 2020/5/5 |
| | | */ |
| | | public class SpecialCharacterConstant { |
| | | |
| | | /** |
| | | * è±æå¥å· |
| | | */ |
| | | public static final String POINT = "."; |
| | | |
| | | /** |
| | | * ä¸å线 |
| | | */ |
| | | public static final String UNDER_LINE = "_"; |
| | | |
| | | /** |
| | | * è¿æ¥æ¨ªçº¿ |
| | | */ |
| | | public static final String CONNECTOR = "-"; |
| | | |
| | | /** |
| | | * çå· |
| | | */ |
| | | public static final String EQUAL = "="; |
| | | |
| | | /** |
| | | * åå· |
| | | */ |
| | | public static final String SEMICOLON = ";"; |
| | | |
| | | /** |
| | | * éå· |
| | | */ |
| | | public static final String COMMA = ","; |
| | | |
| | | /** |
| | | * ç¾å
ç¬¦å· |
| | | */ |
| | | public static final String DOLLAR = "$"; |
| | | |
| | | /** |
| | | * æå· |
| | | */ |
| | | public static final String STAR = "*"; |
| | | |
| | | /** |
| | | * atç¬¦å· |
| | | */ |
| | | public static final String AT = "@"; |
| | | |
| | | /** |
| | | * #å· |
| | | */ |
| | | public static final String SHARP = "#"; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.constant; |
| | | |
| | | /** |
| | | * tokençç¸å
³key |
| | | * @author weidy |
| | | * @date 2019/11/7 10:10 AM |
| | | */ |
| | | public class TokenKeyConstant { |
| | | |
| | | /** |
| | | * ç¨æ·çtokenä¼ è¾æ¶ä½¿ç¨çåç§° |
| | | */ |
| | | public static final String USER_TOKEN_KEY ="AuthorizationToken"; |
| | | |
| | | /** |
| | | * ç³»ç»çtokenä¼ è¾æ¶ä½¿ç¨çåç§° |
| | | */ |
| | | public static final String SYSTEM_PRIVATE_KEY = "AuthorizationSystemToken"; |
| | | |
| | | /** |
| | | * ç³»ç»çæ¥å¿é¾è·¯ä¸»é®ä¼ è¾æ¶ä½¿ç¨çåç§° |
| | | */ |
| | | public static final String LOG_TRACE_ID_KEY = "AuthorizationLogTraceId"; |
| | | |
| | | /** |
| | | * æ¥å¿ç追踪主é®çåç§° |
| | | */ |
| | | public static final String TRACE_ID = "logTraceId"; |
| | | |
| | | /** |
| | | * ç³»ç»çå¤è¯åæ°åç§° |
| | | */ |
| | | public static final String LANGUAGE_KEY = "vciLanguageCode"; |
| | | |
| | | /** |
| | | * 请æ±çæ¶é´åæ° |
| | | */ |
| | | public static final String REQUEST_TIMESTAMP = "vciHttpStartRequestTime"; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.constant; |
| | | |
| | | |
| | | import com.vci.starter.web.pagemodel.SessionInfo; |
| | | import com.vci.starter.web.util.VciBaseUtil; |
| | | import com.vci.starter.web.util.VciDateUtil; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | import java.util.Optional; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * ç³»ç»åé |
| | | * @author weidy |
| | | */ |
| | | public class VciSystemVarConstants { |
| | | |
| | | /** |
| | | * åå§åçæ¶åæ¾å
¥æ°æ® |
| | | */ |
| | | public VciSystemVarConstants(){ |
| | | SYSTEM_VAR_KEYNAMEMAP.put(CURRENTTIME,"å½åæ¶é´"); |
| | | SYSTEM_VAR_KEYNAMEMAP.put(CURRENTDATE,"å½åæ¥æ"); |
| | | SYSTEM_VAR_KEYNAMEMAP.put(CURRENTDATETIME,"å½åæ¥ææ¶é´"); |
| | | SYSTEM_VAR_KEYNAMEMAP.put(CURRENTUSER_OID,"å½åç¨æ·ä¸»é®"); |
| | | SYSTEM_VAR_KEYNAMEMAP.put(CURRENTUSER_ID,"å½åç¨æ·è´¦æ·"); |
| | | SYSTEM_VAR_KEYNAMEMAP.put(CURRENTUSER_NAME,"å½åç¨æ·å§å"); |
| | | SYSTEM_VAR_KEYNAMEMAP.put(CURRENTUSER_SECRETGRADE,"å½åç¨æ·å¯çº§"); |
| | | SYSTEM_VAR_KEYNAMEMAP.put(CURRENTUSER_IP_SECRET,"å½åç¨æ·çæºå¨å¯çº§"); |
| | | SYSTEM_VAR_KEYNAMEMAP.put(CURRENTUSER_GROUPOID,"å½åç¨æ·çé¨é¨ç主é®"); |
| | | // SYSTEM_VAR_KEYNAMEMAP.put(CURRENTUSER_GROUPNUM,"å½åç¨æ·æå±é¨é¨ç¼å·"); |
| | | SYSTEM_VAR_KEYNAMEMAP.put(CURRENTUSER_GROUPNAME,"å½åç¨æ·æå±é¨é¨åç§°"); |
| | | SYSTEM_VAR_KEYNAMEMAP.put(CURRENTUSER_EMAIL,"å½åç¨æ·é®ä»¶å°å"); |
| | | SYSTEM_VAR_KEYNAMEMAP.put(CURRENTUSER_ROLENAME,"å½åç¨æ·æå±è§è²åç§°"); |
| | | SYSTEM_VAR_KEYNAMEMAP.put(CURRENTUSER_BUSINESS_UNIT,"å½åç¨æ·æå±ä¸å¡åå
主é®"); |
| | | SYSTEM_VAR_KEYNAMEMAP.put(CURRENTUSER_BUSINESS_UNIT_NAME,"å½åç¨æ·æå±ä¸å¡åå
"); |
| | | } |
| | | |
| | | /** |
| | | * å½åç¨æ·ä¸»é® |
| | | */ |
| | | public static final String CURRENTUSER_OID = "#CURRENTUSER.OID#"; |
| | | |
| | | /** |
| | | * å½åç¨æ·è´¦æ· |
| | | */ |
| | | public static final String CURRENTUSER_ID = "#CURRENTUSER.ID#"; |
| | | |
| | | /** |
| | | * å½åæ¶é´ |
| | | */ |
| | | public static final String CURRENTTIME = "#CURRENTTIME#"; |
| | | |
| | | /** |
| | | * å½åæ¥æ |
| | | */ |
| | | public static final String CURRENTDATE = "#CURRENTDATE#"; |
| | | |
| | | /** |
| | | * å½åæ¥ææ¶é´ |
| | | */ |
| | | public static final String CURRENTDATETIME = "#CURRENTDATETIME#"; |
| | | |
| | | /** |
| | | * å½åç¨æ·å§å |
| | | */ |
| | | public static final String CURRENTUSER_NAME = "#CURRENTUSER_NAME#"; |
| | | |
| | | /** |
| | | * å½åç¨æ·å¯çº§ |
| | | */ |
| | | public static final String CURRENTUSER_SECRETGRADE = "#CURRENTUSER.SECRETGRADE#"; |
| | | |
| | | /** |
| | | * å½åç¨æ·çIPå¯çº§ |
| | | */ |
| | | public static final String CURRENTUSER_IP_SECRET = "#CURRENTUSER.IPSECRET#"; |
| | | |
| | | /** |
| | | * å½åç¨æ·æå±ä¸å¡åå
|
| | | */ |
| | | public static final String CURRENTUSER_BUSINESS_UNIT = "#CURRENTUSER.BUSINESSUNIT#"; |
| | | |
| | | /** |
| | | * å½åç¨æ·æå±ä¸å¡åå
åç§° |
| | | */ |
| | | public static final String CURRENTUSER_BUSINESS_UNIT_NAME = "#CURRENTUSER.BUSINESSUNITNAME#"; |
| | | |
| | | // /** |
| | | // * å½åç¨æ·æå±é¨é¨ç¼å· |
| | | // */ |
| | | // public static final String CURRENTUSER_GROUPNUM = "#CURRENTUSER.GROUPNUM#"; |
| | | |
| | | /** |
| | | * å½åç¨æ·çé¨é¨ä¸»é® |
| | | */ |
| | | public static final String CURRENTUSER_GROUPOID = "#CURRENTUSER.GROUPOID#"; |
| | | |
| | | /** |
| | | * å½åç¨æ·æå±é¨é¨åç§° |
| | | */ |
| | | public static final String CURRENTUSER_GROUPNAME = "#CURRENTUSER.GROUPNAME#"; |
| | | |
| | | /** |
| | | * å½åç¨æ·é®ä»¶å°å |
| | | */ |
| | | public static final String CURRENTUSER_EMAIL ="#CURRENTUSER.EMAIL#"; |
| | | |
| | | /** |
| | | * å½åç¨æ·æå±è§è²åç§° |
| | | */ |
| | | public static final String CURRENTUSER_ROLENAME = "#CURRENTUSER.ROLENAME#"; |
| | | |
| | | /** |
| | | * ç³»ç»åéçæ°ç» |
| | | */ |
| | | public static final String[] SYSTEM_VAR_KEYS = {CURRENTUSER_OID,CURRENTUSER_ID,CURRENTDATE,CURRENTTIME,CURRENTDATETIME,CURRENTUSER_GROUPOID,CURRENTUSER_NAME,CURRENTUSER_SECRETGRADE, |
| | | CURRENTUSER_GROUPNAME,CURRENTUSER_EMAIL,CURRENTUSER_ROLENAME,CURRENTUSER_IP_SECRET,CURRENTUSER_BUSINESS_UNIT,CURRENTUSER_BUSINESS_UNIT_NAME}; |
| | | /** |
| | | * ç³»ç»åé对åºç䏿 |
| | | */ |
| | | public static final Map<String,String> SYSTEM_VAR_KEYNAMEMAP = new HashMap<String, String>(); |
| | | |
| | | /** |
| | | * è·åç³»ç»çåéçå¼ |
| | | * @return åéçå¼ |
| | | */ |
| | | public static Map<String,String> getSystemVarValueMap(){ |
| | | Map<String,String> systemVarMap = new HashMap<>(); |
| | | SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); |
| | | if(sessionInfo!=null){ |
| | | systemVarMap.put(CURRENTUSER_OID,sessionInfo.getUserOid()); |
| | | systemVarMap.put(CURRENTUSER_ID,sessionInfo.getUserId()); |
| | | systemVarMap.put(CURRENTUSER_NAME,sessionInfo.getUserName()); |
| | | systemVarMap.put(CURRENTDATETIME, VciDateUtil.getNowString()); |
| | | systemVarMap.put(CURRENTDATE,VciDateUtil.getNowString(VciDateUtil.DateFormat)); |
| | | systemVarMap.put(CURRENTTIME,VciDateUtil.getNowString(VciDateUtil.TimeFormat)); |
| | | systemVarMap.put(CURRENTUSER_SECRETGRADE,sessionInfo.getUserSecret()); |
| | | systemVarMap.put(CURRENTUSER_GROUPNAME,sessionInfo.getDeptName()); |
| | | systemVarMap.put(CURRENTUSER_GROUPOID,sessionInfo.getDeptOid()); |
| | | systemVarMap.put(CURRENTUSER_EMAIL,sessionInfo.getEmail()); |
| | | systemVarMap.put(CURRENTUSER_ROLENAME, Optional.ofNullable(sessionInfo.getRolesName().values()).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.joining(","))); |
| | | systemVarMap.put(CURRENTUSER_IP_SECRET,sessionInfo.getIpSecret()); |
| | | systemVarMap.put(CURRENTUSER_BUSINESS_UNIT,sessionInfo.getOrgsOid()); |
| | | systemVarMap.put(CURRENTUSER_BUSINESS_UNIT_NAME,sessionInfo.getOrgsName()); |
| | | } |
| | | return systemVarMap; |
| | | |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.enumpck; |
| | | |
| | | /** |
| | | * åºæ¬çæä¸¾ç±»ï¼è¯·çå½å¨æåæä¸¾é½å®ç°è¿ä¸ªæ¥å£ï¼å¦åæ æ³è¢«å¹³å°æ«æå° |
| | | * @author weidy |
| | | * @date 2019/10/31 10:38 AM |
| | | */ |
| | | public interface BaseEnum { |
| | | /** |
| | | * è·åæä¸¾å¼ |
| | | * @return æä¸¾å¼ |
| | | */ |
| | | String getValue(); |
| | | |
| | | /** |
| | | * è·åæ¾ç¤ºææ¬ |
| | | * @return æ¾ç¤ºææ¬ |
| | | */ |
| | | String getText(); |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.enumpck; |
| | | |
| | | /** |
| | | * åºæ¬çæä¸¾ç±»ï¼è¯·çå½å¨æåæä¸¾é½å®ç°è¿ä¸ªæ¥å£ï¼å¦åæ æ³è¢«å¹³å°æ«æå° |
| | | * è¿ä¸ªæ¯å¼ä¸ºæ°åå |
| | | * @author weidy |
| | | * @date 2019/10/31 10:38 AM |
| | | */ |
| | | public interface BaseEnumInt { |
| | | /** |
| | | * è·åæä¸¾å¼ |
| | | * @return æä¸¾å¼ |
| | | */ |
| | | int getValue(); |
| | | |
| | | /** |
| | | * è·åæ¾ç¤ºææ¬ |
| | | * @return æ¾ç¤ºææ¬ |
| | | */ |
| | | String getText(); |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.enumpck; |
| | | |
| | | /** |
| | | * å¹³å°éçVIBooleanç±»ååæ®µ |
| | | * @author weidy |
| | | */ |
| | | public enum BooleanEnum { |
| | | /** |
| | | * true |
| | | */ |
| | | TRUE("true"), |
| | | /** |
| | | * false |
| | | */ |
| | | FASLE("false"); |
| | | |
| | | /** |
| | | * æä¸¾çå¼ |
| | | */ |
| | | private final String value ; |
| | | |
| | | /** |
| | | * æä¸¾å
é¨æé æ¹æ³ |
| | | * @param value æä¸¾çå¼ |
| | | */ |
| | | private BooleanEnum(String value){ |
| | | this.value = value; |
| | | } |
| | | |
| | | /** |
| | | * è·åå¼ |
| | | * @return æä¸¾å¼ |
| | | */ |
| | | public String getValue() { |
| | | return value; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.enumpck; |
| | | |
| | | /** |
| | | * æ°æ®åºçç±»åæä¸¾ |
| | | * @author weidy |
| | | * @date 2019/10/30 2:46 PM |
| | | */ |
| | | public enum DataBaseEnum implements BaseEnum{ |
| | | |
| | | |
| | | /** |
| | | * MYSQL |
| | | */ |
| | | MYSQL("mysql","MYSQL"), |
| | | |
| | | /** |
| | | * ORACLE |
| | | */ |
| | | ORACLE("oracle","ORACLE"), |
| | | |
| | | /** |
| | | * POSTGRESQL |
| | | */ |
| | | POSTGRESQL("postgresql","POSTGRESQL"), |
| | | |
| | | /** |
| | | * DB2 |
| | | */ |
| | | DB2("db2","DB2"), |
| | | |
| | | /** |
| | | * SQL_SERVER |
| | | */ |
| | | SQL_SERVER("mssql","SQL_SERVER"), |
| | | |
| | | /** |
| | | * å½äº§è¾¾æ¢¦ |
| | | */ |
| | | DM("dm","达梦"), |
| | | |
| | | /** |
| | | * é¿éå·´å·´OceanBase |
| | | */ |
| | | OCEAN_BASE("oceanbase","é¿éå·´å·´OceanBase"), |
| | | |
| | | /** |
| | | * sqlite |
| | | */ |
| | | SQLITE("sqlite","SQLITE"); |
| | | |
| | | /** |
| | | * æä¸¾çå¼ |
| | | */ |
| | | private String value; |
| | | |
| | | /** |
| | | * æä¸¾æ¾ç¤ºææ¬ |
| | | */ |
| | | private String text; |
| | | |
| | | /** |
| | | * è·åæä¸¾å¼ |
| | | * @return æä¸¾å¼ |
| | | */ |
| | | @Override |
| | | public String getValue() { |
| | | return value; |
| | | } |
| | | |
| | | /** |
| | | * 设置æä¸¾å¼ |
| | | * @param value æä¸¾å¼ |
| | | */ |
| | | public void setValue(String value) { |
| | | this.value = value; |
| | | } |
| | | |
| | | /** |
| | | * è·åæä¸¾æ¾ç¤ºææ¬ |
| | | * @return æ¾ç¤ºææ¬ |
| | | */ |
| | | @Override |
| | | public String getText() { |
| | | return text; |
| | | } |
| | | |
| | | /** |
| | | * 设置æ¾ç¤ºææ¬ |
| | | * @param text æ¾ç¤ºææ¬ |
| | | */ |
| | | public void setText(String text) { |
| | | this.text = text; |
| | | } |
| | | |
| | | /** |
| | | * æé 彿° |
| | | * @param value å¼ |
| | | * @param text æ¾ç¤ºææ¬ |
| | | */ |
| | | private DataBaseEnum(String value, String text){ |
| | | this.value = value; |
| | | this.text = text; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®åç§°è·å对åºçæä¸¾å¼ |
| | | * @param text åç§° |
| | | * @return æä¸¾å¼ |
| | | */ |
| | | public static String getValueByText(String text){ |
| | | for(DataBaseEnum wenum : DataBaseEnum.values()){ |
| | | if(wenum.getText().equalsIgnoreCase(text)){ |
| | | return wenum.getValue(); |
| | | } |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾å¼è·ååç§° |
| | | * @param value æä¸¾å¼ |
| | | * @return åç§° |
| | | */ |
| | | public static String getTextByValue(String value){ |
| | | for(DataBaseEnum wenum : DataBaseEnum.values()){ |
| | | if(wenum.getValue().equalsIgnoreCase(value)){ |
| | | return wenum.getText(); |
| | | } |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾å¼è·åæä¸¾å¯¹è±¡ |
| | | * @param value æä¸¾å¼ |
| | | * @return |
| | | */ |
| | | public static DataBaseEnum forValue(String value){ |
| | | for(DataBaseEnum wenum : DataBaseEnum.values()){ |
| | | if(wenum.getValue().equalsIgnoreCase(value)){ |
| | | return wenum; |
| | | } |
| | | } |
| | | return ORACLE; |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.enumpck; |
| | | |
| | | import com.vci.starter.web.annotation.VciEnum; |
| | | |
| | | /** |
| | | * å¯çº§ç®¡ç |
| | | * @author weidy |
| | | */ |
| | | @VciEnum(name="Enumsecretgrade",text = "æ°æ®å¯çº§",description = "é»è®¤ä¸ºéå¯ï¼å
é¨ï¼ç§å¯ï¼æºå¯ï¼æäºå使²¡æå
é¨ï¼åå¯ä»¥å¨é
ç½®æä»¶ä¸é
ç½®vciEnum.Enumsecretgrade.inner=false") |
| | | public enum DataSecretEnum implements BaseEnumInt{ |
| | | |
| | | /** |
| | | * éå¯ |
| | | */ |
| | | NONE(10,"éå¯"), |
| | | /** |
| | | * å
é¨ |
| | | */ |
| | | INNER(15,"å
é¨"), |
| | | /** |
| | | * ç§å¯ |
| | | */ |
| | | SECRET(20,"ç§å¯"), |
| | | /** |
| | | * æºå¯ |
| | | */ |
| | | PRIVACY(30,"æºå¯"); |
| | | |
| | | /** |
| | | * æä¸¾å¼ |
| | | */ |
| | | private int value; |
| | | |
| | | /** |
| | | * æä¸¾æ¾ç¤ºå¼ |
| | | */ |
| | | private String text; |
| | | |
| | | /** |
| | | * è·åæä¸¾å¼ |
| | | * @return æä¸¾å¼ |
| | | */ |
| | | public int getValue() { |
| | | return value; |
| | | } |
| | | |
| | | /** |
| | | * 设置æä¸¾å¼ |
| | | * @param value æä¸¾å¼ |
| | | */ |
| | | public void setValue(int value) { |
| | | this.value = value; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¾ç¤ºææ¬ |
| | | * @return æ¾ç¤ºææ¬ |
| | | */ |
| | | public String getText() { |
| | | return text; |
| | | } |
| | | |
| | | /** |
| | | * 设置æ¾ç¤ºææ¬ |
| | | * @param text æ¾ç¤ºææ¬ |
| | | */ |
| | | public void setText(String text) { |
| | | this.text = text; |
| | | } |
| | | |
| | | /** |
| | | * æä¸¾å
é¨æé æ¹æ³ |
| | | * @param secret æä¸¾å¼ |
| | | * @param secretText æ¾ç¤ºææ¬ |
| | | */ |
| | | private DataSecretEnum(int secret,String secretText){ |
| | | this.value = secret; |
| | | this.text = secretText; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾çå¼è·åæ¾ç¤ºææ¬ |
| | | * @param secret æä¸¾å¼ |
| | | * @return æ¾ç¤ºææ¬ |
| | | */ |
| | | public static String getSecretText(int secret){ |
| | | for(DataSecretEnum eu:DataSecretEnum.values()){ |
| | | if(eu.value == secret){ |
| | | return eu.text; |
| | | } |
| | | } |
| | | return NONE.text; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾æ¾ç¤ºææ¬è·åæä¸¾å¼ |
| | | * @param text æ¾ç¤ºææ¬ |
| | | * @return æä¸¾å¼ |
| | | */ |
| | | public static int getSecretValueByText(String text){ |
| | | for(DataSecretEnum eu:DataSecretEnum.values()){ |
| | | if(eu.text.equalsIgnoreCase(text)){ |
| | | return eu.value; |
| | | } |
| | | } |
| | | return NONE.value; |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦ææçå¯çº§å¼ |
| | | * @param secret å¯çº§å¼ |
| | | * @return 符åèå´è¦æ±åè¿åtrue |
| | | */ |
| | | public static boolean isValid(int secret){ |
| | | for(DataSecretEnum eu:DataSecretEnum.values()){ |
| | | if(eu.value == secret){ |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.enumpck; |
| | | |
| | | |
| | | import com.vci.starter.web.annotation.VciEnum; |
| | | |
| | | /** |
| | | * è¯è¨ç代ç 大å
¨æä¸¾ï¼ç®ååªæ¯æä¸æåè±è¯ |
| | | * @author weidy |
| | | * @date 2020/1/29 |
| | | */ |
| | | @VciEnum(name= "langCode",text = "è¯è¨ä»£ç ") |
| | | public enum LangCodeEnum implements BaseEnum { |
| | | /** |
| | | * è±è¯ |
| | | */ |
| | | EN_US("en_US","è±è¯"), |
| | | /** |
| | | * ç®ä½ä¸æ |
| | | */ |
| | | ZH_CN("zh_CN","ç®ä½ä¸æ"), |
| | | /** |
| | | * ç¹ä½ä¸æ |
| | | */ |
| | | ZH_TW("zh_TW","ç¹ä½ä¸æ"); |
| | | /** |
| | | * å¼ |
| | | */ |
| | | private String value; |
| | | |
| | | /** |
| | | * æ¾ç¤ºææ¬ |
| | | */ |
| | | private String text; |
| | | |
| | | @Override |
| | | public String getValue() { |
| | | return value; |
| | | } |
| | | |
| | | @Override |
| | | public String getText() { |
| | | return text; |
| | | } |
| | | |
| | | public void setValue(String value) { |
| | | this.value = value; |
| | | } |
| | | |
| | | public void setText(String text) { |
| | | this.text = text; |
| | | } |
| | | |
| | | private LangCodeEnum(String value,String text){ |
| | | this.value = value; |
| | | this.text = text; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®åç§°è·å对åºçæä¸¾å¼ |
| | | * @param text åç§° |
| | | * @return æä¸¾å¼ |
| | | */ |
| | | public static String getValueByText(String text){ |
| | | for(LangCodeEnum wenum : LangCodeEnum.values()){ |
| | | if(wenum.getText().equalsIgnoreCase(text)){ |
| | | return wenum.getValue(); |
| | | } |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾å¼è·ååç§° |
| | | * @param value æä¸¾å¼ |
| | | * @return åç§° |
| | | */ |
| | | public static String getTextByValue(String value){ |
| | | for(LangCodeEnum wenum : LangCodeEnum.values()){ |
| | | if(wenum.getValue().equalsIgnoreCase(value)){ |
| | | return wenum.getText(); |
| | | } |
| | | } |
| | | return ""; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.enumpck; |
| | | |
| | | /** |
| | | * æ¥çæ¥å¿çç级 |
| | | * @author weidy |
| | | * @date 2020/4/13 |
| | | */ |
| | | public enum LogLevelEnum { |
| | | /** |
| | | * 追溯 |
| | | */ |
| | | TRACE, |
| | | /** |
| | | * è°è¯ |
| | | */ |
| | | DEBUG, |
| | | /** |
| | | * ä¿¡æ¯ |
| | | */ |
| | | INFO, |
| | | /** |
| | | * è¦å |
| | | */ |
| | | WARN, |
| | | /** |
| | | * é误 |
| | | */ |
| | | ERROR, |
| | | /** |
| | | * è´å½ |
| | | */ |
| | | FATAL, |
| | | |
| | | /** |
| | | * å
³é |
| | | */ |
| | | OFF; |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.enumpck; |
| | | |
| | | /** |
| | | * è¿åçç¶æç ï¼åèhttpçç¶æç ï¼layuiçå端å¯ä»¥ç´æ¥è·å |
| | | * @author weidy |
| | | * @date 2019/12/3 6:52 PM |
| | | */ |
| | | public enum ResultCodeEnum { |
| | | |
| | | /** |
| | | * æå |
| | | */ |
| | | SUCCESS(200), |
| | | |
| | | /** |
| | | *失败 |
| | | */ |
| | | FAIL(400), |
| | | |
| | | /** |
| | | * æªè®¤è¯ï¼ç¾åé误ï¼,æè
没æç¨æ· |
| | | */ |
| | | UNAUTHORIZED(401), |
| | | |
| | | /** |
| | | * 没ææé |
| | | */ |
| | | NOT_RIGHT(402), |
| | | |
| | | /** |
| | | * é误çåæ°æ ¼å¼ |
| | | */ |
| | | BAD_PARAM(403), |
| | | |
| | | /** |
| | | * æ¥å£ä¸åå¨ |
| | | */ |
| | | NOT_FOUND(404), |
| | | |
| | | /** |
| | | * æå¡å¨å
é¨é误 |
| | | */ |
| | | INTERNAL_SERVER_ERROR(500); |
| | | |
| | | /** |
| | | * ç¶æç |
| | | */ |
| | | public int code; |
| | | |
| | | /** |
| | | * æä¸¾å
é¨æé æ¹æ³ |
| | | * @param code ç¶æå¼ |
| | | */ |
| | | private ResultCodeEnum(int code){ |
| | | this.code = code; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.enumpck; |
| | | |
| | | /** |
| | | * ä¼è¯ä¿¡æ¯åå¨çæ¹å¼ï¼å®é
ä¸åspring-sessionçç®¡çæ¹å¼æ¯ä¸æ ·çï¼ä½æ¯ä¸ºäºå
¼å®¹ä»¥åç项ç®ï¼åéå¤é äºè½®å |
| | | * @author weidy |
| | | * @date 2020/2/5 |
| | | */ |
| | | public enum SessionStorageTypeEnum implements BaseEnum { |
| | | /** |
| | | * redis管ç |
| | | */ |
| | | REDIS("redis","ç¼å"), |
| | | |
| | | /** |
| | | * æ°æ®åº |
| | | */ |
| | | DATABASE("database","æ°æ®åº"); |
| | | |
| | | /** |
| | | * å¼ |
| | | */ |
| | | private String value; |
| | | |
| | | /** |
| | | * æ¾ç¤ºææ¬ |
| | | */ |
| | | private String text; |
| | | |
| | | @Override |
| | | public String getValue() { |
| | | return value; |
| | | } |
| | | |
| | | @Override |
| | | public String getText() { |
| | | return text; |
| | | } |
| | | |
| | | public void setValue(String value) { |
| | | this.value = value; |
| | | } |
| | | |
| | | public void setText(String text) { |
| | | this.text = text; |
| | | } |
| | | |
| | | private SessionStorageTypeEnum(String value,String text){ |
| | | this.value = value; |
| | | this.text = text; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®åç§°è·å对åºçæä¸¾å¼ |
| | | * @param text åç§° |
| | | * @return æä¸¾å¼ |
| | | */ |
| | | public static String getValueByText(String text){ |
| | | for(SessionStorageTypeEnum wenum : SessionStorageTypeEnum.values()){ |
| | | if(wenum.getText().equalsIgnoreCase(text)){ |
| | | return wenum.getValue(); |
| | | } |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾å¼è·ååç§° |
| | | * @param value æä¸¾å¼ |
| | | * @return åç§° |
| | | */ |
| | | public static String getTextByValue(String value){ |
| | | for(SessionStorageTypeEnum wenum : SessionStorageTypeEnum.values()){ |
| | | if(wenum.getValue().equalsIgnoreCase(value)){ |
| | | return wenum.getText(); |
| | | } |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * å¼è½¬æ¢ä¸ºæä¸¾å¯¹è±¡ |
| | | * @param value å¼ |
| | | * @return 妿ä¸ç¬¦åè¦æ±è¿åNull |
| | | */ |
| | | public static SessionStorageTypeEnum forValue(String value){ |
| | | for(SessionStorageTypeEnum wenum : SessionStorageTypeEnum.values()){ |
| | | if(wenum.getValue().equalsIgnoreCase(value)){ |
| | | return wenum; |
| | | } |
| | | } |
| | | return SessionStorageTypeEnum.REDIS; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.enumpck; |
| | | |
| | | import com.vci.starter.web.annotation.VciEnum; |
| | | |
| | | /** |
| | | * ç¨æ·å¯çº§ |
| | | * @author weidy |
| | | * @date 2019-07-14 |
| | | */ |
| | | @VciEnum(name = "usersecurityenum",text = "人åå¯çº§",description = "ç¨æ·ï¼äººåçå¯çº§") |
| | | public enum UserSecretEnum implements BaseEnumInt{ |
| | | |
| | | /** |
| | | * å
é¨ |
| | | */ |
| | | NONE(10,"å
é¨"), |
| | | /** |
| | | * ä¸è¬ |
| | | */ |
| | | SECRET(20,"ä¸è¬"), |
| | | /** |
| | | * éè¦ |
| | | */ |
| | | PRIVACY(30,"éè¦"); |
| | | |
| | | /** |
| | | * æä¸¾å¼ |
| | | */ |
| | | private int value; |
| | | |
| | | /** |
| | | * æä¸¾æ¾ç¤ºå¼ |
| | | */ |
| | | private String text; |
| | | /** |
| | | * è·åæä¸¾å¼ |
| | | * @return æä¸¾å¼ |
| | | */ |
| | | public int getValue() { |
| | | return value; |
| | | } |
| | | |
| | | /** |
| | | * 设置æä¸¾å¼ |
| | | * @param value æä¸¾å¼ |
| | | */ |
| | | public void setValue(int value) { |
| | | this.value = value; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¾ç¤ºææ¬ |
| | | * @return æ¾ç¤ºææ¬ |
| | | */ |
| | | public String getText() { |
| | | return text; |
| | | } |
| | | |
| | | /** |
| | | * 设置æ¾ç¤ºææ¬ |
| | | * @param text æ¾ç¤ºææ¬ |
| | | */ |
| | | public void setText(String text) { |
| | | this.text = text; |
| | | } |
| | | |
| | | /** |
| | | * æä¸¾å
é¨æé æ¹æ³ |
| | | * @param secret æä¸¾å¼ |
| | | * @param secretText æ¾ç¤ºææ¬ |
| | | */ |
| | | private UserSecretEnum(int secret, String secretText){ |
| | | this.value = secret; |
| | | this.text = secretText; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾çå¼è·åæ¾ç¤ºææ¬ |
| | | * @param secret æä¸¾å¼ |
| | | * @return æ¾ç¤ºææ¬ |
| | | */ |
| | | public static String getSecretText(int secret){ |
| | | for(UserSecretEnum eu:UserSecretEnum.values()){ |
| | | if(eu.value == secret){ |
| | | return eu.text; |
| | | } |
| | | } |
| | | return NONE.text; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * æ¯å¦ææçå¯çº§å¼ |
| | | * @param secret å¯çº§å¼ |
| | | * @return 符åèå´è¦æ±åè¿åtrue |
| | | */ |
| | | public static boolean isValid(int secret){ |
| | | for(UserSecretEnum eu:UserSecretEnum.values()){ |
| | | if(eu.value == secret){ |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾æ¾ç¤ºææ¬è·åæä¸¾å¼ |
| | | * @param text æ¾ç¤ºææ¬ |
| | | * @return æä¸¾å¼ |
| | | */ |
| | | public static int getSecretValueByText(String text){ |
| | | for(UserSecretEnum eu:UserSecretEnum.values()){ |
| | | if(eu.text.equalsIgnoreCase(text)){ |
| | | return eu.value; |
| | | } |
| | | } |
| | | return NONE.value; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.enumpck; |
| | | |
| | | |
| | | /** |
| | | * æ°æ®ä¿®æ¹ç±»å |
| | | * @author weidy |
| | | * @date 2019/10/10 4:23 PM |
| | | */ |
| | | public enum VciChangeDocumentTypeEnum { |
| | | /** |
| | | * æ·»å |
| | | */ |
| | | ADD, |
| | | /** |
| | | * ä¿®æ¹ |
| | | */ |
| | | EDIT, |
| | | /** |
| | | * å é¤ |
| | | */ |
| | | DELETE, |
| | | |
| | | /** |
| | | * çå½å¨æåå |
| | | */ |
| | | LCSTATUS, |
| | | |
| | | /** |
| | | * åç |
| | | */ |
| | | UPREVISION, |
| | | |
| | | /** |
| | | * æäº¤æµç¨ |
| | | */ |
| | | SUBMIT, |
| | | |
| | | /** |
| | | * åå¸ |
| | | */ |
| | | RELEASED, |
| | | /** |
| | | * å
¨é¨ |
| | | */ |
| | | ALL; |
| | | |
| | | /** |
| | | * æ ¹æ®åç§°è·å对åºçæä¸¾å¼ |
| | | * @param text åç§° |
| | | * @return æä¸¾å¼ |
| | | */ |
| | | public static String getValueByText(String text){ |
| | | if(text == null || text.trim().length() == 0){ |
| | | return ""; |
| | | }else{ |
| | | if("å é¤".equalsIgnoreCase(text)){ |
| | | return DELETE.name(); |
| | | }else if("ä¿®æ¹".equalsIgnoreCase(text)){ |
| | | return EDIT.name(); |
| | | }else if("çå½å¨æåæ´".equalsIgnoreCase(text)){ |
| | | return LCSTATUS.name(); |
| | | }else if("åç".equalsIgnoreCase(text)){ |
| | | return UPREVISION.name(); |
| | | }else if("æäº¤æµç¨".equalsIgnoreCase(text)){ |
| | | return SUBMIT.name(); |
| | | }else if("åå¸".equalsIgnoreCase(text)){ |
| | | return RELEASED.name(); |
| | | }else if("å
¨é¨".equalsIgnoreCase(text)){ |
| | | return ALL.name(); |
| | | }else{ |
| | | return ADD.name(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾å¼è·ååç§° |
| | | * @param value æä¸¾å¼ |
| | | * @return åç§° |
| | | */ |
| | | public static String getTextByValue(String value){ |
| | | VciChangeDocumentTypeEnum wenum = forValue(value); |
| | | if(wenum == null){ |
| | | return ""; |
| | | } |
| | | switch (wenum){ |
| | | case DELETE: |
| | | return "å é¤"; |
| | | case EDIT: |
| | | return "ä¿®æ¹"; |
| | | case LCSTATUS: |
| | | return "çå½å¨æåæ´"; |
| | | case UPREVISION: |
| | | return "åç"; |
| | | case SUBMIT: |
| | | return "æäº¤æµç¨"; |
| | | case RELEASED: |
| | | return "åå¸"; |
| | | case ALL: |
| | | return "å
¨é¨"; |
| | | default: |
| | | return "æ·»å "; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾å¼è·åæä¸¾å¯¹è±¡ |
| | | * @param value æä¸¾å¼ |
| | | * @return 对åºçæä¸¾å¯¹è±¡ï¼ä¸å¹é
çæ¶åè¿ånull |
| | | */ |
| | | public static VciChangeDocumentTypeEnum forValue(String value){ |
| | | for(VciChangeDocumentTypeEnum wenum : VciChangeDocumentTypeEnum.values()){ |
| | | if(wenum.name().equalsIgnoreCase(value)){ |
| | | return wenum; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.enumpck; |
| | | |
| | | import com.vci.starter.web.annotation.VciEnum; |
| | | |
| | | /** |
| | | * 屿§çç±»å |
| | | * @author weidy |
| | | * @date 2019/10/10 4:23 PM |
| | | */ |
| | | @VciEnum(name = "VciFieldType",text = "屿§ç±»å") |
| | | public enum VciFieldTypeEnum { |
| | | /** |
| | | * å符串 |
| | | */ |
| | | VTString, |
| | | /** |
| | | * æ´å½¢ |
| | | */ |
| | | VTInteger, |
| | | /** |
| | | * é¿æ´å½¢ |
| | | */ |
| | | VTLong, |
| | | /** |
| | | * éé¢/å精度 |
| | | */ |
| | | VTDouble, |
| | | /** |
| | | * å¸å°å |
| | | */ |
| | | VTBoolean, |
| | | /** |
| | | * æ¥æ |
| | | */ |
| | | VTDate, |
| | | /** |
| | | * æ¥ææ¶é´ |
| | | */ |
| | | VTDateTime, |
| | | /** |
| | | * æ¶é´ |
| | | */ |
| | | VTTime, |
| | | /** |
| | | * æä»¶ |
| | | */ |
| | | VTFilePath, |
| | | /** |
| | | * è¶
é¿ææ¬ |
| | | */ |
| | | VTClob; |
| | | |
| | | /** |
| | | * æ ¹æ®åç§°è·å对åºçæä¸¾å¼ |
| | | * @param text åç§° |
| | | * @return æä¸¾å¼ |
| | | */ |
| | | public static String getValueByText(String text){ |
| | | if(text == null || text.trim().length() == 0){ |
| | | return ""; |
| | | }else{ |
| | | if("å¸å°å".equalsIgnoreCase(text)){ |
| | | return VTBoolean.name(); |
| | | }else if("é¿ææ¬".equalsIgnoreCase(text)){ |
| | | return VTClob.name(); |
| | | }else if("æ¥æ".equalsIgnoreCase(text)){ |
| | | return VTDate.name(); |
| | | }else if("æ¥ææ¶é´".equalsIgnoreCase(text)){ |
| | | return VTDateTime.name(); |
| | | }else if("æ¶é´".equalsIgnoreCase(text)){ |
| | | return VTTime.name(); |
| | | }else if("é¿æ´å".equalsIgnoreCase(text)){ |
| | | return VTLong.name(); |
| | | }else if("éé¢/å精度".equalsIgnoreCase(text)){ |
| | | return VTDouble.name(); |
| | | }else if("æ´å½¢".equalsIgnoreCase(text)){ |
| | | return VTInteger.name(); |
| | | }else if("æä»¶".equalsIgnoreCase(text)){ |
| | | return VTFilePath.name(); |
| | | }else{ |
| | | return VTString.name(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾å¼è·ååç§° |
| | | * @param value æä¸¾å¼ |
| | | * @return åç§° |
| | | */ |
| | | public static String getTextByValue(String value){ |
| | | VciFieldTypeEnum wenum = forValue(value); |
| | | if(wenum == null){ |
| | | return ""; |
| | | } |
| | | switch (wenum){ |
| | | case VTBoolean: |
| | | return "å¸å°å"; |
| | | case VTClob: |
| | | return "é¿ææ¬"; |
| | | case VTDate: |
| | | return "æ¥æ"; |
| | | case VTDateTime: |
| | | return "æ¥ææ¶é´"; |
| | | case VTTime: |
| | | return "æ¶é´"; |
| | | case VTLong: |
| | | return "é¿æ´å"; |
| | | case VTDouble: |
| | | return "éé¢/å精度"; |
| | | case VTInteger: |
| | | return "æ´å½¢"; |
| | | case VTFilePath: |
| | | return "æä»¶"; |
| | | default: |
| | | return "å符串"; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾å¼è·åæä¸¾å¯¹è±¡ |
| | | * @param value æä¸¾å¼ |
| | | * @return 对åºçæä¸¾å¯¹è±¡ï¼ä¸å¹é
çæ¶åè¿ånull |
| | | */ |
| | | public static VciFieldTypeEnum forValue(String value){ |
| | | for(VciFieldTypeEnum wenum : VciFieldTypeEnum.values()){ |
| | | if(wenum.name().equalsIgnoreCase(value)){ |
| | | return wenum; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.enumpck; |
| | | |
| | | /** |
| | | * controllerä¸è¿åæä»¶çç±»åï¼ä¸è¬é½æ¯å¨ä¸è½½æä»¶åºéçæ¶åä½¿ç¨ |
| | | * @author weidy |
| | | * @date 2020/2/19 |
| | | */ |
| | | public enum VciReturnFileTypeEnum implements BaseEnum { |
| | | /** |
| | | * ææ¬ææ¡£ |
| | | */ |
| | | TXT("txt","ææ¬æä»¶"), |
| | | /** |
| | | * PDFæä»¶ |
| | | */ |
| | | PDF("pdf","PDFæä»¶"), |
| | | /** |
| | | * å¾ç |
| | | */ |
| | | IMAGE("image","å¾ç"); |
| | | |
| | | /** |
| | | * æä¸¾çå¼ |
| | | */ |
| | | private String value; |
| | | |
| | | /** |
| | | * æä¸¾çæ¾ç¤ºææ¬ |
| | | */ |
| | | private String text; |
| | | |
| | | /** |
| | | * å
鍿é 彿° |
| | | * @param value æä¸¾çå¼ |
| | | */ |
| | | private VciReturnFileTypeEnum(String value,String text){ |
| | | this.value = value; |
| | | this.text = text; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®åç§°è·å对åºçæä¸¾å¼ |
| | | * @param text åç§° |
| | | * @return æä¸¾å¼ |
| | | */ |
| | | public static String getValueByText(String text){ |
| | | for(VciReturnFileTypeEnum wenum : VciReturnFileTypeEnum.values()){ |
| | | if(wenum.getText().equalsIgnoreCase(text)){ |
| | | return wenum.getValue(); |
| | | } |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾å¼è·ååç§° |
| | | * @param value æä¸¾å¼ |
| | | * @return åç§° |
| | | */ |
| | | public static String getTextByValue(String value){ |
| | | for(VciReturnFileTypeEnum wenum : VciReturnFileTypeEnum.values()){ |
| | | if(wenum.getValue().equalsIgnoreCase(value)){ |
| | | return wenum.getText(); |
| | | } |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾å¼è·åæä¸¾å¯¹è±¡ |
| | | * @param value æä¸¾å¼ |
| | | * @return |
| | | */ |
| | | public static VciReturnFileTypeEnum forValue(String value){ |
| | | for(VciReturnFileTypeEnum wenum : VciReturnFileTypeEnum.values()){ |
| | | if(wenum.getValue().equalsIgnoreCase(value)){ |
| | | return wenum; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public String getValue() { |
| | | return value; |
| | | } |
| | | |
| | | public void setValue(String value) { |
| | | this.value = value; |
| | | } |
| | | |
| | | @Override |
| | | public String getText() { |
| | | return text; |
| | | } |
| | | |
| | | public void setText(String text) { |
| | | this.text = text; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.enumpck; |
| | | |
| | | |
| | | /** |
| | | * ä»»å¡è°æ´ç±»å |
| | | * @author weidy |
| | | * @date 2019/10/10 4:23 PM |
| | | */ |
| | | public enum VciTaskBusTypeEnum { |
| | | /** |
| | | * æ·»å |
| | | */ |
| | | ADD, |
| | | /** |
| | | * ä¿®æ¹ |
| | | */ |
| | | EDIT, |
| | | /** |
| | | * å é¤ |
| | | */ |
| | | DELETE, |
| | | /** |
| | | * å»ç» |
| | | */ |
| | | FREEZE, |
| | | /** |
| | | * æ¢å¤ |
| | | */ |
| | | RECOVER, |
| | | /** |
| | | * 宿 |
| | | */ |
| | | FINISH, |
| | | /** |
| | | * åè§£ |
| | | */ |
| | | RESOLVE, |
| | | /** |
| | | * å
¨é¨ |
| | | */ |
| | | ALL; |
| | | |
| | | /** |
| | | * æ ¹æ®åç§°è·å对åºçæä¸¾å¼ |
| | | * @param text åç§° |
| | | * @return æä¸¾å¼ |
| | | */ |
| | | public static String getValueByText(String text){ |
| | | if(text == null || text.trim().length() == 0){ |
| | | return ""; |
| | | }else{ |
| | | if("å é¤".equalsIgnoreCase(text)){ |
| | | return DELETE.name(); |
| | | }else if("ä¿®æ¹".equalsIgnoreCase(text)){ |
| | | return EDIT.name(); |
| | | }else if("å»ç»".equalsIgnoreCase(text)){ |
| | | return FREEZE.name(); |
| | | }else if("æ¢å¤".equalsIgnoreCase(text)){ |
| | | return RECOVER.name(); |
| | | }else if("宿".equalsIgnoreCase(text)){ |
| | | return FINISH.name(); |
| | | }else if("åè§£".equalsIgnoreCase(text)){ |
| | | return RESOLVE.name(); |
| | | }else if("å
¨é¨".equalsIgnoreCase(text)){ |
| | | return ALL.name(); |
| | | }else{ |
| | | return ADD.name(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾å¼è·ååç§° |
| | | * @param value æä¸¾å¼ |
| | | * @return åç§° |
| | | */ |
| | | public static String getTextByValue(String value){ |
| | | VciTaskBusTypeEnum wenum = forValue(value); |
| | | if(wenum == null){ |
| | | return ""; |
| | | } |
| | | switch (wenum){ |
| | | case DELETE: |
| | | return "å é¤"; |
| | | case EDIT: |
| | | return "ä¿®æ¹"; |
| | | case FREEZE: |
| | | return "å»ç»"; |
| | | case RECOVER: |
| | | return "æ¢å¤"; |
| | | case FINISH: |
| | | return "宿"; |
| | | case RESOLVE: |
| | | return "åè§£"; |
| | | case ALL: |
| | | return "å
¨é¨"; |
| | | default: |
| | | return "æ·»å "; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æä¸¾å¼è·åæä¸¾å¯¹è±¡ |
| | | * @param value æä¸¾å¼ |
| | | * @return 对åºçæä¸¾å¯¹è±¡ï¼ä¸å¹é
çæ¶åè¿ånull |
| | | */ |
| | | public static VciTaskBusTypeEnum forValue(String value){ |
| | | for(VciTaskBusTypeEnum wenum : VciTaskBusTypeEnum.values()){ |
| | | if(wenum.name().equalsIgnoreCase(value)){ |
| | | return wenum; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.exception; |
| | | |
| | | import com.vci.starter.web.constant.TokenKeyConstant; |
| | | import com.vci.starter.web.enumpck.ResultCodeEnum; |
| | | import com.vci.starter.web.pagemodel.BaseResult; |
| | | import com.vci.starter.web.util.LangBaseUtil; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.slf4j.MDC; |
| | | import org.springframework.beans.TypeMismatchException; |
| | | import org.springframework.http.converter.HttpMessageNotReadableException; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.validation.BindException; |
| | | import org.springframework.validation.FieldError; |
| | | import org.springframework.validation.ObjectError; |
| | | import org.springframework.web.HttpRequestMethodNotSupportedException; |
| | | import org.springframework.web.bind.MethodArgumentNotValidException; |
| | | import org.springframework.web.bind.annotation.ControllerAdvice; |
| | | import org.springframework.web.bind.annotation.ExceptionHandler; |
| | | import org.springframework.web.bind.annotation.ResponseBody; |
| | | import org.springframework.web.multipart.MultipartException; |
| | | |
| | | import javax.servlet.ServletException; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * æä¾ç»spring mvcçç»ä¸çé误å¤ç |
| | | * @author weidy |
| | | */ |
| | | @ControllerAdvice |
| | | public class ExceptionAdviceHandler { |
| | | |
| | | /** |
| | | * æ¥å¿å¯¹è±¡ |
| | | */ |
| | | private Logger logger = LoggerFactory.getLogger(getClass()); |
| | | |
| | | /** |
| | | * 彿åå°Throwableå¼å¸¸çæ¶åï¼è¿åéè¯¯ä¿¡æ¯ |
| | | * @param e å¼å¸¸å¯¹è±¡ |
| | | * @return JSON对象ï¼ä¸è®ºæ¯æ ï¼å表ï¼è¿æ¯postçæ¹æ³ï¼å端é½å¯ä»¥è·åsuccess,codeåmsg屿§ |
| | | */ |
| | | @ResponseBody |
| | | @ExceptionHandler(value = Throwable.class) |
| | | public BaseResult defaultErrorHandler(Exception e){ |
| | | BaseResult baseResult = this.handler(e); |
| | | String traceId = MDC.get(TokenKeyConstant.TRACE_ID); |
| | | baseResult.setTraceId(traceId); |
| | | baseResult.setFinishTime(System.currentTimeMillis()); |
| | | if(logger.isErrorEnabled()) { |
| | | logger.error(baseResult.toString(), e); |
| | | } |
| | | return baseResult; |
| | | } |
| | | |
| | | /** |
| | | * ä»å¼å¸¸ä¸è·åä¿¡æ¯å¹¶è¿å |
| | | * @param e å¼å¸¸å¯¹è±¡ |
| | | * @return JSON对象 |
| | | */ |
| | | private BaseResult handler(Exception e) { |
| | | //䏿¯æçhttpæ¹æ³ |
| | | if(e instanceof VciBaseException){ |
| | | BaseResult baseResult = BaseResult.error(LangBaseUtil.getErrorMsg(e)); |
| | | baseResult.setExceptionClassName(e.getClass().getName()); |
| | | return baseResult; |
| | | } else if (e instanceof HttpRequestMethodNotSupportedException) { |
| | | return this.httpRequestMethodNotSupportedException(e); |
| | | } else if (e instanceof HttpMessageNotReadableException) { |
| | | return this.httpMessageNotReadableException(e); |
| | | } else if (e instanceof TypeMismatchException || e instanceof MultipartException ||e instanceof ServletException) { |
| | | return this.parameterException(e); |
| | | } else if (e instanceof MethodArgumentNotValidException) { |
| | | return this.methodArgumentNotValidException(e); |
| | | } else if (e.getClass().getName().equalsIgnoreCase("org.springframework.jdbc.BadSqlGrammarException")) { |
| | | return this.badSqlGrammarException(e); |
| | | } else if(e instanceof BindException){ |
| | | return this.bindException((BindException) e); |
| | | }else { |
| | | //å
¶ä»ç |
| | | return BaseResult.error(LangBaseUtil.getErrorMsg(e)); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 䏿¯æçhttpæ¹æ³ |
| | | * @param e å¼å¸¸ç对象 |
| | | * @return JSON对象 |
| | | */ |
| | | private BaseResult httpRequestMethodNotSupportedException(Exception e){ |
| | | String message = "请å¼åäººåæ£æ¥ï¼ä¸æ¯æçhttpæ¹æ³"; |
| | | BaseResult baseResult = BaseResult.error(message); |
| | | baseResult.setExceptionClassName(e.getClass().getName()); |
| | | return baseResult; |
| | | } |
| | | |
| | | /** |
| | | * åæ°ä¸è½è¢«è¯»å |
| | | * @param e å¼å¸¸å¯¹è±¡ |
| | | * @return json对象 |
| | | */ |
| | | private BaseResult httpMessageNotReadableException(Exception e){ |
| | | String message = "请å¼åäººåæ£æ¥ä½ 请æ±çåæ°ååæ°çç±»åæ¯å¦ç¬¦ååå°æ¥å£çè¦æ±"; |
| | | BaseResult baseResult = BaseResult.makeResult(ResultCodeEnum.BAD_PARAM.code,message,null); |
| | | baseResult.setExceptionClassName(e.getClass().getName()); |
| | | return baseResult; |
| | | } |
| | | |
| | | /** |
| | | * åæ°çç±»åå¼å¸¸ |
| | | * @param e å¼å¸¸å¯¹è±¡ |
| | | * @return json对象 |
| | | */ |
| | | private BaseResult parameterException(Exception e){ |
| | | String message = "请å¼åäººåæ£æ¥ä½ åæ°çç±»å"; |
| | | BaseResult baseResult = BaseResult.makeResult(ResultCodeEnum.BAD_PARAM.code,message,null); |
| | | baseResult.setExceptionClassName(e.getClass().getName()); |
| | | return baseResult; |
| | | } |
| | | |
| | | /** |
| | | * æ¹æ³çåæ°æ æ |
| | | * @param e å¼å¸¸ç¶æ |
| | | * @return json对象 |
| | | */ |
| | | private BaseResult methodArgumentNotValidException(Exception e){ |
| | | StringBuffer buffer = new StringBuffer(); |
| | | List<ObjectError> list = ((MethodArgumentNotValidException) e).getBindingResult().getAllErrors(); |
| | | list.forEach(error -> { |
| | | if (error instanceof FieldError) { |
| | | buffer.append(((FieldError) error).getField()).append(":"); |
| | | } |
| | | buffer.append(error.getDefaultMessage()).append(","); |
| | | }); |
| | | buffer.append("请å¼åäººåæ£æ¥è¯·æ±æ¹æ³çåæ°"); |
| | | BaseResult baseResult = BaseResult.makeResult(ResultCodeEnum.BAD_PARAM.code,buffer.toString(),null); |
| | | baseResult.setExceptionClassName(e.getClass().getName()); |
| | | return baseResult; |
| | | } |
| | | |
| | | /** |
| | | * ç»å®åæ°é误 |
| | | * @param e å¼å¸¸ç¶æ |
| | | * @return json对象 |
| | | */ |
| | | private BaseResult bindException(BindException e){ |
| | | String message = "请å¼åäººåæ£æ¥åæ°ï¼åæ°ç»å®åºç°äºé误"; |
| | | List<ObjectError> objectErrorList = e.getBindingResult().getAllErrors(); |
| | | if(!CollectionUtils.isEmpty(objectErrorList)){ |
| | | ObjectError objectError = objectErrorList.get(0); |
| | | if(objectError instanceof FieldError){ |
| | | FieldError fieldError = (FieldError) objectError; |
| | | message = "[" + fieldError.getField() + "]" + fieldError.getDefaultMessage(); |
| | | } |
| | | } |
| | | BaseResult baseResult = BaseResult.makeResult(ResultCodeEnum.BAD_PARAM.code,message,null); |
| | | baseResult.setExceptionClassName(e.getClass().getName()); |
| | | return baseResult; |
| | | } |
| | | |
| | | /** |
| | | * SQLè¯å¥é误 |
| | | * @param e å¼å¸¸å¯¹è±¡ |
| | | * @return json对象 |
| | | */ |
| | | private BaseResult badSqlGrammarException(Exception e){ |
| | | String message = "请å¼åäººåæ£æ¥åæ°æè
åå°sqlè¯å¥," + LangBaseUtil.getErrorMsg(e); |
| | | BaseResult baseResult = BaseResult.error(message); |
| | | baseResult.setExceptionClassName(e.getClass().getName()); |
| | | return baseResult; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.exception; |
| | | |
| | | import com.vci.starter.web.util.MessageUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import java.text.MessageFormat; |
| | | import java.util.Locale; |
| | | import java.util.ResourceBundle; |
| | | |
| | | /** |
| | | * åºæ¬çå¼å¸¸ï¼ç»§æ¿èªRuntimeExceptionå¯ä»¥è¢«springçäºå¡ç®¡çèªå¨å¤ç |
| | | */ |
| | | public class VciBaseException extends RuntimeException { |
| | | |
| | | /** |
| | | * æ¥å¿å¯¹è±¡ |
| | | */ |
| | | private Logger log = LoggerFactory.getLogger(getClass()); |
| | | |
| | | /** |
| | | * åæ°ä¸ºç©º |
| | | */ |
| | | public static final String paramNull = "com.vci.base.paramNull"; |
| | | |
| | | /** |
| | | * åæ®µçå¼éå¤ |
| | | */ |
| | | public static final String fieldValueRepeat="com.vci.base.fieldValueRepeat"; |
| | | |
| | | /** |
| | | * 对象没æå¨ç³»ç»ä¸åå¨ |
| | | */ |
| | | public static final String objectNotFoundInDb="com.vci.base.objectNotFoundInDb"; |
| | | |
| | | /** |
| | | * tsçå¼ä¸åå¨ |
| | | */ |
| | | public static final String tsNotEqual="com.vci.base.tsNotEqual"; |
| | | |
| | | /** |
| | | * å¼ä¸ç¬¦åæ¥ææ ¼å¼çè¦æ± |
| | | */ |
| | | public static final String dateValueFormatError="com.vci.base.dateValueForamtError"; |
| | | |
| | | /** |
| | | * 没æç»å½ |
| | | */ |
| | | public static final String notLogin="com.vci.base.notLogin"; |
| | | |
| | | /** |
| | | * 没ææé |
| | | */ |
| | | public static final String notRight="com.vci.base.notRight"; |
| | | |
| | | /** |
| | | * æ²¡ææ°æ®æé |
| | | */ |
| | | public static final String notDataRight="com.vci.base.notDataRight"; |
| | | |
| | | /** |
| | | * 没æUIæé |
| | | */ |
| | | public static final String notUIRight="com.vci.base.notUIRight"; |
| | | |
| | | /** |
| | | * è¿æ¥corbaæå¡å¤±è´¥ |
| | | */ |
| | | public static final String connectCorbaFail="com.vci.base.connectCorbaFail"; |
| | | |
| | | /** |
| | | * corbaæå¡æ²¡æé
ç½® |
| | | */ |
| | | public static final String corbaNotConfig="com.vci.base.corbaNotConfig "; |
| | | |
| | | /** |
| | | * é误ç¼ç |
| | | */ |
| | | private String code ; |
| | | |
| | | /** |
| | | * é误对象 |
| | | */ |
| | | private Object[] objs = new Object[0]; |
| | | |
| | | |
| | | /** |
| | | * æé æ¹æ³ |
| | | * @param code ç¼ç |
| | | */ |
| | | public VciBaseException(String code){ |
| | | this.code = code; |
| | | } |
| | | |
| | | /** |
| | | * æé æ¹æ³ |
| | | * @param code ç¼ç |
| | | * @param objs é误对象 |
| | | */ |
| | | public VciBaseException(String code, Object[] objs){ |
| | | this.code= code; |
| | | this.objs = objs; |
| | | } |
| | | |
| | | /** |
| | | * æé æ¹æ³ |
| | | * @param code é误ç¼ç |
| | | * @param objs é误信æ¯å¯¹è±¡ |
| | | * @param e å¼å¸¸å¯¹è±¡ |
| | | */ |
| | | public VciBaseException(String code,Object[] objs,Throwable e){ |
| | | super(e); |
| | | this.code= code; |
| | | this.objs = objs; |
| | | } |
| | | |
| | | public String getCode() { |
| | | return code; |
| | | } |
| | | |
| | | public void setCode(String code) { |
| | | this.code = code; |
| | | } |
| | | |
| | | public Object[] getObjs() { |
| | | return objs; |
| | | } |
| | | |
| | | public void setObjs(Object[] objs) { |
| | | this.objs = objs; |
| | | } |
| | | |
| | | /** |
| | | * å°å¼å¸¸çä¿¡æ¯è½¬æ¢ä¸ºæ¬å°åè¯è¨ |
| | | * @return 转æ¢åçæ¬å°åä¿¡æ¯ |
| | | */ |
| | | public String getErrorMsg(){ |
| | | if( this instanceof VciBaseException || this.getClass().getSuperclass().equals(VciBaseException.class)){ |
| | | if(StringUtils.isNotBlank(code)){ |
| | | code = MessageUtils.get(code,this.objs); |
| | | } |
| | | code = MessageFormat.format(code,this.objs); |
| | | return code; |
| | | }else if( this instanceof Exception){ |
| | | return getMessage(); |
| | | }else{ |
| | | return code; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·åéè¯¯ä¿¡æ¯ |
| | | * @return éè¯¯ä¿¡æ¯ |
| | | */ |
| | | @Override |
| | | public String getMessage(){ |
| | | return getCode() +"," + getErrorMsg(); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.interceptor; |
| | | |
| | | import com.vci.starter.web.constant.TokenKeyConstant; |
| | | import com.vci.starter.web.enumpck.LangCodeEnum; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.lang.Nullable; |
| | | import org.springframework.web.servlet.HandlerInterceptor; |
| | | import org.springframework.web.servlet.LocaleResolver; |
| | | import org.springframework.web.servlet.support.RequestContextUtils; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.Locale; |
| | | |
| | | /** |
| | | * æ¬å°åæ§å¶æ¦æªå¨ |
| | | * @author weidy |
| | | * @date 2019/11/7 12:22 PM |
| | | */ |
| | | public class VciLocaleInterceptor implements HandlerInterceptor { |
| | | |
| | | /** |
| | | * æ¥å¿å¯¹è±¡ |
| | | */ |
| | | protected final Logger logger = LoggerFactory.getLogger(getClass()); |
| | | |
| | | /** |
| | | * æ§è¡æ¦æª |
| | | * @param request 请æ±å¯¹è±¡ |
| | | * @param response ç¸åºå¯¹è±¡ |
| | | * @param handler å¤çå¨ |
| | | * @return æ¯å¦æå,false表示失败ï¼å
¶ä»çæ¦æªå¨å°ä¸ä¼æ§è¡ |
| | | * @throws Exception æ§è¡åºéæ¶ä¼æåºå¼å¸¸ |
| | | */ |
| | | @Override |
| | | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) |
| | | throws Exception { |
| | | //ä»åæ°æè
头éè·å |
| | | String newLocale = request.getParameter(TokenKeyConstant.LANGUAGE_KEY); |
| | | if(StringUtils.isBlank(newLocale)){ |
| | | newLocale = request.getHeader(TokenKeyConstant.LANGUAGE_KEY); |
| | | if(logger.isDebugEnabled() && StringUtils.isNotBlank(newLocale)) { |
| | | logger.debug("æ¬å°å忰卿°æ®å¤´ä¸åæ¾ï¼å½åæ¯è¢«è°ç¨çæå¡ã{}", newLocale); |
| | | } |
| | | // if(StringUtils.isBlank(newLocale)){ |
| | | // newLocale = LangCodeEnum.ZH_CN.getValue(); |
| | | // } |
| | | } |
| | | //å¦ææ²¡æä¼ éå°±ä¸è®¾ç½®ï¼å 为å¤è¯è¨æé»è®¤å¼ |
| | | if (StringUtils.isNotBlank(newLocale)) { |
| | | LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request); |
| | | if (localeResolver == null) { |
| | | throw new IllegalStateException( |
| | | "No LocaleResolver found: not in a DispatcherServlet request?"); |
| | | } |
| | | try { |
| | | localeResolver.setLocale(request, response, parseLocaleValue(newLocale)); |
| | | if(logger.isDebugEnabled()) { |
| | | logger.debug("æ¬å°å为{}", newLocale); |
| | | } |
| | | }catch (IllegalArgumentException ex) { |
| | | if(logger.isDebugEnabled()) { |
| | | logger.debug("Ignoring invalid locale value [{}]:{} " ,newLocale,ex.getMessage()); |
| | | } |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®è¯è¨çç¼ç è·åæ¬å°å对象 |
| | | * @param localeValue æ¬å°åç¼ç |
| | | * @return æ¬å°å对象 |
| | | */ |
| | | @Nullable |
| | | protected Locale parseLocaleValue(String localeValue) { |
| | | return org.springframework.util.StringUtils.parseLocale(localeValue); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.interceptor; |
| | | |
| | | import com.vci.starter.web.constant.TokenKeyConstant; |
| | | import com.vci.starter.web.util.VciBaseUtil; |
| | | import com.vci.starter.web.util.WebThreadLocalUtil; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.slf4j.MDC; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.lang.Nullable; |
| | | import org.springframework.web.servlet.HandlerInterceptor; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | |
| | | /** |
| | | * æ¥å¿çé¾è·¯æ¦æªå¨ï¼æåçæ¦æªå¨ |
| | | * @author weidy |
| | | * @date 2019/11/7 2:52 PM |
| | | */ |
| | | public class VciLogAfterInterceptor implements HandlerInterceptor { |
| | | |
| | | /** |
| | | * æ¥å¿åå¨çæ¥å£ |
| | | */ |
| | | @Autowired(required = false) |
| | | private VciLogStorageI logStorage; |
| | | |
| | | |
| | | /** |
| | | * æ§è¡æ¦æª |
| | | * |
| | | * @param request 请æ±å¯¹è±¡ |
| | | * @param response ç¸åºå¯¹è±¡ |
| | | * @param handler å¤çå¨ |
| | | * @return æ¯å¦æå, false表示失败ï¼å
¶ä»çæ¦æªå¨å°ä¸ä¼æ§è¡ |
| | | * @throws Exception æ§è¡åºéæ¶ä¼æåºå¼å¸¸ |
| | | */ |
| | | @Override |
| | | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) |
| | | throws Exception { |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 卿¦æªå¨æ§è¡å®æå |
| | | * @param request 请æ±å¯¹è±¡ |
| | | * @param response ç¸åºå¯¹è±¡ |
| | | * @param handler å¤çå¨ |
| | | * @param exception å¼å¸¸ |
| | | * @throws Exception æ§è¡åºéæ¶ä¼æåºå¼å¸¸ |
| | | */ |
| | | @Override |
| | | public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception exception) throws Exception { |
| | | //è¿ä¸ªæ¦æªå¨ç»ææ¶è¿æå
¶ä»æ¦æªå¨æ²¡æå®æãæä»¥è¿ä¸ªä¸æ¸
é¤ |
| | | String traceId = MDC.get(TokenKeyConstant.TRACE_ID); |
| | | //å é¤é¾è·¯ID |
| | | MDC.remove(TokenKeyConstant.TRACE_ID); |
| | | //è®°å½æä½æ¥å¿ |
| | | String traceIdInRequest = request.getHeader(TokenKeyConstant.LOG_TRACE_ID_KEY); |
| | | if(StringUtils.isBlank(traceIdInRequest) && logStorage !=null ){ |
| | | //说æè¿ä¸ªä¸æ¯è¢«æå¡æè¯·æ±çï¼èæ¯éè¿é¡µé¢è¯·æ±çï¼æä»¥è¦è®°å½æä½æ¥å¿ |
| | | logStorage.storageForMvc(traceId,request,response,handler,exception); |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.interceptor; |
| | | |
| | | import com.vci.starter.web.constant.TokenKeyConstant; |
| | | import com.vci.starter.web.util.VciBaseUtil; |
| | | import com.vci.starter.web.util.WebThreadLocalUtil; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.slf4j.MDC; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.lang.Nullable; |
| | | import org.springframework.web.servlet.HandlerInterceptor; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | |
| | | /** |
| | | * æ¥å¿çé¾è·¯æ¦æªå¨--æææ¦æªå¨ä¹å |
| | | * @author weidy |
| | | * @date 2019/11/7 2:52 PM |
| | | */ |
| | | public class VciLogBeforeInterceptor implements HandlerInterceptor { |
| | | |
| | | /** |
| | | * æ¥å¿åå¨çæ¥å£ |
| | | */ |
| | | @Autowired(required = false) |
| | | private VciLogStorageI logStorage; |
| | | |
| | | |
| | | /** |
| | | * æ§è¡æ¦æª |
| | | * |
| | | * @param request 请æ±å¯¹è±¡ |
| | | * @param response ç¸åºå¯¹è±¡ |
| | | * @param handler å¤çå¨ |
| | | * @return æ¯å¦æå, false表示失败ï¼å
¶ä»çæ¦æªå¨å°ä¸ä¼æ§è¡ |
| | | * @throws Exception æ§è¡åºéæ¶ä¼æåºå¼å¸¸ |
| | | */ |
| | | @Override |
| | | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) |
| | | throws Exception { |
| | | //å ä¸ºæ¦æªå¨æé¡ºåºï¼æä»¥è®¾ç½®traceIdçæ¶åéè¦å¨å¼å§å°±æ§è¡ |
| | | request.setAttribute(TokenKeyConstant.REQUEST_TIMESTAMP,System.currentTimeMillis()); |
| | | //æä»¬ä»å¤´é¨è·åçæ¯å¦ææ¥å¿çtrackId |
| | | //rpcçæ¡æ¶å¨å
¶èªå·±çæ¦æªå¨ï¼æè
è¿æ»¤å¨ï¼ä¸å¤ç |
| | | String traceId = request.getHeader(TokenKeyConstant.LOG_TRACE_ID_KEY); |
| | | if (StringUtils.isBlank(traceId)) { |
| | | //为空æ¶ï¼è¡¨ç¤ºè¿ä¸ªæ¯æµè§å¨è¯·æ±çï¼æä»¥ç´æ¥çæä¸ä¸ªæ°çID |
| | | traceId = VciBaseUtil.getPk(); |
| | | } |
| | | MDC.put(TokenKeyConstant.TRACE_ID, traceId); |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * æ¦æªå¨æ§è¡å®æå |
| | | * @param request 请æ±å¯¹è±¡ |
| | | * @param response ç¸åºå¯¹è±¡ |
| | | * @param handler å¤çå¨ |
| | | * @param exception å¼å¸¸ |
| | | * @throws Exception æ§è¡åºéæ¶ä¼æåºå¼å¸¸ |
| | | */ |
| | | @Override |
| | | public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception exception) throws Exception { |
| | | //è¿ä¸ªæ¦æªå¨ç»ææ¶è¿æå
¶ä»æ¦æªå¨æ²¡æå®æãæä»¥è¿ä¸ªä¸æ¸
é¤ |
| | | String traceId = MDC.get(TokenKeyConstant.TRACE_ID); |
| | | //å é¤é¾è·¯ID |
| | | MDC.remove(TokenKeyConstant.TRACE_ID); |
| | | //è®°å½æä½æ¥å¿ |
| | | String traceIdInRequest = request.getHeader(TokenKeyConstant.LOG_TRACE_ID_KEY); |
| | | if(StringUtils.isBlank(traceIdInRequest) && logStorage !=null ){ |
| | | //说æè¿ä¸ªä¸æ¯è¢«æå¡æè¯·æ±çï¼èæ¯éè¿é¡µé¢è¯·æ±çï¼æä»¥è¦è®°å½æä½æ¥å¿ |
| | | logStorage.storageForMvc(traceId,request,response,handler,exception); |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.interceptor; |
| | | |
| | | import org.springframework.lang.Nullable; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | |
| | | /** |
| | | * æ¥å¿åå¨çæ¥å£ |
| | | * @author weidy |
| | | * @date 2019/11/7 3:29 PM |
| | | */ |
| | | public interface VciLogStorageI { |
| | | |
| | | /** |
| | | * æ ¹æ®mvcè®°å½æä½æ¥å¿ |
| | | * @param traceId æ¬æ¬¡æ¥å¿æ§è¡é¾è·¯çidï¼æ¹ä¾¿ä»¥åè¿½æ¥ |
| | | * @param request 请æ±å¯¹è±¡ |
| | | * @param response ååºå¯¹è±¡ |
| | | * @param handler å¤ç对象 |
| | | * @param exception å¼å¸¸å
容 |
| | | */ |
| | | void storageForMvc(String traceId, HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception exception); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.interceptor; |
| | | |
| | | import com.vci.starter.web.pagemodel.SessionInfo; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * éç¥ç»å½ |
| | | * @author weidy |
| | | * @date 2020/2/27 |
| | | */ |
| | | public interface VciNoticePopLoginI { |
| | | |
| | | /** |
| | | * éç¥ç¨æ·è¢«è¸¢ä¸çº¿ |
| | | * @param sessionInfoList ç¨æ·ä¼è¯ä¿¡æ¯ |
| | | */ |
| | | void noticePopLogin(List<SessionInfo> sessionInfoList); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.interceptor; |
| | | |
| | | |
| | | import com.vci.starter.web.annotation.controller.VciUnCheckRight; |
| | | import com.vci.starter.web.autoconfigure.SpringMVCConfig; |
| | | import com.vci.starter.web.constant.TokenKeyConstant; |
| | | import com.vci.starter.web.enumpck.ResultCodeEnum; |
| | | import com.vci.starter.web.pagemodel.BaseResult; |
| | | import com.vci.starter.web.pagemodel.SessionInfo; |
| | | import com.vci.starter.web.util.LangBaseUtil; |
| | | import com.vci.starter.web.util.VciBaseUtil; |
| | | import com.vci.starter.web.util.WebThreadLocalUtil; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.web.method.HandlerMethod; |
| | | import org.springframework.web.servlet.HandlerInterceptor; |
| | | |
| | | import javax.servlet.ServletException; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.lang.reflect.Method; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * æéæ¦æªå¨ |
| | | * @author weidy |
| | | * @date 2019/11/7 2:32 PM |
| | | */ |
| | | public class VciSecurityInterceptor implements HandlerInterceptor { |
| | | |
| | | /** |
| | | * æ¥å¿å¯¹è±¡ |
| | | */ |
| | | private Logger logger = LoggerFactory.getLogger(getClass()); |
| | | |
| | | /** |
| | | * å¼å
¥é
ç½® |
| | | */ |
| | | @Autowired(required = false) |
| | | private SpringMVCConfig springMVCConfig; |
| | | |
| | | /** |
| | | * ä¼è¯ï¼æéï¼tokençæ¥å£ |
| | | */ |
| | | @Autowired(required = false) |
| | | private VciSessionForLoginI sessionForLoginI; |
| | | |
| | | /** |
| | | * æ§è¡æ¦æª |
| | | * @param request 请æ±å¯¹è±¡ |
| | | * @param response ç¸åºå¯¹è±¡ |
| | | * @param handler å¤çå¨ |
| | | * @return æ¯å¦æå,false表示失败ï¼å
¶ä»çæ¦æªå¨å°ä¸ä¼æ§è¡ |
| | | * @throws ServletException |
| | | */ |
| | | @Override |
| | | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) |
| | | throws Exception { |
| | | //ä»å¤´ä¸è·åtokenï¼ç¶åè°ç¨æ¥å£ç±»ï¼è·åç¨æ·çä¿¡æ¯ï¼å
·ä½å®ç°ç±»å¯ä»¥æ¯ä»rediséè·åï¼ä¹å¯ä»¥æ¯éè¿å
¶ä»çæ¹å¼è·å |
| | | //妿头é颿²¡æç¨æ·çtokenï¼é£è¯´ææ²¡æç»å½ï¼ |
| | | String requestUri = request.getRequestURI(); |
| | | String contextPath = request.getContextPath(); |
| | | String url = requestUri.substring(contextPath.length()); |
| | | String userToken = request.getHeader(TokenKeyConstant.USER_TOKEN_KEY); |
| | | if(StringUtils.isBlank(userToken)){ |
| | | userToken = request.getParameter(TokenKeyConstant.USER_TOKEN_KEY); |
| | | } |
| | | if(!(handler instanceof HandlerMethod)){ |
| | | return true; |
| | | } |
| | | List<String> unCheckUrls = new ArrayList<>(); |
| | | if(springMVCConfig !=null && springMVCConfig.getUnCheckUrls() !=null){ |
| | | unCheckUrls = springMVCConfig.getUnCheckUrls(); |
| | | } |
| | | SessionInfo sessionInfo = null; |
| | | if(StringUtils.isNotBlank(userToken)){ |
| | | try{ |
| | | sessionInfo = sessionForLoginI.getSessionInfoByToken(userToken); |
| | | }catch (Throwable e){ |
| | | logger.error("è·åtokenåºé",e); |
| | | //sendErrorMsg(response,"è·åtokençä¿¡æ¯åºéï¼" + userToken + "," + LangBaseUtil.getErrorMsg(e),1); |
| | | //return false; |
| | | } |
| | | if(sessionInfo!=null){ |
| | | WebThreadLocalUtil.getCurrentUserSessionInfoInThread().set(sessionInfo); |
| | | } |
| | | } |
| | | if(handler instanceof HandlerMethod) { |
| | | HandlerMethod hm = (HandlerMethod)handler; |
| | | Method method = hm.getMethod(); |
| | | //设置äºä¸æ ¡éªçä¼ç´æ¥è¿åtrue |
| | | if (method.isAnnotationPresent(VciUnCheckRight.class)) { |
| | | return true; |
| | | } |
| | | if (method.getDeclaringClass().isAnnotationPresent(VciUnCheckRight.class)) { |
| | | return true; |
| | | } |
| | | } |
| | | if(url.endsWith(".md")){ |
| | | return true; |
| | | } |
| | | if(StringUtils.isBlank(userToken) && !unCheckUrls.contains(url)){ |
| | | //è¯´ææ¯æ²¡æç¨æ·ä¿¡æ¯çï¼èä¸ä¹å¿
é¡»è¦æ ¡éªæ¯å¦ç»å½çæ
åµ |
| | | //firefoxä¸ä¼ æä»¶ä¾ç¶ä½¿ç¨å¤´éåæ¾token |
| | | if(logger.isErrorEnabled()) { |
| | | logger.error("请æ±" + url + "ï¼ä½æ¯æ²¡æç»å½"); |
| | | } |
| | | sendErrorMsg(response,"没æç»å½ç³»ç»ï¼è¯·å
ç»å½",1); |
| | | return false; |
| | | //被Tä¸çº¿ç±websocketç´æ¥æé |
| | | }else{ |
| | | if(sessionInfo == null){ |
| | | //乿¯è¯´æä¸åå¨ï¼è¢«Tä¸çº¿æ¶ä¹è·åä¸å°sessionçä¿¡æ¯äº |
| | | if(logger.isErrorEnabled()) { |
| | | logger.error("tokenå¼éæ³ï¼æè
ç¨æ·å·²ç»è¢«è¸¢ä¸çº¿," + userToken); |
| | | } |
| | | sendErrorMsg(response,"tokenå¼éæ³ï¼æè
ç¨æ·å·²ç»è¢«è¸¢ä¸çº¿," + userToken,1); |
| | | return false; |
| | | }else{ |
| | | if(!unCheckUrls.contains(url)){ |
| | | if(sessionForLoginI == null){ |
| | | //è¯´ææ²¡åæ³æ ¡éª |
| | | String msg = "请æ±è·¯å¾"+ url +"没æé访é®"; |
| | | if(logger.isErrorEnabled()) { |
| | | logger.error(msg + userToken); |
| | | } |
| | | sendErrorMsg(response,msg,2); |
| | | return false; |
| | | }else{ |
| | | String systemPrivateToken = request.getHeader(TokenKeyConstant.SYSTEM_PRIVATE_KEY); |
| | | try { |
| | | if (sessionForLoginI.checkRequestRights(request, systemPrivateToken, sessionInfo, handler)) { |
| | | updateRequestTime(url,userToken); |
| | | }else{ |
| | | return false; |
| | | } |
| | | }catch (Throwable e){ |
| | | String errorMsg = LangBaseUtil.getErrorMsg(e); |
| | | if(logger.isErrorEnabled()) { |
| | | logger.error("æ£æ¥è¯·æ±æ¯å¦ç¬¦åæéåºç°äºé误," + errorMsg, e); |
| | | } |
| | | sendErrorMsg(response,errorMsg,1); |
| | | return false; |
| | | } |
| | | } |
| | | }else{ |
| | | updateRequestTime(url,userToken); |
| | | } |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * è¿åéè¯¯ä¿¡æ¯ |
| | | * @param response ç¸åºå¯¹è±¡ |
| | | * @param errorMsg éè¯¯ä¿¡æ¯ |
| | | * @param innerErrorCode å
é¨é误ï¼1表示没æç»å½ï¼2表示没ææé |
| | | * @throws Exception |
| | | */ |
| | | private void sendErrorMsg(HttpServletResponse response, String errorMsg, int innerErrorCode) throws Exception{ |
| | | BaseResult baseResult = BaseResult.fail(errorMsg); |
| | | if(innerErrorCode ==1) { |
| | | baseResult.setCode(ResultCodeEnum.UNAUTHORIZED.code); |
| | | }else if(innerErrorCode == 2){ |
| | | baseResult.setCode(ResultCodeEnum.NOT_RIGHT.code); |
| | | } |
| | | response.setCharacterEncoding("UTF-8"); |
| | | response.getWriter().write(VciBaseUtil.getJSONStringWithDateFormat(baseResult)); |
| | | } |
| | | |
| | | /** |
| | | * æ´æ°æåè¯·æ±æ¶é´ |
| | | * @param url å½å请æ±çè·¯å¾ |
| | | * @param userToken ç¨æ·çtoken |
| | | */ |
| | | private void updateRequestTime(String url,String userToken){ |
| | | //è®°å½æå访é®çæ¶é´ |
| | | List<String> unStorageRequestTimeUrls = new ArrayList<>(); |
| | | if(springMVCConfig !=null && springMVCConfig.getUnStorageRequestTimeUrls() != null){ |
| | | unStorageRequestTimeUrls = springMVCConfig.getUnStorageRequestTimeUrls(); |
| | | } |
| | | if(CollectionUtils.isEmpty(unStorageRequestTimeUrls)){ |
| | | unStorageRequestTimeUrls.add("smSessionController/checkIdleTime"); |
| | | } |
| | | String url1 = url; |
| | | while(url1.startsWith("/")){ |
| | | url1 = url1.substring(1); |
| | | } |
| | | if(sessionForLoginI != null && !unStorageRequestTimeUrls.contains(url1)){ |
| | | sessionForLoginI.updateRequestTime(userToken); |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.interceptor; |
| | | |
| | | import com.vci.starter.web.exception.VciBaseException; |
| | | import com.vci.starter.web.pagemodel.SessionInfo; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | /** |
| | | * ä¼è¯ä¿¡æ¯ç¸å
³çæ¥å£ |
| | | * @author weidy |
| | | * @date 2020/2/27 |
| | | */ |
| | | public interface VciSessionForLoginI { |
| | | /** |
| | | * æ£æ¥ç¨æ·æ¯å¦ç»å½ |
| | | * @param userId ç¨æ·å |
| | | * @return 为空表示没æç»å½ |
| | | */ |
| | | String checkIsLogined(String userId); |
| | | /** |
| | | * 强å¶ç¨æ·ä¸çº¿ |
| | | * @param userId ç¨æ·å |
| | | */ |
| | | void popUser(String userId); |
| | | |
| | | /** |
| | | * å°ä¼è¯ä¿¡æ¯åå¨å°Redis |
| | | * @param sessionInfo ä¼è¯ä¿¡æ¯ |
| | | */ |
| | | void saveSessionInfo(SessionInfo sessionInfo); |
| | | |
| | | /** |
| | | * æ ¡éªè¯·æ±æ¯å¦ç¬¦åæééªè¯ |
| | | * å
å«1ï¼ç³»ç»æ¯å¦å¯ä»¥è®¿é®å½åæå¡æè
æ¥å£ |
| | | * 2, ç¨æ·æ¯å¦ææé访é®å½åæå¡ |
| | | * 3, ç¨æ·æ¯å¦ææé访é®å½åæ°æ® |
| | | * @param request 请æ±å¯¹è±¡ |
| | | * @param systemPrivateToken ç³»ç»ç许å¯ç |
| | | * @param sessionInfo å½åç¨æ·ä¼è¯å¯¹è±¡ |
| | | * @param handler æ§è¡å¯¹è±¡ |
| | | * @return true表示ææéï¼false表示没æé |
| | | * @throws VciBaseException 没ææéçæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | boolean checkRequestRights(HttpServletRequest request, String systemPrivateToken, SessionInfo sessionInfo, Object handler) throws VciBaseException; |
| | | |
| | | /** |
| | | * æ´æ°è¯·æ±æ¶é´ |
| | | * @param userToken ç¨æ·token |
| | | */ |
| | | void updateRequestTime(String userToken); |
| | | |
| | | /** |
| | | * æ ¹æ®tokenè·åç¨æ·ç对象 |
| | | * @param userToken ç¨æ·token |
| | | * @return ç¨æ·ä¼è¯å¯¹è±¡ |
| | | */ |
| | | SessionInfo getSessionInfoByToken(String userToken); |
| | | |
| | | /** |
| | | * éåºç»å½ |
| | | * @param userToken ç¨æ·çä¼è¯è®¸å¯ |
| | | */ |
| | | void logout(String userToken); |
| | | |
| | | /** |
| | | * æ ¹æ®tokenè·åç¨æ·å¨ç³»ç»ä¸è¿å¯ä»¥åå¨çæ¶é´ |
| | | * @param userToken userToken ç¨æ·çä¼è¯è®¸å¯ |
| | | * @return ç¨æ·å¨ç³»ç»ä¸è¿å¯ä»¥åå¨çæ¶é´(毫ç§) |
| | | */ |
| | | long getCanAliveTime(String userToken); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.model; |
| | | |
| | | |
| | | import com.vci.starter.web.annotation.Column; |
| | | import com.vci.starter.web.annotation.Transient; |
| | | import com.vci.starter.web.annotation.VciFieldType; |
| | | import com.vci.starter.web.enumpck.VciFieldTypeEnum; |
| | | |
| | | import java.util.Date; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * é»è®¤ç龿¥ç±»å |
| | | * @author weidy |
| | | */ |
| | | public class BaseLinkModel implements java.io.Serializable{ |
| | | /** |
| | | * ä¸»é® |
| | | */ |
| | | @Column(nullable = false) |
| | | private String oid; |
| | | |
| | | /** |
| | | * å建人 |
| | | */ |
| | | @Column(length = 50) |
| | | private String creator; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | @VciFieldType(VciFieldTypeEnum.VTDateTime) |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * æåä¿®æ¹äºº |
| | | */ |
| | | @Column(length = 50) |
| | | private String lastModifier; |
| | | |
| | | /** |
| | | * æåä¿®æ¹æ¶é´ |
| | | */ |
| | | @VciFieldType(VciFieldTypeEnum.VTDateTime) |
| | | private Date lastModifyTime; |
| | | |
| | | /** |
| | | * fromç«¯ä¸»é® |
| | | */ |
| | | @Column(name="f_oid",length = 50) |
| | | private String foid; |
| | | |
| | | /** |
| | | * fromç«¯çæ¬ä¸»é® |
| | | */ |
| | | @Column(name="f_revisionoid",length = 50) |
| | | private String frevisionoid; |
| | | |
| | | /** |
| | | * fromç«¯å¯¹è±¡ä¸»é® |
| | | */ |
| | | @Column(name="f_nameoid",length = 50) |
| | | private String fnameoid; |
| | | |
| | | /** |
| | | * from端ä¸å¡ç±»å |
| | | */ |
| | | @Column(name="f_btmname",length = 30) |
| | | private String fbtmname; |
| | | |
| | | /** |
| | | * toç«¯ä¸»é® |
| | | */ |
| | | @Column(name="t_oid",length = 50) |
| | | private String toid; |
| | | |
| | | /** |
| | | * toç«¯çæ¬ä¸»é® |
| | | */ |
| | | @Column(name="t_revisionoid",length = 50) |
| | | private String trevisionoid; |
| | | |
| | | /** |
| | | * toç«¯å¯¹è±¡ä¸»é® |
| | | */ |
| | | @Column(name="t_nameoid",length = 50) |
| | | private String tnameoid; |
| | | |
| | | /** |
| | | * to端ä¸å¡ç±»å |
| | | */ |
| | | @Column(name="t_btmname",length = 30) |
| | | private String tbtmname; |
| | | |
| | | /** |
| | | * æ¶é´æ³ |
| | | */ |
| | | private Date ts; |
| | | |
| | | /** |
| | | * æ©å±ç屿§ |
| | | */ |
| | | @Transient |
| | | private Map<String,String> data; |
| | | |
| | | public String getOid() { |
| | | return oid; |
| | | } |
| | | |
| | | public void setOid(String oid) { |
| | | this.oid = oid; |
| | | } |
| | | |
| | | public String getCreator() { |
| | | return creator; |
| | | } |
| | | |
| | | public void setCreator(String creator) { |
| | | this.creator = creator; |
| | | } |
| | | |
| | | public Date getCreateTime() { |
| | | return createTime; |
| | | } |
| | | |
| | | public void setCreateTime(Date createTime) { |
| | | this.createTime = createTime; |
| | | } |
| | | |
| | | public String getLastModifier() { |
| | | return lastModifier; |
| | | } |
| | | |
| | | public void setLastModifier(String lastModifier) { |
| | | this.lastModifier = lastModifier; |
| | | } |
| | | |
| | | public Date getLastModifytime() { |
| | | return lastModifyTime; |
| | | } |
| | | |
| | | public void setLastModifytime(Date lastModifytime) { |
| | | this.lastModifyTime = lastModifytime; |
| | | } |
| | | |
| | | public String getFoid() { |
| | | return foid; |
| | | } |
| | | |
| | | public void setFoid(String foid) { |
| | | this.foid = foid; |
| | | } |
| | | |
| | | public String getFrevisionoid() { |
| | | return frevisionoid; |
| | | } |
| | | |
| | | public void setFrevisionoid(String frevisionoid) { |
| | | this.frevisionoid = frevisionoid; |
| | | } |
| | | |
| | | public String getFnameoid() { |
| | | return fnameoid; |
| | | } |
| | | |
| | | public void setFnameoid(String fnameoid) { |
| | | this.fnameoid = fnameoid; |
| | | } |
| | | |
| | | |
| | | public String getToid() { |
| | | return toid; |
| | | } |
| | | |
| | | public void setToid(String toid) { |
| | | this.toid = toid; |
| | | } |
| | | |
| | | public String getTrevisionoid() { |
| | | return trevisionoid; |
| | | } |
| | | |
| | | public void setTrevisionoid(String trevisionoid) { |
| | | this.trevisionoid = trevisionoid; |
| | | } |
| | | |
| | | public String getTnameoid() { |
| | | return tnameoid; |
| | | } |
| | | |
| | | public void setTnameoid(String tnameoid) { |
| | | this.tnameoid = tnameoid; |
| | | } |
| | | |
| | | public String getFbtmname() { |
| | | return fbtmname; |
| | | } |
| | | |
| | | public void setFbtmname(String fbtmname) { |
| | | this.fbtmname = fbtmname; |
| | | } |
| | | |
| | | public String getTbtmname() { |
| | | return tbtmname; |
| | | } |
| | | |
| | | public void setTbtmname(String tbtmname) { |
| | | this.tbtmname = tbtmname; |
| | | } |
| | | |
| | | public Date getTs() { |
| | | return ts; |
| | | } |
| | | |
| | | public void setTs(Date ts) { |
| | | this.ts = ts; |
| | | } |
| | | |
| | | public Date getLastModifyTime() { |
| | | return lastModifyTime; |
| | | } |
| | | |
| | | public void setLastModifyTime(Date lastModifyTime) { |
| | | this.lastModifyTime = lastModifyTime; |
| | | } |
| | | |
| | | public Map<String, String> getData() { |
| | | return data; |
| | | } |
| | | |
| | | public void setData(Map<String, String> data) { |
| | | this.data = data; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "BaseLinkModel{" + |
| | | "oid='" + oid + '\'' + |
| | | ", creator='" + creator + '\'' + |
| | | ", createTime=" + createTime + |
| | | ", lastModifier='" + lastModifier + '\'' + |
| | | ", lastModifyTime=" + lastModifyTime + |
| | | ", foid='" + foid + '\'' + |
| | | ", frevisionoid='" + frevisionoid + '\'' + |
| | | ", fnameoid='" + fnameoid + '\'' + |
| | | ", fbtmname='" + fbtmname + '\'' + |
| | | ", toid='" + toid + '\'' + |
| | | ", trevisionoid='" + trevisionoid + '\'' + |
| | | ", tnameoid='" + tnameoid + '\'' + |
| | | ", tbtmname='" + tbtmname + '\'' + |
| | | ", ts=" + ts + |
| | | ", data=" + data + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.model; |
| | | |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.vci.starter.web.annotation.Column; |
| | | import com.vci.starter.web.annotation.Transient; |
| | | import com.vci.starter.web.annotation.VciFieldType; |
| | | import com.vci.starter.web.annotation.VciUseEnum; |
| | | import com.vci.starter.web.enumpck.VciFieldTypeEnum; |
| | | import com.vci.starter.web.util.VciDateUtil; |
| | | |
| | | import java.util.Date; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * å¹³å°çåºæ¬å¯¹è±¡ |
| | | * @author weidy |
| | | */ |
| | | public class BaseModel implements java.io.Serializable{ |
| | | |
| | | |
| | | /** |
| | | * 主é®ï¼å¦æèªå·±ç对象ï¼ä¸æ¯oidä½ä¸ºä¸»é®çè¯ï¼éè¦ç¨idè¿ä¸ªæ³¨è§£ |
| | | */ |
| | | @Column(nullable = false,length = 50) |
| | | private String oid; |
| | | |
| | | /** |
| | | * 代å·ï¼å¯ä»¥è®¾ç½®å±æ§çæ å°ï¼name表示å¨å¹³å°çä¸å¡ç±»åä¸ç屿§åç§°ï¼å¿
须为å°åï¼ |
| | | */ |
| | | @Column(length = 50) |
| | | private String id; |
| | | |
| | | /** |
| | | * åç§°ï¼ä¹å¯ä»¥ä¸è®¾ç½®å±æ§æ å°ï¼é»è®¤æ¯å段åçå°å |
| | | */ |
| | | @Column(length = 50) |
| | | private String name; |
| | | |
| | | /** |
| | | * æè¿° |
| | | */ |
| | | @Column(length = 250) |
| | | private String description; |
| | | |
| | | /** |
| | | * çæ¬çä¸»é® |
| | | */ |
| | | @Column(length = 50) |
| | | private String revisionOid; |
| | | |
| | | /** |
| | | * 对象çä¸»é® |
| | | */ |
| | | @Column(length = 50) |
| | | private String nameOid; |
| | | |
| | | /** |
| | | * ä¸å¡ç±»åçåç§° |
| | | */ |
| | | @Column(length = 30) |
| | | private String btmname; |
| | | |
| | | /** |
| | | * æ¯å¦æåçæ¬ |
| | | */ |
| | | @Column(length=1) |
| | | private String lastR; |
| | | |
| | | |
| | | /** |
| | | * æ¯å¦æåçæ¬ |
| | | */ |
| | | @Column(length=1) |
| | | private String firstR; |
| | | |
| | | |
| | | /** |
| | | * æ¯å¦ææ°ç次 |
| | | */ |
| | | @Column(length=1) |
| | | private String lastV; |
| | | |
| | | |
| | | /** |
| | | * æ¯å¦ææ©ç次 |
| | | */ |
| | | @Column(length=1) |
| | | private String firstV; |
| | | |
| | | /** |
| | | * å建人 |
| | | */ |
| | | @Column(length = 50,nullable = false) |
| | | private String creator; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | @Column(nullable = false) |
| | | @VciFieldType(VciFieldTypeEnum.VTDateTime) |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * æåä¿®æ¹äºº |
| | | */ |
| | | @Column(length = 50,nullable = false) |
| | | private String lastModifier; |
| | | |
| | | /** |
| | | * æåä¿®æ¹æ¶é´ï¼æ ¼å¼æ¯yyyy-MM-dd HH:mm:ss.SSS |
| | | */ |
| | | @VciFieldType(VciFieldTypeEnum.VTDateTime) |
| | | private Date lastModifyTime; |
| | | |
| | | /** |
| | | * çæ¬è§å |
| | | */ |
| | | @Column(length = 50) |
| | | private String revisionRule; |
| | | |
| | | |
| | | /** |
| | | * çæ¬åºå· |
| | | */ |
| | | @VciFieldType(VciFieldTypeEnum.VTInteger) |
| | | private int revisionSeq; |
| | | |
| | | /** |
| | | * çæ¬å¼ |
| | | */ |
| | | @Column(length = 50) |
| | | private String revisionValue; |
| | | |
| | | |
| | | /** |
| | | * çæ¬¡è§å |
| | | */ |
| | | @Column(length = 50) |
| | | private String versionRule; |
| | | |
| | | /** |
| | | * çæ¬¡æåº |
| | | */ |
| | | @VciFieldType(VciFieldTypeEnum.VTInteger) |
| | | private int versionSeq; |
| | | |
| | | /** |
| | | * çæ¬¡å¼ |
| | | */ |
| | | @Column(length = 50) |
| | | private String versionValue; |
| | | |
| | | /** |
| | | * çå½å¨æçç¼å· |
| | | */ |
| | | @Transient() |
| | | private String lctid; |
| | | |
| | | /** |
| | | * çå½å¨æå¼ |
| | | */ |
| | | @Column(length = 50) |
| | | private String lcStatus; |
| | | |
| | | /** |
| | | * çå½å¨ææ¾ç¤ºææ¬ |
| | | */ |
| | | @Transient(referColumn="lcStatus_text") |
| | | private String lcStatusText; |
| | | |
| | | /** |
| | | * æ¶é´æ³ï¼æ ¼å¼æ¯yyyy-MM-dd HH:mm:ss.SSS |
| | | */ |
| | | @JsonFormat(pattern = VciDateUtil.DateTimeMillFormat) |
| | | private Date ts; |
| | | |
| | | /** |
| | | * æ¥æè
ï¼ä¸å建è
æåºå«ï¼å¸¸ç¨äºæ§å¶æ°æ®æé |
| | | */ |
| | | @Column(length = 50) |
| | | private String owner; |
| | | |
| | | /** |
| | | * ç¾å
¥äºº--ç¾å
¥åç¾åºæ°æ®æ¯äºæ¥ |
| | | */ |
| | | @Column(length = 50) |
| | | private String checkInBy; |
| | | |
| | | /** |
| | | * ç¾å
¥æ¶é´ |
| | | */ |
| | | @VciFieldType(VciFieldTypeEnum.VTDateTime) |
| | | private Date checkInTime; |
| | | |
| | | /** |
| | | * ç¾åºäºº |
| | | */ |
| | | @Column(length = 50) |
| | | private String checkOutBy; |
| | | |
| | | /** |
| | | * ç¾åºæ¶é´ |
| | | */ |
| | | @VciFieldType(VciFieldTypeEnum.VTDateTime) |
| | | private Date checkOutTime; |
| | | |
| | | /** |
| | | * ä»åªä¸ªçæ¬æ·è´ |
| | | */ |
| | | @Column(length = 50) |
| | | private String copyFromVersion; |
| | | |
| | | /** |
| | | * å¯çº§ |
| | | */ |
| | | @VciUseEnum(value = "Enumsecretgrade",showTextField = "secretGradeText" ) |
| | | private Integer secretGrade; |
| | | |
| | | /** |
| | | * å¯çº§æ¾ç¤ºææ¬ |
| | | */ |
| | | @Transient |
| | | private String secretGradeText; |
| | | |
| | | /** |
| | | * æ©å±ç屿§ |
| | | */ |
| | | @Transient |
| | | private Map<String,String> data; |
| | | |
| | | public String getOid() { |
| | | return oid; |
| | | } |
| | | |
| | | public void setOid(String oid) { |
| | | this.oid = oid; |
| | | } |
| | | |
| | | public String getId() { |
| | | return id; |
| | | } |
| | | |
| | | public void setId(String id) { |
| | | this.id = id; |
| | | } |
| | | |
| | | public String getName() { |
| | | return name; |
| | | } |
| | | |
| | | public void setName(String name) { |
| | | this.name = name; |
| | | } |
| | | |
| | | public String getDescription() { |
| | | return description; |
| | | } |
| | | |
| | | public void setDescription(String description) { |
| | | this.description = description; |
| | | } |
| | | |
| | | public String getRevisionOid() { |
| | | return revisionOid; |
| | | } |
| | | |
| | | public void setRevisionOid(String revisionOid) { |
| | | this.revisionOid = revisionOid; |
| | | } |
| | | |
| | | public String getNameOid() { |
| | | return nameOid; |
| | | } |
| | | |
| | | public void setNameOid(String nameOid) { |
| | | this.nameOid = nameOid; |
| | | } |
| | | |
| | | public String getBtmname() { |
| | | return btmname; |
| | | } |
| | | |
| | | public void setBtmname(String btmname) { |
| | | this.btmname = btmname; |
| | | } |
| | | |
| | | |
| | | public String getLastR() { |
| | | return lastR; |
| | | } |
| | | |
| | | public void setLastR(String lastR) { |
| | | this.lastR = lastR; |
| | | } |
| | | |
| | | public String getFirstR() { |
| | | return firstR; |
| | | } |
| | | |
| | | public void setFirstR(String firstR) { |
| | | this.firstR = firstR; |
| | | } |
| | | |
| | | public String getLastV() { |
| | | return lastV; |
| | | } |
| | | |
| | | public void setLastV(String lastV) { |
| | | this.lastV = lastV; |
| | | } |
| | | |
| | | public String getFirstV() { |
| | | return firstV; |
| | | } |
| | | |
| | | public void setFirstV(String firstV) { |
| | | this.firstV = firstV; |
| | | } |
| | | |
| | | public String getCreator() { |
| | | return creator; |
| | | } |
| | | |
| | | public void setCreator(String creator) { |
| | | this.creator = creator; |
| | | } |
| | | |
| | | public String getLastModifier() { |
| | | return lastModifier; |
| | | } |
| | | |
| | | public void setLastModifier(String lastModifier) { |
| | | this.lastModifier = lastModifier; |
| | | } |
| | | |
| | | public Date getLastModifyTime() { |
| | | return lastModifyTime; |
| | | } |
| | | |
| | | public void setLastModifyTime(Date lastModifyTime) { |
| | | this.lastModifyTime = lastModifyTime; |
| | | } |
| | | |
| | | public String getRevisionRule() { |
| | | return revisionRule; |
| | | } |
| | | |
| | | public void setRevisionRule(String revisionRule) { |
| | | this.revisionRule = revisionRule; |
| | | } |
| | | |
| | | public String getVersionRule() { |
| | | return versionRule; |
| | | } |
| | | |
| | | public void setVersionRule(String versionRule) { |
| | | this.versionRule = versionRule; |
| | | } |
| | | |
| | | public int getRevisionSeq() { |
| | | return revisionSeq; |
| | | } |
| | | |
| | | public void setRevisionSeq(int revisionSeq) { |
| | | this.revisionSeq = revisionSeq; |
| | | } |
| | | |
| | | public String getRevisionValue() { |
| | | return revisionValue; |
| | | } |
| | | |
| | | public void setRevisionValue(String revisionValue) { |
| | | this.revisionValue = revisionValue; |
| | | } |
| | | |
| | | public int getVersionSeq() { |
| | | return versionSeq; |
| | | } |
| | | |
| | | public void setVersionSeq(int versionSeq) { |
| | | this.versionSeq = versionSeq; |
| | | } |
| | | |
| | | public String getVersionValue() { |
| | | return versionValue; |
| | | } |
| | | |
| | | public void setVersionValue(String versionValue) { |
| | | this.versionValue = versionValue; |
| | | } |
| | | |
| | | public String getLcStatus() { |
| | | return lcStatus; |
| | | } |
| | | |
| | | public void setLcStatus(String lcStatus) { |
| | | this.lcStatus = lcStatus; |
| | | } |
| | | |
| | | public Date getTs() { |
| | | return ts; |
| | | } |
| | | |
| | | public void setTs(Date ts) { |
| | | this.ts = ts; |
| | | } |
| | | |
| | | public String getOwner() { |
| | | return owner; |
| | | } |
| | | |
| | | public void setOwner(String owner) { |
| | | this.owner = owner; |
| | | } |
| | | |
| | | public String getCheckInBy() { |
| | | return checkInBy; |
| | | } |
| | | |
| | | public void setCheckInBy(String checkInBy) { |
| | | this.checkInBy = checkInBy; |
| | | } |
| | | |
| | | public Date getCheckInTime() { |
| | | return checkInTime; |
| | | } |
| | | |
| | | public void setCheckInTime(Date checkInTime) { |
| | | this.checkInTime = checkInTime; |
| | | } |
| | | |
| | | public String getCheckOutBy() { |
| | | return checkOutBy; |
| | | } |
| | | |
| | | public void setCheckOutBy(String checkOutBy) { |
| | | this.checkOutBy = checkOutBy; |
| | | } |
| | | |
| | | public Date getCheckOutTime() { |
| | | return checkOutTime; |
| | | } |
| | | |
| | | public void setCheckOutTime(Date checkOutTime) { |
| | | this.checkOutTime = checkOutTime; |
| | | } |
| | | |
| | | public String getCopyFromVersion() { |
| | | return copyFromVersion; |
| | | } |
| | | |
| | | public void setCopyFromVersion(String copyFromVersion) { |
| | | this.copyFromVersion = copyFromVersion; |
| | | } |
| | | |
| | | public String getLcStatusText() { |
| | | return lcStatusText; |
| | | } |
| | | |
| | | public void setLcStatusText(String lcStatusText) { |
| | | this.lcStatusText = lcStatusText; |
| | | } |
| | | |
| | | public Date getCreateTime() { |
| | | return createTime; |
| | | } |
| | | |
| | | public void setCreateTime(Date createTime) { |
| | | this.createTime = createTime; |
| | | } |
| | | |
| | | public Integer getSecretGrade() { |
| | | return secretGrade; |
| | | } |
| | | |
| | | public void setSecretGrade(Integer secretGrade) { |
| | | this.secretGrade = secretGrade; |
| | | } |
| | | |
| | | public String getSecretGradeText() { |
| | | return secretGradeText; |
| | | } |
| | | |
| | | public void setSecretGradeText(String secretGradeText) { |
| | | this.secretGradeText = secretGradeText; |
| | | } |
| | | |
| | | public String getLctid() { |
| | | return lctid; |
| | | } |
| | | |
| | | public void setLctid(String lctid) { |
| | | this.lctid = lctid; |
| | | } |
| | | |
| | | |
| | | public Map<String, String> getData() { |
| | | return data; |
| | | } |
| | | |
| | | public void setData(Map<String, String> data) { |
| | | this.data = data; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "BaseModel{" + |
| | | "oid='" + oid + '\'' + |
| | | ", id='" + id + '\'' + |
| | | ", name='" + name + '\'' + |
| | | ", description='" + description + '\'' + |
| | | ", revisionOid='" + revisionOid + '\'' + |
| | | ", nameOid='" + nameOid + '\'' + |
| | | ", btmname='" + btmname + '\'' + |
| | | ", lastR='" + lastR + '\'' + |
| | | ", firstR='" + firstR + '\'' + |
| | | ", lastV='" + lastV + '\'' + |
| | | ", firstV='" + firstV + '\'' + |
| | | ", creator='" + creator + '\'' + |
| | | ", createTime=" + createTime + |
| | | ", lastModifier='" + lastModifier + '\'' + |
| | | ", lastModifyTime=" + lastModifyTime + |
| | | ", revisionRule='" + revisionRule + '\'' + |
| | | ", revisionSeq=" + revisionSeq + |
| | | ", revisionValue='" + revisionValue + '\'' + |
| | | ", versionRule='" + versionRule + '\'' + |
| | | ", versionSeq=" + versionSeq + |
| | | ", versionValue='" + versionValue + '\'' + |
| | | ", lctid='" + lctid + '\'' + |
| | | ", lcStatus='" + lcStatus + '\'' + |
| | | ", lcStatusText='" + lcStatusText + '\'' + |
| | | ", ts=" + ts + |
| | | ", owner='" + owner + '\'' + |
| | | ", checkInBy='" + checkInBy + '\'' + |
| | | ", checkInTime=" + checkInTime + |
| | | ", checkOutBy='" + checkOutBy + '\'' + |
| | | ", checkOutTime=" + checkOutTime + |
| | | ", copyFromVersion='" + copyFromVersion + '\'' + |
| | | ", secretGrade=" + secretGrade + |
| | | ", secretGradeText='" + secretGradeText + '\'' + |
| | | ", data=" + data + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.pagemodel; |
| | | |
| | | import com.vci.starter.web.annotation.Transient; |
| | | |
| | | import java.util.Date; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 龿¥ç±»åçæ¾ç¤ºå¯¹è±¡ |
| | | * @author weidy |
| | | */ |
| | | public class BaseLinkModelVO implements java.io.Serializable{ |
| | | /** |
| | | * ä¸»é® |
| | | */ |
| | | private String oid; |
| | | |
| | | /** |
| | | * å建人 |
| | | */ |
| | | private String creator; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * æåä¿®æ¹äºº |
| | | */ |
| | | private String lastModifier; |
| | | |
| | | /** |
| | | * æåä¿®æ¹æ¶é´ |
| | | */ |
| | | private Date lastModifyTime; |
| | | |
| | | /** |
| | | * fromç«¯ä¸»é® |
| | | */ |
| | | private String foid; |
| | | |
| | | /** |
| | | * fromç«¯çæ¬ä¸»é® |
| | | */ |
| | | private String frevisionoid; |
| | | |
| | | /** |
| | | * fromç«¯å¯¹è±¡ä¸»é® |
| | | */ |
| | | private String fnameoid; |
| | | |
| | | /** |
| | | * from端ä¸å¡ç±»å |
| | | */ |
| | | private String fbtmname; |
| | | |
| | | /** |
| | | * toç«¯ä¸»é® |
| | | */ |
| | | private String toid; |
| | | |
| | | /** |
| | | * toç«¯çæ¬ä¸»é® |
| | | */ |
| | | private String trevisionoid; |
| | | |
| | | /** |
| | | * toç«¯å¯¹è±¡ä¸»é® |
| | | */ |
| | | private String tnameoid; |
| | | |
| | | /** |
| | | * to端ä¸å¡ç±»å |
| | | */ |
| | | private String tbtmname; |
| | | |
| | | /** |
| | | * æ¶é´æ³ |
| | | */ |
| | | private Date ts; |
| | | |
| | | /** |
| | | * æ©å±ç屿§ |
| | | */ |
| | | @Transient |
| | | private Map<String,String> data; |
| | | |
| | | public String getOid() { |
| | | return oid; |
| | | } |
| | | |
| | | public void setOid(String oid) { |
| | | this.oid = oid; |
| | | } |
| | | |
| | | public String getCreator() { |
| | | return creator; |
| | | } |
| | | |
| | | public void setCreator(String creator) { |
| | | this.creator = creator; |
| | | } |
| | | |
| | | public Date getCreateTime() { |
| | | return createTime; |
| | | } |
| | | |
| | | public void setCreateTime(Date createTime) { |
| | | this.createTime = createTime; |
| | | } |
| | | |
| | | public String getLastModifier() { |
| | | return lastModifier; |
| | | } |
| | | |
| | | public void setLastModifier(String lastModifier) { |
| | | this.lastModifier = lastModifier; |
| | | } |
| | | |
| | | public Date getLastModifyTime() { |
| | | return lastModifyTime; |
| | | } |
| | | |
| | | public void setLastModifyTime(Date lastModifyTime) { |
| | | this.lastModifyTime = lastModifyTime; |
| | | } |
| | | |
| | | public String getFoid() { |
| | | return foid; |
| | | } |
| | | |
| | | public void setFoid(String foid) { |
| | | this.foid = foid; |
| | | } |
| | | |
| | | public String getFrevisionoid() { |
| | | return frevisionoid; |
| | | } |
| | | |
| | | public void setFrevisionoid(String frevisionoid) { |
| | | this.frevisionoid = frevisionoid; |
| | | } |
| | | |
| | | public String getFnameoid() { |
| | | return fnameoid; |
| | | } |
| | | |
| | | public void setFnameoid(String fnameoid) { |
| | | this.fnameoid = fnameoid; |
| | | } |
| | | |
| | | public String getFbtmname() { |
| | | return fbtmname; |
| | | } |
| | | |
| | | public void setFbtmname(String fbtmname) { |
| | | this.fbtmname = fbtmname; |
| | | } |
| | | |
| | | public String getToid() { |
| | | return toid; |
| | | } |
| | | |
| | | public void setToid(String toid) { |
| | | this.toid = toid; |
| | | } |
| | | |
| | | public String getTrevisionoid() { |
| | | return trevisionoid; |
| | | } |
| | | |
| | | public void setTrevisionoid(String trevisionoid) { |
| | | this.trevisionoid = trevisionoid; |
| | | } |
| | | |
| | | public String getTnameoid() { |
| | | return tnameoid; |
| | | } |
| | | |
| | | public void setTnameoid(String tnameoid) { |
| | | this.tnameoid = tnameoid; |
| | | } |
| | | |
| | | public String getTbtmname() { |
| | | return tbtmname; |
| | | } |
| | | |
| | | public void setTbtmname(String tbtmname) { |
| | | this.tbtmname = tbtmname; |
| | | } |
| | | |
| | | public Date getTs() { |
| | | return ts; |
| | | } |
| | | |
| | | public void setTs(Date ts) { |
| | | this.ts = ts; |
| | | } |
| | | |
| | | public Map<String, String> getData() { |
| | | return data; |
| | | } |
| | | |
| | | public void setData(Map<String, String> data) { |
| | | this.data = data; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "BaseLinkModelVO{" + |
| | | "oid='" + oid + '\'' + |
| | | ", creator='" + creator + '\'' + |
| | | ", createTime=" + createTime + |
| | | ", lastModifier='" + lastModifier + '\'' + |
| | | ", lastModifyTime=" + lastModifyTime + |
| | | ", foid='" + foid + '\'' + |
| | | ", frevisionoid='" + frevisionoid + '\'' + |
| | | ", fnameoid='" + fnameoid + '\'' + |
| | | ", fbtmname='" + fbtmname + '\'' + |
| | | ", toid='" + toid + '\'' + |
| | | ", trevisionoid='" + trevisionoid + '\'' + |
| | | ", tnameoid='" + tnameoid + '\'' + |
| | | ", tbtmname='" + tbtmname + '\'' + |
| | | ", ts=" + ts + |
| | | ", data=" + data + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.pagemodel; |
| | | |
| | | import com.vci.starter.web.annotation.Transient; |
| | | |
| | | import java.util.Date; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * å¹³å°çåºæ¬æ¾ç¤ºå¯¹è±¡ |
| | | * @author weidy |
| | | */ |
| | | public class BaseModelVO implements java.io.Serializable{ |
| | | |
| | | |
| | | /** |
| | | * ä¸»é® |
| | | */ |
| | | private String oid; |
| | | |
| | | /** |
| | | * ä»£å· |
| | | */ |
| | | private String id; |
| | | |
| | | /** |
| | | * åç§° |
| | | */ |
| | | private String name; |
| | | |
| | | /** |
| | | * æè¿° |
| | | */ |
| | | private String description; |
| | | |
| | | /** |
| | | * çæ¬çä¸»é® |
| | | */ |
| | | private String revisionOid; |
| | | |
| | | /** |
| | | * åç§°çä¸»é® |
| | | */ |
| | | private String nameOid; |
| | | |
| | | /** |
| | | * ä¸å¡ç±»åçåç§° |
| | | */ |
| | | private String btmname; |
| | | |
| | | /** |
| | | * æ¯å¦æåçæ¬¡ |
| | | */ |
| | | private String lastR; |
| | | |
| | | |
| | | /** |
| | | * æ¯å¦æåçæ¬¡ |
| | | */ |
| | | private String firstR; |
| | | |
| | | /** |
| | | * æ¯å¦ææ°çæ¬ |
| | | */ |
| | | private String lastV; |
| | | |
| | | |
| | | /** |
| | | * æ¯å¦ææ©çæ¬ |
| | | */ |
| | | private String firstV; |
| | | |
| | | /** |
| | | * å建人 |
| | | */ |
| | | private String creator; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | | */ |
| | | private Date createTime; |
| | | |
| | | /** |
| | | * æåä¿®æ¹äºº |
| | | */ |
| | | private String lastModifier; |
| | | |
| | | /** |
| | | * æåä¿®æ¹æ¶é´ï¼æ ¼å¼æ¯yyyy-MM-dd HH:mm:ss.SSS |
| | | */ |
| | | private Date lastModifyTime; |
| | | |
| | | /** |
| | | * çæ¬è§å |
| | | */ |
| | | private String revisionRule; |
| | | |
| | | /** |
| | | * çæ¬åºå· |
| | | */ |
| | | private int revisionSeq; |
| | | |
| | | /** |
| | | * çæ¬å¼ |
| | | */ |
| | | private String revisionValue; |
| | | |
| | | |
| | | /** |
| | | * çæ¬¡è§å |
| | | */ |
| | | private String versionRule; |
| | | |
| | | /** |
| | | * çæ¬¡æåº |
| | | */ |
| | | private int versionSeq; |
| | | |
| | | /** |
| | | * çæ¬¡å¼ |
| | | */ |
| | | private String versionValue; |
| | | |
| | | |
| | | /** |
| | | * çå½å¨æå¼ |
| | | */ |
| | | private String lcStatus; |
| | | |
| | | /** |
| | | * çå½å¨ææ¾ç¤ºææ¬ |
| | | */ |
| | | private String lcStatusText; |
| | | |
| | | /** |
| | | * æ¶é´æ³ï¼æ ¼å¼æ¯yyyy-MM-dd HH:mm:ss.SSS |
| | | */ |
| | | private Date ts; |
| | | |
| | | /** |
| | | * æ¥æè
ï¼ä¸å建è
æåºå«ï¼å¸¸ç¨äºæ§å¶æ°æ®æé |
| | | */ |
| | | private String owner; |
| | | |
| | | /** |
| | | * ç¾å
¥äºº--ç¾å
¥åç¾åºæ°æ®æ¯äºæ¥ |
| | | */ |
| | | private String checkInBy; |
| | | |
| | | /** |
| | | * ç¾å
¥æ¶é´ |
| | | */ |
| | | private Date checkInTime; |
| | | |
| | | /** |
| | | * ç¾åºäºº |
| | | */ |
| | | private String checkOutBy; |
| | | |
| | | /** |
| | | * ç¾åºæ¶é´ |
| | | */ |
| | | private Date checkOutTime; |
| | | |
| | | /** |
| | | * ä»åªä¸ªçæ¬æ·è´ |
| | | */ |
| | | private String copyFromVersion; |
| | | |
| | | /** |
| | | * å¯çº§ |
| | | */ |
| | | private Integer secretGrade; |
| | | |
| | | /** |
| | | * å¯çº§æ¾ç¤ºææ¬ |
| | | */ |
| | | private String secretGradeText; |
| | | |
| | | /** |
| | | * çå½å¨æçåç§° |
| | | */ |
| | | private String lctid; |
| | | |
| | | /** |
| | | * æ©å±ç屿§ |
| | | */ |
| | | @Transient |
| | | private Map<String,String> data; |
| | | |
| | | public String getOid() { |
| | | return oid; |
| | | } |
| | | |
| | | public void setOid(String oid) { |
| | | this.oid = oid; |
| | | } |
| | | |
| | | public String getId() { |
| | | return id; |
| | | } |
| | | |
| | | public void setId(String id) { |
| | | this.id = id; |
| | | } |
| | | |
| | | public String getName() { |
| | | return name; |
| | | } |
| | | |
| | | public void setName(String name) { |
| | | this.name = name; |
| | | } |
| | | |
| | | public String getDescription() { |
| | | return description; |
| | | } |
| | | |
| | | public void setDescription(String description) { |
| | | this.description = description; |
| | | } |
| | | |
| | | public String getRevisionOid() { |
| | | return revisionOid; |
| | | } |
| | | |
| | | public void setRevisionOid(String revisionOid) { |
| | | this.revisionOid = revisionOid; |
| | | } |
| | | |
| | | public String getNameOid() { |
| | | return nameOid; |
| | | } |
| | | |
| | | public void setNameOid(String nameOid) { |
| | | this.nameOid = nameOid; |
| | | } |
| | | |
| | | public String getBtmname() { |
| | | return btmname; |
| | | } |
| | | |
| | | public void setBtmname(String btmname) { |
| | | this.btmname = btmname; |
| | | } |
| | | |
| | | public String getLastR() { |
| | | return lastR; |
| | | } |
| | | |
| | | public void setLastR(String lastR) { |
| | | this.lastR = lastR; |
| | | } |
| | | |
| | | public String getFirstR() { |
| | | return firstR; |
| | | } |
| | | |
| | | public void setFirstR(String firstR) { |
| | | this.firstR = firstR; |
| | | } |
| | | |
| | | public String getLastV() { |
| | | return lastV; |
| | | } |
| | | |
| | | public void setLastV(String lastV) { |
| | | this.lastV = lastV; |
| | | } |
| | | |
| | | public String getFirstV() { |
| | | return firstV; |
| | | } |
| | | |
| | | public void setFirstV(String firstV) { |
| | | this.firstV = firstV; |
| | | } |
| | | |
| | | public String getCreator() { |
| | | return creator; |
| | | } |
| | | |
| | | public void setCreator(String creator) { |
| | | this.creator = creator; |
| | | } |
| | | |
| | | public String getLastModifier() { |
| | | return lastModifier; |
| | | } |
| | | |
| | | public void setLastModifier(String lastModifier) { |
| | | this.lastModifier = lastModifier; |
| | | } |
| | | |
| | | public Date getLastModifyTime() { |
| | | return lastModifyTime; |
| | | } |
| | | |
| | | public void setLastModifyTime(Date lastModifyTime) { |
| | | this.lastModifyTime = lastModifyTime; |
| | | } |
| | | |
| | | public String getRevisionRule() { |
| | | return revisionRule; |
| | | } |
| | | |
| | | public void setRevisionRule(String revisionRule) { |
| | | this.revisionRule = revisionRule; |
| | | } |
| | | |
| | | public String getVersionRule() { |
| | | return versionRule; |
| | | } |
| | | |
| | | public void setVersionRule(String versionRule) { |
| | | this.versionRule = versionRule; |
| | | } |
| | | |
| | | public int getRevisionSeq() { |
| | | return revisionSeq; |
| | | } |
| | | |
| | | public void setRevisionSeq(int revisionSeq) { |
| | | this.revisionSeq = revisionSeq; |
| | | } |
| | | |
| | | public String getRevisionValue() { |
| | | return revisionValue; |
| | | } |
| | | |
| | | public void setRevisionValue(String revisionValue) { |
| | | this.revisionValue = revisionValue; |
| | | } |
| | | |
| | | public int getVersionSeq() { |
| | | return versionSeq; |
| | | } |
| | | |
| | | public void setVersionSeq(int versionSeq) { |
| | | this.versionSeq = versionSeq; |
| | | } |
| | | |
| | | public String getVersionValue() { |
| | | return versionValue; |
| | | } |
| | | |
| | | public void setVersionValue(String versionValue) { |
| | | this.versionValue = versionValue; |
| | | } |
| | | |
| | | |
| | | public String getLcStatus() { |
| | | return lcStatus; |
| | | } |
| | | |
| | | public void setLcStatus(String lcStatus) { |
| | | this.lcStatus = lcStatus; |
| | | } |
| | | |
| | | public Date getTs() { |
| | | return ts; |
| | | } |
| | | |
| | | public void setTs(Date ts) { |
| | | this.ts = ts; |
| | | } |
| | | |
| | | public String getOwner() { |
| | | return owner; |
| | | } |
| | | |
| | | public void setOwner(String owner) { |
| | | this.owner = owner; |
| | | } |
| | | |
| | | public String getCheckInBy() { |
| | | return checkInBy; |
| | | } |
| | | |
| | | public void setCheckInBy(String checkInBy) { |
| | | this.checkInBy = checkInBy; |
| | | } |
| | | |
| | | public Date getCheckInTime() { |
| | | return checkInTime; |
| | | } |
| | | |
| | | public void setCheckInTime(Date checkInTime) { |
| | | this.checkInTime = checkInTime; |
| | | } |
| | | |
| | | public String getCheckOutBy() { |
| | | return checkOutBy; |
| | | } |
| | | |
| | | public void setCheckOutBy(String checkOutBy) { |
| | | this.checkOutBy = checkOutBy; |
| | | } |
| | | |
| | | public Date getCheckOutTime() { |
| | | return checkOutTime; |
| | | } |
| | | |
| | | public void setCheckOutTime(Date checkOutTime) { |
| | | this.checkOutTime = checkOutTime; |
| | | } |
| | | |
| | | public String getCopyFromVersion() { |
| | | return copyFromVersion; |
| | | } |
| | | |
| | | public void setCopyFromVersion(String copyFromVersion) { |
| | | this.copyFromVersion = copyFromVersion; |
| | | } |
| | | |
| | | public String getLcStatusText() { |
| | | return lcStatusText; |
| | | } |
| | | |
| | | public void setLcStatusText(String lcStatusText) { |
| | | this.lcStatusText = lcStatusText; |
| | | } |
| | | |
| | | public Date getCreateTime() { |
| | | return createTime; |
| | | } |
| | | |
| | | public void setCreateTime(Date createTime) { |
| | | this.createTime = createTime; |
| | | } |
| | | |
| | | public Integer getSecretGrade() { |
| | | return secretGrade; |
| | | } |
| | | |
| | | public void setSecretGrade(Integer secretGrade) { |
| | | this.secretGrade = secretGrade; |
| | | } |
| | | |
| | | public String getSecretGradeText() { |
| | | return secretGradeText; |
| | | } |
| | | |
| | | public void setSecretGradeText(String secretGradeText) { |
| | | this.secretGradeText = secretGradeText; |
| | | } |
| | | |
| | | public String getLctid() { |
| | | return lctid; |
| | | } |
| | | |
| | | public void setLctid(String lctid) { |
| | | this.lctid = lctid; |
| | | } |
| | | |
| | | public Map<String, String> getData() { |
| | | return data; |
| | | } |
| | | |
| | | public void setData(Map<String, String> data) { |
| | | this.data = data; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "BaseModelVO{" + |
| | | "oid='" + oid + '\'' + |
| | | ", id='" + id + '\'' + |
| | | ", name='" + name + '\'' + |
| | | ", description='" + description + '\'' + |
| | | ", revisionOid='" + revisionOid + '\'' + |
| | | ", nameOid='" + nameOid + '\'' + |
| | | ", btmname='" + btmname + '\'' + |
| | | ", lastR='" + lastR + '\'' + |
| | | ", firstR='" + firstR + '\'' + |
| | | ", lastV='" + lastV + '\'' + |
| | | ", firstV='" + firstV + '\'' + |
| | | ", creator='" + creator + '\'' + |
| | | ", createTime=" + createTime + |
| | | ", lastModifier='" + lastModifier + '\'' + |
| | | ", lastModifyTime=" + lastModifyTime + |
| | | ", revisionRule='" + revisionRule + '\'' + |
| | | ", revisionSeq=" + revisionSeq + |
| | | ", revisionValue='" + revisionValue + '\'' + |
| | | ", versionRule='" + versionRule + '\'' + |
| | | ", versionSeq=" + versionSeq + |
| | | ", versionValue='" + versionValue + '\'' + |
| | | ", lcStatus='" + lcStatus + '\'' + |
| | | ", lcStatusText='" + lcStatusText + '\'' + |
| | | ", ts=" + ts + |
| | | ", owner='" + owner + '\'' + |
| | | ", checkInBy='" + checkInBy + '\'' + |
| | | ", checkInTime=" + checkInTime + |
| | | ", checkOutBy='" + checkOutBy + '\'' + |
| | | ", checkOutTime=" + checkOutTime + |
| | | ", copyFromVersion='" + copyFromVersion + '\'' + |
| | | ", secretGrade=" + secretGrade + |
| | | ", secretGradeText='" + secretGradeText + '\'' + |
| | | ", lctid='" + lctid + '\'' + |
| | | ", data=" + data + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.pagemodel; |
| | | |
| | | |
| | | import com.alibaba.fastjson.annotation.JSONField; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * æ¥è¯¢æ¡ä»¶ ï¼ç»å¸¸ç¨äºcontrollerçæ¹æ³ä¸ï¼ç¨äºæ¥æ¶å端ç请æ±åæ° |
| | | * äºèç½äº§åä¸ä¸æ¨èè¿æ ·çæ¹å¼ï¼ä¸æ¹ä¾¿ç»´æ¤ |
| | | * 使¯å¨ä¼ ç»è¡ä¸å 为èèå°æ¥è¯¢æ¡ä»¶è¿å¤ï¼æ¥è¯¢çæ¹å¼å¤æå¤æ ·åï¼å æ¤å»ºè®®ä½¿ç¨è¿ç§æ¹å¼ |
| | | * å端éè¦ä¼ éçåæ°æ¹å¼åºè¯¥ä¸ºâconditionMap['xxxx']=yyy; xxxæ¯å±æ§çåç§°ï¼yyyæ¯æ¥è¯¢æ¡ä»¶çå¼ |
| | | * è¿ä¸ªå¯¹è±¡éå·²ç»å
å«äºåé¡µä¿¡æ¯ |
| | | */ |
| | | public class BaseQueryObject implements java.io.Serializable{ |
| | | |
| | | /** |
| | | * é»è®¤æé 彿° |
| | | */ |
| | | public BaseQueryObject(){ |
| | | |
| | | } |
| | | |
| | | /** |
| | | * æé 彿°ï¼æ·»å æ¥è¯¢æ¡ä»¶ |
| | | * @param conditionMap æ¥è¯¢æ¡ä»¶ |
| | | */ |
| | | public BaseQueryObject(Map<String,String> conditionMap){ |
| | | this.setConditionMap(conditionMap); |
| | | } |
| | | |
| | | /** |
| | | * æé 彿°ï¼è®¾ç½®åé¡µæ° |
| | | * @param limit æ¯é¡µæ¾ç¤ºæå¤§æ° |
| | | */ |
| | | public BaseQueryObject(int limit){ |
| | | this.setLimit(limit); |
| | | } |
| | | |
| | | /** |
| | | * æé 彿°ï¼æ·»å æ¥è¯¢æ¡ä»¶ååé¡µæ° |
| | | * @param conditionMap æ¥è¯¢æ¡ä»¶ |
| | | * @param limit æ¯é¡µæ¾ç¤ºæå¤§æ° |
| | | */ |
| | | public BaseQueryObject(Map<String,String> conditionMap,int limit){ |
| | | this.setConditionMap(conditionMap); |
| | | this.setLimit(limit); |
| | | } |
| | | |
| | | /** |
| | | * ç¦æ¢ä¿®æ¹è¿ä¸ªå¼ |
| | | */ |
| | | @JSONField(serialize = false,deserialize = false) |
| | | private static final long serialVersionUID = 5608634730007623041L; |
| | | /** |
| | | * æ¥è¯¢æ¡ä»¶çæ å°å
³ç³» |
| | | */ |
| | | @JSONField() |
| | | private Map<String,String> conditionMap = new HashMap<String, String>(); |
| | | |
| | | /** |
| | | * å½å页 |
| | | */ |
| | | @JSONField() |
| | | private int page = 1; |
| | | // å½å页 |
| | | /** |
| | | * æåºå段 |
| | | */ |
| | | @JSONField() |
| | | private String sort; |
| | | // æåºå段 ---åç«¯åªæ¯æä½¿ç¨ä¸ä¸ªåæ®µæ¥æåºï¼ä½æ¯åå°å®é
å¯ä»¥ä½¿ç¨å¤ä¸ªåæ®µæ¥æåºï¼æä»¥å¯ä»¥ä½¿ç¨éå·åå² |
| | | /** |
| | | * æåºç±»å |
| | | */ |
| | | @JSONField() |
| | | private String order; |
| | | // asc/desc,妿æå¤ä¸ªæåºå段æ¶ï¼è¿éä¹éè¦ç¨éå·åå²ï¼ä¸ä¸sortçä½ç½®å¯¹åº |
| | | |
| | | /** |
| | | * æ¯é¡µæ¾ç¤ºé¡µæ° |
| | | */ |
| | | @JSONField() |
| | | private int limit = 25;//æ¯é¡µæ¾ç¤ºçæ¡æ° |
| | | |
| | | /** |
| | | * è·åæ¥è¯¢æ¡ä»¶ |
| | | * @return æ¥è¯¢æ¡ä»¶æ å°ï¼keyæ¯åæ®µè±æåç§°ï¼valueæ¯æ¥è¯¢çå¼ |
| | | */ |
| | | public Map<String, String> getConditionMap() { |
| | | return conditionMap; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®æµç§°è·åæ¥è¯¢æ¡ä»¶ |
| | | * @param nick è¡¨æ ¼çæµç§° |
| | | * @return 带æ.ç䏿·»å è¡¨æ ¼æµç§° |
| | | */ |
| | | public Map<String,String> getConditionMapByNick(String nick){ |
| | | if(conditionMap!=null){ |
| | | Map<String,String> conditionMapHasNick = new HashMap<>(); |
| | | conditionMap.forEach( (k,v) -> { |
| | | if(!k.contains(".")){ |
| | | conditionMapHasNick.put(nick + "." + k,v); |
| | | }else{ |
| | | conditionMapHasNick.put(k,v); |
| | | } |
| | | }); |
| | | return conditionMapHasNick; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 设置æ¥è¯¢æ¡ä»¶ |
| | | * @param conditionMap æ¥è¯¢æ¡ä»¶çæ å°å
³ç³» |
| | | */ |
| | | public void setConditionMap(Map<String, String> conditionMap) { |
| | | this.conditionMap = conditionMap; |
| | | } |
| | | |
| | | public int getPage() { |
| | | return page; |
| | | } |
| | | |
| | | public void setPage(int page) { |
| | | this.page = page; |
| | | } |
| | | |
| | | public String getSort() { |
| | | return sort; |
| | | } |
| | | |
| | | public void setSort(String sort) { |
| | | this.sort = sort; |
| | | } |
| | | |
| | | public String getOrder() { |
| | | return order; |
| | | } |
| | | |
| | | public void setOrder(String order) { |
| | | this.order = order; |
| | | } |
| | | |
| | | public int getLimit() { |
| | | return limit; |
| | | } |
| | | |
| | | public void setLimit(int limit) { |
| | | this.limit = limit; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¥è¯¢å¯¹è±¡ä¸çå页对象 |
| | | * @return å页对象 |
| | | */ |
| | | @JSONField(serialize = false,deserialize = false) |
| | | public PageHelper getPageHelper(){ |
| | | PageHelper pageHelper = new PageHelper(limit); |
| | | pageHelper.setPage(getPage()); |
| | | pageHelper.setSort(getSort()); |
| | | pageHelper.setOrder(getOrder()); |
| | | return pageHelper; |
| | | } |
| | | |
| | | /** |
| | | * å¢å æåº |
| | | * @param sort æåºå段 |
| | | * @param order æåºæ¹å¼ |
| | | * @return å½å对象 |
| | | */ |
| | | public BaseQueryObject addSort(String sort, String order){ |
| | | this.setSort(StringUtils.isBlank(this.getSort())?sort:(this.getSort() + "," + sort) ); |
| | | this.setOrder(StringUtils.isBlank(this.getOrder())?order:(this.getOrder() + "," + order)); |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * å¢å æ¥è¯¢æ¥è¯¢æ¡ä»¶ |
| | | * @param key æ¥è¯¢æ¡ä»¶ |
| | | * @param value å¼ |
| | | * @return å½å对象 |
| | | */ |
| | | public BaseQueryObject addCondition(String key,String value){ |
| | | if(this.getConditionMap() == null){ |
| | | this.conditionMap = new HashMap<>(); |
| | | } |
| | | this.conditionMap.put(key,value); |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * 设置å页çä¿¡æ¯ |
| | | * @param pageHelper å页对象 |
| | | * @return å½å对象 |
| | | */ |
| | | public BaseQueryObject page(PageHelper pageHelper){ |
| | | this.setSort(pageHelper.getSort()); |
| | | this.setOrder(pageHelper.getOrder()); |
| | | this.setPage(pageHelper.getPage()); |
| | | this.setLimit(pageHelper.getLimit()); |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * è·åfeign请æ±çåæ°æ å°ï¼ä¸è¬å¨getæ¹æ³çæ¶åæä½¿ç¨ |
| | | * @return æ¥è¯¢æ¡ä»¶ï¼å页åæåºçä¿¡æ¯ï¼keyæ¯åæ°ç对象ï¼valueæ¯åæ°çå¼ |
| | | */ |
| | | @JSONField(serialize = false,deserialize = false) |
| | | public Map<String,String> getFeignRequestMap(){ |
| | | Map<String,String> feignRequestMap = new HashMap<>(); |
| | | //æ¥è¯¢æ¡ä»¶ |
| | | if(this.conditionMap!=null){ |
| | | this.getConditionMap().forEach( (k,v) -> { |
| | | feignRequestMap.put( "conditionMap[\"" + k + "\"]",v); |
| | | }); |
| | | } |
| | | //å页 |
| | | feignRequestMap.put("page",this.getPage() + ""); |
| | | feignRequestMap.put("limit",this.getLimit() + ""); |
| | | //æåº |
| | | feignRequestMap.put("sort",this.getSort()); |
| | | feignRequestMap.put("order",this.getOrder()); |
| | | return feignRequestMap; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "BaseQueryObject{" + |
| | | "conditionMap=" + conditionMap + |
| | | ", page=" + page + |
| | | ", sort='" + sort + '\'' + |
| | | ", order='" + order + '\'' + |
| | | ", limit=" + limit + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.pagemodel; |
| | | |
| | | import com.vci.starter.web.enumpck.ResultCodeEnum; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | import java.util.Arrays; |
| | | import java.util.Collection; |
| | | |
| | | /** |
| | | * ç»ä¸çæ°æ®è¿å对象ï¼ä¿è¯feignãrestTemplateæè
å
¶ä»rest请æ±å®¢æ·ç«¯å¯ä»¥ç»ä¸å¤ç |
| | | * @author weidy |
| | | * @date 2019/12/3 6:57 PM |
| | | */ |
| | | public class BaseResult<T> implements java.io.Serializable{ |
| | | |
| | | /** |
| | | * ç¦æ¢ä¿®æ¹è¿ä¸ªå¼ |
| | | */ |
| | | private static final long serialVersionUID = 4746146117790499683L; |
| | | |
| | | /** |
| | | * æ¯å¦æå |
| | | */ |
| | | private boolean success = false; |
| | | |
| | | /** |
| | | * æç¤ºä¿¡æ¯ |
| | | */ |
| | | private String msg = ""; |
| | | |
| | | /** |
| | | * æç¤ºæ¶æ¯å¤è¯ |
| | | */ |
| | | private Object[] msgObjs; |
| | | |
| | | /** |
| | | * å
嫿°æ®å¯¹è±¡ |
| | | */ |
| | | private T obj = null; |
| | | |
| | | /** |
| | | * ä¸å¡ç¼ç |
| | | */ |
| | | private int code = ResultCodeEnum.FAIL.code; |
| | | |
| | | /** |
| | | * é¾è·¯çIDï¼ç¨äºè¿½æ¥éè¯¯ä¿¡æ¯ |
| | | */ |
| | | private String traceId; |
| | | |
| | | /** |
| | | * 请æ±é¾è·¯çIDï¼ä¸æ¯æ¥å¿çé¾è·¯ï¼å¯ä»¥ç¨äºæ§å¶å¹çæ§ |
| | | */ |
| | | private String requestTraceId; |
| | | |
| | | /** |
| | | * å¼å¸¸çç±»åç§° |
| | | */ |
| | | private String exceptionClassName; |
| | | |
| | | /** |
| | | * å¼å¸¸çç¼å· |
| | | */ |
| | | private String exceptionCode; |
| | | |
| | | /** |
| | | * å¼å¸¸çé误对象 |
| | | */ |
| | | private Object[] exceptionObjs; |
| | | |
| | | /** |
| | | * 宿æ¶é´ |
| | | */ |
| | | private long finishTime; |
| | | |
| | | /** |
| | | * åè¡¨æ»æ°,extjsåeasyui使ç¨totalï¼layui使ç¨count,è¿éç»ä¸ä¸ºtotal,layuiå¯ä»¥å¨table.jséä¿®æ¹æºç ï¼ |
| | | */ |
| | | private long total = 0; |
| | | |
| | | /** |
| | | * æ°æ®ï¼easyui使ç¨çrows, extjsålayuié»è®¤ä¸ºdata;easyuiä¹å¯ä»¥ä¿®æ¹ä¸ºdataï¼å æ¤å使ç¨data |
| | | */ |
| | | private Collection<T> data ; |
| | | |
| | | /** |
| | | * æ çæ°æ® |
| | | */ |
| | | private Collection<Tree> treeData; |
| | | |
| | | public Object[] getMsgObjs() { |
| | | return msgObjs; |
| | | } |
| | | |
| | | public void setMsgObjs(Object[] msgObjs) { |
| | | this.msgObjs = msgObjs; |
| | | } |
| | | |
| | | public boolean isSuccess() { |
| | | return success; |
| | | } |
| | | |
| | | public void setSuccess(boolean success) { |
| | | this.success = success; |
| | | } |
| | | |
| | | public String getMsg() { |
| | | return msg; |
| | | } |
| | | |
| | | public void setMsg(String msg) { |
| | | this.msg = msg; |
| | | } |
| | | |
| | | public T getObj() { |
| | | return obj; |
| | | } |
| | | |
| | | public void setObj(T obj) { |
| | | this.obj = obj; |
| | | } |
| | | |
| | | public int getCode() { |
| | | return code; |
| | | } |
| | | |
| | | public void setCode(int code) { |
| | | this.code = code; |
| | | } |
| | | |
| | | public String getTraceId() { |
| | | return traceId; |
| | | } |
| | | |
| | | public void setTraceId(String traceId) { |
| | | this.traceId = traceId; |
| | | } |
| | | |
| | | public String getRequestTraceId() { |
| | | return requestTraceId; |
| | | } |
| | | |
| | | public void setRequestTraceId(String requestTraceId) { |
| | | this.requestTraceId = requestTraceId; |
| | | } |
| | | |
| | | public String getExceptionClassName() { |
| | | return exceptionClassName; |
| | | } |
| | | |
| | | public void setExceptionClassName(String exceptionClassName) { |
| | | this.exceptionClassName = exceptionClassName; |
| | | } |
| | | |
| | | public String getExceptionCode() { |
| | | return exceptionCode; |
| | | } |
| | | |
| | | public void setExceptionCode(String exceptionCode) { |
| | | this.exceptionCode = exceptionCode; |
| | | } |
| | | |
| | | public Object[] getExceptionObjs() { |
| | | return exceptionObjs; |
| | | } |
| | | |
| | | public void setExceptionObjs(Object[] exceptionObjs) { |
| | | this.exceptionObjs = exceptionObjs; |
| | | } |
| | | |
| | | public long getFinishTime() { |
| | | return finishTime; |
| | | } |
| | | |
| | | public void setFinishTime(long finishTime) { |
| | | this.finishTime = finishTime; |
| | | } |
| | | |
| | | public long getTotal() { |
| | | return total; |
| | | } |
| | | |
| | | public void setTotal(long total) { |
| | | this.total = total; |
| | | } |
| | | |
| | | public Collection<T> getData() { |
| | | return data; |
| | | } |
| | | |
| | | public void setData(Collection<T> data) { |
| | | this.data = data; |
| | | } |
| | | |
| | | public Collection<Tree> getTreeData() { |
| | | return treeData; |
| | | } |
| | | |
| | | public void setTreeData(Collection<Tree> treeData) { |
| | | this.treeData = treeData; |
| | | } |
| | | |
| | | /** |
| | | * æåï¼æ²¡æä»»ä½è¿åä¿¡æ¯ |
| | | * @return è¿åç»ä¸æ°æ®å¯¹è±¡ |
| | | */ |
| | | public static BaseResult success(){ |
| | | return success(null); |
| | | } |
| | | |
| | | /** |
| | | * æåï¼æè¿åæ°æ® |
| | | * @param obj è¿åçæ°æ® |
| | | * @param <T> æ°æ®ç±»å |
| | | * @return è¿åç»ä¸æ°æ®å¯¹è±¡ |
| | | */ |
| | | public static <T> BaseResult<T> success(T obj){ |
| | | BaseResult<T> baseResult = new BaseResult<>(); |
| | | baseResult.setSuccess(true); |
| | | baseResult.setCode(ResultCodeEnum.SUCCESS.code); |
| | | baseResult.setObj(obj); |
| | | return baseResult; |
| | | } |
| | | |
| | | /** |
| | | * æåï¼æè¿åæ°æ® |
| | | * @param obj è¿åçæ°æ® |
| | | * @param <T> æ°æ®ç±»å |
| | | * @param msg æç¤ºä¿¡æ¯ |
| | | * @return è¿åç»ä¸æ°æ®å¯¹è±¡ |
| | | */ |
| | | public static <T> BaseResult<T> success(T obj,String msg){ |
| | | BaseResult<T> baseResult = new BaseResult<>(); |
| | | baseResult.setSuccess(true); |
| | | baseResult.setCode(ResultCodeEnum.SUCCESS.code); |
| | | baseResult.setObj(obj); |
| | | baseResult.setMsg(msg); |
| | | return baseResult; |
| | | } |
| | | |
| | | /** |
| | | * æåï¼æè¿åæ°æ® |
| | | * @param obj è¿åçæ°æ® |
| | | * @param <T> æ°æ®ç±»å |
| | | * @param msg æç¤ºä¿¡æ¯ |
| | | * @param msgObjs ç¨äºæ ¼å¼åæ¶æ¯ç¨ç对象 |
| | | * @return è¿åç»ä¸æ°æ®å¯¹è±¡ |
| | | */ |
| | | public static <T> BaseResult<T> success(T obj,String msg,Object...msgObjs){ |
| | | BaseResult<T> baseResult = new BaseResult<>(); |
| | | baseResult.setSuccess(true); |
| | | baseResult.setCode(ResultCodeEnum.SUCCESS.code); |
| | | baseResult.setObj(obj); |
| | | baseResult.setMsg(msg); |
| | | return baseResult; |
| | | } |
| | | |
| | | /** |
| | | * æåï¼è䏿æç¤ºä¿¡æ¯ |
| | | * @param msg æç¤ºä¿¡æ¯ |
| | | * @return è¿åç»ä¸æ°æ®å¯¹è±¡ |
| | | */ |
| | | public static BaseResult successMsg(String msg){ |
| | | BaseResult baseResult = new BaseResult(); |
| | | baseResult.setSuccess(true); |
| | | baseResult.setCode(ResultCodeEnum.SUCCESS.code); |
| | | baseResult.setMsg(msg); |
| | | return baseResult; |
| | | } |
| | | |
| | | /** |
| | | * æåï¼è䏿æç¤ºä¿¡æ¯ |
| | | * @param msg æç¤ºä¿¡æ¯ |
| | | * @param msgObjs ç¨äºæ ¼å¼åæ¶æ¯ç¨ç对象 |
| | | * @return è¿åç»ä¸æ°æ®å¯¹è±¡ |
| | | */ |
| | | public static BaseResult successMsg(String msg,Object...msgObjs){ |
| | | BaseResult baseResult = new BaseResult(); |
| | | baseResult.setSuccess(true); |
| | | baseResult.setCode(ResultCodeEnum.SUCCESS.code); |
| | | baseResult.setMsg(msg); |
| | | baseResult.setMsgObjs(msgObjs); |
| | | return baseResult; |
| | | } |
| | | |
| | | /** |
| | | * 失败ï¼å
å«éè¯¯ä¿¡æ¯ |
| | | * @param msg æ¶æ¯å
容 |
| | | * @return è¿åç»ä¸æ°æ®å¯¹è±¡ |
| | | */ |
| | | public static BaseResult fail(String msg){ |
| | | return makeResult(ResultCodeEnum.FAIL.code,msg,null); |
| | | } |
| | | |
| | | /** |
| | | * 失败ï¼å
å«é误信æ¯,ä¸å
å«ç¨äºæ ¼å¼åæ¶æ¯ç¨ç对象 |
| | | * @param msg æ¶æ¯å
容 |
| | | * @param msgObjs ç¨äºæ ¼å¼åæ¶æ¯ç¨ç对象 |
| | | * @return è¿åç»ä¸æ°æ®å¯¹è±¡ |
| | | */ |
| | | public static BaseResult fail(String msg,Object...msgObjs){ |
| | | BaseResult baseResult = makeResult(ResultCodeEnum.FAIL.code,msg,null); |
| | | baseResult.setMsgObjs(msgObjs); |
| | | return baseResult; |
| | | } |
| | | |
| | | /** |
| | | * é误ï¼å
å«éè¯¯ä¿¡æ¯ |
| | | * @param msg éè¯¯æ¶æ¯ |
| | | * @return è¿åç»ä¸æ°æ®å¯¹è±¡ |
| | | */ |
| | | public static BaseResult error(String msg){ |
| | | return makeResult(ResultCodeEnum.INTERNAL_SERVER_ERROR.code,msg,null); |
| | | } |
| | | |
| | | /** |
| | | * å建è¿å对象 |
| | | * @param code ç¶æç |
| | | * @param msg éè¯¯æ¶æ¯ |
| | | * @param obj æ°æ®å¯¹è±¡ |
| | | * @param <T> æ°æ®å¯¹è±¡çæå±ç±»å |
| | | * @return ç»ä¸æ°æ®å¯¹è±¡ |
| | | */ |
| | | public static <T> BaseResult<T> makeResult(int code,String msg,T obj){ |
| | | BaseResult<T> baseResult = new BaseResult<>(); |
| | | baseResult.setSuccess(false); |
| | | baseResult.setCode(code); |
| | | baseResult.setMsg(msg); |
| | | baseResult.setObj(obj); |
| | | return baseResult; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®å表è·åç»ä¸æ°æ®å¯¹è±¡ |
| | | * @param dataGrid åè¡¨æ°æ® |
| | | * @param <T> å表çå
ç´ ç±»å |
| | | * @return ç»ä¸æ°æ®å¯¹è±¡ |
| | | */ |
| | | public static <T> BaseResult<T> dataGrid(DataGrid<T> dataGrid){ |
| | | BaseResult<T> baseResult = new BaseResult<>(); |
| | | if(dataGrid ==null){ |
| | | baseResult.setCode(ResultCodeEnum.SUCCESS.code); |
| | | baseResult.setSuccess(true); |
| | | }else{ |
| | | if(StringUtils.isNotBlank(dataGrid.getMsg())){ |
| | | baseResult.setCode(ResultCodeEnum.FAIL.code); |
| | | baseResult.setSuccess(false); |
| | | baseResult.setMsg(dataGrid.getMsg()); |
| | | }else{ |
| | | baseResult.setCode(ResultCodeEnum.SUCCESS.code); |
| | | baseResult.setSuccess(true); |
| | | baseResult.setData(dataGrid.getData()); |
| | | baseResult.setTotal(dataGrid.getTotal()); |
| | | } |
| | | } |
| | | return baseResult; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * æ ¹æ®å表è·åç»ä¸æ°æ®å¯¹è±¡ |
| | | * @param treeList æ èç¹éå |
| | | * @return ç»ä¸æ°æ®å¯¹è±¡ |
| | | */ |
| | | public static BaseResult tree(Collection<Tree> treeList){ |
| | | BaseResult baseResult = new BaseResult<>(); |
| | | baseResult.setCode(ResultCodeEnum.SUCCESS.code); |
| | | baseResult.setSuccess(true); |
| | | baseResult.setTreeData(treeList); |
| | | return baseResult; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "BaseResult{" + |
| | | "success=" + success + |
| | | ", msg='" + msg + '\'' + |
| | | ", obj=" + obj + |
| | | ", code='" + code + '\'' + |
| | | ", traceId='" + traceId + '\'' + |
| | | ", requestTraceId='" + requestTraceId + '\'' + |
| | | ", exceptionClassName='" + exceptionClassName + '\'' + |
| | | ", exceptionCode='" + exceptionCode + '\'' + |
| | | ", exceptionObjs=" + Arrays.toString(exceptionObjs) + |
| | | ", finishTime=" + finishTime + |
| | | ", total=" + total + |
| | | ", data=" + data + |
| | | ", treeData=" + treeData + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.pagemodel; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * å表è¿åæ°æ®æ¨¡å |
| | | * |
| | | * @author weidy |
| | | * |
| | | */ |
| | | |
| | | public class DataGrid<T> implements java.io.Serializable { |
| | | /** |
| | | * ç¦æ¢ä¿®æ¹è¿ä¸ªå¼ |
| | | * @serial |
| | | */ |
| | | private static final long serialVersionUID = -5909212697362510055L; |
| | | |
| | | /** |
| | | * æé 彿° |
| | | */ |
| | | public DataGrid(){ |
| | | |
| | | } |
| | | |
| | | /** |
| | | * æé 彿° |
| | | * @param msg æ¶æ¯ |
| | | */ |
| | | public DataGrid(String msg){ |
| | | this.msg = msg; |
| | | this.code = 1; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * æ»æ°,extjsåeasyui使ç¨totalï¼layui使ç¨count,è¿éç»ä¸ä¸ºtotal,layuiå¯ä»¥å¨table.jséä¿®æ¹æºç ï¼ |
| | | */ |
| | | private long total = 0; |
| | | /** |
| | | * æ°æ®ï¼easyui使ç¨çrows, extjsålayuié»è®¤ä¸ºdata;easyuiä¹å¯ä»¥ä¿®æ¹ä¸ºdataï¼å æ¤å使ç¨data |
| | | */ |
| | | private List<T> data = new ArrayList<T>(); |
| | | /** |
| | | * æ°æ®å¼å§çä½ç½® |
| | | */ |
| | | private int start; |
| | | /** |
| | | * æ¯é¡µæ¾ç¤ºå¤å°è¡ |
| | | */ |
| | | private int limit; |
| | | /** |
| | | * å½åé¡µæ° |
| | | */ |
| | | private int page; |
| | | /** |
| | | * æåºå段 |
| | | */ |
| | | private String sort; |
| | | /** |
| | | * æåºæ¹å¼ |
| | | */ |
| | | private String order; |
| | | |
| | | /** |
| | | * è¿åç»åç«¯çæ¶æ¯ï¼ |
| | | */ |
| | | private String msg; |
| | | |
| | | /** |
| | | * å®æç¶æï¼layuiå¿
须使ç¨è¿ä¸ªç¶ææ¥å¤ææ¯å¦æ§è¡æåï¼extjsåeasyuiå¯ä»¥ä¸ç¨ï¼å æ¤é»è®¤è¿ä¸ªå¼ä¸º0ï¼è¡¨ç¤ºæåï¼; |
| | | * 使¯easyuiåextjså¯ä»¥ä½¿ç¨codeæ¥ä¼ éç¹æ®çæ°æ® |
| | | */ |
| | | private int code = 0; |
| | | |
| | | /** |
| | | * é¾è·¯çidï¼ç¨äºè¿½æ¥æ¥å¿ä¿¡æ¯ |
| | | */ |
| | | private String traceId; |
| | | |
| | | public long getTotal() { |
| | | return total; |
| | | } |
| | | |
| | | public void setTotal(long total) { |
| | | this.total = total; |
| | | } |
| | | |
| | | public List<T> getData() { |
| | | return data; |
| | | } |
| | | |
| | | public void setData(List<T> data) { |
| | | this.data = data; |
| | | } |
| | | |
| | | public int getStart() { |
| | | return start; |
| | | } |
| | | |
| | | public void setStart(int start) { |
| | | this.start = start; |
| | | } |
| | | |
| | | public int getLimit() { |
| | | return limit; |
| | | } |
| | | |
| | | public void setLimit(int limit) { |
| | | this.limit = limit; |
| | | } |
| | | |
| | | public int getPage() { |
| | | return page; |
| | | } |
| | | |
| | | public void setPage(int page) { |
| | | this.page = page; |
| | | } |
| | | |
| | | public String getSort() { |
| | | return sort; |
| | | } |
| | | |
| | | public void setSort(String sort) { |
| | | this.sort = sort; |
| | | } |
| | | |
| | | public String getOrder() { |
| | | return order; |
| | | } |
| | | |
| | | public void setOrder(String order) { |
| | | this.order = order; |
| | | } |
| | | |
| | | public String getMsg() { |
| | | return msg; |
| | | } |
| | | |
| | | public void setMsg(String msg) { |
| | | this.msg = msg; |
| | | } |
| | | |
| | | public int getCode() { |
| | | return code; |
| | | } |
| | | |
| | | public void setCode(int code) { |
| | | this.code = code; |
| | | } |
| | | |
| | | public String getTraceId() { |
| | | return traceId; |
| | | } |
| | | |
| | | public void setTraceId(String traceId) { |
| | | this.traceId = traceId; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "DataGrid{" + |
| | | "total=" + total + |
| | | ", data=" + data + |
| | | ", start=" + start + |
| | | ", limit=" + limit + |
| | | ", page=" + page + |
| | | ", sort='" + sort + '\'' + |
| | | ", order='" + order + '\'' + |
| | | ", msg='" + msg + '\'' + |
| | | ", code=" + code + |
| | | ", traceId='" + traceId + '\'' + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.pagemodel; |
| | | |
| | | |
| | | /** |
| | | * excel导å
¥ç»æ |
| | | * @author weidy |
| | | */ |
| | | public class ImportResult implements java.io.Serializable { |
| | | |
| | | /** |
| | | * ç¦æ¢ä¿®æ¹è¿ä¸ªå¼ |
| | | */ |
| | | private static final long serialVersionUID = 9043151147701785650L; |
| | | /** |
| | | * æ°å¢æ°æ®ä¸ªæ° |
| | | */ |
| | | private int addCount; |
| | | |
| | | /** |
| | | * ä¿®æ¹æ°æ®çä¸ªæ° |
| | | */ |
| | | private int editCount; |
| | | |
| | | /** |
| | | * å 餿°æ®çä¸ªæ° |
| | | */ |
| | | private int deleteCount; |
| | | |
| | | /** |
| | | * å¿½ç¥æ°æ®çä¸ªæ° |
| | | */ |
| | | private int unDoCount; |
| | | |
| | | /** |
| | | * æ¯å¦æå |
| | | */ |
| | | private boolean success; |
| | | |
| | | /** |
| | | * éè¯¯ä¿¡æ¯ |
| | | */ |
| | | private String msg; |
| | | |
| | | /** |
| | | * è¿åç»æä»£å· |
| | | */ |
| | | private String resultCode; |
| | | |
| | | /** |
| | | * è¿åç»æå¯¹è±¡ |
| | | */ |
| | | private Object returnObj; |
| | | |
| | | /** |
| | | * é¾è·¯çID |
| | | */ |
| | | private String traceId; |
| | | |
| | | /** |
| | | * æé æ¹æ³ |
| | | * @param msg æ¶æ¯ |
| | | */ |
| | | public ImportResult(String msg){ |
| | | this.success = false; |
| | | this.msg = msg; |
| | | } |
| | | |
| | | /** |
| | | * æé æ¹æ³ |
| | | * @param success æ¯å¦æå |
| | | */ |
| | | public ImportResult(boolean success){ |
| | | this.success = success; |
| | | } |
| | | |
| | | public int getAddCount() { |
| | | return addCount; |
| | | } |
| | | |
| | | public void setAddCount(int addCount) { |
| | | this.addCount = addCount; |
| | | } |
| | | |
| | | public int getEditCount() { |
| | | return editCount; |
| | | } |
| | | |
| | | public void setEditCount(int editCount) { |
| | | this.editCount = editCount; |
| | | } |
| | | |
| | | public int getDeleteCount() { |
| | | return deleteCount; |
| | | } |
| | | |
| | | public void setDeleteCount(int deleteCount) { |
| | | this.deleteCount = deleteCount; |
| | | } |
| | | |
| | | public int getUnDoCount() { |
| | | return unDoCount; |
| | | } |
| | | |
| | | public void setUnDoCount(int unDoCount) { |
| | | this.unDoCount = unDoCount; |
| | | } |
| | | |
| | | public boolean isSuccess() { |
| | | return success; |
| | | } |
| | | |
| | | public void setSuccess(boolean success) { |
| | | this.success = success; |
| | | } |
| | | |
| | | public String getMsg() { |
| | | return msg; |
| | | } |
| | | |
| | | public void setMsg(String msg) { |
| | | this.msg = msg; |
| | | } |
| | | |
| | | public String getResultCode() { |
| | | return resultCode; |
| | | } |
| | | |
| | | public void setResultCode(String resultCode) { |
| | | this.resultCode = resultCode; |
| | | } |
| | | |
| | | public Object getReturnObj() { |
| | | return returnObj; |
| | | } |
| | | |
| | | public void setReturnObj(Object returnObj) { |
| | | this.returnObj = returnObj; |
| | | } |
| | | |
| | | |
| | | public String getTraceId() { |
| | | return traceId; |
| | | } |
| | | |
| | | public void setTraceId(String traceId) { |
| | | this.traceId = traceId; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "ImportResult{" + |
| | | "addCount=" + addCount + |
| | | ", editCount=" + editCount + |
| | | ", deleteCount=" + deleteCount + |
| | | ", unDoCount=" + unDoCount + |
| | | ", success=" + success + |
| | | ", msg='" + msg + '\'' + |
| | | ", resultCode='" + resultCode + '\'' + |
| | | ", returnObj=" + returnObj + |
| | | ", traceId='" + traceId + '\'' + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.pagemodel; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * é®å¼å¯¹ |
| | | * @author weidy |
| | | */ |
| | | public class KeyValue implements java.io.Serializable { |
| | | |
| | | /** |
| | | * ç¦æ¢ä¿®æ¹è¿ä¸ªå¼ |
| | | */ |
| | | private static final long serialVersionUID = 7708882804529442626L; |
| | | |
| | | /** |
| | | * é® |
| | | */ |
| | | private String key; |
| | | |
| | | /** |
| | | * å¼ |
| | | */ |
| | | private String value; |
| | | |
| | | /** |
| | | * å
¶ä»å±æ§ |
| | | */ |
| | | private Map<String,Object> attributes = new HashMap<String, Object>(); |
| | | |
| | | public String getKey() { |
| | | return key; |
| | | } |
| | | |
| | | public void setKey(String key) { |
| | | this.key = key; |
| | | } |
| | | |
| | | public String getValue() { |
| | | return value; |
| | | } |
| | | |
| | | public void setValue(String value) { |
| | | this.value = value; |
| | | } |
| | | |
| | | public Map<String, Object> getAttributes() { |
| | | return attributes; |
| | | } |
| | | |
| | | public void setAttributes(Map<String, Object> attributes) { |
| | | this.attributes = attributes; |
| | | } |
| | | |
| | | public void addAttr(String attr, Object attrValue){ |
| | | this.attributes.put(attr, attrValue); |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "KeyValue{" + |
| | | "key='" + key + '\'' + |
| | | ", value='" + value + '\'' + |
| | | ", attributes=" + attributes + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.pagemodel; |
| | | |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | import java.util.HashSet; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * ExtJsï¼easyui,layui å页帮å©ç±» |
| | | * |
| | | * @author weidy |
| | | * |
| | | */ |
| | | public class PageHelper implements java.io.Serializable { |
| | | /** |
| | | * åºåå |
| | | */ |
| | | private static final long serialVersionUID = -588765760880887850L; |
| | | /** |
| | | * å½å页 |
| | | */ |
| | | private int page; |
| | | // å½å页 |
| | | /** |
| | | * æåºå段 |
| | | */ |
| | | private String sort; |
| | | // æåºå段 ---åç«¯åªæ¯æä½¿ç¨ä¸ä¸ªåæ®µæ¥æåºï¼ä½æ¯åå°å®é
å¯ä»¥ä½¿ç¨å¤ä¸ªåæ®µæ¥æåºï¼æä»¥å¯ä»¥ä½¿ç¨éå·åå² |
| | | /** |
| | | * æåºç±»å |
| | | */ |
| | | private String order; |
| | | // asc/desc,妿æå¤ä¸ªæåºå段æ¶ï¼è¿éä¹éè¦ç¨éå·åå²ï¼ä¸ä¸sortçä½ç½®å¯¹åº |
| | | /** |
| | | * èµ·å§æ°æ®è¡æ° |
| | | */ |
| | | private int start = 0; |
| | | /** |
| | | * æ¯é¡µæ¾ç¤ºé¡µæ° |
| | | */ |
| | | private int limit = 25; |
| | | //æ¯é¡µæ¾ç¤ºçæ¡æ° |
| | | |
| | | /** |
| | | * æ¯å¦è¦æ¯ææ¾ç¤ºæ»é¡µæ°åæ»æ¡æ°----卿°æ®é巨大çæ
åµä¸ï¼å¯ä»¥ä¸æ¥è¯¢æ»æ° |
| | | */ |
| | | private boolean queryTotal = true; |
| | | |
| | | /** |
| | | * æåºçSQL |
| | | */ |
| | | private String ordersql ; |
| | | |
| | | /** |
| | | * è¡¨çæµç§° |
| | | */ |
| | | private String nick; |
| | | |
| | | /** |
| | | * ååº |
| | | */ |
| | | public final String asc = "asc"; |
| | | |
| | | /** |
| | | * éåº |
| | | */ |
| | | public final String desc = "desc"; |
| | | /** |
| | | * ä¸ä½¿ç¨è¡¨æµç§°çåæ®µ |
| | | */ |
| | | private Set<String> unNickField = new HashSet<>(); |
| | | |
| | | /** |
| | | * é»è®¤æé 彿° |
| | | */ |
| | | public PageHelper(){ |
| | | |
| | | } |
| | | |
| | | /** |
| | | * æé 彿°ï¼è®¾ç½®åé¡µæ° |
| | | * @param limit åé¡µæ° |
| | | */ |
| | | public PageHelper(int limit){ |
| | | this.limit = limit; |
| | | this.page = 1; |
| | | } |
| | | |
| | | /** |
| | | * æé 彿°ï¼è®¾ç½®å页æ°åæ¯å¦æ¥è¯¢æ»æ° |
| | | * @param limit åé¡µæ° |
| | | * @param queryTotal æ¥è¯¢æ»æ° |
| | | */ |
| | | public PageHelper(int limit,boolean queryTotal){ |
| | | this.limit = limit; |
| | | this.queryTotal = queryTotal; |
| | | } |
| | | |
| | | /** |
| | | * æé 彿°ï¼è¿ç§ååºçæåºå段 |
| | | * @param sort ååºçåæ®µ |
| | | */ |
| | | public PageHelper(String sort){ |
| | | this.sort = sort; |
| | | this.limit = -1; |
| | | this.order = "asc"; |
| | | } |
| | | |
| | | /** |
| | | * æé 彿°ï¼è®¾ç½®æåºå段åæåºæ¹å¼ |
| | | * @param sort æåºå段 |
| | | * @param order æåºæ¹å¼ |
| | | */ |
| | | public PageHelper(String sort, String order){ |
| | | this.sort = sort; |
| | | this.limit = -1; |
| | | this.order = order; |
| | | } |
| | | |
| | | /** |
| | | * æé 彿°ï¼è®¾ç½®åé¡µï¼æåºå段åæåºæ¹å¼ |
| | | * @param limit åé¡µæ° |
| | | * @param sort æåºå段 |
| | | * @param order æåºæ¹å¼ |
| | | */ |
| | | public PageHelper(int limit, String sort, String order){ |
| | | this.limit = limit; |
| | | this.sort = sort; |
| | | this.order = order; |
| | | } |
| | | |
| | | /** |
| | | * æé 彿°ï¼è®¾ç½®åé¡µï¼æåºå段åæåºæ¹å¼ |
| | | * @param limit åé¡µæ° |
| | | * @param page å½å页 |
| | | * @param sort æåºå段 |
| | | * @param order æåºæ¹å¼ |
| | | */ |
| | | public PageHelper(int limit, int page, String sort, String order){ |
| | | this.limit = limit; |
| | | this.page = page; |
| | | this.sort = sort; |
| | | this.order = order; |
| | | } |
| | | |
| | | /** |
| | | * è·åå½å页 |
| | | * @return å½åé¡µæ° |
| | | */ |
| | | public int getPage() { |
| | | return page; |
| | | } |
| | | |
| | | /** |
| | | * 设置å½å页ï¼ä¼èªå¨è®¡ç®æ°æ®èµ·å§è¡æ° |
| | | * @param page å½å页 |
| | | */ |
| | | public void setPage(int page) { |
| | | this.page = page; |
| | | if(page>0&&this.limit>0){ |
| | | start = (this.page-1)*this.limit; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 设置æåºå段 |
| | | * @param sort æåºå段 |
| | | */ |
| | | public void setSort(String sort) { |
| | | this.sort = sort; |
| | | } |
| | | |
| | | /** |
| | | * è·åæåºæ¹å¼ |
| | | * @return æåºæ¹å¼ |
| | | */ |
| | | public String getOrder() { |
| | | return order; |
| | | } |
| | | |
| | | /** |
| | | * 设置æåºæ¹å¼ |
| | | * @param order æåºæ¹å¼ |
| | | */ |
| | | public void setOrder(String order) { |
| | | this.order = order; |
| | | } |
| | | |
| | | /** |
| | | * è·åèµ·å§æ° |
| | | * @return è¡èµ·å§æ° |
| | | */ |
| | | public int getStart() { |
| | | if(this.limit <=0){ |
| | | return 0; |
| | | }else{ |
| | | return (this.page-1)*this.limit + 1; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦æ¥è¯¢æ»æ° |
| | | * @return true表示æ¥è¯¢ï¼é»è®¤ä¸ºtrue |
| | | */ |
| | | public boolean isQueryTotal() { |
| | | return queryTotal; |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦æ¥è¯¢æ»æ° |
| | | * @param queryTotal æ¯å¦æ¥è¯¢æ»æ° |
| | | */ |
| | | public void setQueryTotal(boolean queryTotal) { |
| | | this.queryTotal = queryTotal; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¯é¡µæ¾ç¤ºå¤å°è¡ |
| | | * @return æ¯é¡µæ¾ç¤ºè¡æ° |
| | | */ |
| | | public int getLimit() { |
| | | return limit; |
| | | } |
| | | |
| | | /** |
| | | * 设置æ¯é¡µæ¾ç¤ºè¡æ° |
| | | * @param limit æ¯é¡µæ¾ç¤ºè¡æ° |
| | | */ |
| | | public void setLimit(int limit) { |
| | | this.limit = limit; |
| | | if(page>0&&this.limit>0){ |
| | | start = (this.page-1)*this.limit + 1; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å¢å æåº |
| | | * @param sort æåºå段 |
| | | * @param order æåºæ¹å¼ |
| | | */ |
| | | public void addSort(String sort, String order){ |
| | | this.setSort(StringUtils.isBlank(this.getSort())?sort:(this.getSort() + "," + sort) ); |
| | | this.setOrder(StringUtils.isBlank(this.getOrder())?order:(this.getOrder() + "," + order)); |
| | | } |
| | | |
| | | /** |
| | | * å¢å ååº |
| | | * @param field ååºçåæ®µ |
| | | */ |
| | | public void addAsc(String field){ |
| | | this.addSort(field,asc); |
| | | } |
| | | |
| | | /** |
| | | * 卿²¡ææåºçæ¶åææ·»å é»è®¤çååºæååæ®µ |
| | | * @param field é»è®¤çååºçåæ®µ |
| | | */ |
| | | public void addDefaultAsc(String field){ |
| | | if(StringUtils.isBlank(this.getSort()) && StringUtils.isBlank(this.getOrder())){ |
| | | this.addAsc(field); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 卿²¡ææåºçæ¶åææ·»å é»è®¤çéåºæååæ®µ |
| | | * @param field é»è®¤çéåºçåæ®µ |
| | | */ |
| | | public void addDefaultDesc(String field){ |
| | | if(StringUtils.isBlank(this.getSort()) && StringUtils.isBlank(this.getOrder())){ |
| | | this.addDesc(field); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å¢å éåº |
| | | * @param field éåºçåæ®µ |
| | | */ |
| | | public void addDesc(String field){ |
| | | this.addSort(field,desc); |
| | | } |
| | | |
| | | /** |
| | | * è·åæåºå段 |
| | | * @return æåºå段 |
| | | */ |
| | | public String getSort() { |
| | | return sort; |
| | | } |
| | | |
| | | /** |
| | | * è®¾ç½®èµ·å§æ° |
| | | * @param start èµ·å§æ° |
| | | */ |
| | | public void setStart(int start) { |
| | | this.start = start; |
| | | } |
| | | |
| | | /** |
| | | * è·åæåºçSQLè¯å¥ï¼å¨Hibernateéä½¿ç¨ |
| | | * @return æåºçSQL |
| | | */ |
| | | public String getOrdersql() { |
| | | if(ordersql == null || ordersql.trim().length() == 0){ |
| | | if(sort !=null && sort.trim().length() >0 && order !=null && order.trim().length() > 0){ |
| | | if(sort.indexOf(",") > -1){ |
| | | String[] sortArray = sort.split(","); |
| | | String[] orderArray = order.split(","); |
| | | StringBuilder sb = new StringBuilder(); |
| | | for(int i = 0 ; i < sortArray.length ; i ++){ |
| | | if(StringUtils.isNotBlank(sortArray[i]) |
| | | && orderArray.length > i |
| | | && StringUtils.isNotBlank(orderArray[i])) { |
| | | if(sortArray[i].indexOf(".")<0) { |
| | | //䏿¯åç
§ |
| | | if(!unNickField.contains(sortArray[i].toLowerCase())) { |
| | | sb.append(StringUtils.isBlank(this.getNick()) ? "" : (this.getNick() + ".")); |
| | | } |
| | | } |
| | | sb.append(sortArray[i].toLowerCase()); |
| | | sb.append(" "); |
| | | sb.append(orderArray[i]); |
| | | sb.append(","); |
| | | } |
| | | } |
| | | ordersql = " order by " + sb.toString(); |
| | | if(ordersql.endsWith(",")){ |
| | | ordersql = ordersql.substring(0,ordersql.length()-1); |
| | | } |
| | | }else { |
| | | ordersql = " order by " + sort + " " + order; |
| | | } |
| | | } |
| | | } |
| | | return ordersql; |
| | | } |
| | | |
| | | /** |
| | | * è·åæåºçSQLè¯å¥ï¼å¨Hibernateéä½¿ç¨ |
| | | * @param nick æµç§° |
| | | * @return æåºçSQL |
| | | */ |
| | | public String getOrderSql(String nick){ |
| | | if(ordersql == null || ordersql.trim().length() == 0){ |
| | | if(sort !=null && sort.trim().length() >0 && order !=null && order.trim().length() > 0){ |
| | | if(sort.indexOf(",") > -1){ |
| | | String[] sortArray = sort.split(","); |
| | | String[] orderArray = order.split(","); |
| | | StringBuilder sb = new StringBuilder(); |
| | | for(int i = 0 ; i < sortArray.length ; i ++){ |
| | | if(StringUtils.isNotBlank(sortArray[i]) |
| | | && orderArray.length > i |
| | | && StringUtils.isNotBlank(orderArray[i])) { |
| | | if(sortArray[i].indexOf(".")<0) { |
| | | //䏿¯åç
§ |
| | | sb.append(StringUtils.isBlank(nick) ? "" : (nick + ".")); |
| | | } |
| | | sb.append(sortArray[i].toLowerCase()); |
| | | sb.append(" "); |
| | | sb.append(orderArray[i]); |
| | | sb.append(","); |
| | | } |
| | | } |
| | | ordersql = " order by " + sb.toString(); |
| | | if(ordersql.endsWith(",")){ |
| | | ordersql = ordersql.substring(0,ordersql.length()-1); |
| | | } |
| | | }else { |
| | | ordersql = " order by " + nick + "." + sort + " " + order; |
| | | } |
| | | } |
| | | } |
| | | return ordersql; |
| | | } |
| | | |
| | | public String getNick() { |
| | | return nick; |
| | | } |
| | | |
| | | public void setNick(String nick) { |
| | | this.nick = nick; |
| | | } |
| | | |
| | | /** |
| | | * 设置æåºçåæ®µ |
| | | * @param ordersql æåºå段 |
| | | */ |
| | | public void setOrdersql(String ordersql) { |
| | | this.ordersql = ordersql; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "PageHelper{" + |
| | | "page=" + page + |
| | | ", sort='" + sort + '\'' + |
| | | ", order='" + order + '\'' + |
| | | ", start=" + start + |
| | | ", limit=" + limit + |
| | | ", queryTotal=" + queryTotal + |
| | | ", ordersql='" + ordersql + '\'' + |
| | | ", nick='" + nick + '\'' + |
| | | ", asc='" + asc + '\'' + |
| | | ", desc='" + desc + '\'' + |
| | | ", unNickField=" + unNickField + |
| | | '}'; |
| | | } |
| | | |
| | | public Set<String> getUnNickField() { |
| | | return unNickField; |
| | | } |
| | | |
| | | public void setUnNickField(Set<String> unNickField) { |
| | | this.unNickField = unNickField; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.pagemodel; |
| | | |
| | | /** |
| | | * 客æ·ç«¯è¯·æ±ä¿¡æ¯ |
| | | * @author weidy |
| | | */ |
| | | public class RequestClientInfo implements java.io.Serializable{ |
| | | |
| | | /** |
| | | * ç¦æ¢ä¿®æ¹è¿ä¸ª |
| | | */ |
| | | private static final long serialVersionUID = -2574607667597721739L; |
| | | |
| | | /** |
| | | * 请æ±è®¿é®æ¹å¼ï¼æµè§å¨ï¼APPï¼wapï¼ |
| | | */ |
| | | private String requestType = "browser"; |
| | | |
| | | /** |
| | | * æµè§å¨æ¹å¼ |
| | | */ |
| | | private String browser = ""; |
| | | |
| | | /** |
| | | * æµè§å¨ççæ¬ |
| | | */ |
| | | private String browserversion = ""; |
| | | |
| | | /** |
| | | * ç³»ç»ççæ¬ |
| | | */ |
| | | private String osversion = ""; |
| | | |
| | | /** |
| | | * ipå°å |
| | | */ |
| | | private String ipaddress = ""; |
| | | |
| | | /** |
| | | * æ¯å¦åç¹ç»å½ |
| | | */ |
| | | private boolean sso; |
| | | |
| | | /** |
| | | * åç¹ç»å½çåç§° |
| | | */ |
| | | private String ssoSystemName; |
| | | |
| | | /** |
| | | * åç¹ç»å½çtoken |
| | | */ |
| | | private String ssoToken; |
| | | |
| | | public String getRequestType() { |
| | | return requestType; |
| | | } |
| | | |
| | | public void setRequestType(String requestType) { |
| | | this.requestType = requestType; |
| | | } |
| | | |
| | | public String getBrowser() { |
| | | return browser; |
| | | } |
| | | |
| | | public void setBrowser(String browser) { |
| | | this.browser = browser; |
| | | } |
| | | |
| | | public String getBrowserversion() { |
| | | return browserversion; |
| | | } |
| | | |
| | | public void setBrowserversion(String browserversion) { |
| | | this.browserversion = browserversion; |
| | | } |
| | | |
| | | public String getOsversion() { |
| | | return osversion; |
| | | } |
| | | |
| | | public void setOsversion(String osversion) { |
| | | this.osversion = osversion; |
| | | } |
| | | |
| | | public String getIpaddress() { |
| | | return ipaddress; |
| | | } |
| | | |
| | | public void setIpaddress(String ipaddress) { |
| | | this.ipaddress = ipaddress; |
| | | } |
| | | |
| | | public boolean isSso() { |
| | | return sso; |
| | | } |
| | | |
| | | public void setSso(boolean sso) { |
| | | this.sso = sso; |
| | | } |
| | | |
| | | public String getSsoSystemName() { |
| | | return ssoSystemName; |
| | | } |
| | | |
| | | public void setSsoSystemName(String ssoSystemName) { |
| | | this.ssoSystemName = ssoSystemName; |
| | | } |
| | | |
| | | public String getSsoToken() { |
| | | return ssoToken; |
| | | } |
| | | |
| | | public void setSsoToken(String ssoToken) { |
| | | this.ssoToken = ssoToken; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "RequestClientInfo{" + |
| | | "requestType='" + requestType + '\'' + |
| | | ", browser='" + browser + '\'' + |
| | | ", browserversion='" + browserversion + '\'' + |
| | | ", osversion='" + osversion + '\'' + |
| | | ", ipaddress='" + ipaddress + '\'' + |
| | | ", sso=" + sso + |
| | | ", ssoSystemName='" + ssoSystemName + '\'' + |
| | | ", ssoToken='" + ssoToken + '\'' + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.pagemodel; |
| | | |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * sessionä¿¡æ¯æ¨¡å |
| | | * |
| | | * @author weidy |
| | | * |
| | | */ |
| | | public class SessionInfo implements java.io.Serializable { |
| | | |
| | | /** |
| | | * ç¦æ¢ä¿®æ¹è¿ä¸ªå¼ |
| | | * @serial |
| | | */ |
| | | private static final long serialVersionUID = 7950268190988911233L; |
| | | /** |
| | | * ç¨æ·æå±ç»ç»ä¸»é® |
| | | */ |
| | | private String orgsOid; |
| | | /** |
| | | * ç¨æ·æå±ç»ç»åç§° |
| | | */ |
| | | private String orgsName; |
| | | /** |
| | | * æå±é¨é¨ä¸»é® |
| | | */ |
| | | private String deptOid; |
| | | /** |
| | | * æå±é¨é¨åç§° |
| | | */ |
| | | private String deptName; |
| | | /** |
| | | * æå±ç¨æ·ä¸»é® |
| | | */ |
| | | private String userOid; |
| | | /** |
| | | * ç¨æ·å |
| | | */ |
| | | private String userId; |
| | | /** |
| | | * å§å |
| | | */ |
| | | private String userName; |
| | | |
| | | /** |
| | | * ç¨æ·èº«ä»½ä¸»é® |
| | | */ |
| | | private String personOid; |
| | | |
| | | /** |
| | | * 身份ç¼å·ï¼äººåï¼ |
| | | */ |
| | | private String personId; |
| | | |
| | | /** |
| | | * ç¨æ·èº«ä»½åç§° |
| | | */ |
| | | private String personName; |
| | | |
| | | /** |
| | | * æå±èå¡ |
| | | */ |
| | | private String dutyOid; |
| | | |
| | | /** |
| | | * æå±èå¡åç§° |
| | | */ |
| | | private String dutyName; |
| | | /** |
| | | * æå±äººåç» |
| | | */ |
| | | private String workgroupOid; |
| | | /** |
| | | * æå±äººåç»åç§° |
| | | */ |
| | | private String workgroupName; |
| | | |
| | | /** |
| | | * æå±å·¥ç§ |
| | | */ |
| | | private String workTypeOid; |
| | | |
| | | /** |
| | | * æå±å·¥ç§åç§° |
| | | */ |
| | | private String workTypeName; |
| | | /** |
| | | * ç¨æ·ç±»å |
| | | */ |
| | | private String usertype; |
| | | /** |
| | | * ç¨æ·ç±»åææ¬ |
| | | */ |
| | | private String usertypeText; |
| | | /** |
| | | * æ§å« |
| | | */ |
| | | private String sex; |
| | | /** |
| | | * æ§å«åç§° |
| | | */ |
| | | private String sexText; |
| | | /** |
| | | * è§è²åç§° |
| | | */ |
| | | private Map<String,String> rolesName; |
| | | /** |
| | | * ææçæéåè½ä¸»é® |
| | | */ |
| | | private List<String> functionOids;//å½åç¨æ·çææçæéçä¸»é® |
| | | |
| | | /** |
| | | * ææçæéåè½æä½ |
| | | */ |
| | | private Map<String, Integer> functionOperaMap; |
| | | |
| | | /** |
| | | * 头åå°å |
| | | */ |
| | | private String photoUrl; |
| | | |
| | | /** |
| | | * IPå°å |
| | | */ |
| | | private String ip;//ipå°å |
| | | /** |
| | | * è¯è¨ |
| | | */ |
| | | private String language;//è¯ç§ |
| | | |
| | | /** |
| | | * ç¨æ·å¯çº§ |
| | | */ |
| | | private String userSecret; |
| | | |
| | | /** |
| | | * ç¨æ·å¯çº§ææ¬ |
| | | */ |
| | | private String userSecretText; |
| | | |
| | | /** |
| | | * ipå¯çº§ |
| | | */ |
| | | private String ipSecret; |
| | | |
| | | /** |
| | | * ipå¯çº§ææ¬ |
| | | */ |
| | | private String ipSecretText; |
| | | |
| | | /** |
| | | * ç»å½æºå¨ä¿¡æ¯ |
| | | */ |
| | | private String machine;//æºå¨ä¿¡æ¯ |
| | | |
| | | /** |
| | | * æä½ç³»ç» |
| | | */ |
| | | private String os;//æä½ç³»ç»ä¿¡æ¯ |
| | | /** |
| | | * æµè§å¨çæ¬ |
| | | */ |
| | | private String browser;//æµè§å¨ä¿¡æ¯ |
| | | /** |
| | | * æä½ç³»ç»ç¨æ·å |
| | | */ |
| | | private String osUser;//æä½ç³»ç»ç¨æ·ä¿¡æ¯ |
| | | |
| | | /** |
| | | * ç§»å¨è®¾å¤çä¿¡æ¯ |
| | | */ |
| | | private List<String> deviceInfo = new ArrayList<String>(); |
| | | |
| | | /** |
| | | * é®ä»¶ |
| | | */ |
| | | private String email; |
| | | |
| | | /** |
| | | * çµè¯å·ç |
| | | */ |
| | | private String phoneNo; |
| | | |
| | | /** |
| | | * RTXè´¦æ· |
| | | */ |
| | | private String rtxNo; |
| | | |
| | | /** |
| | | * 鍿·ç³»ç»ID |
| | | */ |
| | | private String portalId; |
| | | |
| | | /** |
| | | * 峿¶é讯ID |
| | | */ |
| | | private String IMId; |
| | | |
| | | /** |
| | | * æ¯å¦åç¹ç»å½ |
| | | */ |
| | | private boolean sso; |
| | | |
| | | /** |
| | | * åç¹ç»å½çæ¥æºç³»ç»åç§° |
| | | */ |
| | | private String ssoServiceName; |
| | | |
| | | /** |
| | | * 许å¯ç |
| | | */ |
| | | private String token; |
| | | |
| | | /** |
| | | * 对äºç¨æ·çå
¨å±åæ° |
| | | */ |
| | | private Map<String,String> globalAttributeMap = new HashMap<String, String>(); |
| | | |
| | | /** |
| | | * å·¥å·(çå·) |
| | | */ |
| | | private String workNo; |
| | | |
| | | /** |
| | | * æ¯å¦å¿
须修æ¹å¯ç |
| | | */ |
| | | private boolean isMustChangePassword = false; |
| | | |
| | | /** |
| | | * å¯ç ä¿¡æ¯ |
| | | */ |
| | | private String passwordInfo; |
| | | |
| | | public String getDutyOid() { |
| | | return dutyOid; |
| | | } |
| | | |
| | | public void setDutyOid(String dutyOid) { |
| | | this.dutyOid = dutyOid; |
| | | } |
| | | |
| | | public String getDutyName() { |
| | | return dutyName; |
| | | } |
| | | |
| | | public void setDutyName(String dutyName) { |
| | | this.dutyName = dutyName; |
| | | } |
| | | |
| | | public String getOrgsOid() { |
| | | return orgsOid; |
| | | } |
| | | |
| | | public void setOrgsOid(String orgsOid) { |
| | | this.orgsOid = orgsOid; |
| | | } |
| | | |
| | | public String getOrgsName() { |
| | | return orgsName; |
| | | } |
| | | |
| | | public void setOrgsName(String orgsName) { |
| | | this.orgsName = orgsName; |
| | | } |
| | | |
| | | public String getDeptOid() { |
| | | return deptOid; |
| | | } |
| | | |
| | | public void setDeptOid(String deptOid) { |
| | | this.deptOid = deptOid; |
| | | } |
| | | |
| | | public String getDeptName() { |
| | | return deptName; |
| | | } |
| | | |
| | | public void setDeptName(String deptName) { |
| | | this.deptName = deptName; |
| | | } |
| | | |
| | | public String getUserOid() { |
| | | return userOid; |
| | | } |
| | | |
| | | public void setUserOid(String userOid) { |
| | | this.userOid = userOid; |
| | | } |
| | | |
| | | public String getUserId() { |
| | | return userId; |
| | | } |
| | | |
| | | public void setUserId(String userId) { |
| | | this.userId = userId; |
| | | } |
| | | |
| | | public String getUserName() { |
| | | return userName; |
| | | } |
| | | |
| | | public void setUserName(String userName) { |
| | | this.userName = userName; |
| | | } |
| | | |
| | | public String getPersonOid() { |
| | | return personOid; |
| | | } |
| | | |
| | | public void setPersonOid(String personOid) { |
| | | this.personOid = personOid; |
| | | } |
| | | |
| | | public String getPersonName() { |
| | | return personName; |
| | | } |
| | | |
| | | public void setPersonName(String personName) { |
| | | this.personName = personName; |
| | | } |
| | | |
| | | public String getWorkgroupOid() { |
| | | return workgroupOid; |
| | | } |
| | | |
| | | public void setWorkgroupOid(String workgroupOid) { |
| | | this.workgroupOid = workgroupOid; |
| | | } |
| | | |
| | | public String getWorkgroupName() { |
| | | return workgroupName; |
| | | } |
| | | |
| | | public void setWorkgroupName(String workgroupName) { |
| | | this.workgroupName = workgroupName; |
| | | } |
| | | |
| | | public String getUsertype() { |
| | | return usertype; |
| | | } |
| | | |
| | | public void setUsertype(String usertype) { |
| | | this.usertype = usertype; |
| | | } |
| | | |
| | | public String getUsertypeText() { |
| | | return usertypeText; |
| | | } |
| | | |
| | | public void setUsertypeText(String usertypeText) { |
| | | this.usertypeText = usertypeText; |
| | | } |
| | | |
| | | public String getSex() { |
| | | return sex; |
| | | } |
| | | |
| | | public void setSex(String sex) { |
| | | this.sex = sex; |
| | | } |
| | | |
| | | public List<String> getFunctionOids() { |
| | | return functionOids; |
| | | } |
| | | |
| | | public void setFunctionOids(List<String> functionOids) { |
| | | this.functionOids = functionOids; |
| | | } |
| | | |
| | | |
| | | public String getPhotoUrl() { |
| | | return photoUrl; |
| | | } |
| | | |
| | | public void setPhotoUrl(String photoUrl) { |
| | | this.photoUrl = photoUrl; |
| | | } |
| | | |
| | | public String getIp() { |
| | | return ip; |
| | | } |
| | | |
| | | public void setIp(String ip) { |
| | | this.ip = ip; |
| | | } |
| | | |
| | | public String getLanguage() { |
| | | return language; |
| | | } |
| | | |
| | | public void setLanguage(String language) { |
| | | this.language = language; |
| | | } |
| | | |
| | | public String getUserSecret() { |
| | | return userSecret; |
| | | } |
| | | |
| | | public void setUserSecret(String userSecret) { |
| | | this.userSecret = userSecret; |
| | | } |
| | | |
| | | public String getUserSecretText() { |
| | | return userSecretText; |
| | | } |
| | | |
| | | public void setUserSecretText(String userSecretText) { |
| | | this.userSecretText = userSecretText; |
| | | } |
| | | |
| | | public String getIpSecret() { |
| | | return ipSecret; |
| | | } |
| | | |
| | | public void setIpSecret(String ipSecret) { |
| | | this.ipSecret = ipSecret; |
| | | } |
| | | |
| | | public String getIpSecretText() { |
| | | return ipSecretText; |
| | | } |
| | | |
| | | public void setIpSecretText(String ipSecretText) { |
| | | this.ipSecretText = ipSecretText; |
| | | } |
| | | |
| | | public String getMachine() { |
| | | return machine; |
| | | } |
| | | |
| | | public void setMachine(String machine) { |
| | | this.machine = machine; |
| | | } |
| | | |
| | | public String getOs() { |
| | | return os; |
| | | } |
| | | |
| | | public void setOs(String os) { |
| | | this.os = os; |
| | | } |
| | | |
| | | public String getBrowser() { |
| | | return browser; |
| | | } |
| | | |
| | | public void setBrowser(String browser) { |
| | | this.browser = browser; |
| | | } |
| | | |
| | | public String getOsUser() { |
| | | return osUser; |
| | | } |
| | | |
| | | public void setOsUser(String osUser) { |
| | | this.osUser = osUser; |
| | | } |
| | | |
| | | public List<String> getDeviceInfo() { |
| | | return deviceInfo; |
| | | } |
| | | |
| | | public void setDeviceInfo(List<String> deviceInfo) { |
| | | this.deviceInfo = deviceInfo; |
| | | } |
| | | |
| | | public String getEmail() { |
| | | return email; |
| | | } |
| | | |
| | | public void setEmail(String email) { |
| | | this.email = email; |
| | | } |
| | | |
| | | public String getPhoneNo() { |
| | | return phoneNo; |
| | | } |
| | | |
| | | public void setPhoneNo(String phoneNo) { |
| | | this.phoneNo = phoneNo; |
| | | } |
| | | |
| | | public String getRtxNo() { |
| | | return rtxNo; |
| | | } |
| | | |
| | | public void setRtxNo(String rtxNo) { |
| | | this.rtxNo = rtxNo; |
| | | } |
| | | |
| | | public String getPortalId() { |
| | | return portalId; |
| | | } |
| | | |
| | | public void setPortalId(String portalId) { |
| | | this.portalId = portalId; |
| | | } |
| | | |
| | | public String getIMId() { |
| | | return IMId; |
| | | } |
| | | |
| | | public void setIMId(String IMId) { |
| | | this.IMId = IMId; |
| | | } |
| | | |
| | | public boolean isSso() { |
| | | return sso; |
| | | } |
| | | |
| | | public void setSso(boolean sso) { |
| | | this.sso = sso; |
| | | } |
| | | |
| | | public String getSsoServiceName() { |
| | | return ssoServiceName; |
| | | } |
| | | |
| | | public void setSsoServiceName(String ssoServiceName) { |
| | | this.ssoServiceName = ssoServiceName; |
| | | } |
| | | |
| | | public String getToken() { |
| | | return token; |
| | | } |
| | | |
| | | public void setToken(String token) { |
| | | this.token = token; |
| | | } |
| | | |
| | | public Map<String, String> getGlobalAttributeMap() { |
| | | return globalAttributeMap; |
| | | } |
| | | |
| | | public void setGlobalAttributeMap(Map<String, String> globalAttributeMap) { |
| | | this.globalAttributeMap = globalAttributeMap; |
| | | } |
| | | |
| | | public String getPersonId() { |
| | | return personId; |
| | | } |
| | | |
| | | public void setPersonId(String personId) { |
| | | this.personId = personId; |
| | | } |
| | | |
| | | public String getSexText() { |
| | | return sexText; |
| | | } |
| | | |
| | | public void setSexText(String sexText) { |
| | | this.sexText = sexText; |
| | | } |
| | | |
| | | public Map<String, String> getRolesName() { |
| | | return rolesName; |
| | | } |
| | | |
| | | public void setRolesName(Map<String, String> rolesName) { |
| | | this.rolesName = rolesName; |
| | | } |
| | | |
| | | public String getWorkNo() { |
| | | return workNo; |
| | | } |
| | | |
| | | public void setWorkNo(String workNo) { |
| | | this.workNo = workNo; |
| | | } |
| | | |
| | | public String getWorkTypeOid() { |
| | | return workTypeOid; |
| | | } |
| | | |
| | | public void setWorkTypeOid(String workTypeOid) { |
| | | this.workTypeOid = workTypeOid; |
| | | } |
| | | |
| | | public String getWorkTypeName() { |
| | | return workTypeName; |
| | | } |
| | | |
| | | public void setWorkTypeName(String workTypeName) { |
| | | this.workTypeName = workTypeName; |
| | | } |
| | | |
| | | public boolean isMustChangePassword() { |
| | | return isMustChangePassword; |
| | | } |
| | | |
| | | public void setMustChangePassword(boolean mustChangePassword) { |
| | | isMustChangePassword = mustChangePassword; |
| | | } |
| | | |
| | | public String getPasswordInfo() { |
| | | return passwordInfo; |
| | | } |
| | | |
| | | public void setPasswordInfo(String passwordInfo) { |
| | | this.passwordInfo = passwordInfo; |
| | | } |
| | | |
| | | public Map<String, Integer> getFunctionOperaMap() { |
| | | return functionOperaMap; |
| | | } |
| | | |
| | | public void setFunctionOperaMap(Map<String, Integer> functionOperaMap) { |
| | | this.functionOperaMap = functionOperaMap; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "SessionInfo{" + |
| | | "orgsOid='" + orgsOid + '\'' + |
| | | ", orgsName='" + orgsName + '\'' + |
| | | ", deptOid='" + deptOid + '\'' + |
| | | ", deptName='" + deptName + '\'' + |
| | | ", userOid='" + userOid + '\'' + |
| | | ", userId='" + userId + '\'' + |
| | | ", userName='" + userName + '\'' + |
| | | ", personOid='" + personOid + '\'' + |
| | | ", personId='" + personId + '\'' + |
| | | ", personName='" + personName + '\'' + |
| | | ", dutyOid='" + dutyOid + '\'' + |
| | | ", dutyName='" + dutyName + '\'' + |
| | | ", workgroupOid='" + workgroupOid + '\'' + |
| | | ", workgroupName='" + workgroupName + '\'' + |
| | | ", workTypeOid='" + workTypeOid + '\'' + |
| | | ", workTypeName='" + workTypeName + '\'' + |
| | | ", usertype='" + usertype + '\'' + |
| | | ", usertypeText='" + usertypeText + '\'' + |
| | | ", sex='" + sex + '\'' + |
| | | ", sexText='" + sexText + '\'' + |
| | | ", rolesName=" + rolesName + |
| | | ", functionOids=" + functionOids + |
| | | ", functionOperaMap=" + functionOperaMap + |
| | | ", photoUrl='" + photoUrl + '\'' + |
| | | ", ip='" + ip + '\'' + |
| | | ", language='" + language + '\'' + |
| | | ", userSecret='" + userSecret + '\'' + |
| | | ", userSecretText='" + userSecretText + '\'' + |
| | | ", ipSecret='" + ipSecret + '\'' + |
| | | ", ipSecretText='" + ipSecretText + '\'' + |
| | | ", machine='" + machine + '\'' + |
| | | ", os='" + os + '\'' + |
| | | ", browser='" + browser + '\'' + |
| | | ", osUser='" + osUser + '\'' + |
| | | ", deviceInfo=" + deviceInfo + |
| | | ", email='" + email + '\'' + |
| | | ", phoneNo='" + phoneNo + '\'' + |
| | | ", rtxNo='" + rtxNo + '\'' + |
| | | ", portalId='" + portalId + '\'' + |
| | | ", IMId='" + IMId + '\'' + |
| | | ", sso=" + sso + |
| | | ", ssoServiceName='" + ssoServiceName + '\'' + |
| | | ", token='" + token + '\'' + |
| | | ", globalAttributeMap=" + globalAttributeMap + |
| | | ", workNo='" + workNo + '\'' + |
| | | ", isMustChangePassword=" + isMustChangePassword + |
| | | ", passwordInfo='" + passwordInfo + '\'' + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.pagemodel; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æ åæ°æ®,easyui,extjs,layuiéç¨ |
| | | * @author weidy |
| | | * |
| | | */ |
| | | public class Tree implements java.io.Serializable{ |
| | | |
| | | /** |
| | | * ç¦æ¢ä¿®æ¹è¿ä¸ªå¼ |
| | | * @serial åºååå¼ |
| | | */ |
| | | private static final long serialVersionUID = 6886695271635257882L; |
| | | |
| | | /** |
| | | * æé 彿° |
| | | */ |
| | | public Tree(){ |
| | | |
| | | } |
| | | |
| | | /** |
| | | * æé 彿° |
| | | * @param oid ä¸»é® |
| | | * @param text æ èç¹ææ¬ |
| | | */ |
| | | public Tree(String oid, String text){ |
| | | setOid(oid); |
| | | setText(text); |
| | | } |
| | | |
| | | /** |
| | | * ä¸»é® |
| | | */ |
| | | private String oid; |
| | | /** |
| | | * æ¾ç¤ºææ¬ |
| | | */ |
| | | private String text; |
| | | /** |
| | | * æ¯å¦å¶å |
| | | */ |
| | | private boolean leaf = false; |
| | | |
| | | /** |
| | | * æ¯å¦æ¾ç¤ºå¤éæ¡ |
| | | */ |
| | | private boolean showCheckbox = false; |
| | | /** |
| | | * æ¯å¦é»è®¤éä¸ |
| | | */ |
| | | private boolean checked = false; |
| | | |
| | | /** |
| | | * åèç¹ |
| | | */ |
| | | private List<Tree> children = new ArrayList<Tree>(); |
| | | /** |
| | | * 徿 |
| | | */ |
| | | private String icon; |
| | | /** |
| | | * 徿 æ ·å¼ |
| | | */ |
| | | private String iconCls; |
| | | /** |
| | | * ä¸çº§èç¹ |
| | | */ |
| | | private String parentId; |
| | | |
| | | /** |
| | | * ä¸çº§èç¹çåç§° |
| | | */ |
| | | private String parentName; |
| | | |
| | | /** |
| | | * ä¸çº§èç¹çä¸å¡ç±»å |
| | | */ |
| | | private String parentBtmName; |
| | | /** |
| | | * æ¯å¦å±å¼ |
| | | */ |
| | | private boolean expanded = false; |
| | | |
| | | /** |
| | | * 龿¥ |
| | | */ |
| | | private String href;//layuiåextjs使ç¨href,easyui使ç¨urlï¼ç»ä¸href |
| | | |
| | | /** |
| | | * æåºç´¢å¼ |
| | | */ |
| | | private String index;//æåºç´¢å¼ |
| | | |
| | | /** |
| | | * å
¶ä»ç屿§ |
| | | */ |
| | | private Map<String,String> attributes = new HashMap<String, String>();//使ç¨å¹³å°çè¯ï¼ææç屿§é½æ¯Stringç |
| | | |
| | | /** |
| | | * è·åä¸»é® |
| | | * @return 主é®çå¼ |
| | | */ |
| | | public String getOid() { |
| | | return oid; |
| | | } |
| | | |
| | | /** |
| | | * è®¾ç½®ä¸»é® |
| | | * @param oid 主é®çå¼ |
| | | */ |
| | | public void setOid(String oid) { |
| | | this.oid = oid; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ èç¹ææ¬ |
| | | * @return æ èç¹ææ¬ |
| | | */ |
| | | public String getText() { |
| | | return text; |
| | | } |
| | | |
| | | /** |
| | | * 设置æ èç¹ææ¬ |
| | | * @param text æ èç¹ææ¬ |
| | | */ |
| | | public void setText(String text) { |
| | | this.text = text; |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦å¶åèç¹ |
| | | * @return true 表示å¶åèç¹ |
| | | */ |
| | | public boolean isLeaf() { |
| | | return leaf; |
| | | } |
| | | |
| | | /** |
| | | * 设置å¶åèç¹ |
| | | * @param leaf æ¯å¦å¶åèç¹ |
| | | */ |
| | | public void setLeaf(boolean leaf) { |
| | | this.leaf = leaf; |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦æ¾ç¤ºå¤éæ¡ |
| | | * @return true表示æ¾ç¤º |
| | | */ |
| | | public boolean isShowCheckbox() { |
| | | return showCheckbox; |
| | | } |
| | | |
| | | /** |
| | | * 设置æ¯å¦æ¾ç¤ºå¤éæ¡ |
| | | * @param showCheckbox æ¯å¦æ¾ç¤ºå¤éæ¡ |
| | | */ |
| | | public void setShowCheckbox(boolean showCheckbox) { |
| | | this.showCheckbox = showCheckbox; |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦èªå¨å¾éä¸ |
| | | * @return true表示éè¦èªå¨å¾é |
| | | */ |
| | | public boolean isChecked() { |
| | | return checked; |
| | | } |
| | | |
| | | /** |
| | | * 设置æ¯å¦å¾é |
| | | * @param checked æ¯å¦èªå¨å¾é |
| | | */ |
| | | public void setChecked(boolean checked) { |
| | | this.checked = checked; |
| | | } |
| | | |
| | | /** |
| | | * è·ååèç¹ |
| | | * @return åèç¹å表 |
| | | */ |
| | | public List<Tree> getChildren() { |
| | | return children; |
| | | } |
| | | |
| | | /** |
| | | * 设置åèç¹ |
| | | * @param children åèç¹å表 |
| | | */ |
| | | public void setChildren(List<Tree> children) { |
| | | this.children = children; |
| | | } |
| | | |
| | | /** |
| | | * è·å徿 |
| | | * @return 徿 |
| | | */ |
| | | public String getIcon() { |
| | | return icon; |
| | | } |
| | | |
| | | /** |
| | | * è®¾ç½®å¾æ |
| | | * @param icon 徿 |
| | | */ |
| | | public void setIcon(String icon) { |
| | | this.icon = icon; |
| | | } |
| | | |
| | | /** |
| | | * è·å徿 çæ¾ç¤ºcssç±» |
| | | * @return cssç±»çåç§° |
| | | */ |
| | | public String getIconCls() { |
| | | return iconCls; |
| | | } |
| | | |
| | | /** |
| | | * è®¾ç½®å¾æ çæ¾ç¤ºcssç±» |
| | | * @param iconCls cssç±»çåç§° |
| | | */ |
| | | public void setIconCls(String iconCls) { |
| | | this.iconCls = iconCls; |
| | | } |
| | | |
| | | /** |
| | | * è·åä¸çº§ä¸»é® |
| | | * @return ä¸çº§èç¹çoid |
| | | */ |
| | | public String getParentId() { |
| | | return parentId; |
| | | } |
| | | |
| | | /** |
| | | * 设置ä¸çº§ä¸»é® |
| | | * @param parentId ä¸çº§èç¹çoid |
| | | */ |
| | | public void setParentId(String parentId) { |
| | | this.parentId = parentId; |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦èªå¨å±å¼ |
| | | * @return true表示èªå¨å±å¼ |
| | | */ |
| | | public boolean isExpanded() { |
| | | return expanded; |
| | | } |
| | | |
| | | /** |
| | | * 设置æ¯å¦èªå¨å±å¼ |
| | | * @param expanded æ¯å¦èªå¨å±å¼ |
| | | */ |
| | | public void setExpanded(boolean expanded) { |
| | | this.expanded = expanded; |
| | | } |
| | | |
| | | /** |
| | | * è·å龿¥å°å |
| | | * @return 龿¥å°å |
| | | */ |
| | | public String getHref() { |
| | | return href; |
| | | } |
| | | |
| | | /** |
| | | * è®¾ç½®é¾æ¥å°å |
| | | * @param href 龿¥å°å |
| | | */ |
| | | public void setHref(String href) { |
| | | this.href = href; |
| | | } |
| | | |
| | | /** |
| | | * è·åæåºå· |
| | | * @return æåºå· |
| | | */ |
| | | public String getIndex() { |
| | | return index; |
| | | } |
| | | |
| | | /** |
| | | * 设置æåºå· |
| | | * @param index æåºå· |
| | | */ |
| | | public void setIndex(String index) { |
| | | this.index = index; |
| | | } |
| | | |
| | | /** |
| | | * è·åæ èç¹æä»£çä¸å¡æ°æ®çææå±æ§æ å° |
| | | * @return keyè¡¨ç¤ºå±æ§çåç§°ï¼valueè¡¨ç¤ºå±æ§çå¼ |
| | | */ |
| | | public Map<String, String> getAttributes() { |
| | | return attributes; |
| | | } |
| | | |
| | | /** |
| | | * 设置æ èç¹æä»£çä¸å¡æ°æ®çææå±æ§æ å° |
| | | * @param attributes keyè¡¨ç¤ºå±æ§çåç§°ï¼valueè¡¨ç¤ºå±æ§çå¼ |
| | | */ |
| | | public void setAttributes(Map<String, String> attributes) { |
| | | this.attributes = attributes; |
| | | } |
| | | |
| | | /** |
| | | * è·åä¸çº§çèç¹çåç§° |
| | | * @return ä¸çº§çåç§° |
| | | */ |
| | | public String getParentName() { |
| | | return parentName; |
| | | } |
| | | |
| | | /** |
| | | * 设置ä¸çº§èç¹çåç§° |
| | | * @param parentName ä¸çº§çåç§° |
| | | */ |
| | | public void setParentName(String parentName) { |
| | | this.parentName = parentName; |
| | | } |
| | | |
| | | public String getParentBtmName() { |
| | | return parentBtmName; |
| | | } |
| | | |
| | | public void setParentBtmName(String parentBtmName) { |
| | | this.parentBtmName = parentBtmName; |
| | | } |
| | | |
| | | /** |
| | | * å©ç¨éå½å°æ 转æ¢ä¸ºä¸ä¸çº§å
³ç³» |
| | | * @param rootTree é¡¶å±èç¹ |
| | | * @param children åèç¹ |
| | | * @return 嫿ä¸ä¸çº§å
³ç³»çæ |
| | | */ |
| | | public static List<Tree> getChildList(List<Tree> rootTree, List<Tree> children){ |
| | | if(rootTree == null ||rootTree.size() == 0){ |
| | | if(children !=null && children.size()>0){ |
| | | rootTree = children.subList(0, children.size()); |
| | | }else{ |
| | | return null; |
| | | } |
| | | } |
| | | Tree bt = new Tree(); |
| | | bt.findChild(rootTree, children); |
| | | return rootTree; |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢æ çä¸çº§ |
| | | * @param treenode å½åèç¹ |
| | | * @param children å
¶ä»çèç¹ |
| | | */ |
| | | public void findChild(List<Tree> treenode, List<Tree> children){ |
| | | for (Tree node : treenode) { |
| | | for (Tree childnode : children) { |
| | | if (node.getOid().equalsIgnoreCase(childnode.getParentId())) { |
| | | childnode.setParentName(node.getText()); |
| | | if(StringUtils.isBlank(childnode.getParentBtmName())){ |
| | | childnode.setParentBtmName(node.getAttributes().getOrDefault("btmname","")); |
| | | } |
| | | node.getChildren().add(childnode); |
| | | } |
| | | } |
| | | if (node.getChildren().size()>0) { |
| | | findChild(node.getChildren(), children); |
| | | node.setLeaf(false); |
| | | }else { |
| | | node.setLeaf(true); |
| | | |
| | | } |
| | | this.getChildren().add(node); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "Tree{" + |
| | | "oid='" + oid + '\'' + |
| | | ", text='" + text + '\'' + |
| | | ", leaf=" + leaf + |
| | | ", showCheckbox=" + showCheckbox + |
| | | ", checked=" + checked + |
| | | ", children=" + children + |
| | | ", icon='" + icon + '\'' + |
| | | ", iconCls='" + iconCls + '\'' + |
| | | ", parentId='" + parentId + '\'' + |
| | | ", parentName='" + parentName + '\'' + |
| | | ", parentBtmName='" + parentBtmName + '\'' + |
| | | ", expanded=" + expanded + |
| | | ", href='" + href + '\'' + |
| | | ", index='" + index + '\'' + |
| | | ", attributes=" + attributes + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.pagemodel; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * æ 表çå±ç¤ºå¯¹è±¡,ç®åéé
layuiï¼è¯·å¨æ°æ®éå°çæ¶å使ç¨ï¼æ°æ®é太大æ¶ä¸å»ºè®®ä½¿ç¨ |
| | | * @author weidy |
| | | */ |
| | | public class TreeGrid implements java.io.Serializable { |
| | | |
| | | private static final long serialVersionUID = 5593300788850918425L; |
| | | /** |
| | | * ä»£å· |
| | | */ |
| | | private int code = 0; |
| | | |
| | | /** |
| | | * éè¯¯æ¶æ¯ |
| | | */ |
| | | private String msg; |
| | | |
| | | /** |
| | | * æ°æ®æè¿°ï¼å
¶ä¸å¿
é¡»è¦ætreelevelï¼å
¶ä¸æé¡¶çº§æ¯-1,ç¶åé级å¢å ï¼æ°æ®å¿
须注æé¡ºåº |
| | | */ |
| | | private List data; |
| | | |
| | | /** |
| | | * æ»æ° |
| | | */ |
| | | private int total = 0; |
| | | |
| | | /** |
| | | * æè¿°ä¿¡æ¯ |
| | | */ |
| | | private String description; |
| | | |
| | | |
| | | public TreeGrid(){ |
| | | |
| | | } |
| | | |
| | | public TreeGrid(String msg){ |
| | | this.setMsg(msg); |
| | | this.setCode(1); |
| | | } |
| | | |
| | | 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 List getData() { |
| | | return data; |
| | | } |
| | | |
| | | public int getTotal() { |
| | | return total; |
| | | } |
| | | |
| | | public void setTotal(int total) { |
| | | this.total = total; |
| | | } |
| | | |
| | | public String getDescription() { |
| | | return description; |
| | | } |
| | | |
| | | public void setDescription(String description) { |
| | | this.description = description; |
| | | } |
| | | |
| | | public void setData(List data) { |
| | | this.data = data; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.pagemodel; |
| | | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * æ å½¢æ°æ®æ¥è¯¢å¯¹è±¡ |
| | | * @author weidy |
| | | * @date 2019/10/11 6:42 PM |
| | | */ |
| | | public class TreeQueryObject implements java.io.Serializable{ |
| | | |
| | | /** |
| | | * ç¦æ¢ä¿®æ¹è¿ä¸ªå¼ |
| | | */ |
| | | private static final long serialVersionUID = -7570704940199743059L; |
| | | /** |
| | | * æ¥è¯¢æ¡ä»¶ |
| | | */ |
| | | private Map<String,String> conditionMap; |
| | | |
| | | /** |
| | | * æ¯å¦å¤é |
| | | */ |
| | | private boolean multipleSelect; |
| | | |
| | | /** |
| | | * æ¯å¦æ¾ç¤ºå¤éæ¡ |
| | | */ |
| | | private boolean showCheckBox; |
| | | |
| | | /** |
| | | * æ¥è¯¢ææçå±çº§ |
| | | */ |
| | | private boolean queryAllLevel; |
| | | |
| | | /** |
| | | * ä¸çº§ä¸å¡æ°æ®ä¸»é® |
| | | */ |
| | | private String parentOid; |
| | | |
| | | /** |
| | | * ä¸çº§ä¸å¡ç±»å |
| | | */ |
| | | private String parentBtmName; |
| | | |
| | | /** |
| | | * å¼çåæ®µ |
| | | */ |
| | | private String valueField = "oid"; |
| | | |
| | | /** |
| | | * æ èç¹çè¡¨è¾¾å¼ |
| | | */ |
| | | private String textField = "name"; |
| | | |
| | | /** |
| | | * ä¸çº§çåæ®µçè¡¨è¾¾å¼ |
| | | */ |
| | | private String parentFieldName; |
| | | |
| | | /** |
| | | * æ©å±åæ° |
| | | */ |
| | | private Map<String,String> extandParamsMap; |
| | | |
| | | /** |
| | | * æ¥è¯¢ææççæ¬ |
| | | */ |
| | | private boolean queryAllRev; |
| | | |
| | | /** |
| | | * æåºçåæ®µ |
| | | */ |
| | | private String sort; |
| | | |
| | | /** |
| | | * æåºçç±»å |
| | | */ |
| | | private String order; |
| | | |
| | | public String getValueField() { |
| | | return valueField; |
| | | } |
| | | |
| | | public void setValueField(String valueField) { |
| | | this.valueField = valueField; |
| | | } |
| | | |
| | | public String getTextField() { |
| | | return textField; |
| | | } |
| | | |
| | | public void setTextField(String textField) { |
| | | this.textField = textField; |
| | | } |
| | | |
| | | public String getParentFieldName() { |
| | | return parentFieldName; |
| | | } |
| | | |
| | | public void setParentFieldName(String parentFieldName) { |
| | | this.parentFieldName = parentFieldName; |
| | | } |
| | | |
| | | public Map<String, String> getConditionMap() { |
| | | return conditionMap; |
| | | } |
| | | |
| | | public void setConditionMap(Map<String, String> conditionMap) { |
| | | this.conditionMap = conditionMap; |
| | | } |
| | | |
| | | public boolean isMultipleSelect() { |
| | | return multipleSelect; |
| | | } |
| | | |
| | | public void setMultipleSelect(boolean multipleSelect) { |
| | | this.multipleSelect = multipleSelect; |
| | | } |
| | | |
| | | public boolean isShowCheckBox() { |
| | | return showCheckBox; |
| | | } |
| | | |
| | | public void setShowCheckBox(boolean showCheckBox) { |
| | | this.showCheckBox = showCheckBox; |
| | | } |
| | | |
| | | public String getParentOid() { |
| | | return parentOid; |
| | | } |
| | | |
| | | public void setParentOid(String parentOid) { |
| | | this.parentOid = parentOid; |
| | | } |
| | | |
| | | public String getParentBtmName() { |
| | | return parentBtmName; |
| | | } |
| | | |
| | | public void setParentBtmName(String parentBtmName) { |
| | | this.parentBtmName = parentBtmName; |
| | | } |
| | | |
| | | public Map<String, String> getExtandParamsMap() { |
| | | return extandParamsMap; |
| | | } |
| | | |
| | | public void setExtandParamsMap(Map<String, String> extandParamsMap) { |
| | | this.extandParamsMap = extandParamsMap; |
| | | } |
| | | |
| | | public boolean isQueryAllLevel() { |
| | | return queryAllLevel; |
| | | } |
| | | |
| | | public void setQueryAllLevel(boolean queryAllLevel) { |
| | | this.queryAllLevel = queryAllLevel; |
| | | } |
| | | |
| | | public boolean isQueryAllRev() { |
| | | return queryAllRev; |
| | | } |
| | | |
| | | public void setQueryAllRev(boolean queryAllRev) { |
| | | this.queryAllRev = queryAllRev; |
| | | } |
| | | |
| | | public String getSort() { |
| | | return sort; |
| | | } |
| | | |
| | | public void setSort(String sort) { |
| | | this.sort = sort; |
| | | } |
| | | |
| | | public String getOrder() { |
| | | return order; |
| | | } |
| | | |
| | | public void setOrder(String order) { |
| | | this.order = order; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "TreeQueryObject{" + |
| | | "conditionMap=" + conditionMap + |
| | | ", multipleSelect=" + multipleSelect + |
| | | ", showCheckBox=" + showCheckBox + |
| | | ", queryAllLevel=" + queryAllLevel + |
| | | ", parentOid='" + parentOid + '\'' + |
| | | ", parentBtmName='" + parentBtmName + '\'' + |
| | | ", valueField='" + valueField + '\'' + |
| | | ", textField='" + textField + '\'' + |
| | | ", parentFieldName='" + parentFieldName + '\'' + |
| | | ", extandParamsMap=" + extandParamsMap + |
| | | ", queryAllRev=" + queryAllRev + |
| | | ", sort='" + sort + '\'' + |
| | | ", order='" + order + '\'' + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.properties; |
| | | |
| | | import org.springframework.boot.context.properties.ConfigurationProperties; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.Arrays; |
| | | |
| | | /** |
| | | * è·¨åé
ç½®ç屿§ |
| | | * @author weidy |
| | | */ |
| | | @Component |
| | | @ConfigurationProperties(prefix = "cors") |
| | | public class CorsProperties { |
| | | |
| | | /** |
| | | * å¼å
³ |
| | | */ |
| | | private String enabled; |
| | | |
| | | /** |
| | | * å
许çåå |
| | | */ |
| | | private String[] allowedOrigins; |
| | | /** |
| | | * å
è®¸çæ¹æ³ |
| | | */ |
| | | private String[] allowedMethods; |
| | | /** |
| | | * å
许ç头 |
| | | */ |
| | | private String[] allowedHeaders; |
| | | /** |
| | | * æ´é²ç头 |
| | | */ |
| | | private String[] exposedHeaders; |
| | | |
| | | /** |
| | | * å
许çè¯ä¹¦ |
| | | */ |
| | | private Boolean allowCredentials; |
| | | /** |
| | | * æ å° |
| | | */ |
| | | private String mappings; |
| | | |
| | | /** |
| | | * æå¤§é |
| | | */ |
| | | private Long maxAge; |
| | | |
| | | public String getEnabled() { |
| | | return enabled; |
| | | } |
| | | |
| | | public void setEnabled(String enabled) { |
| | | this.enabled = enabled; |
| | | } |
| | | |
| | | public String[] getAllowedOrigins() { |
| | | return allowedOrigins; |
| | | } |
| | | |
| | | public void setAllowedOrigins(String[] allowedOrigins) { |
| | | this.allowedOrigins = allowedOrigins; |
| | | } |
| | | |
| | | public String[] getAllowedMethods() { |
| | | return allowedMethods; |
| | | } |
| | | |
| | | public void setAllowedMethods(String[] allowedMethods) { |
| | | this.allowedMethods = allowedMethods; |
| | | } |
| | | |
| | | public String[] getAllowedHeaders() { |
| | | return allowedHeaders; |
| | | } |
| | | |
| | | public void setAllowedHeaders(String[] allowedHeaders) { |
| | | this.allowedHeaders = allowedHeaders; |
| | | } |
| | | |
| | | public String[] getExposedHeaders() { |
| | | return exposedHeaders; |
| | | } |
| | | |
| | | public void setExposedHeaders(String[] exposedHeaders) { |
| | | this.exposedHeaders = exposedHeaders; |
| | | } |
| | | |
| | | public Boolean getAllowCredentials() { |
| | | return allowCredentials; |
| | | } |
| | | |
| | | public void setAllowCredentials(Boolean allowCredentials) { |
| | | this.allowCredentials = allowCredentials; |
| | | } |
| | | |
| | | public String getMappings() { |
| | | return mappings; |
| | | } |
| | | |
| | | public void setMappings(String mappings) { |
| | | this.mappings = mappings; |
| | | } |
| | | |
| | | public Long getMaxAge() { |
| | | return maxAge; |
| | | } |
| | | |
| | | public void setMaxAge(Long maxAge) { |
| | | this.maxAge = maxAge; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "CorsProperties{" + |
| | | "enabled='" + enabled + '\'' + |
| | | ", allowedOrigins=" + Arrays.toString(allowedOrigins) + |
| | | ", allowedMethods=" + Arrays.toString(allowedMethods) + |
| | | ", allowedHeaders=" + Arrays.toString(allowedHeaders) + |
| | | ", exposedHeaders=" + Arrays.toString(exposedHeaders) + |
| | | ", allowCredentials=" + allowCredentials + |
| | | ", mappings='" + mappings + '\'' + |
| | | ", maxAge=" + maxAge + |
| | | '}'; |
| | | } |
| | | } |
| | | |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.properties; |
| | | |
| | | import com.vci.starter.web.annotation.config.VciConfigField; |
| | | import com.vci.starter.web.enumpck.DataBaseEnum; |
| | | import com.vci.starter.web.enumpck.LangCodeEnum; |
| | | import com.vci.starter.web.enumpck.SessionStorageTypeEnum; |
| | | import org.springframework.boot.context.properties.ConfigurationProperties; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * ä¼è¯ç¸å
³çé
ç½® |
| | | * @author weidy |
| | | * @date 2020/2/27 |
| | | */ |
| | | @Configuration |
| | | @ConfigurationProperties(prefix = "session") |
| | | public class VciSessionProperties { |
| | | |
| | | /** |
| | | * ç³»ç»ç©ºé²æ¶é´ï¼æ ¹æ®ä¿å¯è¦æ±é»è®¤æ¯10åé |
| | | */ |
| | | private int sessionIdlTime = 10; |
| | | |
| | | /** |
| | | * ä¼è¯ä¿¡æ¯åå¨çæ¹å¼ |
| | | */ |
| | | private String sessionInfoStorageType = SessionStorageTypeEnum.REDIS.getValue(); |
| | | |
| | | /** |
| | | * æ°æ®åºçç±»åï¼æ¯å¨ObjectServiceä¸è®¾ç½®çï¼ |
| | | */ |
| | | @VciConfigField(name = "databasePlatform",title = "æ°æ®åºçç±»å",model = "public") |
| | | private String databasePlatform = DataBaseEnum.ORACLE.getValue(); |
| | | |
| | | /** |
| | | * å¯å¨æå¡æ¶æ¯å¦æ¸
空ä¼è¯ä¿¡æ¯ï¼ç»å½ä¸ºå½å平尿§å¶æ¶éè¦æ·»å 为trueï¼ç»å½æ¯å
¶ä»ç³»ç»æ§å¶æ¶è®¾ç½®ä¸ºfalse |
| | | */ |
| | | private Boolean clearSessionOnStart = false; |
| | | |
| | | /** |
| | | * é»è®¤çè¯è¨ç¼ç |
| | | */ |
| | | private String defaultLangCode = LangCodeEnum.ZH_CN.getValue(); |
| | | |
| | | /** |
| | | * æ¯å¦å¼å¯å®¢æ·ç«¯æ£æ¥ |
| | | */ |
| | | private boolean checkSessionTimeout; |
| | | |
| | | /** |
| | | * 客æ·ç«¯å¤æè¶
æ¶è½®è¯¢æ¶é´ï¼åä½ä¸ºç§ |
| | | */ |
| | | private int sessionInterval; |
| | | |
| | | /** |
| | | * è¶
æ¶æéæ¶é´ï¼åä½ä¸ºåé |
| | | */ |
| | | private int sessionRemind; |
| | | |
| | | /** |
| | | * 宿¶å¨éæ¯å¦æ¸
é¤ä¼è¯ |
| | | */ |
| | | private boolean deleteSessionInTimer = false; |
| | | |
| | | |
| | | public int getSessionIdlTime() { |
| | | return sessionIdlTime; |
| | | } |
| | | |
| | | public void setSessionIdlTime(int sessionIdlTime) { |
| | | this.sessionIdlTime = sessionIdlTime; |
| | | } |
| | | |
| | | public String getSessionInfoStorageType() { |
| | | return sessionInfoStorageType; |
| | | } |
| | | |
| | | public void setSessionInfoStorageType(String sessionInfoStorageType) { |
| | | this.sessionInfoStorageType = sessionInfoStorageType; |
| | | } |
| | | |
| | | public String getDatabasePlatform() { |
| | | return databasePlatform; |
| | | } |
| | | |
| | | public void setDatabasePlatform(String databasePlatform) { |
| | | this.databasePlatform = databasePlatform; |
| | | } |
| | | |
| | | public String getDefaultLangCode() { |
| | | return defaultLangCode; |
| | | } |
| | | |
| | | public void setDefaultLangCode(String defaultLangCode) { |
| | | this.defaultLangCode = defaultLangCode; |
| | | } |
| | | |
| | | public boolean isClearSessionOnStart() { |
| | | return clearSessionOnStart; |
| | | } |
| | | |
| | | public void setClearSessionOnStart(boolean clearSessionOnStart) { |
| | | this.clearSessionOnStart = clearSessionOnStart; |
| | | } |
| | | |
| | | public boolean isCheckSessionTimeout() { |
| | | return checkSessionTimeout; |
| | | } |
| | | |
| | | public void setCheckSessionTimeout(boolean checkSessionTimeout) { |
| | | this.checkSessionTimeout = checkSessionTimeout; |
| | | } |
| | | |
| | | public int getSessionInterval() { |
| | | return sessionInterval; |
| | | } |
| | | |
| | | public void setSessionInterval(int sessionInterval) { |
| | | this.sessionInterval = sessionInterval; |
| | | } |
| | | |
| | | public int getSessionRemind() { |
| | | return sessionRemind; |
| | | } |
| | | |
| | | public void setSessionRemind(int sessionRemind) { |
| | | this.sessionRemind = sessionRemind; |
| | | } |
| | | |
| | | public boolean isDeleteSessionInTimer() { |
| | | return deleteSessionInTimer; |
| | | } |
| | | |
| | | public void setDeleteSessionInTimer(boolean deleteSessionInTimer) { |
| | | this.deleteSessionInTimer = deleteSessionInTimer; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "VciSessionProperties{" + |
| | | "sessionIdlTime=" + sessionIdlTime + |
| | | ", sessionInfoStorageType='" + sessionInfoStorageType + '\'' + |
| | | ", databasePlatform='" + databasePlatform + '\'' + |
| | | ", clearSessionOnStart=" + clearSessionOnStart + |
| | | ", defaultLangCode='" + defaultLangCode + '\'' + |
| | | '}'; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.service; |
| | | |
| | | /** |
| | | * åºç¡çæå¡ |
| | | * @author weidy |
| | | * @date 2019/12/10 6:17 PM |
| | | */ |
| | | public class BaseService<T> { |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.service; |
| | | |
| | | /** |
| | | * å¤è¯è¨çæå¡æ¥å£ |
| | | * @author weidy |
| | | * @date 2020/1/29 |
| | | */ |
| | | public interface LanguageServiceI { |
| | | |
| | | /** |
| | | * è·åå¤è¯è¨çåç¼ |
| | | * @return 为å½åç±»æå¨çå
çåç§° |
| | | */ |
| | | default String getMsgPrefix(){ |
| | | return getClass().getPackage().getName(); |
| | | } |
| | | |
| | | /** |
| | | * è·åå¤è¯è¨ãé»è®¤ä¸ºå
å.åç¼çæ¹å¼ï¼æ¯å¦com.vci.xxx |
| | | * @param subfix åç¼ |
| | | * @return å
å.åç¼çæ¹å¼ï¼æ¯å¦com.vci.xxx |
| | | */ |
| | | default String getMsg(String subfix){ |
| | | return getMsgPrefix() + "." + subfix; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.service; |
| | | |
| | | import com.vci.starter.web.enumpck.UserSecretEnum; |
| | | import com.vci.starter.web.pagemodel.SessionInfo; |
| | | import com.vci.starter.web.util.VciBaseUtil; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | /** |
| | | * å¯çº§æå¡ |
| | | * @author weidy |
| | | * @date 2020/3/11 |
| | | */ |
| | | public interface VciSecretServiceI { |
| | | |
| | | /** |
| | | * æ¥è¯¢æ°æ®æ¶çå¯çº§è¿æ»¤sql |
| | | * @return é»è®¤å°äºçäºå½åç¨æ·çå¯çº§å¼ |
| | | */ |
| | | default String getLessThanUserSecretSql(){ |
| | | SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfoNotException(); |
| | | if(sessionInfo!=null) { |
| | | return sessionInfo.getUserSecret(); |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªç¨æ·çå¯çº§æ¯å¦ææéæ¥çå½åçæ°æ®å¯çº§ |
| | | * @param dataSecret æ°æ®å¯çº§çå¼ |
| | | * @return é»è®¤å°äºçäºå½åç¨æ·çå¯çº§å¼å³å¯ |
| | | */ |
| | | default boolean checkUserSecret(int dataSecret){ |
| | | SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfoNotException(); |
| | | if(sessionInfo!=null) { |
| | | if(StringUtils.isBlank(sessionInfo.getUserSecret())){ |
| | | sessionInfo.setUserSecret(UserSecretEnum.NONE.getValue() +""); |
| | | } |
| | | return VciBaseUtil.getInt(sessionInfo.getUserSecret())>= dataSecret; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.toolmodel; |
| | | |
| | | import com.vci.starter.web.constant.RegExpConstant; |
| | | import com.vci.starter.web.exception.VciBaseException; |
| | | import com.vci.starter.web.util.VciDateUtil; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | import java.beans.PropertyEditorSupport; |
| | | import java.text.DateFormat; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | /** |
| | | * æ¶é´å¤çï¼åå°jsonä¼ è¾è¿æ¥çå
å®¹çæ¶å |
| | | * @author weidy |
| | | */ |
| | | public class DateConverter extends PropertyEditorSupport { |
| | | |
| | | /** |
| | | *æ¶é´æ ¼å¼ |
| | | */ |
| | | private DateFormat dateFormat; |
| | | |
| | | /** |
| | | *æ¶é´å
容çé¿åº¦ |
| | | */ |
| | | private int exactDateLength; |
| | | |
| | | /** |
| | | * å
·ä½çå¼ |
| | | */ |
| | | private Date value; |
| | | |
| | | public DateFormat getDateFormat() { |
| | | return dateFormat; |
| | | } |
| | | |
| | | public void setDateFormat(DateFormat dateFormat) { |
| | | this.dateFormat = dateFormat; |
| | | } |
| | | |
| | | public int getExactDateLength() { |
| | | return exactDateLength; |
| | | } |
| | | |
| | | public void setExactDateLength(int exactDateLength) { |
| | | this.exactDateLength = exactDateLength; |
| | | } |
| | | |
| | | public Date getValue() { |
| | | return value; |
| | | } |
| | | |
| | | public void setValue(Date value) { |
| | | this.value = value; |
| | | } |
| | | |
| | | /** |
| | | *å°å符串转æ¢ä¸ºæ¥ææ ¼å¼ |
| | | * @param text å符串 |
| | | * @throws VciBaseException 转æ¢åºéçæ¶åæåºå¼å¸¸ |
| | | */ |
| | | public void setAsText(String text) throws VciBaseException { |
| | | if (StringUtils.isBlank(text)) { |
| | | setValue(null); |
| | | }else { |
| | | text = text.trim(); |
| | | |
| | | //鲿¢æä¸æçæ
åµ |
| | | text = text.replace("å¹´","-").replace("æ","-").replace("æ¥","").replace("æ¶",":").replace("å",":"); |
| | | String pattern="\\d{2,4}([^\\d]?)\\d{1,2}\\1\\d{1,2}( \\d{1,2}([^\\d])\\d{1,2})?"; |
| | | Pattern r = Pattern.compile(pattern); |
| | | Matcher m = r.matcher(text); |
| | | if(m.find()){ |
| | | //è¯´ææ¯ç¬¦åè¦æ±ç |
| | | String dateSplit = m.group(1); |
| | | //ä¸é´çç©ºæ ¼æ¯ç¬¬äºé¨å |
| | | String timeSplit = m.group(3); |
| | | String formateStr = String.format("yyyy%sMM%sdd",dateSplit,dateSplit); |
| | | if(StringUtils.isNotBlank(timeSplit)){ |
| | | //ææ¶é´ |
| | | String timeStr = text.substring(text.indexOf(" ")); |
| | | String[] split = timeStr.split(timeSplit); |
| | | if(split.length == 2){ |
| | | formateStr += String.format(" HH%smm",timeSplit); |
| | | } |
| | | if(split.length>2){ |
| | | formateStr += String.format(" HH%smm%sss",timeSplit,timeSplit); |
| | | } |
| | | if(timeStr.contains(".")){ |
| | | //æ¯«ç§ |
| | | formateStr += ".SSS"; |
| | | } |
| | | } |
| | | String yearMD = text.contains(" ")?text.substring(0, text.indexOf(" ")):text; |
| | | if(StringUtils.isNotBlank(dateSplit)){ |
| | | //è¯´æææ¥æçåå²ç¬¦ |
| | | String year = text.substring(0, text.indexOf(dateSplit)); |
| | | if(StringUtils.isNotBlank(year) && year.length()==2){ |
| | | formateStr = formateStr.replace("yyyy","yy"); |
| | | } |
| | | String[] split = yearMD.split(dateSplit); |
| | | if(split.length == 2){ |
| | | formateStr = formateStr.replace("dd",""); |
| | | } |
| | | }else{ |
| | | if(!text.matches(RegExpConstant.NUMBER)){ |
| | | //说æè¿æ¯æç¬¦å·ï¼ä½æ¯ä¸ç¬¦åè¦æ±èå·² |
| | | if(text.length() == 5){ |
| | | formateStr = formateStr.replace("yyyyMMdd","yy"+text.substring(2,3) + "MM"); |
| | | } |
| | | if(text.length() == 7){ |
| | | formateStr = formateStr.replace("yyyyMMdd","yyyy"+text.substring(4,5) + "MM"); |
| | | } |
| | | }else { |
| | | //å¦æåªææ¥æ |
| | | if (text.length() == 2 && text.matches(RegExpConstant.NUMBER)) { |
| | | formateStr = "yy"; |
| | | } else if (text.length() == 4 && text.matches(RegExpConstant.NUMBER)) { |
| | | formateStr = "yyyy"; |
| | | } else if (text.length() == 6 && text.matches(RegExpConstant.NUMBER)) { |
| | | formateStr = "yyyyMM"; |
| | | } else { |
| | | if (StringUtils.isNotBlank(yearMD) && yearMD.length() < 6) { |
| | | formateStr = formateStr.replace("yyyy", "yy"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | //åªææ¶é´ï¼æä»¬æ¯æ²¡åæ³è½¬æ¢ç |
| | | SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formateStr); |
| | | try { |
| | | setValue(simpleDateFormat.parse(text)); |
| | | } catch (ParseException e) { |
| | | //æ¯ççç年份 |
| | | formateStr= formateStr.replace("yyyy","yy"); |
| | | simpleDateFormat = new SimpleDateFormat(formateStr); |
| | | try { |
| | | setValue(simpleDateFormat.parse(text)); |
| | | } catch (ParseException ex) { |
| | | //å¦æåªææ¥æ |
| | | if(text.length() == 2 && text.matches(RegExpConstant.NUMBER)){ |
| | | formateStr = "yy"; |
| | | } |
| | | throw new VciBaseException("ä¸è½æ ¼å¼åæ¥æ: {0}", new String[]{text}, e); |
| | | } |
| | | } |
| | | }else{ |
| | | throw new VciBaseException("䏿¯åæ ¼çæ¶é´æ ¼å¼å符串,{0}", new String[]{text}); |
| | | } |
| | | // if(text.contains("å¹´") || text.contains("æ") || text.contains("æ¥") |
| | | // ||text.contains("æ¶") || text.contains("å") || text.contains("ç§") || text.contains("毫ç§") |
| | | // ||text.contains("å¨") || text.contains("礼æ") || text.contains("天")){ |
| | | // //1. åªæå¹´ |
| | | // if(text.indexOf("å¹´") == text.length()-1){ |
| | | // this.exactDateLength = text.length(); |
| | | // if(text.length() ==3) { |
| | | // this.dateFormat = new SimpleDateFormat("yyå¹´"); |
| | | // } |
| | | // } |
| | | // } |
| | | // if(text.contains("/")) { |
| | | // if ( text.trim().length() == 19) { |
| | | // this.exactDateLength = 19; |
| | | // this.dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); |
| | | // } else if (text.indexOf(".") > -1 && text.length() > 20) { |
| | | // this.exactDateLength = 23; |
| | | // text = fillNano(text); |
| | | // this.dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); |
| | | // } else if (text.length() == 17) { |
| | | // this.exactDateLength = 17; |
| | | // this.dateFormat = new SimpleDateFormat("yy/MM/dd HH:mm:ss"); |
| | | // } else if ( text.indexOf(".") > -1 && text.length() > 17) { |
| | | // this.exactDateLength = 21; |
| | | // text = fillNano(text); |
| | | // this.dateFormat = new SimpleDateFormat("yy/MM/dd HH:mm:ss.SSS"); |
| | | // } else if (text.length() == 10) { |
| | | // this.exactDateLength = 10; |
| | | // this.dateFormat = new SimpleDateFormat("yyyy/MM/dd"); |
| | | // } else if (text.length() >=8 && text.length() < 10 ) { |
| | | // //2018/1/1 æè
18/01/01ï¼18/1/1 |
| | | // if(text.substring(0,text.indexOf("/")).length() == 4){ |
| | | // this.dateFormat = new SimpleDateFormat("yyyy/MM/dd"); |
| | | // }else{ |
| | | // this.dateFormat = new SimpleDateFormat("yy/MM/dd"); |
| | | // } |
| | | // this.exactDateLength = text.length(); |
| | | // }else{ |
| | | // this.dateFormat = new SimpleDateFormat("yy/MM/dd"); |
| | | // this.exactDateLength = text.length(); |
| | | // } |
| | | // }else if(text.contains("-")) { |
| | | // if (text.length() == 19) { |
| | | // this.exactDateLength = 19; |
| | | // this.dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | // } else if ( text.indexOf(".") > -1 && text.length() > 20) { |
| | | // this.exactDateLength = 23; |
| | | // text = fillNano(text); |
| | | // this.dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); |
| | | // } else if (text.length() == 17) { |
| | | // this.exactDateLength = 17; |
| | | // this.dateFormat = new SimpleDateFormat("yy-MM-dd HH:mm:ss"); |
| | | // } else if ( text.length() == 8) { |
| | | // this.exactDateLength = 8; |
| | | // this.dateFormat = new SimpleDateFormat("yy-MM-dd"); |
| | | // } else if (text.length() == 10) { |
| | | // this.exactDateLength = 10; |
| | | // this.dateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | // }else if (text.length() >=8 && text.length() < 10 ) { |
| | | // //2018-1-1 æè
18-01-01ï¼18/1/1 |
| | | // if(text.substring(0,text.indexOf("-")).length() == 4){ |
| | | // this.dateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | // }else{ |
| | | // this.dateFormat = new SimpleDateFormat("yy-MM-dd"); |
| | | // } |
| | | // this.exactDateLength = text.length(); |
| | | // }else{ |
| | | // this.dateFormat = new SimpleDateFormat("yy-MM-dd"); |
| | | // this.exactDateLength = text.length(); |
| | | // }//å
å¼è¿ä¹å¤ï¼ä¸å¤åæ·»å |
| | | // }else if(text.matches(RegExpConstant.NUMBER)){ |
| | | // |
| | | // }else{ |
| | | // this.exactDateLength = 19; |
| | | // this.dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | // } |
| | | // //if ((text != null) && (this.exactDateLength >= 0)&& (text.length() != this.exactDateLength)) { |
| | | // // throw new IllegalArgumentException("ä¸è½åå§åæ¶é´ï¼å 为å
容ä¸å°" + this.exactDateLength + "é¿åº¦"); |
| | | // // } |
| | | // try { |
| | | // setValue(VciDateUtil.str2Date(VciDateUtil.date2Str(this.dateFormat.parse(text),VciDateUtil.DateTimeMillFormat),VciDateUtil.DateTimeMillFormat)); |
| | | // //æ 论ç颿¯ä»ä¹æ ¼å¼ï¼æä»¬é½è½¬å为"yyyy-MM-dd HH:mm:ss.SSS"è¿æ ·å¯ä»¥ç»ä¸åå°çå
容 |
| | | // } catch (ParseException ex) { |
| | | // throw new VciBaseException("ä¸è½æ ¼å¼åæ¥æ: "+ ex.getMessage(), new Object[0],ex); |
| | | // } catch (Exception e) { |
| | | // throw new VciBaseException("ä¸è½æ ¼å¼åæ¥æ: "+ e.getMessage(), new Object[0], e); |
| | | // } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æå¼æ¯«ç§ |
| | | * @param text å符串 |
| | | * @return æ²¡ææ¯«ç§çæ¶é´å¼ |
| | | */ |
| | | private String fillNano(String text){ |
| | | String nano = text.substring(text.lastIndexOf(".") + 1); |
| | | if(nano.length() < 3){ |
| | | for(int i = 0 ; i < (3-nano.length()) ; i ++){ |
| | | nano += "0"; |
| | | } |
| | | } |
| | | return text.substring(0,text.lastIndexOf(".")) + "." + nano; |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | List<String> list = new ArrayList<String>(){{ |
| | | add("2020-11-12 12:12:03"); |
| | | add("2020-1-2 2:2:3"); |
| | | add("2020-11-12 12:12:03.232"); |
| | | add("2020/11/12 12:12:03"); |
| | | add("2020/1/2 2:2:3"); |
| | | add("2020/11/12 12:12:03.232"); |
| | | add("20/11/12 12:12:03"); |
| | | add("20/1/2 2:2:3"); |
| | | add("20/11/12 12:12:03.232"); |
| | | add("2020"); |
| | | add("2020-11"); |
| | | add("202011"); |
| | | add("12:02:12"); |
| | | add("2:2:3"); |
| | | add("20201112"); |
| | | add("202012"); |
| | | add("202012"); |
| | | add("2020å¹´11æ12æ¥ 12æ¶12å03ç§"); |
| | | add("2020å¹´1æ2æ¥ 2:2:3"); |
| | | add("2020å¹´11æ12æ¥ 12æ¶12å03ç§232毫ç§"); |
| | | }}; |
| | | list.stream().forEach(t->{ |
| | | try { |
| | | DateConverter dateConverter = new DateConverter(); |
| | | dateConverter.setAsText(t); |
| | | System.out.println("转æ¢å:" + t + "; 转æ¢å:" + VciDateUtil.date2Str(dateConverter.getValue(), VciDateUtil.DateTimeMillFormat)); |
| | | }catch (Throwable e){ |
| | | e.printStackTrace(); |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¥æè½¬æ¢ä¸ºå符串çå¼ |
| | | * @return å符串 |
| | | */ |
| | | public String getAsText(String dateFormat) { |
| | | Date value = (Date) getValue(); |
| | | if(StringUtils.isEmpty(dateFormat)){ |
| | | dateFormat= VciDateUtil.DateTimeMillFormat; |
| | | } |
| | | return value != null ? new SimpleDateFormat(dateFormat).format(value) : ""; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.toolmodel; |
| | | |
| | | import org.springframework.core.convert.converter.Converter; |
| | | import org.springframework.lang.Nullable; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * é对springmvcè®¾ç½®çæ¥æç转æ¢å¨ |
| | | * @author weidy |
| | | * @date 2019/12/3 4:17 PM |
| | | */ |
| | | public class String2DateConverterForSpringMvc implements Converter<String, Date> { |
| | | |
| | | /** |
| | | * 转æ¢åç¬¦ä¸²å°æ¥æç±»å |
| | | * @param source å符串 |
| | | * @return æ¥æå¯¹è±¡ |
| | | */ |
| | | @Nullable |
| | | @Override |
| | | public Date convert(String source) { |
| | | DateConverter dateConverter = new DateConverter(); |
| | | dateConverter.setAsText(source); |
| | | return dateConverter.getValue(); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.toolmodel; |
| | | |
| | | import org.springframework.web.util.HtmlUtils; |
| | | import org.springframework.web.util.JavaScriptUtils; |
| | | |
| | | import java.beans.PropertyEditorSupport; |
| | | |
| | | /** |
| | | * ä¸spring mvcç@InitBinderç»å |
| | | * ç¨äºé²æ¢XSSæ»å» |
| | | * å°Htmlä¸å
å«çjsçç¸å
³çå
å®¹è½¬æ¢ |
| | | * @author weidy |
| | | * |
| | | */ |
| | | public class StringEscapeEditor extends PropertyEditorSupport { |
| | | |
| | | /** |
| | | * è¦ç¼ç çHTMLå
容 |
| | | */ |
| | | private boolean escapeHTML;// ç¼ç HTML |
| | | /** |
| | | * è¦ç¼ç çjs |
| | | */ |
| | | private boolean escapeJavaScript;// ç¼ç javascript |
| | | |
| | | /** |
| | | * æé æ¹æ³ |
| | | */ |
| | | public StringEscapeEditor() { |
| | | super(); |
| | | } |
| | | |
| | | /** |
| | | * æé æ¹æ³ |
| | | * @param escapeHTML è¦ç¼ç çhtml |
| | | * @param escapeJavaScript è¦ç¼ç çJS |
| | | */ |
| | | public StringEscapeEditor(boolean escapeHTML, boolean escapeJavaScript) { |
| | | super(); |
| | | this.escapeHTML = escapeHTML; |
| | | this.escapeJavaScript = escapeJavaScript; |
| | | } |
| | | |
| | | /** |
| | | * æ§è¡è½¬æ¢ |
| | | * @return ç¼ç åçå
容 |
| | | */ |
| | | @Override |
| | | public String getAsText() { |
| | | Object value = getValue(); |
| | | return value != null ? value.toString() : ""; |
| | | } |
| | | |
| | | /** |
| | | * æ§è¡ä¸å®¶ |
| | | * @param text 转æ¢é±çå¼ |
| | | * @throws IllegalArgumentException 转æ¢çè¿ç¨åºç°äºéè¯¯ä¼æåºå¼å¸¸ |
| | | */ |
| | | @Override |
| | | public void setAsText(String text) throws IllegalArgumentException { |
| | | if (text == null) { |
| | | setValue(null); |
| | | } else { |
| | | String value = text; |
| | | if (escapeHTML) { |
| | | value = HtmlUtils.htmlEscape(value); |
| | | } |
| | | if (escapeJavaScript) { |
| | | value = JavaScriptUtils.javaScriptEscape(value); |
| | | } |
| | | setValue(value); |
| | | } |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.util; |
| | | |
| | | import com.vci.starter.web.annotation.controller.VciUnCheckRight; |
| | | import com.vci.starter.web.annotation.log.VciUnLog; |
| | | import com.vci.starter.web.autoconfigure.AppAutoConfigure; |
| | | import com.vci.starter.web.pagemodel.BaseResult; |
| | | import org.springframework.beans.BeansException; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.ApplicationContext; |
| | | import org.springframework.context.ApplicationContextAware; |
| | | import org.springframework.context.ConfigurableApplicationContext; |
| | | import org.springframework.stereotype.Component; |
| | | 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.RestController; |
| | | |
| | | /** |
| | | * springçä¸ä¸æå·¥å
·ï¼ |
| | | * 注æspringmvcä¸çcontrollerä¸åºè¯¥å¨è¿éè·åï¼å 为springmvcåªåºè¯¥è¢«å端è°ç¨ |
| | | * 没æä½¿ç¨springbootçmain彿°é设置并è·åæ¯å 为å¯è½ä¼è®©å¤ä¸ªæå¡åå¹¶å°ä¸èµ·å¯å¨ |
| | | * @author weidy |
| | | * @date 2019/10/31 9:02 AM |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/application") |
| | | public class ApplicationContextProvider implements ApplicationContextAware { |
| | | |
| | | /** |
| | | * æå¡çé
ç½® |
| | | */ |
| | | @Autowired |
| | | private AppAutoConfigure appAutoConfigure; |
| | | |
| | | /** |
| | | * åºç¨çä¸ä¸æ |
| | | */ |
| | | private static ApplicationContext applicationContext ; |
| | | |
| | | /** |
| | | * 设置åºç¨çä¸ä¸æ |
| | | * @param applicationContext ä¸ä¸æ |
| | | * @throws BeansException åºç°é误æ¶éè¦æåºå¼å¸¸ç»springå®¹å¨ |
| | | */ |
| | | @Override |
| | | public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { |
| | | ApplicationContextProvider.applicationContext = applicationContext; |
| | | } |
| | | |
| | | /** |
| | | * è·ååºç¨çä¸ä¸æ |
| | | * @return ä¸ä¸æ |
| | | */ |
| | | public static ApplicationContext getApplicationContext() { |
| | | return applicationContext; |
| | | } |
| | | |
| | | /** |
| | | * è·å对象 |
| | | * @param name beançåç§° |
| | | * @return Object beanç对象 |
| | | * @throws BeansException 妿ä¸åå¨ä¼æåºå¼å¸¸ |
| | | */ |
| | | public static Object getBean(String name) throws BeansException { |
| | | return applicationContext.getBean(name); |
| | | } |
| | | |
| | | /** |
| | | * è·å对象 |
| | | * @param c beançæ¥å£ç±» |
| | | * @param <T> beanæå±ç±»çç±»å |
| | | * @return bean对象 |
| | | * @throws BeansException 妿ä¸åå¨ä¼æåºå¼å¸¸ |
| | | */ |
| | | public static <T> T getBean(Class<T> c) throws BeansException{ |
| | | return applicationContext.getBean(c); |
| | | } |
| | | |
| | | /** |
| | | * å
³æº |
| | | * @return æ§è¡å®æ |
| | | */ |
| | | @PostMapping("/shutDownContext") |
| | | @VciUnLog |
| | | @VciUnCheckRight |
| | | public BaseResult shutDownContext(String privateKey){ |
| | | if( appAutoConfigure.getPrivateTokenKey().equalsIgnoreCase(privateKey)) { |
| | | ConfigurableApplicationContext ctx = (ConfigurableApplicationContext) applicationContext; |
| | | ctx.close(); |
| | | return BaseResult.success("å
³éæå¡æå"); |
| | | }else{ |
| | | return BaseResult.fail("æ¨æ²¡ææéå
³éæå¡"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ£æ¥æ¯å¦å®æ |
| | | * @return è°ç¨å°±è¯´ææåäº |
| | | */ |
| | | @PostMapping("/checkOnline") |
| | | @VciUnLog |
| | | @VciUnCheckRight |
| | | public BaseResult checkOnline(){ |
| | | return BaseResult.success("å¯å¨å®æ"); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.util; |
| | | |
| | | import com.vci.starter.web.toolmodel.DateConverter; |
| | | import org.springframework.cglib.beans.BeanCopier; |
| | | import org.springframework.cglib.core.Converter; |
| | | |
| | | import java.util.*; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | | import java.util.concurrent.ConcurrentMap; |
| | | |
| | | /** |
| | | * 对象æ·è´å·¥å
·ç±» |
| | | * 使ç¨çcglibçbeancopierï¼å 为使ç¨äºè½¬æ¢å¨ï¼æä»¥æ§è½æ¯æ²¡æä½¿ç¨è½¬æ¢å¨çè¦ä½ä¸äº |
| | | * ä¼èªå¨å¤ææ¯å¦éè¦è½¬æ¢å¨ï¼å½æå±æ§ç¸åï¼ç±»åä¸åï¼åæå¯¹è±¡ç±»åï¼mapï¼listçéåç±»åæ¶æéè¦è½¬æ¢å¨ |
| | | * @author weidy |
| | | * @date 2019/11/23 9:22 AM |
| | | */ |
| | | public class BeanUtil { |
| | | |
| | | |
| | | /** |
| | | * åæ¾æ·è´å¯¹è±¡çç¼å |
| | | */ |
| | | private static final ConcurrentMap<String,BeanCopier> beanCopierMap = new ConcurrentHashMap<>(); |
| | | |
| | | /** |
| | | * è·åç±»æ·è´ç对象 |
| | | * @param source æºå¯¹è±¡ç±» |
| | | * @param target ç®æ 对象类 |
| | | * @param useConverter æ¯å¦ä½¿ç¨è½¬æ¢å¨ |
| | | * @return æ·è´å¯¹è±¡ |
| | | */ |
| | | public static BeanCopier getBeanCopier(Class<?> source, Class<?> target,boolean useConverter) { |
| | | String beanCopierKey = generateBeanKey(source, target); |
| | | if (beanCopierMap.containsKey(beanCopierKey)) { |
| | | return beanCopierMap.get(beanCopierKey); |
| | | } else { |
| | | BeanCopier beanCopier = BeanCopier.create(source, target, useConverter); |
| | | beanCopierMap.putIfAbsent(beanCopierKey, beanCopier); |
| | | } |
| | | return beanCopierMap.get(beanCopierKey); |
| | | } |
| | | |
| | | /** |
| | | * çæä¸¤ä¸ªç±»çkey,ç¨äºåæ¾å°ç¼åä¹ä¸ |
| | | * @param source æºå¯¹è±¡ç±»å |
| | | * @param target ç®æ 对象类 |
| | | * @return 两个类çåç§°è¿æ¥å°ä¸èµ·åçåå |
| | | */ |
| | | public static String generateBeanKey(Class<?> source, Class<?> target) { |
| | | return source.getName() + "@" + target.getName(); |
| | | } |
| | | |
| | | /** |
| | | * 两个对象ä¹é´è½¬æ¢ |
| | | * @param source æºå¯¹è±¡ |
| | | * @param target ç®æ 对象 |
| | | * @param useConvert æ¯å¦ä½¿ç¨é»è®¤ç转æ¢å¨ï¼è¯·å¨åºç°å±æ§åç§°ç¸åèç±»åä¸åï¼æè
æå¯¹è±¡ç±»åï¼éå屿§æ¶æè½¬æ¢ |
| | | */ |
| | | public static void convert(Object source,Object target,boolean useConvert){ |
| | | if(source != null && target !=null){ |
| | | BeanCopier beanCopier = getBeanCopier(source.getClass(),target.getClass(),useConvert); |
| | | beanCopier.copy(source,target,useConvert?new DeepCopyConverter(target):null); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 两个对象ä¹é´è½¬æ¢ |
| | | * @param source æºå¯¹è±¡ |
| | | * @param target ç®æ 对象 |
| | | * @return ç®æ 对象 |
| | | */ |
| | | public static void convert(Object source,Object target){ |
| | | convert(source,target,true); |
| | | } |
| | | |
| | | /** |
| | | * 深度æ·è´è½¬æ¢å¨ |
| | | */ |
| | | public static class DeepCopyConverter implements Converter { |
| | | |
| | | /** |
| | | * ç®æ 对象 |
| | | */ |
| | | private Object target; |
| | | |
| | | /** |
| | | * æé æ¹æ³ |
| | | * @param target ç®æ 对象 |
| | | */ |
| | | public DeepCopyConverter(Object target) { |
| | | this.target = target; |
| | | } |
| | | |
| | | /** |
| | | * æ§è¡æ·è´ |
| | | * @param value æºå¯¹è±¡ç屿§çå¼ |
| | | * @param targetClazz ç®æ 对象ç屿§çç±» |
| | | * @param methodName setæ¹æ³çåå |
| | | * @return 转æ¢åçå¼ |
| | | */ |
| | | @Override |
| | | public Object convert(Object value, Class targetClazz, Object methodName) { |
| | | if (value instanceof List) { |
| | | List values = (List) value; |
| | | List retList = new ArrayList<>(values.size()); |
| | | copyForCollection(values,retList,methodName); |
| | | return retList; |
| | | } else if(value instanceof Set){ |
| | | Set values = (Set) value; |
| | | Set retSet = new HashSet<>(); |
| | | copyForCollection(values,retSet,methodName); |
| | | } else if(value instanceof Vector){ |
| | | Vector values = (Vector)value; |
| | | Vector retVector = new Vector(); |
| | | copyForCollection(values,retVector,methodName); |
| | | }else if (value instanceof Map) { |
| | | Map values = (Map)value; |
| | | Map retMap = new HashMap(); |
| | | for (final Object key : values.keySet()) { |
| | | Object mapValue = values.get(key); |
| | | String tempFieldName = methodName.toString().replace("set", |
| | | ""); |
| | | String fieldName = tempFieldName.substring(0, 1) |
| | | .toLowerCase() + tempFieldName.substring(1); |
| | | Class clazz = ClassUtil.getElementType(target.getClass(), fieldName); |
| | | Object targetAttr = null; |
| | | try{ |
| | | targetAttr = clazz.newInstance(); |
| | | }catch (Throwable e){ |
| | | //æ°ç对象ç屿§åå§ååºé |
| | | } |
| | | BeanUtil.convert(mapValue, targetAttr); |
| | | retMap.put(key,targetAttr); |
| | | } |
| | | } else if (!ClassUtil.isPrimitive(targetClazz)) { |
| | | //è¿ä¸ªæ¯å¯¹è±¡ç±»å |
| | | Object targetAttr = null; |
| | | try{ |
| | | targetAttr = targetClazz.newInstance(); |
| | | }catch (Throwable e){ |
| | | //æ°çå¯¹è±¡å±æ§åå§ååºé |
| | | } |
| | | BeanUtil.convert(value, targetAttr); |
| | | return targetAttr; |
| | | } |
| | | if(value instanceof Boolean && targetClazz.equals(String.class)){ |
| | | //ä»booleanæ·è´å°string |
| | | return String.valueOf(value); |
| | | } |
| | | if(value instanceof String && (targetClazz.equals(Boolean.class) |
| | | || targetClazz.equals(boolean.class))){ |
| | | //ä»Stringæ·è´å°boolean |
| | | if("true".equalsIgnoreCase((String)value)){ |
| | | return true; |
| | | }else{ |
| | | return false; |
| | | } |
| | | } |
| | | if(value instanceof Date && targetClazz.equals(String.class)){ |
| | | //æ¶é´æ ¼å¼ |
| | | return VciDateUtil.date2Str((Date)value,VciDateUtil.DateTimeMillFormat); |
| | | } |
| | | if(value instanceof String && targetClazz.equals(Date.class)){ |
| | | //è½¬æ¢ |
| | | DateConverter dateConverter = new DateConverter(); |
| | | dateConverter.setAsText((String)value); |
| | | return dateConverter.getValue(); |
| | | } |
| | | return value; |
| | | } |
| | | |
| | | /** |
| | | * å¤çéå屿§ |
| | | * @param sourceCollection æºå¯¹è±¡ä¸éå屿§ççå¼ |
| | | * @param targetCollection ç®æ 对象çéå屿§çå¼ |
| | | * @param methodName setteræ¹æ³ |
| | | */ |
| | | private void copyForCollection(Collection<?> sourceCollection,Collection targetCollection,Object methodName){ |
| | | for (final Object source : sourceCollection) { |
| | | if(source instanceof Collection){ |
| | | List<Object> targetValues = new ArrayList<>(); |
| | | copyForCollection((Collection<?>)source,targetValues,methodName); |
| | | targetCollection.add(targetValues); |
| | | }else if(source instanceof Map){ |
| | | String tempFieldName = methodName.toString().replace("set", |
| | | ""); |
| | | String fieldName = tempFieldName.substring(0, 1) |
| | | .toLowerCase() + tempFieldName.substring(1); |
| | | Class clazz = ClassUtil.getElementType(target.getClass(), fieldName); |
| | | Object targetAttr = null; |
| | | try { |
| | | targetAttr = clazz.newInstance(); |
| | | } catch (Throwable e) { |
| | | //æ°ç对象ç屿§åå§ååºé |
| | | } |
| | | Map map = (Map) source; |
| | | for(Object key : map.keySet()){ |
| | | VciBaseUtil.setValueForField(key.toString(),targetAttr,VciBaseUtil.getStringValueFromObject(map.get(key))); |
| | | } |
| | | targetCollection.add(targetAttr); |
| | | }else { |
| | | String tempFieldName = methodName.toString().replace("set", |
| | | ""); |
| | | String fieldName = tempFieldName.substring(0, 1) |
| | | .toLowerCase() + tempFieldName.substring(1); |
| | | Class clazz = ClassUtil.getElementType(target.getClass(), fieldName); |
| | | Object targetAttr = null; |
| | | try { |
| | | targetAttr = clazz.newInstance(); |
| | | } catch (Throwable e) { |
| | | //æ°ç对象ç屿§åå§ååºé |
| | | } |
| | | BeanUtil.convert(source, targetAttr); |
| | | targetCollection.add(targetAttr); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.util; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.lang.reflect.Field; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * ä¸å¡ç±»åä¸ç¨çæ·è´å·¥å
·ï¼è¿ä¸ªæ¯æµ
æ·è´ï¼ |
| | | * @author weidy |
| | | * @date 2022-1-18 |
| | | */ |
| | | public class BeanUtilForVCI { |
| | | |
| | | /** |
| | | * æ¥å¿ |
| | | */ |
| | | private static Logger logger = LoggerFactory.getLogger(BeanUtilForVCI.class); |
| | | |
| | | /** |
| | | * æ·è´æ°æ® |
| | | * 大å°åå¯ä»¥å¿½ç¥ |
| | | * ä¸å线 _ è¢«å¿½ç¥ |
| | | * nullå空å符串çä¹ä¼è¢«è¦ç |
| | | * @param source æ¥æºå±æ§ |
| | | * @param target ç®æ 屿§ |
| | | */ |
| | | public static void copyPropertiesIgnoreCase(Object source, Object target) { |
| | | copyPropertiesIgnoreCase(source,target,false); |
| | | } |
| | | |
| | | /** |
| | | * æ·è´å±æ§ |
| | | * @param source æºå¯¹è±¡ |
| | | * @param target ç®æ 对象 |
| | | * @param fieldMap 屿§çæ å° |
| | | */ |
| | | public static void copyPropertiesIgnoreCase(Object source,Object target,Map<String/**å对象ç屿§åå**/,String/**ç®æ 对象ç屿§åç§°**/> fieldMap){ |
| | | copyPropertiesIgnoreCase(source,target,false,fieldMap); |
| | | } |
| | | |
| | | /** |
| | | * æ·è´æ°æ® |
| | | * 大å°åå¯ä»¥å¿½ç¥ |
| | | * ä¸å线 _ è¢«å¿½ç¥ |
| | | * @param source æ¥æºå±æ§ |
| | | * @param target ç®æ 屿§ |
| | | * @param ignoreNull æ¯å¦å¿½ç¥æ§å¶ |
| | | */ |
| | | public static void copyPropertiesIgnoreCase(Object source,Object target,boolean ignoreNull){ |
| | | copyPropertiesIgnoreCase(source, target, ignoreNull,null); |
| | | } |
| | | |
| | | /** |
| | | * æ·è´æ¬ä½ç屿§å
容 |
| | | * @param source æ¥æºå¯¹è±¡ |
| | | * @param target ç®æ 对象 |
| | | */ |
| | | public static void copyDeclaredIgnoreCase(Object source,Object target){ |
| | | copyDeclaredIgnoreCase(source,target,false); |
| | | } |
| | | |
| | | /** |
| | | * æ·è´æ¬ä½ç屿§å
容 |
| | | * @param source æ¥æºå¯¹è±¡ |
| | | * @param target ç®æ 对象 |
| | | * @param ignoreNull 忽ç¥ç©ºå¼ç屿§ |
| | | */ |
| | | public static void copyDeclaredIgnoreCase(Object source,Object target,boolean ignoreNull){ |
| | | copyDeclaredIgnoreCase(source,target,ignoreNull,null); |
| | | } |
| | | |
| | | /** |
| | | * æ·è´æ¬ä½ç屿§å
容 |
| | | * @param source æ¥æºå¯¹è±¡ |
| | | * @param target ç®æ 对象 |
| | | * @param ignoreNull 忽ç¥ç©ºå¼ç屿§ |
| | | * @param fieldMap åæ®µçæ å° |
| | | */ |
| | | public static void copyDeclaredIgnoreCase(Object source,Object target,boolean ignoreNull,Map<String/**å对象ç屿§åå**/,String/**ç®æ 对象ç屿§åç§°**/> fieldMap){ |
| | | copyDeclaredIgnoreCase(source,target,ignoreNull,fieldMap,null); |
| | | } |
| | | |
| | | /** |
| | | * æ·è´æ¬ä½ç屿§å
容 |
| | | * @param source æ¥æºå¯¹è±¡ |
| | | * @param target ç®æ 对象 |
| | | * @param ignoreNull 忽ç¥ç©ºå¼ç屿§ |
| | | * @param fieldMap åæ®µçæ å° |
| | | * @param ignoreField 忽ç¥å段 |
| | | */ |
| | | public static void copyDeclaredIgnoreCase(Object source,Object target,boolean ignoreNull,Map<String/**å对象ç屿§åå**/,String/**ç®æ 对象ç屿§åç§°**/> fieldMap,Collection<String> ignoreField){ |
| | | Map<String, Field> sourceMap = CacheFieldMap.getDeclaredFieldMap(source.getClass()); |
| | | Map<String, Field> targetMap = CacheFieldMap.getDeclaredFieldMap(target.getClass()); |
| | | copyPropertiesIgnoreCase(source,target,ignoreNull,fieldMap,ignoreField,sourceMap,targetMap); |
| | | } |
| | | /** |
| | | * æ·è´æ°æ® |
| | | * 大å°åå¯ä»¥å¿½ç¥ |
| | | * ä¸å线 _ è¢«å¿½ç¥ |
| | | * @param source æ¥æºå±æ§ |
| | | * @param target ç®æ 屿§ |
| | | * @param ignoreNull æ¯å¦å¿½ç¥æ§å¶ |
| | | */ |
| | | public static void copyPropertiesIgnoreCase(Object source, Object target, boolean ignoreNull, Map<String/**å对象ç屿§åå**/,String/**ç®æ 对象ç屿§åç§°**/> fieldMap, Collection<String> ignoreField) { |
| | | Map<String, Field> sourceMap = CacheFieldMap.getFieldMap(source.getClass()); |
| | | Map<String, Field> targetMap = CacheFieldMap.getFieldMap(target.getClass()); |
| | | copyPropertiesIgnoreCase(source,target,ignoreNull,fieldMap,ignoreField,sourceMap,targetMap); |
| | | } |
| | | |
| | | /** |
| | | * æ·è´æ°æ® |
| | | * 大å°åå¯ä»¥å¿½ç¥ |
| | | * ä¸å线 _ è¢«å¿½ç¥ |
| | | * @param source æ¥æºå±æ§ |
| | | * @param target ç®æ 屿§ |
| | | * @param ignoreNull æ¯å¦å¿½ç¥æ§å¶ |
| | | */ |
| | | public static void copyPropertiesIgnoreCase(Object source, Object target, boolean ignoreNull, |
| | | Map<String/**å对象ç屿§åå**/,String/**ç®æ 对象ç屿§åç§°**/> fieldMap, Collection<String> ignoreField, |
| | | Map<String, Field> sourceMap,Map<String, Field> targetMap ) { |
| | | if(fieldMap == null){ |
| | | fieldMap = new HashMap<>(); |
| | | } |
| | | Map<String, String> finalFieldMap = fieldMap; |
| | | targetMap.values().forEach((it) -> { |
| | | boolean not = false; |
| | | if(ignoreField!=null && ignoreField.contains(it.getName())){ |
| | | not = true; |
| | | } |
| | | if(!not) { |
| | | String itFieldName = it.getName().toLowerCase().replace("_", ""); |
| | | itFieldName = finalFieldMap.getOrDefault(itFieldName, itFieldName); |
| | | Field field = sourceMap.getOrDefault(itFieldName, null); |
| | | if (field != null) { |
| | | it.setAccessible(true); |
| | | field.setAccessible(true); |
| | | try { |
| | | //忽ç¥nullå空å符串 |
| | | //å¤çbooleanåString |
| | | String sourceClassName = field.getClass().getName(); |
| | | String targetClassName = it.getClass().getName(); |
| | | if (((sourceClassName.equalsIgnoreCase(Boolean.class.getName()) |
| | | || sourceClassName.equalsIgnoreCase(boolean.class.getName()) |
| | | ) && targetClassName.equalsIgnoreCase(String.class.getName())) |
| | | || ((targetClassName.equalsIgnoreCase(Boolean.class.getName()) |
| | | || targetClassName.equalsIgnoreCase(boolean.class.getName())) |
| | | && sourceClassName.equalsIgnoreCase(String.class.getName()))) { |
| | | if (targetClassName.equalsIgnoreCase(String.class.getName())) { |
| | | it.set(target, String.valueOf((Boolean) field.get(source))); |
| | | } else { |
| | | it.set(target, Boolean.valueOf((String) field.get(source))); |
| | | } |
| | | } else { |
| | | if (!ignoreNull) { |
| | | it.set(target, field.get(source)); |
| | | } else { |
| | | //éè¦å¤ææ¯å¦ä¸ºç©º |
| | | Object sourceValue = field.get(source); |
| | | if (sourceValue != null && StringUtils.isNotBlank(sourceValue.toString())) { |
| | | it.set(target, sourceValue); |
| | | } |
| | | } |
| | | } |
| | | } catch (IllegalAccessException e) { |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("æ·è´å±æ§åºé" + e); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * æ·è´æ°æ® |
| | | * 大å°åå¯ä»¥å¿½ç¥ |
| | | * ä¸å线 _ è¢«å¿½ç¥ |
| | | * @param source æ¥æºå±æ§ |
| | | * @param target ç®æ 屿§ |
| | | * @param ignoreNull æ¯å¦å¿½ç¥æ§å¶ |
| | | */ |
| | | public static void copyPropertiesIgnoreCase(Object source,Object target,boolean ignoreNull,Map<String/**å对象ç屿§åå**/,String/**ç®æ 对象ç屿§åç§°**/> fieldMap){ |
| | | copyPropertiesIgnoreCase(source,target,ignoreNull,fieldMap,null); |
| | | } |
| | | |
| | | /** |
| | | * ç¼å对象ç屿§ |
| | | */ |
| | | private static class CacheFieldMap { |
| | | /** |
| | | * å¯¹è±¡å±æ§çç¼å |
| | | */ |
| | | private static Map<String/**ç±»çåå**/, Map<String/**屿§çåç§°å°å**/, Field/**屿§ç对象**/>> cacheMap = new HashMap<>(); |
| | | |
| | | /** |
| | | * 对象çèªå·±ç±»çç¯å¢ï¼ä¸å
æ¬ç¶ç±» |
| | | */ |
| | | private static Map<String/**ç±»çåç§°**/,Map<String/**屿§çåç§°å°å**/,Field/**屿§ç对象**/>> declaredCacheMap = new HashMap<>(); |
| | | |
| | | /** |
| | | * è·å屿§çæ å° |
| | | * @param clazz ç±» |
| | | * @return 屿§åç§°å°åå屿§çæ å° |
| | | */ |
| | | private static Map<String/**屿§åç§°**/, Field> getFieldMap(Class clazz) { |
| | | Map<String, Field> result = cacheMap.get(clazz.getName()); |
| | | if (result == null) { |
| | | synchronized (CacheFieldMap.class) { |
| | | if (result == null) { |
| | | Map<String, Field> fieldMap = new HashMap<>(); |
| | | List<Field> allFields = VciBaseUtil.getAllFieldForObj(clazz); |
| | | if(!CollectionUtils.isEmpty(allFields)){ |
| | | allFields.stream().forEach(field -> { |
| | | fieldMap.put(field.getName().toLowerCase().replace("_", ""), field); |
| | | }); |
| | | } |
| | | cacheMap.put(clazz.getName(), fieldMap); |
| | | result = cacheMap.get(clazz.getName()); |
| | | } |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * è·å屿§çæ å°ï¼ä¸å
å«ç¶ç±»ï¼ |
| | | * @param clazz ç±» |
| | | * @return 屿§åç§°å°åå屿§çæ å° |
| | | */ |
| | | private static Map<String/**屿§åç§°**/,Field> getDeclaredFieldMap(Class clazz){ |
| | | Map<String, Field> result = declaredCacheMap.get(clazz.getName()); |
| | | if(result == null){ |
| | | synchronized(CacheFieldMap.class){ |
| | | if (result == null) { |
| | | Map<String, Field> fieldMap = new HashMap<>(); |
| | | Field[] allFields = clazz.getDeclaredFields(); |
| | | if(allFields!=null && allFields.length>0){ |
| | | Arrays.stream(allFields).forEach(field -> { |
| | | fieldMap.put(field.getName().toLowerCase().replace("_", ""), field); |
| | | }); |
| | | } |
| | | declaredCacheMap.put(clazz.getName(), fieldMap); |
| | | result = declaredCacheMap.get(clazz.getName()); |
| | | } |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.util; |
| | | |
| | | import com.vci.starter.web.exception.VciBaseException; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.lang.reflect.Method; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * ä¸å¡ç注解工å
·ç±» |
| | | * @author weidy |
| | | * @date 2022-04-12 |
| | | */ |
| | | public class BusAnnotationUtil { |
| | | |
| | | /** |
| | | * æ¥å¿ |
| | | */ |
| | | private static Logger logger = LoggerFactory.getLogger(BusAnnotationUtil.class); |
| | | |
| | | /** |
| | | * éè¿æ³¨è§£å»è°ç¨å¯¹åºçæ¹æ³ |
| | | * @param classAnnotation ç±»çæ³¨è§£ |
| | | * @param methodAnnotation æ¹æ³ç注解 |
| | | * @param args åæ° |
| | | */ |
| | | public static void callForAnnotation(Class classAnnotation,Class methodAnnotation,Object ... args){ |
| | | //å¨ç»å½ä¹åï¼ççæ¯å¦ææä»¶ |
| | | Map<String, Object> beanMap = ApplicationContextProvider.getApplicationContext().getBeansWithAnnotation(classAnnotation); |
| | | if (!CollectionUtils.isEmpty(beanMap)) { |
| | | beanMap.forEach((k, v) -> { |
| | | Method[] methods = v.getClass().getSuperclass().getDeclaredMethods(); |
| | | if (methods != null && methods.length > 0) { |
| | | for (Method method : methods) { |
| | | if (method.isAnnotationPresent(methodAnnotation)) { |
| | | try { |
| | | method.invoke(v, args); |
| | | } catch (Throwable e) { |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("è°ç¨æä»¶åºé", e); |
| | | } |
| | | throw new VciBaseException("è°ç¨æä»¶åºé,{0},{1}", new String[]{v.getClass().getName(), method.getName()}, e); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.util; |
| | | |
| | | import java.lang.reflect.ParameterizedType; |
| | | import java.lang.reflect.Type; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * ç±»çæä½å·¥å
· |
| | | * @author weidy |
| | | * @date 2019/11/23 10:18 AM |
| | | */ |
| | | public class ClassUtil { |
| | | /** |
| | | * åºæ¬ç±»åçæ å° |
| | | */ |
| | | private static final Map<Class<?>, Class<?>> primitiveMap = new HashMap<>(9); |
| | | |
| | | /** |
| | | * åå§åçæ¶åï¼å°åºç¡ç±»åæ·»å è¿å» |
| | | */ |
| | | static { |
| | | primitiveMap.put(String.class, String.class); |
| | | primitiveMap.put(Boolean.class, boolean.class); |
| | | primitiveMap.put(Byte.class, byte.class); |
| | | primitiveMap.put(Character.class, char.class); |
| | | primitiveMap.put(Double.class, double.class); |
| | | primitiveMap.put(Float.class, float.class); |
| | | primitiveMap.put(Integer.class, int.class); |
| | | primitiveMap.put(Long.class, long.class); |
| | | primitiveMap.put(Short.class, short.class); |
| | | primitiveMap.put(Date.class, Date.class); |
| | | } |
| | | |
| | | /** |
| | | * å¤æåºæ¬ç±»å |
| | | * @see java.lang.String |
| | | * @see java.lang.Boolean#TYPE |
| | | * @see java.lang.Character#TYPE |
| | | * @see java.lang.Byte#TYPE |
| | | * @see java.lang.Short#TYPE |
| | | * @see java.lang.Integer#TYPE |
| | | * @see java.lang.Long#TYPE |
| | | * @see java.lang.Float#TYPE |
| | | * @see java.lang.Double#TYPE |
| | | * @see java.lang.Boolean#TYPE |
| | | * @see byte |
| | | * @see short |
| | | * @see int |
| | | * @see long |
| | | * @see float |
| | | * @see double |
| | | * @param clazz ç±» |
| | | * @return boolean trueè¡¨ç¤ºä¸ºåºæ¬ç±»å |
| | | */ |
| | | public static boolean isPrimitive(Class<?> clazz) { |
| | | if (primitiveMap.containsKey(clazz)) { |
| | | return true; |
| | | } |
| | | return clazz.isPrimitive(); |
| | | } |
| | | |
| | | /** |
| | | * è·åæ¹æ³è¿åå¼ç±»å |
| | | * @param tartget ç®æ 对象çç±» |
| | | * @param fieldName 屿§çåç§° |
| | | * @return Class<?> è¿åå¼ç±»å |
| | | */ |
| | | public static Class<?> getElementType(Class<?> tartget, String fieldName) { |
| | | Class<?> elementTypeClass = null; |
| | | try { |
| | | Type type = VciBaseUtil.getFieldForObject(fieldName,tartget).getGenericType(); |
| | | ParameterizedType t = (ParameterizedType) type; |
| | | String classStr = t.getActualTypeArguments()[0].toString().replace("class ", ""); |
| | | if(classStr.contains("<")){ |
| | | classStr = classStr.substring(classStr.lastIndexOf("<") + 1 ,classStr.indexOf(">")); |
| | | } |
| | | elementTypeClass = Thread.currentThread().getContextClassLoader().loadClass(classStr); |
| | | } catch (ClassNotFoundException | SecurityException e) { |
| | | throw new RuntimeException("get fieldName[" + fieldName + "] error", e); |
| | | } |
| | | return elementTypeClass; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.util; |
| | | |
| | | import com.vci.starter.web.pagemodel.PageHelper; |
| | | import org.apache.commons.io.IOUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.http.MediaType; |
| | | |
| | | import javax.servlet.http.Cookie; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.*; |
| | | import java.net.URLEncoder; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | | |
| | | /** |
| | | * å¨controllerå±ä½¿ç¨çå·¥å
· |
| | | * @author weidy |
| | | * @date 2020/2/19 |
| | | */ |
| | | public class ControllerUtil { |
| | | |
| | | /** |
| | | * æ¥å¿å¯¹è±¡ |
| | | */ |
| | | private static Logger logger = LoggerFactory.getLogger(ControllerUtil.class); |
| | | |
| | | /** |
| | | * å°æä»¶åå
¥å°è¿åæµä¸ |
| | | * @param response ååºå¯¹è±¡ |
| | | * @param fileName æä»¶åç§° |
| | | * @throws FileNotFoundException æä»¶æ²¡ææ¾å° |
| | | * @throws IOException 读åæä»¶åºéï¼æè
åæ°æ®åºé |
| | | */ |
| | | public static void writeFileToResponse(HttpServletResponse response,String fileName) throws FileNotFoundException,IOException{ |
| | | writeFileToResponse(response,fileName,true); |
| | | } |
| | | |
| | | /** |
| | | * å°æä»¶åå
¥å°è¿åæµä¸ |
| | | * @param response ååºå¯¹è±¡ |
| | | * @param fileName æä»¶åç§° |
| | | * @param deleteFile ä¸è½½å®æåæ¯å¦å 餿件ï¼true表示å é¤ï¼å¦å¤è¿ä¸ªæä»¶çä¸çº§æä»¶å¤¹ä¹ä¼è¢«å é¤ï¼å æ¤ä¸´æ¶æä»¶å¤¹ä¸è¬é½æ·»å äºéæºåç§°çæä»¶å¤¹ |
| | | * @throws FileNotFoundException æä»¶æ²¡ææ¾å° |
| | | * @throws IOException 读åæä»¶åºéï¼æè
åæ°æ®åºé |
| | | */ |
| | | public static void writeFileToResponse(HttpServletResponse response,String fileName,boolean deleteFile) throws FileNotFoundException,IOException{ |
| | | writeFileToResponse(response,fileName,null,deleteFile); |
| | | } |
| | | |
| | | /** |
| | | * å°æä»¶åå
¥å°è¿åæµä¸ |
| | | * @param response ååºå¯¹è±¡ |
| | | * @param fileName æä»¶åç§° |
| | | * @param deleteFile ä¸è½½å®æåæ¯å¦å 餿件ï¼true表示å é¤ï¼å¦å¤è¿ä¸ªæä»¶çä¸çº§æä»¶å¤¹ä¹ä¼è¢«å é¤ï¼å æ¤ä¸´æ¶æä»¶å¤¹ä¸è¬é½æ·»å äºéæºåç§°çæä»¶å¤¹ |
| | | * @param showName æ¾ç¤ºæä»¶åï¼å³ç¨æ·çå°çåç§°ï¼å¦åç´æ¥ä¸ºåæä»¶çåç§° |
| | | * @throws FileNotFoundException æä»¶æ²¡ææ¾å° |
| | | * @throws IOException 读åæä»¶åºéï¼æè
åæ°æ®åºé |
| | | */ |
| | | public static void writeFileToResponse(HttpServletResponse response,String fileName,String showName,boolean deleteFile) throws FileNotFoundException,IOException { |
| | | File file = new File(fileName); |
| | | if(!file.exists()){ |
| | | throw new FileNotFoundException(fileName); |
| | | } |
| | | writeFileToResponse(response,file,showName,deleteFile); |
| | | } |
| | | |
| | | /** |
| | | * å°æä»¶åå
¥å°è¿åæµä¸ |
| | | * @param response ååºå¯¹è±¡ |
| | | * @param file æä»¶å¯¹è±¡ |
| | | * @throws FileNotFoundException æä»¶æ²¡ææ¾å° |
| | | * @throws IOException 读åæä»¶åºéï¼æè
åæ°æ®åºé |
| | | */ |
| | | public static void writeFileToResponse(HttpServletResponse response, File file) throws FileNotFoundException,IOException{ |
| | | writeFileToResponse(response,file,true); |
| | | } |
| | | |
| | | /** |
| | | * å°æä»¶åå
¥å°è¿åæµä¸ |
| | | * @param response ååºå¯¹è±¡ |
| | | * @param file æä»¶å¯¹è±¡ |
| | | * @param deleteFile ä¸è½½å®æåæ¯å¦å 餿件ï¼true表示å é¤ï¼å¦å¤è¿ä¸ªæä»¶çä¸çº§æä»¶å¤¹ä¹ä¼è¢«å é¤ï¼å æ¤ä¸´æ¶æä»¶å¤¹ä¸è¬é½æ·»å äºéæºåç§°çæä»¶å¤¹ |
| | | * @throws FileNotFoundException æä»¶æ²¡ææ¾å° |
| | | * @throws IOException 读åæä»¶åºéï¼æè
åæ°æ®åºé |
| | | */ |
| | | public static void writeFileToResponse(HttpServletResponse response,File file,boolean deleteFile) throws FileNotFoundException,IOException{ |
| | | writeFileToResponse(response,file,null,deleteFile); |
| | | } |
| | | |
| | | /** |
| | | * å°æä»¶åå
¥å°è¿åæµä¸ |
| | | * @param response ååºå¯¹è±¡ |
| | | * @param file æä»¶å¯¹è±¡ |
| | | * @param deleteFile ä¸è½½å®æåæ¯å¦å 餿件ï¼true表示å é¤ï¼å¦å¤è¿ä¸ªæä»¶çä¸çº§æä»¶å¤¹ä¹ä¼è¢«å é¤ï¼å æ¤ä¸´æ¶æä»¶å¤¹ä¸è¬é½æ·»å äºéæºåç§°çæä»¶å¤¹ |
| | | * @param showName æ¾ç¤ºæä»¶åï¼å³ç¨æ·çå°çåç§°ï¼å¦åç´æ¥ä¸ºåæä»¶çåç§° |
| | | * @throws FileNotFoundException æä»¶æ²¡ææ¾å° |
| | | * @throws IOException 读åæä»¶åºéï¼æè
åæ°æ®åºé |
| | | */ |
| | | public static void writeFileToResponse(HttpServletResponse response,File file,String showName,boolean deleteFile) throws FileNotFoundException,IOException { |
| | | writeFileToResponse(response,file,showName,deleteFile,null); |
| | | } |
| | | /** |
| | | * å°æä»¶åå
¥å°è¿åæµä¸ |
| | | * @param response ååºå¯¹è±¡ |
| | | * @param file æä»¶å¯¹è±¡ |
| | | * @param deleteFile ä¸è½½å®æåæ¯å¦å 餿件ï¼true表示å é¤ï¼å¦å¤è¿ä¸ªæä»¶çä¸çº§æä»¶å¤¹ä¹ä¼è¢«å é¤ï¼å æ¤ä¸´æ¶æä»¶å¤¹ä¸è¬é½æ·»å äºéæºåç§°çæä»¶å¤¹ |
| | | * @param showName æ¾ç¤ºæä»¶åï¼å³ç¨æ·çå°çåç§°ï¼å¦åç´æ¥ä¸ºåæä»¶çåç§° |
| | | * @throws FileNotFoundException æä»¶æ²¡ææ¾å° |
| | | * @throws IOException 读åæä»¶åºéï¼æè
åæ°æ®åºé |
| | | */ |
| | | public static void writeFileToResponse(HttpServletResponse response,File file,String showName,boolean deleteFile,String contentType) throws FileNotFoundException,IOException { |
| | | VciBaseUtil.alertNotNull(file, "æä»¶å¯¹è±¡"); |
| | | if (!file.exists()) { |
| | | throw new FileNotFoundException(file.getName()); |
| | | } |
| | | if (StringUtils.isBlank(showName)) { |
| | | showName = file.getName(); |
| | | } |
| | | InputStream in = null; |
| | | try { |
| | | in = new FileInputStream(file); |
| | | writeFileToResponse(response, in, showName, contentType); |
| | | } catch (IOException e) { |
| | | //æå¯è½å®¢æ·ç«¯ç龿¥ |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("åå
¥æä»¶å°ååºæµåºé", e); |
| | | } |
| | | } finally { |
| | | IOUtils.closeQuietly(in); |
| | | if (deleteFile) { |
| | | File parentFile = file.getParentFile(); |
| | | file.delete(); |
| | | parentFile.delete(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * å°è¾å
¥æµåå
¥å°è¿åæµä¸ |
| | | * @param response ååºå¯¹è±¡ |
| | | * @param ins è¾å
¥æµ |
| | | * @param showName åç§° |
| | | * @throws IOException æ·è´åºéçæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static void writeFileToResponse(HttpServletResponse response,InputStream ins,String showName) throws IOException{ |
| | | writeFileToResponse(response,ins,showName,null); |
| | | } |
| | | |
| | | /** |
| | | * å°è¾å
¥æµåå
¥å°è¿åæµä¸ |
| | | * @param response ååºå¯¹è±¡ |
| | | * @param ins è¾å
¥æµ |
| | | * @param showName åç§° |
| | | * @throws IOException æ·è´åºéçæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static void writeFileToResponse(HttpServletResponse response,InputStream ins,String showName,String contentType ) throws IOException{ |
| | | if(StringUtils.isBlank(contentType)) { |
| | | contentType = "application/force-download"; |
| | | } |
| | | if(StringUtils.isBlank(showName)){ |
| | | showName = "ä¸è½½æä»¶"; |
| | | } |
| | | // 设置强å¶ä¸è½½ä¸æå¼ |
| | | response.setContentType(contentType); |
| | | try{ |
| | | String fileName = URLEncoder.encode(showName, "UTF8"); |
| | | response.addHeader("Content-Disposition", "attachment; filename="+ fileName+ ";filename*=utf-8''" + fileName); |
| | | }catch(Exception e){ |
| | | if(logger.isErrorEnabled()){ |
| | | logger.error("设置æä»¶çåç§°å°ååºæµçæ¶ååºé",e); |
| | | } |
| | | } |
| | | response.setCharacterEncoding("UTF-8"); |
| | | Cookie cookie = new Cookie("fileDownload", "true"); |
| | | cookie.setPath("/"); |
| | | response.addCookie(cookie); |
| | | try{ |
| | | IOUtils.copy(ins,response.getOutputStream()); |
| | | } catch (IOException e) { |
| | | //æå¯è½å®¢æ·ç«¯ç龿¥ |
| | | if(logger.isErrorEnabled()){ |
| | | logger.error("åå
¥æä»¶å°ååºæµåºé",e); |
| | | } |
| | | throw e; |
| | | }finally { |
| | | |
| | | IOUtils.closeQuietly(ins); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å°è¾å
¥æµåå
¥å°è¿åæµä¸ |
| | | * @param response ååºå¯¹è±¡ |
| | | * @param data æ°æ®çä¿¡æ¯ |
| | | * @throws IOException æ·è´åºéçæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static void writeDataToResponse(HttpServletResponse response,byte[] data,String contentType) throws IOException { |
| | | if (StringUtils.isBlank(contentType)) { |
| | | contentType = "application/force-download"; |
| | | } |
| | | response.setContentType(contentType); |
| | | response.setCharacterEncoding("UTF-8"); |
| | | Cookie cookie = new Cookie("fileDownload", "true"); |
| | | cookie.setPath("/"); |
| | | response.addCookie(cookie); |
| | | try { |
| | | response.getOutputStream().write(data); |
| | | } catch (IOException e) { |
| | | //æå¯è½å®¢æ·ç«¯ç龿¥ |
| | | if (logger.isErrorEnabled()) { |
| | | logger.error("åå
¥æä»¶å°ååºæµåºé", e); |
| | | } |
| | | throw e; |
| | | } |
| | | } |
| | | /** |
| | | * å°ç¯å¢åéä¸çæä¸ªæä»¶åå°è¿åæµä¸ |
| | | * @param response ååºå¯¹è±¡ |
| | | * @param classPathFileName å¨ç¯å¢åééçæä»¶åç§° |
| | | * @throws FileNotFoundException æä»¶æ²¡ææ¾å° |
| | | * @throws IOException 读åæä»¶åºéï¼æè
åæ°æ®åºé |
| | | */ |
| | | public static void writeClasspathFileToResponse(HttpServletResponse response,String classPathFileName) throws FileNotFoundException,IOException{ |
| | | writeClasspathFileToResponse(response,classPathFileName,null); |
| | | } |
| | | |
| | | /** |
| | | * å°ç¯å¢åéä¸çæä¸ªæä»¶åå°è¿åæµä¸ |
| | | * @param response ååºå¯¹è±¡ |
| | | * @param classPathFileName å¨ç¯å¢åééçæä»¶åç§° |
| | | * @param showName æ¾ç¤ºåç§° |
| | | * @throws FileNotFoundException æä»¶æ²¡ææ¾å° |
| | | * @throws IOException 读åæä»¶åºéï¼æè
åæ°æ®åºé |
| | | */ |
| | | public static void writeClasspathFileToResponse(HttpServletResponse response,String classPathFileName,String showName) throws FileNotFoundException,IOException{ |
| | | InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(classPathFileName); |
| | | if(StringUtils.isBlank(showName)){ |
| | | showName = classPathFileName.contains("/")?classPathFileName.substring(classPathFileName.lastIndexOf("/") + 1):classPathFileName; |
| | | } |
| | | try { |
| | | writeFileToResponse(response, in, showName); |
| | | }catch (IOException e){ |
| | | throw e; |
| | | }finally { |
| | | IOUtils.closeQuietly(in); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·åIPå°åï¼éè¿request |
| | | * @param request http请æ±å¯¹è±¡ |
| | | * @return ipå°å |
| | | */ |
| | | public static String getClientInfo(HttpServletRequest request){ |
| | | 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("WL-Proxy-Client-IP"); |
| | | } |
| | | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { |
| | | ip = request.getHeader("HTTP_CLIENT_IP"); |
| | | } |
| | | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { |
| | | ip = request.getHeader("HTTP_X_FORWARDED_FOR"); |
| | | } |
| | | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { |
| | | ip = request.getRemoteAddr(); |
| | | } |
| | | if (ip == null || ip.length() == 0 || ip.indexOf("0:0:0:0:0:0:0:1") >-1) {//0:0:0:0:0:0:0:1æ¯æ¬æºå¨è®¿é® |
| | | ip = "127.0.0.1"; |
| | | } |
| | | return ip; |
| | | } |
| | | |
| | | /** |
| | | * ä¸è½½é误æä»¶çæ å°å
容 |
| | | */ |
| | | public static final Map<String/**主é®**/,String/**æä»¶è·¯å¾**/> tempFileForDownloadMap = new ConcurrentHashMap<>(); |
| | | |
| | | |
| | | /** |
| | | * 设置æ¥è¯¢æ»æ° |
| | | * @param request 请æ±å¯¹è±¡ |
| | | * @param isQueryTotal æ¯å¦æ¥è¯¢æ»æ° |
| | | */ |
| | | public static void setQueryTotal(HttpServletRequest request, boolean isQueryTotal){ |
| | | WebThreadLocalUtil.getNeedQueryTotalInThread().set(isQueryTotal?"true":"false"); |
| | | //request.setAttribute(webProperties.getQueryTotalSessionName(), isQueryTotal); |
| | | } |
| | | |
| | | /** |
| | | * æ¾ç½®é误çæä»¶ |
| | | * @param errorFile é误çæä»¶ |
| | | * @return å¯ä¸æ è¯ |
| | | */ |
| | | public static String putErrorFile(String errorFile){ |
| | | String uuid = VciBaseUtil.getPk(); |
| | | tempFileForDownloadMap.put(uuid,errorFile); |
| | | return uuid; |
| | | } |
| | | |
| | | /** |
| | | * ä¸è½½é误çæä»¶(ä»
éäºexcel) |
| | | * @param response ååºå¯¹è±¡ |
| | | * @param uuid å¯ä¸çæ è¯ |
| | | * @throws IOException åå
¥æä»¶åºéçæ¶åæåºå¼å¸¸ |
| | | */ |
| | | public static void downloadErrorFile(HttpServletResponse response,String uuid) throws IOException{ |
| | | String errorFile = tempFileForDownloadMap.getOrDefault(uuid, ""); |
| | | try { |
| | | if (StringUtils.isNotBlank(errorFile)) { |
| | | ControllerUtil.writeFileToResponse(response, new File(errorFile), null, true, "application/msexcel"); |
| | | } |
| | | }finally { |
| | | tempFileForDownloadMap.remove(uuid); |
| | | } |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.util; |
| | | |
| | | |
| | | import java.lang.reflect.InvocationTargetException; |
| | | import java.lang.reflect.Method; |
| | | |
| | | /** |
| | | * å¤è¯ç¸å
³çå·¥å
·ç±» |
| | | * @author weidy |
| | | */ |
| | | public class LangBaseUtil { |
| | | /** |
| | | * è·åå¼å¸¸ä¿¡æ¯ |
| | | * @param e å¼å¸¸å¯¹è±¡ |
| | | * @return å¼å¸¸å¯¹è±¡ä¸çææå
容 |
| | | */ |
| | | public static String getErrorMsg(Throwable e){ |
| | | if(e == null){ |
| | | return "æªç¥é误"; |
| | | } |
| | | if( e.getClass()!= null && e.getClass().getSuperclass()!= null && |
| | | (e.getClass().getSuperclass().equals(RuntimeException.class) |
| | | || e.getClass().getSuperclass().getName().endsWith(".VciBaseException") |
| | | || e.getClass().getName().endsWith(".VciBaseException"))){ |
| | | //è¯´ææ¯æä»¬èªå®ä¹çå¼å¸¸ç±» |
| | | try { |
| | | Method errorMethod = e.getClass().getMethod("getErrorMsg"); |
| | | if(errorMethod != null ){ |
| | | return (String)errorMethod.invoke(e); |
| | | } |
| | | } catch (NoSuchMethodException e1) { |
| | | return e.getMessage(); |
| | | } catch (IllegalAccessException e1) { |
| | | return e.getMessage(); |
| | | } catch (InvocationTargetException e1) { |
| | | return e.getMessage(); |
| | | } |
| | | } |
| | | return e.getMessage(); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.util; |
| | | |
| | | import com.vci.starter.web.exception.VciBaseException; |
| | | import org.apache.commons.io.IOUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.boot.system.ApplicationHome; |
| | | import org.springframework.core.io.ClassPathResource; |
| | | import org.springframework.util.ResourceUtils; |
| | | |
| | | import java.io.*; |
| | | import java.nio.channels.FileChannel; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.ArrayList; |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.UUID; |
| | | |
| | | /** |
| | | * æ¬å°æä»¶æä½ç±» |
| | | * @author weidy |
| | | */ |
| | | public class LocalFileUtil { |
| | | |
| | | /** |
| | | * 主类 |
| | | */ |
| | | public static Class mainClass = null; |
| | | /** |
| | | * å 餿件夹 |
| | | * @param file è¦å é¤çæä»¶æè
æä»¶å¤¹ |
| | | */ |
| | | public static void deleteFile(File file) { |
| | | if(file == null || !file.exists()){ |
| | | return; |
| | | } |
| | | if (file.isDirectory()) { |
| | | File[] files = file.listFiles(); |
| | | for (int i = 0; i < files.length; i++) { |
| | | deleteFile(files[i]); |
| | | } |
| | | } |
| | | file.delete(); |
| | | } |
| | | |
| | | /** |
| | | * æ·è´æä»¶ |
| | | * @param source æºæä»¶ |
| | | * @param target ç®æ æä»¶ |
| | | * @throws VciBaseException æ·è´æä»¶åºéçæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static void copyFile(File source, File target) throws VciBaseException { |
| | | FileInputStream is = null; |
| | | FileOutputStream os = null; |
| | | try{ |
| | | is = new FileInputStream(source); |
| | | os = new FileOutputStream(target); |
| | | FileChannel sourceChannel = is.getChannel(); |
| | | FileChannel targetChannel = os.getChannel(); |
| | | int i=0; |
| | | int length=2097152; |
| | | while(true){ |
| | | if(sourceChannel.position()==sourceChannel.size()){ |
| | | sourceChannel.close(); |
| | | targetChannel.close(); |
| | | break; |
| | | } |
| | | if((sourceChannel.size()-sourceChannel.position())<20971520) { |
| | | length = (int) (sourceChannel.size() - sourceChannel.position()); |
| | | }else { |
| | | length = 20971520; |
| | | } |
| | | sourceChannel.transferTo(sourceChannel.position(),length,targetChannel); |
| | | sourceChannel.position(sourceChannel.position()+length); |
| | | i++; |
| | | } |
| | | }catch(Throwable e){ |
| | | throw new VciBaseException("æ·è´æä»¶åºé",new String[0],e); |
| | | }finally { |
| | | IOUtils.closeQuietly(is); |
| | | IOUtils.closeQuietly(os); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·åé»è®¤çä¸´æ¶æä»¶å¤¹ |
| | | * @return ä¸´æ¶æä»¶å¤¹ï¼é»è®¤ä¸ºå½å项ç®çè¿è¡è·¯å¾ä¸çtempFolderä¸çéæºå¼ |
| | | */ |
| | | public static String getDefaultTempFolder() throws VciBaseException{ |
| | | String path = getProjectFolder(); |
| | | path = path + File.separator + "tempFolder" + File.separator + UUID.randomUUID().toString(); |
| | | File folder = new File(path); |
| | | if(!folder.exists()){ |
| | | folder.mkdirs(); |
| | | } |
| | | return path; |
| | | } |
| | | |
| | | /** |
| | | * è·å项ç®çè·¯å¾ |
| | | * @return 项ç®çè·¯å¾ |
| | | * @throws VciBaseException è·åè·¯å¾åºç°äºéè¯¯ä¼æåºå¼å¸¸ |
| | | */ |
| | | public static String getProjectFolder() throws VciBaseException{ |
| | | return getProjectFolder(LocalFileUtil.class); |
| | | } |
| | | |
| | | /** |
| | | * è·åæä¸ªclassæå¨é¡¹ç®çè·¯å¾ |
| | | * @param classObj æä¸ªclass |
| | | * @return 项ç®çè·¯å¾ |
| | | * @throws VciBaseException è·åè·¯å¾åºç°äºéè¯¯ä¼æåºå¼å¸¸ |
| | | */ |
| | | public static String getProjectFolder(Class classObj) throws VciBaseException{ |
| | | String path = ""; |
| | | try { |
| | | ApplicationHome h = new ApplicationHome(classObj == null?(mainClass ==null?LocalFileUtil.class:mainClass):classObj); |
| | | File jarF = h.getSource(); |
| | | if(jarF == null){ |
| | | //é对æµè¯çæ¶å |
| | | jarF = h.getDir(); |
| | | } |
| | | path = jarF.getParentFile().toString(); |
| | | if(path.contains("!")){ |
| | | path = new File(path).getParentFile().getParent(); |
| | | } |
| | | }catch (Throwable e){ |
| | | e.printStackTrace(); |
| | | throw new VciBaseException("è·åå½åæå¡æå¨çæä»¶å¤¹åºç°äºé误",new String[0],e); |
| | | } |
| | | if(path.startsWith("file:\\")){ |
| | | path = path.substring(6); |
| | | } |
| | | if (System.getProperty("os.name").toLowerCase().startsWith("win") && path.startsWith("/")) { |
| | | path = path.substring(path.indexOf("/") + 1); |
| | | } |
| | | System.out.println("项ç®çè·¯å¾æ¯:" + path); |
| | | return path; |
| | | } |
| | | |
| | | /** |
| | | * å é¤ä¸´æ¶æä»¶ |
| | | * @param tempFile ä¸´æ¶æä»¶ |
| | | * @param deleteRandomFolder æ¯å¦å é¤éæºçé£ä¸ªæä»¶å¤¹ |
| | | * @throws VciBaseException å é¤åºéçæ¶åæåºå¼å¸¸ |
| | | */ |
| | | public static void deleteTempFile(File tempFile,boolean deleteRandomFolder) throws VciBaseException{ |
| | | if(tempFile!=null){ |
| | | tempFile.delete(); |
| | | if(deleteRandomFolder){ |
| | | tempFile.getParentFile().delete(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 夿忰æ¯å¦ä¸ºç©º |
| | | * @param s åæ°ï¼ç¬¬ä¸ä¸ªä¸ºåæ°ï¼ç¬¬äºä¸ªä¸ºæç¤ºä¿¡æ¯ |
| | | * @throws VciBaseException ä¸ºç©ºæ¶æåºè¿ä¸ªå¼å¸¸ |
| | | */ |
| | | public static void alertNotNull(Object... s) throws VciBaseException{ |
| | | if(s!=null && s.length>0){ |
| | | for(int i = 0 ; i < s.length ; i ++){ |
| | | Object obj = s[i]; |
| | | if(obj==null ||StringUtils.isBlank(obj.toString())){ |
| | | String param = ""; |
| | | try{ |
| | | i++; |
| | | param = s[i].toString(); |
| | | }catch(Exception e){ |
| | | |
| | | } |
| | | throw new VciBaseException("åæ°[" + param + "]ä¸è½ä¸ºç©º"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·åæä»¶çåç¼å |
| | | * @param file æä»¶å¯¹è±¡ |
| | | * @return åç¼åï¼ä¸å
å«.ï¼å¦ææä»¶ä¸å卿è
没æåç¼åè¿å"" |
| | | */ |
| | | public static String getFileExtension(File file){ |
| | | if(file!=null){ |
| | | return getFileExtensionByName(file.getName()); |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * è·åæä»¶çåç¼å |
| | | * @param name æä»¶åç§° |
| | | * @return åç¼åï¼ä¸å
å«.ï¼æ²¡æåç¼åè¿å"" |
| | | */ |
| | | public static String getFileExtensionByName(String name){ |
| | | if(StringUtils.isNotBlank(name)){ |
| | | if(name.contains(".")){ |
| | | return name.substring(name.lastIndexOf(".")+1); |
| | | } |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * è·åä¸ä¼ æä»¶çåç§°ï¼å¨IEæµè§å¨ä¸ï¼ä¸ä¼ 伿å
¨è·¯å¾å¸¦è¿æ¥ |
| | | * @param name æä»¶çåç§° |
| | | * @return æ¿æ¢åçå¼ |
| | | */ |
| | | public static String getFileNameForIE(String name){ |
| | | if(StringUtils.isBlank(name)){ |
| | | return name; |
| | | } |
| | | if(name.contains(File.separator)){ |
| | | return name.substring(name.lastIndexOf(File.separator)+1); |
| | | } |
| | | if(name.contains("\\")){ |
| | | return name.substring(name.lastIndexOf("\\") + 1); |
| | | } |
| | | return name; |
| | | } |
| | | |
| | | /** |
| | | * ä»å·¥ç¨ä¸è¯»åæä»¶çå
容 |
| | | * @param fileName æä»¶çåç§° |
| | | * @return æä»¶çå
容 |
| | | * @throws VciBaseException 读ååºéçæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static String readContentForFileInJar(String fileName) throws VciBaseException{ |
| | | if(StringUtils.isBlank(fileName)){ |
| | | throw new VciBaseException("æä»¶å为空"); |
| | | } |
| | | if(!fileName.startsWith("/")){ |
| | | fileName = "/" + fileName; |
| | | } |
| | | InputStream in = null; |
| | | ByteArrayOutputStream os = null; |
| | | try{ |
| | | in = LocalFileUtil.class.getResourceAsStream( fileName); |
| | | if(in ==null){ |
| | | in=Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName); |
| | | } |
| | | os = new ByteArrayOutputStream(); |
| | | IOUtils.copy(in,os); |
| | | return new String(os.toByteArray(),"UTF-8"); |
| | | }catch (Throwable e){ |
| | | throw new VciBaseException("读åæä»¶çå
容åºç°äºé误",new String[0],e); |
| | | }finally { |
| | | IOUtils.closeQuietly(in); |
| | | IOUtils.closeQuietly(os); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 读åæä»¶çå
å®¹ï¼æä»¶ä¸è½æ¯jaréç |
| | | * @param fileName æä»¶çåç§° |
| | | * @return æä»¶çå
å®¹ï¼æ¯UTF-8çå符é |
| | | * @throws VciBaseException æä»¶ä¸åå¨ï¼å读ååºéçæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static String readContentForFile(String fileName) throws VciBaseException{ |
| | | File file = new File(fileName); |
| | | if(!file.exists()){ |
| | | throw new VciBaseException("æä»¶æªæ¾å°ï¼{0}",new String[]{fileName}); |
| | | } |
| | | InputStream in = null; |
| | | ByteArrayOutputStream os = null; |
| | | try{ |
| | | in = new FileInputStream( file); |
| | | os = new ByteArrayOutputStream(); |
| | | IOUtils.copy(in,os); |
| | | return new String(os.toByteArray(),"UTF-8"); |
| | | }catch (Throwable e){ |
| | | throw new VciBaseException("读åæä»¶çå
容åºç°äºé误",new String[0],e); |
| | | }finally { |
| | | IOUtils.closeQuietly(in); |
| | | IOUtils.closeQuietly(os); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * åå
¥åç¬¦ä¸²å°æä»¶ |
| | | * @param content å符串 |
| | | * @param fileName æä»¶çåç§° |
| | | * @throws VciBaseException åå
¥åºéçæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static void writeContentToFile(String content,String fileName) throws VciBaseException{ |
| | | File file = new File(fileName); |
| | | if(!file.exists()){ |
| | | File parentFile = file.getParentFile(); |
| | | if(!parentFile.exists()){ |
| | | parentFile.mkdirs(); |
| | | } |
| | | try { |
| | | file.createNewFile(); |
| | | } catch (IOException e) { |
| | | throw new VciBaseException("åå
¥æä»¶çå
容æ¶ååºç°äºå建æä»¶å¤±è´¥çé®é¢,{}",new String[]{fileName},e); |
| | | } |
| | | } |
| | | if(content == null){ |
| | | content = ""; |
| | | } |
| | | OutputStream os = null; |
| | | try{ |
| | | os = new FileOutputStream(file); |
| | | os.write(content.getBytes(StandardCharsets.UTF_8)); |
| | | os.flush(); |
| | | }catch(Throwable e){ |
| | | throw new VciBaseException("åå
¥æä»¶çå
容æ¶ååºç°äºåé误,{}",new String[]{fileName},e); |
| | | }finally { |
| | | IOUtils.closeQuietly(os); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * ä»é¡¹ç®éæè
jarçæä»¶å°ç®æ æä»¶ |
| | | * @param fileInJar jaræè
项ç®éçæä»¶åç§° |
| | | * @param target ç®æ æä»¶ |
| | | * @throws VciBaseException æ·è´æä»¶åºç°éè¯¯çæ¶å伿åºå¼å¸¸ |
| | | */ |
| | | public static void copyFileInJar(String fileInJar,String target) throws VciBaseException{ |
| | | VciBaseUtil.alertNotNull(fileInJar,"æºæä»¶",target,"ç®æ æä»¶"); |
| | | File targetFile = new File(target); |
| | | File folder = targetFile.getParentFile(); |
| | | if(!folder.exists()){ |
| | | folder.mkdirs(); |
| | | } |
| | | if(!targetFile.exists()){ |
| | | try { |
| | | targetFile.createNewFile(); |
| | | } catch (IOException e) { |
| | | throw new VciBaseException("åå»ºç®æ æä»¶çåºç°äºé误",new String[0],e); |
| | | } |
| | | } |
| | | if(!fileInJar.startsWith("/")){ |
| | | fileInJar = "/" + fileInJar; |
| | | } |
| | | InputStream in = null; |
| | | FileOutputStream os = null; |
| | | try{ |
| | | in = LocalFileUtil.class.getResourceAsStream( fileInJar); |
| | | if(in ==null){ |
| | | in=Thread.currentThread().getContextClassLoader().getResourceAsStream(fileInJar); |
| | | } |
| | | os = new FileOutputStream(target); |
| | | IOUtils.copy(in,os); |
| | | }catch (Throwable e){ |
| | | throw new VciBaseException("æ·è´æä»¶çå
容åºç°äºé误.{0},{1}",new String[]{fileInJar,target},e); |
| | | }finally { |
| | | IOUtils.closeQuietly(in); |
| | | IOUtils.closeQuietly(os); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æä»¶è½¬æ¢ä¸ºè·¯å¾ |
| | | * @param fileList æä»¶å表 |
| | | * @return è·¯å¾å表 |
| | | * @throws VciBaseException åæ°ä¸ºç©ºåæä»¶ä¸åå¨ä¼æåºå¼å¸¸ |
| | | */ |
| | | public static List<String> fileToPatch(Collection<File> fileList) throws VciBaseException { |
| | | VciBaseUtil.alertNotNull("æä»¶å表",fileList); |
| | | List<String> filePath = new ArrayList<>(); |
| | | for(File file : fileList){ |
| | | if(!file.exists()){ |
| | | throw new VciBaseException(file.getAbsolutePath() + "æä»¶æ²¡ææ¾å°",new String[0]); |
| | | } |
| | | filePath.add(file.getAbsolutePath()); |
| | | } |
| | | return filePath; |
| | | } |
| | | |
| | | /** |
| | | * è·åå¾çä¸ç¨ç临æ¶è·¯å¾ |
| | | * @return è·¯å¾ |
| | | * @throws VciBaseException è·ååºé伿¥é |
| | | */ |
| | | public static String getDefaultPicTempFolder() throws VciBaseException{ |
| | | String path = LocalFileUtil.getProjectFolder(); |
| | | path = path + File.separator + "tempFolder" + File.separator + "picFolder" + File.separator ; |
| | | File folder = new File(path); |
| | | if(!folder.exists()){ |
| | | folder.mkdirs(); |
| | | } |
| | | return path; |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.util; |
| | | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * ååè½¬æ¢ |
| | | * @author weidy |
| | | * @date |
| | | */ |
| | | public class Lunar { |
| | | /** |
| | | * å¹´ |
| | | */ |
| | | private int year; |
| | | /** |
| | | * æä»½ |
| | | */ |
| | | private int month; |
| | | /** |
| | | * å¤©æ° |
| | | */ |
| | | private int day; |
| | | /** |
| | | * |
| | | */ |
| | | private boolean leap; |
| | | /** |
| | | * æä»½ |
| | | */ |
| | | final static String chineseNumber[] = { "ä¸", "äº", "ä¸", "å", "äº", "å
", "ä¸", |
| | | "å
«", "ä¹", "å", "åä¸", "åäº" }; |
| | | /** |
| | | * æ¶é´æ ¼å¼ |
| | | */ |
| | | static SimpleDateFormat chineseDateFormat = new SimpleDateFormat( |
| | | "yyyyå¹´MMæddæ¥"); |
| | | /** |
| | | * ååçä¿¡æ¯ |
| | | */ |
| | | final static long[] lunarInfo = new long[] { 0x04bd8, 0x04ae0, 0x0a570, |
| | | 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, |
| | | 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, |
| | | 0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, |
| | | 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566, |
| | | 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, |
| | | 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, |
| | | 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550, |
| | | 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, |
| | | 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, |
| | | 0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, |
| | | 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6, |
| | | 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, |
| | | 0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3, |
| | | 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960, |
| | | 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, |
| | | 0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, |
| | | 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0, |
| | | 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, |
| | | 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, |
| | | 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, |
| | | 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 }; |
| | | |
| | | /** |
| | | * ====== ä¼ ååå yå¹´çæ»å¤©æ° |
| | | */ |
| | | final private static int yearDays(int y) { |
| | | int i, sum = 348; |
| | | for (i = 0x8000; i > 0x8; i >>= 1) { |
| | | if ((lunarInfo[y - 1900] & i) != 0) { |
| | | sum += 1; |
| | | } |
| | | } |
| | | return (sum + leapDays(y)); |
| | | } |
| | | |
| | | /** |
| | | * ====== ä¼ ååå yå¹´é°æçå¤©æ° |
| | | */ |
| | | final private static int leapDays(int y) { |
| | | if (leapMonth(y) != 0) { |
| | | if ((lunarInfo[y - 1900] & 0x10000) != 0) { |
| | | return 30; |
| | | } |
| | | else { |
| | | return 29; |
| | | } |
| | | } else { |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * ====== ä¼ ååå yå¹´é°åªä¸ªæ 1-12 , 没é°ä¼ å 0 |
| | | * |
| | | */ |
| | | final private static int leapMonth(int y) { |
| | | return (int) (lunarInfo[y - 1900] & 0xf); |
| | | } |
| | | |
| | | /** |
| | | * ====== ä¼ ååå yå¹´mæçæ»å¤©æ° |
| | | * |
| | | * @param y |
| | | * @param m |
| | | * @return |
| | | */ |
| | | final private static int monthDays(int y, int m) { |
| | | if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0) { |
| | | return 29; |
| | | } |
| | | else { |
| | | return 30; |
| | | } |
| | | } |
| | | |
| | | // ====== ä¼ ååå yå¹´ççè |
| | | final public String animalsYear() { |
| | | final String[] Animals = new String[] { "é¼ ", "ç", "è", "å
", "é¾", "è", |
| | | "马", "ç¾", "ç´", "鸡", "ç", "çª" }; |
| | | return Animals[(year - 4) % 12]; |
| | | } |
| | | |
| | | // ====== ä¼ å
¥ ææ¥çoffset ä¼ åå¹²æ¯, 0=ç²å |
| | | final private static String cyclicalm(int num) { |
| | | final String[] Gan = new String[] { "ç²", "ä¹", "ä¸", "ä¸", "æ", "å·±", "åº", |
| | | "è¾", "壬", "ç¸" }; |
| | | final String[] Zhi = new String[] { "å", "ä¸", "å¯
", "å¯", "è¾°", "å·³", "å", |
| | | "æª", "ç³", "é
", "æ", "亥" }; |
| | | return (Gan[num % 10] + Zhi[num % 12]); |
| | | } |
| | | |
| | | // ====== ä¼ å
¥ offset ä¼ åå¹²æ¯, 0=ç²å |
| | | final public String cyclical() { |
| | | int num = year - 1900 + 36; |
| | | return (cyclicalm(num)); |
| | | } |
| | | |
| | | /** |
| | | * ä¼ åºyå¹´mædæ¥å¯¹åºçåå. yearCyl3:ååå¹´ä¸1864çç¸å·®æ° ? monCyl4:ä»1900å¹´1æ31æ¥ä»¥æ¥,é°ææ° |
| | | * dayCyl5:ä¸1900å¹´1æ31æ¥ç¸å·®ç天æ°,åå 40 ? |
| | | * |
| | | * @param cal |
| | | * @return |
| | | */ |
| | | public Lunar(Calendar cal) { |
| | | @SuppressWarnings("unused") |
| | | int yearCyl, monCyl, dayCyl; |
| | | int leapMonth = 0; |
| | | Date baseDate = null; |
| | | try { |
| | | baseDate = chineseDateFormat.parse("1900å¹´1æ31æ¥"); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); // To change body of catch statement use |
| | | // Options | File Templates. |
| | | } |
| | | |
| | | // æ±åºå1900å¹´1æ31æ¥ç¸å·®çå¤©æ° |
| | | int offset = (int) ((cal.getTime().getTime() - baseDate.getTime()) / 86400000L); |
| | | dayCyl = offset + 40; |
| | | monCyl = 14; |
| | | |
| | | // ç¨offsetå廿¯ååå¹´çå¤©æ° |
| | | // 计ç®å½å¤©æ¯åå第å 天 |
| | | // iæç»ç»ææ¯ååç年份 |
| | | // offsetæ¯å½å¹´ç第å 天 |
| | | int iYear, daysOfYear = 0; |
| | | for (iYear = 1900; iYear < 2050 && offset > 0; iYear++) { |
| | | daysOfYear = yearDays(iYear); |
| | | offset -= daysOfYear; |
| | | monCyl += 12; |
| | | } |
| | | if (offset < 0) { |
| | | offset += daysOfYear; |
| | | iYear--; |
| | | monCyl -= 12; |
| | | } |
| | | // åå年份 |
| | | year = iYear; |
| | | |
| | | yearCyl = iYear - 1864; |
| | | leapMonth = leapMonth(iYear); // é°åªä¸ªæ,1-12 |
| | | leap = false; |
| | | |
| | | // ç¨å½å¹´ç天æ°offset,é个å廿¯æï¼ååï¼ç天æ°ï¼æ±åºå½å¤©æ¯æ¬æç第å 天 |
| | | int iMonth, daysOfMonth = 0; |
| | | for (iMonth = 1; iMonth < 13 && offset > 0; iMonth++) { |
| | | // é°æ |
| | | if (leapMonth > 0 && iMonth == (leapMonth + 1) && !leap) { |
| | | --iMonth; |
| | | leap = true; |
| | | daysOfMonth = leapDays(year); |
| | | } else { |
| | | daysOfMonth = monthDays(year, iMonth); |
| | | } |
| | | |
| | | offset -= daysOfMonth; |
| | | // è§£é¤é°æ |
| | | if (leap && iMonth == (leapMonth + 1)) { |
| | | leap = false; |
| | | } |
| | | if (!leap) { |
| | | monCyl++; |
| | | } |
| | | } |
| | | // offset为0æ¶ï¼å¹¶ä¸åæè®¡ç®çæä»½æ¯é°æï¼è¦æ ¡æ£ |
| | | if (offset == 0 && leapMonth > 0 && iMonth == leapMonth + 1) { |
| | | if (leap) { |
| | | leap = false; |
| | | } else { |
| | | leap = true; |
| | | --iMonth; |
| | | --monCyl; |
| | | } |
| | | } |
| | | // offsetå°äº0æ¶ï¼ä¹è¦æ ¡æ£ |
| | | if (offset < 0) { |
| | | offset += daysOfMonth; |
| | | --iMonth; |
| | | --monCyl; |
| | | } |
| | | month = iMonth; |
| | | day = offset + 1; |
| | | } |
| | | |
| | | public static String getChinaDayString(int day) { |
| | | String chineseTen[] = { "å", "å", "廿", "å
" }; |
| | | int n = day % 10 == 0 ? 9 : day % 10 - 1; |
| | | if (day > 30) { |
| | | return ""; |
| | | } |
| | | if (day == 10) { |
| | | return "åå"; |
| | | } |
| | | else { |
| | | return chineseTen[day / 10] + chineseNumber[n]; |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | String m = chineseNumber[month - 1]; |
| | | if (m != null && m.trim().equals("ä¸")) { |
| | | m = "æ£"; |
| | | } |
| | | if (m != null && m.trim().equals("åä¸")) { |
| | | m = "å¬"; |
| | | } |
| | | if (m != null && m.trim().equals("åäº")) { |
| | | m = "è
"; |
| | | } |
| | | return year + cyclical() + animalsYear() + "å¹´" + (leap ? "é°" : "") + m |
| | | + "æ" + getChinaDayString(day); |
| | | } |
| | | |
| | | public String getDate() { |
| | | String m = chineseNumber[month - 1]; |
| | | if (m != null && m.trim().equals("ä¸")) { |
| | | m = "æ£"; |
| | | } |
| | | if (m != null && m.trim().equals("åä¸")) { |
| | | m = "å¬"; |
| | | } |
| | | if (m != null && m.trim().equals("åäº")) { |
| | | m = "è
"; |
| | | } |
| | | // cyclical() + |
| | | return animalsYear() + "å¹´" + (leap ? "é°" : "") + m + "æ" |
| | | + getChinaDayString(day); |
| | | } |
| | | |
| | | public static void main(String[] args) throws ParseException { |
| | | Calendar today = Calendar.getInstance(); |
| | | today.setTime(chineseDateFormat.parse("2013å¹´2æ1æ¥")); |
| | | Lunar lunar = new Lunar(today); |
| | | System.out.println(lunar.toString()); |
| | | System.out.println("å京æ¶é´ï¼" + chineseDateFormat.format(today.getTime()) |
| | | + "ãåå" + lunar); |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.vci.starter.web.util; |
| | | |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | |
| | | import java.security.MessageDigest; |
| | | |
| | | |
| | | /*** |
| | | * MD5å å¯ |
| | | * @author weidy |
| | | */ |
| | | public class Md5 { |
| | | |
| | | /** |
| | | * æ¥å¿å¯¹è±¡ |
| | | */ |
| | | private static Logger logger = LoggerFactory.getLogger(Md5.class); |
| | | |
| | | public Md5() {} |
| | | |
| | | /** |
| | | * @desc å°å符串转æ¢ä¸ºçMD5 |
| | | * @param v æ¥æºå符串 |
| | | * @return 转æ¢åçMD5å符串 |
| | | * @throws Exception |
| | | */ |
| | | public static String md5(String v) { |
| | | if (v == null) { |
| | | return null; |
| | | } |
| | | try{ |
| | | MessageDigest md = MessageDigest.getInstance("MD5"); |
| | | return toHex(md.digest(v.getBytes())); |
| | | }catch(Exception e){ |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @desc 两次MD5å å¯ |
| | | * @param sourceString å å¯åçå符串 |
| | | * @return 两次å å¯åçå符串 |
| | | * @throws Exception |
| | | */ |
| | | public static String twoTimesMd5(String sourceString) throws Exception { |
| | | if(sourceString == null) { |
| | | return null; |
| | | } |
| | | return md5(md5(sourceString)); |
| | | } |
| | | |
| | | /** |
| | | * @desc 对æ¯ä¼ å
¥çå符串çæçMD5äºmd5Stringæ¯å¦ç¸ç |
| | | * @param md5String ç¨äºå¯¹æ¯çmd5å符串 |
| | | * @param sourceString å å¯åçå符串 |
| | | * @return 对æ¯md5åçå¼ï¼true表示ç¸ç |
| | | */ |
| | | public static boolean equalMd5(String md5String, String sourceString) { |
| | | if(md5String == null || sourceString == null) { |
| | | return false; |
| | | }else { |
| | | try { |
| | | if(md5String.equals(twoTimesMd5(sourceString))) { |
| | | return true; |
| | | }else { |
| | | return false; |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return false; |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @desc md5䏿¬¡åè¿è¡å¯¹æ¯ï¼è¿ä¸ªä¸»è¦æ¯ä¸ºç»å½éªè¯å¯ç ç¨çï¼å 为åå°JSä¼å
è¿è¡MD5å å¯ä¸æ¬¡ |
| | | * @param md5String ç¨äºå¯¹æ¯çmd5å符串 |
| | | * @param sourceString å å¯åçå符串 |
| | | * @return true表示ç¸ç |
| | | */ |
| | | public static boolean equalOneMd5(String md5String, String sourceString) { |
| | | if(md5String == null || sourceString == null) { |
| | | return false; |
| | | } else { |
| | | try { |
| | | String ms = md5(sourceString); |
| | | if(md5String.equals(ms)) { |
| | | return true; |
| | | }else { |
| | | return false; |
| | | } |
| | | }catch (Exception e) { |
| | | if(logger.isErrorEnabled()) { |
| | | logger.error("对æ¯md5çæ¶ååºç°äºé误", e); |
| | | } |
| | | return false; |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 转æ¢ä¸ºhexçæ¹å¼ |
| | | * @param buffer è¦è½¬æ¢çåèæ°ç» |
| | | * @return 转æ¢åçå符串 |
| | | */ |
| | | private static String toHex(byte buffer[]) { |
| | | StringBuffer sb = new StringBuffer(32); |
| | | String s = null; |
| | | for (int i = 0; i < buffer.length; i++) { |
| | | s = Integer.toHexString((int) buffer[i] & 0xff); |
| | | if (s.length() < 2) { |
| | | sb.append('0'); |
| | | } |
| | | sb.append(s); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | } |
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/MessageUtils.java
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciDateUtil.java
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/WebThreadLocalUtil.java
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/wrapper/VciParentQueryOption.java
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/wrapper/VciQueryWrapperForDO.java
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/wrapper/VciQueryWrapperOption.java
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/wrapper/VciReferFieldInfo.java
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/yml/YamlPropertySourceFactory.java
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/workflow/dto/WFWorkflowRuntimeDTO.java
Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/workflow/pagemodel/WFWorkflowTaskHisVO.java
Source/plt-web/plt-web-parent/plt-web-base/src/main/resources/application-web.yml
Source/plt-web/plt-web-parent/plt-web/pom.xml
Source/plt-web/plt-web-parent/pom.xml |