21 changed files with 1458 additions and 26 deletions
@ -0,0 +1,26 @@ |
|||
|
|||
DROP TABLE IF EXISTS `todo_item`; |
|||
CREATE TABLE `todo_item` ( |
|||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', |
|||
`client_type` varchar(16) NOT NULL COMMENT '客户端类型:enterprise-企业端, law-执法端, supervise-监督端', |
|||
`type` varchar(16) DEFAULT NULL COMMENT '类型:PFFW|普法服务,ZFPJ-执法评价,ZFYG-预告,RW-任务,YY-预约', |
|||
`source_id` bigint DEFAULT NULL COMMENT '记录来源ID(关联业务表主键)', |
|||
`enterprise_id` varchar(50) DEFAULT NULL COMMENT '被执法企业ID', |
|||
`enterprise_number` varchar(32) DEFAULT NULL COMMENT '企业统一社会信用代码', |
|||
`agent_user_id` varchar(50) DEFAULT NULL COMMENT '代办人员ID', |
|||
`read_status` tinyint DEFAULT 0 COMMENT '阅读状态:0未读 1已读', |
|||
`is_delete` int(4) DEFAULT 0 COMMENT '是否删除 0 否 1是', |
|||
`create_dept` varchar(100) DEFAULT NULL COMMENT '创建部门', |
|||
`create_by` varchar(50) DEFAULT NULL COMMENT '创建者', |
|||
`update_by` varchar(50) DEFAULT NULL COMMENT '更新者', |
|||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
|||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', |
|||
PRIMARY KEY (`id`) USING BTREE, |
|||
UNIQUE KEY `uk_client_type_source` (`client_type`,`type`,`source_id`) USING BTREE COMMENT '客户端+类型+来源ID 唯一索引', |
|||
KEY `idx_credit_code` (`credit_code`) USING BTREE COMMENT '企业信用代码索引', |
|||
KEY `idx_agent_user_id` (`agent_user_id`) USING BTREE COMMENT '代办人员ID索引', |
|||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='待办事项表'; |
|||
|
|||
ALTER TABLE `enforcement_registration` |
|||
ADD COLUMN `has_evaluate` tinyint(1) DEFAULT 0 COMMENT '是否评价:0-未评价 1-已评价' AFTER `is_real_union`; |
|||
-- 已评价需要初始化数据 |
|||
@ -1,4 +1,4 @@ |
|||
package com.zdxt.enforcementcode.domain.commonenum; |
|||
package com.zdxt.enforcementcode.common.commonenum; |
|||
|
|||
public enum AppEnterpriseComplaintEnums { |
|||
|
|||
@ -1,4 +1,4 @@ |
|||
package com.zdxt.enforcementcode.domain.commonenum; |
|||
package com.zdxt.enforcementcode.common.commonenum; |
|||
|
|||
/** |
|||
* 更新状态类型枚举定义 |
|||
@ -0,0 +1,51 @@ |
|||
package com.zdxt.enforcementcode.common.commonenum; |
|||
|
|||
/** |
|||
* 任务来源 |
|||
* @author liaoz |
|||
*/ |
|||
public enum LawTaskSourceEnum { |
|||
|
|||
DAILY_CHECK("01", "日常检查"), |
|||
COMPLAINT_REPORT("02", "投诉举报"), |
|||
DEPT_TRANSFER("03", "部门移送"), |
|||
SUPERIOR_ASSIGN("04", "上级交办"), |
|||
KEY_AREA_GOVERN("05", "重点领域治理部署"), |
|||
SPECIAL_ACTION("06", "专项行动"), |
|||
OTHER("09", "其它"); |
|||
|
|||
private String key; |
|||
private String value; |
|||
|
|||
LawTaskSourceEnum(String key, String value) { |
|||
this.value = value; |
|||
this.key = key; |
|||
} |
|||
|
|||
public String getValue() { |
|||
return value; |
|||
} |
|||
|
|||
public String getKey() { |
|||
return key; |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 根据value获取description |
|||
* @description |
|||
* |
|||
* @createDate 2017年11月28日 |
|||
* @param key |
|||
* @return |
|||
*/ |
|||
public static String getValueByKey(String key) { |
|||
LawTaskSourceEnum[] enums = LawTaskSourceEnum.values(); |
|||
for (int i = 0; i < enums.length; i++) { |
|||
if (enums[i].getKey().equals(key)) { |
|||
return enums[i].getValue(); |
|||
} |
|||
} |
|||
return ""; |
|||
} |
|||
} |
|||
@ -0,0 +1,55 @@ |
|||
package com.zdxt.enforcementcode.common.commonenum; |
|||
|
|||
/** |
|||
* 执法类型 |
|||
* @author liaoz |
|||
*/ |
|||
public enum LawTypeEnum { |
|||
|
|||
ADMIN_CHECK(1, "行政检查"), |
|||
ADMIN_PUNISH(2, "行政处罚"), |
|||
ADMIN_LICENSE(3, "行政许可"), |
|||
ADMIN_FORCE(4, "行政强制"), |
|||
ADMIN_LEVY(5, "行政征收"), |
|||
ADMIN_PAY(6, "行政给付"), |
|||
ADMIN_CONFIRM(7, "行政确认"), |
|||
ADMIN_REGISTER(8, "行政登记"), |
|||
ADMIN_ARBITRATE(9, "行政裁决"), |
|||
DOC_SEND(10, "文书送达"); |
|||
|
|||
|
|||
private Integer key; |
|||
private String value; |
|||
|
|||
LawTypeEnum(Integer key, String value) { |
|||
this.value = value; |
|||
this.key = key; |
|||
} |
|||
|
|||
public String getValue() { |
|||
return value; |
|||
} |
|||
|
|||
public Integer getKey() { |
|||
return key; |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 根据value获取description |
|||
* @description |
|||
* |
|||
* @createDate 2017年11月28日 |
|||
* @param key |
|||
* @return |
|||
*/ |
|||
public static String getValueByKey(String key) { |
|||
LawTypeEnum[] enums = LawTypeEnum.values(); |
|||
for (int i = 0; i < enums.length; i++) { |
|||
if (enums[i].getKey().equals(key)) { |
|||
return enums[i].getValue(); |
|||
} |
|||
} |
|||
return ""; |
|||
} |
|||
} |
|||
@ -0,0 +1,38 @@ |
|||
package com.zdxt.enforcementcode.common.util; |
|||
|
|||
|
|||
public class CommonUtil { |
|||
|
|||
private static String KEY="VRJHzFqJpsSZhwnsKTWNspv_GZMxTWl-bgH6DyE9Ty0"; |
|||
|
|||
/** |
|||
* 手机号****加密 |
|||
* @return |
|||
*/ |
|||
public static String encryptPhone(String num){ |
|||
if(StringUtils.isEmpty(num))return num; |
|||
|
|||
if(!num.matches("^\\d+$")){ |
|||
num=IdCardCryptoUtil.symmetricDecryptIdCard(KEY,num); |
|||
} |
|||
String regex = "^1\\d{10}$"; |
|||
if(num.matches(regex)){ |
|||
return num.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"); |
|||
} |
|||
return num; |
|||
} |
|||
|
|||
/** |
|||
* 两个字名字空格 |
|||
* @param name |
|||
* @return |
|||
*/ |
|||
public static String getNameSpace(String name){ |
|||
if(StringUtils.isEmpty(name))return name; |
|||
String res=name; |
|||
if(name.length()==2){ |
|||
res=name.substring(0,1)+"\u3000"+name.substring(1,2); |
|||
} |
|||
return res; |
|||
} |
|||
} |
|||
@ -0,0 +1,165 @@ |
|||
package com.zdxt.enforcementcode.common.util; |
|||
|
|||
import cn.hutool.core.codec.Base64; |
|||
import cn.hutool.core.util.IdUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import cn.hutool.crypto.SecureUtil; |
|||
import cn.hutool.crypto.asymmetric.KeyType; |
|||
import cn.hutool.crypto.asymmetric.RSA; |
|||
import cn.hutool.http.HttpRequest; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
|
|||
import java.nio.charset.StandardCharsets; |
|||
|
|||
/** |
|||
* 证件号加密工具 |
|||
* |
|||
* @author joelzzhang |
|||
*/ |
|||
public class IdCardCryptoUtil { |
|||
|
|||
/** |
|||
* 以下字符串为密钥,可以通过配置来传递 |
|||
*/ |
|||
public static final String OUTER_AES_KEY = "u3BPiZWALItH27e34oO6bw=="; |
|||
public static final String INNER_AES_KEY = "ol1hV81iCruo+thxtZGnCg=="; |
|||
public static final String PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDADIVdRXNyT5pmGxSUfwEup2Y1YCz7VfibMyyQhkpVP3ByKsoFDjZ30yW5gv70sQbqn/MCthTFqwh3/I/YLfthM3vU7TdlmNfnlKcQ6prxYofLkX8akrhgQVFerb/4DhcbAk5xvx12Dkeh/nzDf5Qw2K3CymRPnr4zN6ZjAL79HwIDAQAB"; |
|||
public static final String PRIVATE_KEY = "MIICdAIBADANBgkqhkiG9w0BAQEFAASCAl4wggJaAgEAAoGBAMAMhV1Fc3JPmmYbFJR/AS6nZjVgLPtV+JszLJCGSlU/cHIqygUONnfTJbmC/vSxBuqf8wK2FMWrCHf8j9gt+2Eze9TtN2WY1+eUpxDqmvFih8uRfxqSuGBBUV6tv/gOFxsCTnG/HXYOR6H+fMN/lDDYrcLKZE+evjM3pmMAvv0fAgMBAAECf2rTWPVVrHuC/ywzFz+CmSXAxLNSZbMCH0doYvs0hIrmvtjCjgN1F6P1z2yUpHBEbsetZEwdyQnEf74+WCuBaFIYjmQm/05grIxam/QrGibnV5qNiA0VeCkj6bUy+z5mt3/ithgzjmOiYIgMenjf6ut6RmgRDodgJiFbvSvfskECQQDoqGMNaUV+Y/O9h+l9eOCkSUOjOsL9WDRL34ei/jf7VFFYBZLs2GMzLunDkDz1dHvufDiMPeHUTTN8zIEEpNMVAkEA01Ehf9Np2zUqFQp3SW/fHVsaGM97JsbsTQrsDdUWwZLJTSQ7Yf+yg21GkNa8Mmlsp1OLyS607HV7lPlKO0LsYwJBAN1LTOv0taUCbVRZcj1mPEYHac5Ylh9jRlrkwp7GL3lfOf//TUD6kWCdvrvE9jaCFV9ByIecVLEavV53JkDEhgECQHgR40z0XXOWs8Cc38a0cDwH5b4vNjSEVwQ3roT1jSaUNxlD+xHl7hLLZosp2Gl0ia5RxF2d0mOBJaUyOMGPdy0CQCLBU3995JMoUyLgt2+Riw0PFbdxFEnKGyshAt5Q957/hC6L/V5tQNnh/AM9q23DIUQGb1whhxdIzV12qFSSS34="; |
|||
|
|||
public static void main(String[] args) { |
|||
String key = "VRJHzFqJpsSZhwnsKTWNspv_GZMxTWl-bgH6DyE9Ty0"; |
|||
System.out.println("====================== 示例 ======================"); |
|||
// 加密
|
|||
String source_dec = "13823290422"; |
|||
String enc = IdCardCryptoUtil.symmetricEncryptIdCard(key, source_dec); |
|||
System.out.println(source_dec+" 加密后 : "+enc); |
|||
// 解密
|
|||
String source_enc = "wDLyWcBO/fIH2rJpSGN98A=="; |
|||
String dec = IdCardCryptoUtil.symmetricDecryptIdCard(key, source_enc); |
|||
System.out.println(source_enc+" 解密后 : "+dec); |
|||
|
|||
// String userIdCode = IdCardCryptoUtil.symmetricEncryptIdCard("VRJHzFqJpsSZhwnsKTWNspv_GZMxTWl-bgH6DyE9Ty0", "18361639869");
|
|||
// String userNameCode = IdCardCryptoUtil.symmetricEncryptIdCard("eWIzY3BMRVNEQXhvUUlXMA==", "汪鑫");
|
|||
// System.out.println(userIdCode);
|
|||
// String phone = IdCardCryptoUtil.symmetricDecryptIdCard("VRJHzFqJpsSZhwnsKTWNspv_GZMxTWl-bgH6DyE9Ty0", "0d17ehr8XLbrj2kbgeEiDg==");
|
|||
// String sfz = IdCardCryptoUtil.symmetricDecryptIdCard("VRJHzFqJpsSZhwnsKTWNspv_GZMxTWl-bgH6DyE9Ty0", "9vtFzYM8BZMXg2wlaegdMdXaLufwHP8WOhqKl4Ld3IM=");
|
|||
// System.out.println(phone);
|
|||
// System.out.println(sfz);
|
|||
|
|||
|
|||
System.out.println("====================== 实用 ======================"); |
|||
String[] strings={ |
|||
"13360957126", |
|||
"16688211945", |
|||
"17339838670", |
|||
"18460319603", |
|||
"15626498490", |
|||
"18080147218", |
|||
}; |
|||
|
|||
// 刘义 13410900924 19020722074
|
|||
// 杜海荣 15019258592 19020722059
|
|||
// 张志兴 13760735454 19020722087
|
|||
// 陈翠莉 13192669039 19020722072
|
|||
// 李大航 17799857610 19020722079
|
|||
|
|||
// String string="";
|
|||
for(String s:strings){ |
|||
String phoneJM=IdCardCryptoUtil.symmetricEncryptIdCard(key, s); |
|||
System.out.println(s+" 加密后: "+phoneJM); |
|||
// string=string+"'"+phoneJM+"',";
|
|||
} |
|||
// System.out.println(string);
|
|||
|
|||
/* String[] strings={ |
|||
"i4BpGrKBbN0LtUemOvlhd+coz3KcCkFyFLe2lqbwlog=","bNW1LELHjqRD1LhoqcVlppnQv2Q0Ob3r+Gc9DXX/I30=","ohDLgX+wBEXZcsI1GFhc29OgyhRw2fpn9cK5YItWBFA=","oi5Rqny8mo7ar+GOhZTmH9f65xsKpYaNWRWCdsBWyhM=","ZbhCWrGlvSkbC5xkMH8/DNK2D7TAjbMtaI4S8rK5prc=","wqTtpWcQtEnNlzUGEyqNTK2gs88ReMSCUVhfg29V7sU=" |
|||
}; |
|||
String string=""; |
|||
for(String s:strings){ |
|||
String sfzjm = IdCardCryptoUtil.symmetricDecryptIdCard("VRJHzFqJpsSZhwnsKTWNspv_GZMxTWl-bgH6DyE9Ty0", s); |
|||
System.out.println(s+":"+sfzjm); |
|||
string=string+"'"+sfzjm+"',"; |
|||
} |
|||
System.out.println(string);*/ |
|||
|
|||
// System.out.println(userNameCode);
|
|||
//// System.out.println(secret);
|
|||
// Map<String,Object> heardMap = new HashMap<>();
|
|||
// heardMap.put("x-auth-channel", IdUtil.simpleUUID());
|
|||
// heardMap.put("x-auth-app-code","zfjdm");
|
|||
// String s = IdCardCryptoUtil.httpSendPost("http://egbpub.siqhz.com/egb/api/thirdauth/pub/auth/token",userIdCode,userNameCode,"zfjdm");
|
|||
// System.out.println(s);
|
|||
//
|
|||
//
|
|||
// String secret = IdCardCryptoUtil.symmetricEncryptIdCard("eWIzY3BMRVNEQXhvUUlXMA==", "df00fe17-dd15-4def-b1ff-8128ffe068ec");
|
|||
// Map<String,Object> params = new HashMap<>();
|
|||
// params.put("accessKeySign",secret);
|
|||
// params.put("appCode","zfjdm");
|
|||
// String data = HttpUtil.httpSendPost("http://egbpub.siqhz.com/egb/api/thirdauth/pub/auth/getUserInfo",
|
|||
// JSONObject.toJSONString(params),new HashMap<>());
|
|||
// System.out.println(data);
|
|||
} |
|||
|
|||
|
|||
/** |
|||
* 证件号通过RSA的公钥加密 |
|||
* |
|||
* @param publicKey 公钥Base64 |
|||
* @param privateKey 私钥Base64 |
|||
* @param content 被加密的字符串 |
|||
* @return 加密后的字符串 |
|||
*/ |
|||
public static String asymmetricEncryptIdCard(String publicKey, String privateKey, String content) { |
|||
RSA rsa = SecureUtil.rsa(privateKey, publicKey); |
|||
byte[] encrypt = rsa.encrypt(content, StandardCharsets.UTF_8, KeyType.PublicKey); |
|||
return Base64.encode(encrypt); |
|||
} |
|||
|
|||
/** |
|||
* 证件号通过RSA的私钥解密 |
|||
* |
|||
* @param publicKey 公钥Base64 |
|||
* @param privateKey 私钥Base64 |
|||
* @param content 被解密的字符串 |
|||
* @return 解密后的字符串 |
|||
*/ |
|||
public static String asymmetricDecryptIdCard(String publicKey, String privateKey, String content) { |
|||
RSA rsa = SecureUtil.rsa(privateKey, publicKey); |
|||
byte[] decrypt = rsa.decrypt(content, KeyType.PrivateKey); |
|||
return StrUtil.str(decrypt, StandardCharsets.UTF_8); |
|||
} |
|||
|
|||
/** |
|||
* 证件号对称加密后入库 |
|||
* |
|||
* @param key 密钥Base64 |
|||
* @param content 被加密的字符串 |
|||
* @return 加密后的字符串 |
|||
*/ |
|||
public static String symmetricEncryptIdCard(String key, String content) { |
|||
return SecureUtil.aes(SecureUtil.decode(key)).encryptBase64(content); |
|||
} |
|||
|
|||
/** |
|||
* 证件号对称解密 |
|||
* |
|||
* @param key 密钥Base64 |
|||
* @param content 被解密的字符串Base64 |
|||
* @return 解密后的字符串 |
|||
*/ |
|||
public static String symmetricDecryptIdCard(String key, String content) { |
|||
return SecureUtil.aes(SecureUtil.decode(key)).decryptStr(content); |
|||
} |
|||
|
|||
public static String httpSendPost(String url,String userId,String userName,String appCode){ |
|||
HttpRequest request = HttpRequest.post(url) |
|||
.header("x-auth-channel",IdUtil.simpleUUID()) |
|||
.header("x-auth-app-code",appCode) |
|||
.form("userId", userId) |
|||
.form("userName", userName); |
|||
request.contentType("application/x-www-form-urlencoded"); |
|||
JSONObject jsonObject = JSONObject.parseObject(request.execute().body()); |
|||
String data = jsonObject.getString("data"); |
|||
return data; |
|||
} |
|||
} |
|||
@ -0,0 +1,413 @@ |
|||
package com.zdxt.enforcementcode.common.util; |
|||
|
|||
import cn.hutool.core.text.StrFormatter; |
|||
|
|||
import java.util.Collection; |
|||
import java.util.Map; |
|||
import java.util.UUID; |
|||
|
|||
/** |
|||
* 字符串工具类 |
|||
* |
|||
* @author ruoyi |
|||
*/ |
|||
public class StringUtils extends org.apache.commons.lang3.StringUtils |
|||
{ |
|||
/** 空字符串 */ |
|||
private static final String NULLSTR = ""; |
|||
|
|||
/** 下划线 */ |
|||
private static final char SEPARATOR = '_'; |
|||
|
|||
/** |
|||
* 获取参数不为空值 |
|||
* |
|||
* @param value defaultValue 要判断的value |
|||
* @return value 返回值 |
|||
*/ |
|||
public static <T> T nvl(T value, T defaultValue) |
|||
{ |
|||
return value != null ? value : defaultValue; |
|||
} |
|||
|
|||
/** |
|||
* * 判断一个Collection是否为空, 包含List,Set,Queue |
|||
* |
|||
* @param coll 要判断的Collection |
|||
* @return true:为空 false:非空 |
|||
*/ |
|||
public static boolean isEmpty(Collection<?> coll) |
|||
{ |
|||
return isNull(coll) || coll.isEmpty(); |
|||
} |
|||
|
|||
/** |
|||
* * 判断一个Collection是否非空,包含List,Set,Queue |
|||
* |
|||
* @param coll 要判断的Collection |
|||
* @return true:非空 false:空 |
|||
*/ |
|||
public static boolean isNotEmpty(Collection<?> coll) |
|||
{ |
|||
return !isEmpty(coll); |
|||
} |
|||
|
|||
/** |
|||
* * 判断一个对象数组是否为空 |
|||
* |
|||
* @param objects 要判断的对象数组 |
|||
** @return true:为空 false:非空 |
|||
*/ |
|||
public static boolean isEmpty(Object[] objects) |
|||
{ |
|||
return isNull(objects) || (objects.length == 0); |
|||
} |
|||
|
|||
/** |
|||
* * 判断一个对象数组是否非空 |
|||
* |
|||
* @param objects 要判断的对象数组 |
|||
* @return true:非空 false:空 |
|||
*/ |
|||
public static boolean isNotEmpty(Object[] objects) |
|||
{ |
|||
return !isEmpty(objects); |
|||
} |
|||
|
|||
/** |
|||
* * 判断一个Map是否为空 |
|||
* |
|||
* @param map 要判断的Map |
|||
* @return true:为空 false:非空 |
|||
*/ |
|||
public static boolean isEmpty(Map<?, ?> map) |
|||
{ |
|||
return isNull(map) || map.isEmpty(); |
|||
} |
|||
|
|||
/** |
|||
* * 判断一个Map是否为空 |
|||
* |
|||
* @param map 要判断的Map |
|||
* @return true:非空 false:空 |
|||
*/ |
|||
public static boolean isNotEmpty(Map<?, ?> map) |
|||
{ |
|||
return !isEmpty(map); |
|||
} |
|||
|
|||
/** |
|||
* * 判断一个字符串是否为空串 |
|||
* |
|||
* @param str String |
|||
* @return true:为空 false:非空 |
|||
*/ |
|||
public static boolean isEmpty(String str) |
|||
{ |
|||
return isNull(str) || NULLSTR.equals(str.trim()); |
|||
} |
|||
|
|||
/** |
|||
* * 判断一个字符串是否为非空串 |
|||
* |
|||
* @param str String |
|||
* @return true:非空串 false:空串 |
|||
*/ |
|||
public static boolean isNotEmpty(String str) |
|||
{ |
|||
return !isEmpty(str); |
|||
} |
|||
|
|||
/** |
|||
* * 判断一个对象是否为空 |
|||
* |
|||
* @param object Object |
|||
* @return true:为空 false:非空 |
|||
*/ |
|||
public static boolean isNull(Object object) |
|||
{ |
|||
return object == null; |
|||
} |
|||
|
|||
/** |
|||
* * 判断一个对象是否非空 |
|||
* |
|||
* @param object Object |
|||
* @return true:非空 false:空 |
|||
*/ |
|||
public static boolean isNotNull(Object object) |
|||
{ |
|||
return !isNull(object); |
|||
} |
|||
|
|||
/** |
|||
* * 判断一个对象是否是数组类型(Java基本型别的数组) |
|||
* |
|||
* @param object 对象 |
|||
* @return true:是数组 false:不是数组 |
|||
*/ |
|||
public static boolean isArray(Object object) |
|||
{ |
|||
return isNotNull(object) && object.getClass().isArray(); |
|||
} |
|||
|
|||
/** |
|||
* 去空格 |
|||
*/ |
|||
public static String trim(String str) |
|||
{ |
|||
return (str == null ? "" : str.trim()); |
|||
} |
|||
|
|||
/** |
|||
* 截取字符串 |
|||
* |
|||
* @param str 字符串 |
|||
* @param start 开始 |
|||
* @return 结果 |
|||
*/ |
|||
public static String substring(final String str, int start) |
|||
{ |
|||
if (str == null) |
|||
{ |
|||
return NULLSTR; |
|||
} |
|||
|
|||
if (start < 0) |
|||
{ |
|||
start = str.length() + start; |
|||
} |
|||
|
|||
if (start < 0) |
|||
{ |
|||
start = 0; |
|||
} |
|||
if (start > str.length()) |
|||
{ |
|||
return NULLSTR; |
|||
} |
|||
|
|||
return str.substring(start); |
|||
} |
|||
|
|||
/** |
|||
* 截取字符串 |
|||
* |
|||
* @param str 字符串 |
|||
* @param start 开始 |
|||
* @param end 结束 |
|||
* @return 结果 |
|||
*/ |
|||
public static String substring(final String str, int start, int end) |
|||
{ |
|||
if (str == null) |
|||
{ |
|||
return NULLSTR; |
|||
} |
|||
|
|||
if (end < 0) |
|||
{ |
|||
end = str.length() + end; |
|||
} |
|||
if (start < 0) |
|||
{ |
|||
start = str.length() + start; |
|||
} |
|||
|
|||
if (end > str.length()) |
|||
{ |
|||
end = str.length(); |
|||
} |
|||
|
|||
if (start > end) |
|||
{ |
|||
return NULLSTR; |
|||
} |
|||
|
|||
if (start < 0) |
|||
{ |
|||
start = 0; |
|||
} |
|||
if (end < 0) |
|||
{ |
|||
end = 0; |
|||
} |
|||
|
|||
return str.substring(start, end); |
|||
} |
|||
|
|||
/** |
|||
* 格式化文本, {} 表示占位符<br> |
|||
* 此方法只是简单将占位符 {} 按照顺序替换为参数<br> |
|||
* 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可<br> |
|||
* 例:<br> |
|||
* 通常使用:format("this is {} for {}", "a", "b") -> this is a for b<br> |
|||
* 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a<br> |
|||
* 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br> |
|||
* |
|||
* @param template 文本模板,被替换的部分用 {} 表示 |
|||
* @param params 参数值 |
|||
* @return 格式化后的文本 |
|||
*/ |
|||
public static String format(String template, Object... params) |
|||
{ |
|||
if (isEmpty(params) || isEmpty(template)) |
|||
{ |
|||
return template; |
|||
} |
|||
return StrFormatter.format(template, params); |
|||
} |
|||
|
|||
/** |
|||
* 下划线转驼峰命名 |
|||
*/ |
|||
public static String toUnderScoreCase(String str) |
|||
{ |
|||
if (str == null) |
|||
{ |
|||
return null; |
|||
} |
|||
StringBuilder sb = new StringBuilder(); |
|||
// 前置字符是否大写
|
|||
boolean preCharIsUpperCase = true; |
|||
// 当前字符是否大写
|
|||
boolean curreCharIsUpperCase = true; |
|||
// 下一字符是否大写
|
|||
boolean nexteCharIsUpperCase = true; |
|||
for (int i = 0; i < str.length(); i++) |
|||
{ |
|||
char c = str.charAt(i); |
|||
if (i > 0) |
|||
{ |
|||
preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1)); |
|||
} |
|||
else |
|||
{ |
|||
preCharIsUpperCase = false; |
|||
} |
|||
|
|||
curreCharIsUpperCase = Character.isUpperCase(c); |
|||
|
|||
if (i < (str.length() - 1)) |
|||
{ |
|||
nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1)); |
|||
} |
|||
|
|||
if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase) |
|||
{ |
|||
sb.append(SEPARATOR); |
|||
} |
|||
else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase) |
|||
{ |
|||
sb.append(SEPARATOR); |
|||
} |
|||
sb.append(Character.toLowerCase(c)); |
|||
} |
|||
return sb.toString(); |
|||
} |
|||
|
|||
/** |
|||
* 是否包含字符串 |
|||
* |
|||
* @param str 验证字符串 |
|||
* @param strs 字符串组 |
|||
* @return 包含返回true |
|||
*/ |
|||
public static boolean inStringIgnoreCase(String str, String... strs) |
|||
{ |
|||
if (str != null && strs != null) |
|||
{ |
|||
for (String s : strs) |
|||
{ |
|||
if (str.equalsIgnoreCase(trim(s))) |
|||
{ |
|||
return true; |
|||
} |
|||
} |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
/** |
|||
* 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->HelloWorld |
|||
* |
|||
* @param name 转换前的下划线大写方式命名的字符串 |
|||
* @return 转换后的驼峰式命名的字符串 |
|||
*/ |
|||
public static String convertToCamelCase(String name) |
|||
{ |
|||
StringBuilder result = new StringBuilder(); |
|||
// 快速检查
|
|||
if (name == null || name.isEmpty()) |
|||
{ |
|||
// 没必要转换
|
|||
return ""; |
|||
} |
|||
else if (!name.contains("_")) |
|||
{ |
|||
// 不含下划线,仅将首字母大写
|
|||
return name.substring(0, 1).toUpperCase() + name.substring(1); |
|||
} |
|||
// 用下划线将原始字符串分割
|
|||
String[] camels = name.split("_"); |
|||
for (String camel : camels) |
|||
{ |
|||
// 跳过原始字符串中开头、结尾的下换线或双重下划线
|
|||
if (camel.isEmpty()) |
|||
{ |
|||
continue; |
|||
} |
|||
// 首字母大写
|
|||
result.append(camel.substring(0, 1).toUpperCase()); |
|||
result.append(camel.substring(1).toLowerCase()); |
|||
} |
|||
return result.toString(); |
|||
} |
|||
|
|||
/** |
|||
* 驼峰式命名法 |
|||
* 例如:user_name->userName |
|||
*/ |
|||
public static String toCamelCase(String s) |
|||
{ |
|||
if (s == null) |
|||
{ |
|||
return null; |
|||
} |
|||
s = s.toLowerCase(); |
|||
StringBuilder sb = new StringBuilder(s.length()); |
|||
boolean upperCase = false; |
|||
for (int i = 0; i < s.length(); i++) |
|||
{ |
|||
char c = s.charAt(i); |
|||
|
|||
if (c == SEPARATOR) |
|||
{ |
|||
upperCase = true; |
|||
} |
|||
else if (upperCase) |
|||
{ |
|||
sb.append(Character.toUpperCase(c)); |
|||
upperCase = false; |
|||
} |
|||
else |
|||
{ |
|||
sb.append(c); |
|||
} |
|||
} |
|||
return sb.toString(); |
|||
} |
|||
public static String getUUID(){ |
|||
String str = UUID.randomUUID().toString(); |
|||
return str.replace("-", ""); |
|||
} |
|||
|
|||
|
|||
public static boolean isLinux() { |
|||
return System.getProperty("os.name").toLowerCase().contains("linux"); |
|||
} |
|||
|
|||
public static boolean isWindows() { |
|||
return System.getProperty("os.name").toLowerCase().contains("windows"); |
|||
} |
|||
} |
|||
@ -0,0 +1,44 @@ |
|||
package com.zdxt.enforcementcode.domain.vo.enterprise; |
|||
|
|||
import cn.idev.excel.annotation.ExcelIgnoreUnannotated; |
|||
import com.zdxt.enforcementcode.domain.EnforcementRegistration; |
|||
import io.github.linpeilie.annotations.AutoMapper; |
|||
import lombok.Data; |
|||
import org.dromara.common.core.utils.DateUtils; |
|||
import org.dromara.common.sensitive.annotation.Sensitive; |
|||
import org.dromara.common.sensitive.core.SensitiveStrategy; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
import java.util.concurrent.TimeUnit; |
|||
|
|||
|
|||
/** |
|||
* 企业端-执法人员 |
|||
* |
|||
* @author Lion Li |
|||
* @date 2026-04-17 |
|||
*/ |
|||
@Data |
|||
public class EnforcementLawUserVo implements Serializable { |
|||
|
|||
/** |
|||
* 用户ID |
|||
*/ |
|||
private Long userId; |
|||
|
|||
/** |
|||
* 用户账号 |
|||
*/ |
|||
private String userName; |
|||
|
|||
/** |
|||
* 用户昵称 |
|||
*/ |
|||
private String nickName; |
|||
|
|||
/** |
|||
* 手机号码 |
|||
*/ |
|||
private String phonenumber; |
|||
} |
|||
@ -0,0 +1,25 @@ |
|||
package com.zdxt.enforcementcode.domain.vo.enterprise; |
|||
|
|||
import lombok.Data; |
|||
|
|||
/** |
|||
* 企业端-执法登记记录对象 enforcement_registration |
|||
* |
|||
* @author Lion Li |
|||
* @date 2026-04-17 |
|||
*/ |
|||
@Data |
|||
public class EnforcementRegistrationDetailVo { |
|||
|
|||
/** |
|||
* 执法登记信息 |
|||
*/ |
|||
EnforcementRegistrationInfoVo enforcementRegistrationVo; |
|||
|
|||
/** |
|||
* 执法评价信息 |
|||
*/ |
|||
EnterpriseEvaluateInfoVo enterpriseEvaluateInfoVo; |
|||
} |
|||
|
|||
|
|||
@ -0,0 +1,319 @@ |
|||
package com.zdxt.enforcementcode.domain.vo.enterprise; |
|||
|
|||
import com.zdxt.enforcementcode.common.commonenum.LawTaskSourceEnum; |
|||
import lombok.Data; |
|||
|
|||
import java.io.Serial; |
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* 企业端-执法登记记录对象 enforcement_registration |
|||
* |
|||
* @author Lion Li |
|||
* @date 2026-04-17 |
|||
*/ |
|||
@Data |
|||
public class EnforcementRegistrationInfoVo { |
|||
|
|||
@Serial |
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** |
|||
* 主键ID |
|||
*/ |
|||
private String id; |
|||
|
|||
/** |
|||
* 执法部门 |
|||
*/ |
|||
private String lawEnforcement; |
|||
|
|||
/** |
|||
* 执法部门ID |
|||
*/ |
|||
private String lawEnforcementId; |
|||
|
|||
/** |
|||
* 被执法企业ID |
|||
*/ |
|||
private String enterpriseId; |
|||
|
|||
/** |
|||
* 被执法企业 |
|||
*/ |
|||
private String enterpriseName; |
|||
|
|||
/** |
|||
* 被执法企业税号 |
|||
*/ |
|||
private String enterpriseNumber; |
|||
|
|||
/** |
|||
* 执法时间 |
|||
*/ |
|||
private Date enforcementTime; |
|||
|
|||
/** |
|||
* 执法人员姓名 |
|||
*/ |
|||
private String lawEnforcer; |
|||
|
|||
/** |
|||
* 执法人员ID |
|||
*/ |
|||
private String lawEnforcerId; |
|||
|
|||
/** |
|||
* 执法人员联系方式 |
|||
*/ |
|||
private String lawEnforcerTel; |
|||
|
|||
/** |
|||
* 其他执法人员 |
|||
*/ |
|||
private String lawEnforcerTwo; |
|||
|
|||
/** |
|||
* 其他执法人员ID |
|||
*/ |
|||
private String lawEnforcerIdTwo; |
|||
|
|||
/** |
|||
* 执法人员联系方式 |
|||
*/ |
|||
private String lawEnforcerTelTwo; |
|||
|
|||
/** |
|||
* 辅助人员姓名 |
|||
*/ |
|||
private String subsidiaryer; |
|||
|
|||
/** |
|||
* 辅助人员id |
|||
*/ |
|||
private String subsidiaryerId; |
|||
|
|||
/** |
|||
* 辅助人员联系方式 |
|||
*/ |
|||
private String subsidiaryerTel; |
|||
|
|||
/** |
|||
* 执法事项 |
|||
*/ |
|||
private String lawEnforcementItem; |
|||
|
|||
/** |
|||
* 执法依据 |
|||
*/ |
|||
private String lawEnforcementBasis; |
|||
|
|||
/** |
|||
* 备注 |
|||
*/ |
|||
private String remark; |
|||
|
|||
/** |
|||
* 执法结果 0 合格 1 不合格 |
|||
*/ |
|||
private Long reslut; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private String userId; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private String deptId; |
|||
|
|||
/** |
|||
* 是否删除 0 否 1 是 |
|||
*/ |
|||
private Long isDelete; |
|||
|
|||
/** |
|||
* 数据状态 0 正常 1 取消 |
|||
*/ |
|||
private Long status; |
|||
|
|||
/** |
|||
* 登记编号 |
|||
*/ |
|||
private String lawEnforcementCode; |
|||
|
|||
/** |
|||
* 是否投诉 0 否 1 是 |
|||
*/ |
|||
private Long isComplaint; |
|||
|
|||
/** |
|||
* 数据保存或提交 0 保存 1提交 |
|||
*/ |
|||
private Long isSubmit; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private String enforce; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private String uniteCheck; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private String lawEnforcementItemText; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private String lawField; |
|||
|
|||
/** |
|||
* 任务来源 |
|||
*/ |
|||
private String checkCategory; |
|||
|
|||
/** |
|||
* 任务来源-中文描述 |
|||
*/ |
|||
private String checkCategoryDesc; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private String checkCss; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private String enforceReason; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private String bureauDeptId; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private String bureauDeptName; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private String lawEnforcementBasisText; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private Long isEvaluate; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private String lawId; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private String lawText; |
|||
|
|||
/** |
|||
* 是否是联合检查 需要=1 and union_no不为空才是联合检查 |
|||
*/ |
|||
private Long hasUnion; |
|||
|
|||
/** |
|||
* 是否委托执法 |
|||
*/ |
|||
private Long hasAuto; |
|||
|
|||
/** |
|||
* 联合执法的分组编号 |
|||
*/ |
|||
private String unionNo; |
|||
|
|||
/** |
|||
* 执法类别(新) |
|||
*/ |
|||
private String lawEnforceCategory; |
|||
|
|||
/** |
|||
* 执法类别-中文描述 |
|||
*/ |
|||
private String lawEnforceCategoryDesc; |
|||
|
|||
/** |
|||
* 委托执法部门id |
|||
*/ |
|||
private String entrustDeptId; |
|||
|
|||
/** |
|||
* 委托执法部门名称 |
|||
*/ |
|||
private String entrustDeptName; |
|||
|
|||
/** |
|||
* 企业注册地址 |
|||
*/ |
|||
private String enterpriseAddress; |
|||
|
|||
/** |
|||
* 企业注册区 |
|||
*/ |
|||
private String district; |
|||
|
|||
/** |
|||
* 企业注册街道 |
|||
*/ |
|||
private String street; |
|||
|
|||
/** |
|||
* 1:市直登记, 3:区直登记 |
|||
*/ |
|||
private Long zone; |
|||
|
|||
/** |
|||
* 是否真联合执法(0:未联合; 1:已经联合) |
|||
*/ |
|||
private Long isRealUnion; |
|||
|
|||
/** |
|||
* 创建部门 |
|||
*/ |
|||
private String createDept; |
|||
|
|||
/** |
|||
* 创建者 |
|||
*/ |
|||
|
|||
private String createBy; |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
|
|||
private Date createTime; |
|||
/** |
|||
* 更新者 |
|||
*/ |
|||
private String updateBy; |
|||
/** |
|||
* 更新时间 |
|||
*/ |
|||
private Date updateTime; |
|||
|
|||
|
|||
public String getCheckCategoryDesc() { |
|||
return LawTaskSourceEnum.getValueByKey(checkCategory); |
|||
} |
|||
|
|||
public String getLawEnforceCategoryDesc() { |
|||
return LawTaskSourceEnum.getValueByKey(lawEnforceCategory); |
|||
} |
|||
} |
|||
@ -0,0 +1,134 @@ |
|||
package com.zdxt.enforcementcode.domain.vo.enterprise; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.TableId; |
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
import org.dromara.common.mybatis.core.domain.BaseEntity; |
|||
|
|||
import java.io.Serial; |
|||
|
|||
/** |
|||
* 企业端-执法评价对象 enterprise_evaluate |
|||
* |
|||
* @author Lion Li |
|||
* @date 2026-04-13 |
|||
*/ |
|||
@Data |
|||
public class EnterpriseEvaluateInfoVo extends BaseEntity { |
|||
|
|||
@Serial |
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** |
|||
* 主键ID |
|||
*/ |
|||
private String id; |
|||
|
|||
/** |
|||
* 案件名称 |
|||
*/ |
|||
private String enforcementName; |
|||
|
|||
/** |
|||
* 案件ID |
|||
*/ |
|||
private String enforcementId; |
|||
|
|||
/** |
|||
* 评价|意见建议 |
|||
*/ |
|||
private String evaluateDescription; |
|||
|
|||
/** |
|||
* 联系人 |
|||
*/ |
|||
private String linkman; |
|||
|
|||
/** |
|||
* 联系电话 |
|||
*/ |
|||
private String linkmanTel; |
|||
|
|||
/** |
|||
* 是否授权 0 否 1是 |
|||
*/ |
|||
private Long authorization; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private Long inspectionEfficiency; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private Long checkEffect; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private Long serviceExperience; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private Long checkQuality; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private String batchId; |
|||
|
|||
/** |
|||
* 检查效果(启用) |
|||
*/ |
|||
private Long checkEffectiveness; |
|||
|
|||
/** |
|||
* 执法态度(启用) |
|||
*/ |
|||
private Long checkAttitude; |
|||
|
|||
/** |
|||
* 程序合法(启用) |
|||
*/ |
|||
private Long proceduralLegality; |
|||
|
|||
/** |
|||
* 满意程度:不满意:1,较满意:2,非常满意:3 |
|||
*/ |
|||
private Long satisfactionLevel; |
|||
|
|||
/** |
|||
* 其他问题开关:打开:1;关闭:2 |
|||
*/ |
|||
private Long otherProblemSwitch; |
|||
|
|||
/** |
|||
* 1是0否存在逐利检查,接受被检查企业的馈赠、报酬、福利等; |
|||
*/ |
|||
private Long problem1; |
|||
|
|||
/** |
|||
* 1是0否存在要求被检查企业提供宴请、娱乐、旅游等活动; |
|||
*/ |
|||
private Long problem2; |
|||
|
|||
/** |
|||
* 是否存在干扰企业正常生产经营,刻意要求法定代表人到场行为; |
|||
*/ |
|||
private Long problem3; |
|||
|
|||
/** |
|||
* 是否存在任性处罚企业,乱查封、乱扣押、乱冻结、动辄责令停产停业的行为; |
|||
*/ |
|||
private Long problem4; |
|||
|
|||
/** |
|||
* 是否存在变相检查,以观摩、督导、考察等名义行检查之实. |
|||
*/ |
|||
private Long problem5; |
|||
|
|||
|
|||
} |
|||
Loading…
Reference in new issue