提交 56d501b8 作者: xiaowang

飞手培训

上级 c2cf0311
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.mmc.csf.common</groupId>
<artifactId>csf-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>csf-common-model</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<!-- apache 提供的一些工具类 -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年9月17日 下午1:52:40
* @explain 类说明
*/
public interface Applet {
}
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年11月5日 下午10:37:17
* @explain 类说明
*/
public interface Assign {
}
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年12月8日 下午5:34:49
* @explain 类说明
*/
public interface Auto {
}
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年11月11日 下午9:27:23
* @explain 类说明
*/
public interface Confirm {
}
package com.mmc.csf.flyer.model.group;
/**
* author:zhenjie
* Date:2022/2/21
* time:14:38
*/
public interface ConfirmCommand {
}
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月28日 下午5:37:44
* @explain 类说明
*/
public interface Create {
}
package com.mmc.csf.flyer.model.group;
public interface Delete {
}
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年9月18日 上午11:22:40
* @explain 类说明
*/
public interface Freeze {
}
package com.mmc.csf.flyer.model.group;
/**
* @author changwei
* @version 创建时间:2021年9月24日 下午13:58:24
* @explain 类说明:LiveTestVO中必传的上传名字——身份证号参数
*/
public interface IdCardContrast {
}
package com.mmc.csf.flyer.model.group;
/**
* @author changwei
* @version 创建时间:2021年9月24日 下午13:50:14
* @explain 类说明:LiveTestVO中必传的上传名字——身份证号参数
*/
public interface IdCardInfo {
}
package com.mmc.csf.flyer.model.group;
/**
* @author changwei
* @version 创建时间:2021年9月17日 下午16:16:14
* @explain 类说明:用于活体验证区分不同的update操作
*/
public interface IdCardPhoto {
}
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 dahang
* @version 创建时间:2022年7月20日
* @explain 类说明
*/
public interface Insert {
}
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年11月19日 下午12:49:07
* @explain 类说明
*/
public interface Others {
}
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月28日 下午5:37:58
* @explain 类说明
*/
public interface Page {
}
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年12月1日 下午1:50:11
* @explain 类说明
*/
public interface Query {
}
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年10月29日 下午7:51:46
* @explain 类说明
*/
public interface Rebate {
}
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年12月6日 下午10:09:47
* @explain 类说明
*/
public interface Refund {
}
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年11月6日 上午11:23:04
* @explain 类说明
*/
public interface Schedule {
}
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年12月3日 下午11:11:49
* @explain 类说明
*/
public interface Send {
}
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年12月8日 下午2:14:41
* @explain 类说明
*/
public interface Share {
}
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年11月8日 下午5:27:12
* @explain 类说明
*/
public interface StartWork {
}
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年12月4日 下午1:11:57
* @explain 类说明
*/
public interface Take {
}
package com.mmc.csf.flyer.model.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月28日 下午5:37:52
* @explain 类说明
*/
public interface Update {
}
package com.mmc.csf.flyer.model.group;
/**
* author:zhenjie
* Date:2021/10/8
* time:16:26
*/
public interface UpdatePassword {
}
package com.mmc.csf.flyer.qo;
import com.mmc.csf.flyer.model.group.Freeze;
import com.mmc.csf.flyer.model.group.Page;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class BaseInfoQO {
@ApiModelProperty(value = "开始时间")
private String startTime;
@ApiModelProperty(value = "结束时间")
private String endTime;
@ApiModelProperty(value = "页码")
@NotNull(message = "页码不能为空", groups = { Page.class, Freeze.class })
@Min(value = 1, groups = Page.class,message = "pageNo不能少于1")
private Integer pageNo;
@ApiModelProperty(value = "每页显示数")
@NotNull(message = "每页显示数不能为空", groups = { Page.class, Freeze.class })
@Min(value = 1, groups = Page.class,message = "pageSize不能少于1")
private Integer pageSize;
/**
* 初始化起始查询行并返回当前页
*/
public Integer buildCurrentPage() {
Integer pageNo = this.pageNo;
this.pageNo = (pageNo - 1) * pageSize;
return pageNo;
}
}
package com.mmc.csf.flyer.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.List;
/**
* @Author LW
* @date 2023/5/15 10:29
* 概要:飞手执照类型树形结构
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DronePilotLicenseVO {
private Integer id;
private Integer parentId;
private String licenseType;
private String description;
private List<DronePilotLicenseVO> childLicenses;
}
\ No newline at end of file
package com.mmc.csf.flyer.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @Author LW
* @date 2023/5/15 17:42
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class FlightSkillsVO implements Serializable {
private static final long serialVersionUID = 8516668683998378376L;
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "行业认证名称")
private String skillsName;
}
package com.mmc.csf.flyer.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* @Author LW
* @date 2023/5/15 10:29
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RegistrationVO implements Serializable {
private static final long serialVersionUID = -3364708963790356041L;
@ApiModelProperty(value = "姓名")
private String name;
@ApiModelProperty(value = "城市")
private Integer city;
@ApiModelProperty(value = "电话")
private String telephone;
@ApiModelProperty(value = "是否有驾照 0:是 1:否")
private Integer drivingLicense;
@ApiModelProperty(value = "省份")
private Integer province;
@ApiModelProperty(value = "无人机驾驶员执照一级分类id")
private Integer uavLicenseLevelOne;
@ApiModelProperty(value = "无人机驾驶员执照二级分类id")
private Integer uavLicenseLevelTwo;
@ApiModelProperty(value = "无人机驾驶员执照三级分类id")
private Integer uavLicenseLevelThree;
@ApiModelProperty(value = "行业应用认证")
private List<Integer> industryAppAuth;
@ApiModelProperty(value = "备注")
private String remark;
}
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.mmc.csf.common</groupId>
<artifactId>csf-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>csf-common-util</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<!-- apache 提供的一些工具类 -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!-- 中英文排序 -->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<!-- <dependency> -->
<!-- <groupId>com.aliyun</groupId> -->
<!-- <artifactId>aliyun-java-sdk-core</artifactId> -->
<!-- <version>4.5.3</version> -->
<!-- </dependency> -->
<!-- <dependency> -->
<!-- <groupId>com.aliyun.oss</groupId> -->
<!-- <artifactId>aliyun-sdk-oss</artifactId> -->
<!-- <version>3.10.2</version> -->
<!-- </dependency> -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-openapi</artifactId>
<version>0.0.19</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.5</version>
</dependency>
<!-- 阿里巴巴开源的线程缓存 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>transmittable-thread-local</artifactId>
<version>2.8.1</version>
</dependency>
<!-- jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.wxpay/wxpay-sdk -->
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
<version>0.0.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>com.mmc.csf.common</groupId>
<artifactId>csf-common-model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<target>1.8</target>
<source>1.8</source>
<encoding>utf-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package com.mmc.csf.common.util.date;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class DateUtils {
public static Date toDate(LocalDate localDate) {
return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
}
public static Date toDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
public static LocalDate toLocalDate(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();
}
public static LocalDateTime toLocalDateTime(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
}
public static LocalDateTime parse(String text,String pattern){
return LocalDateTime.parse(text, DateTimeFormatter.ofPattern(pattern));
}
/**
* 指定格式化
*/
public static String format(LocalDateTime localDateTime,String pattern){
if(localDateTime==null){
return "";
}
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
return localDateTime.format(dateTimeFormatter);
}
/**
* 默认格式化
*/
public static String format(LocalDateTime localDateTime){
if(localDateTime==null){
return "";
}
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return localDateTime.format(dateTimeFormatter);
}
/**
* 指定格式化
*/
public static String format(Date date,String pattern){
if(date==null){
return "";
}
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
return dateFormat.format(date);
}
/**
* 默认格式化
*/
public static String format(Date date){
if(date==null){
return "";
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return dateFormat.format(date);
}
// 获取今年是哪一年
public static Integer getNowYear() {
Date date = new Date();
GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
gc.setTime(date);
return Integer.valueOf(gc.get(1));
}
// 获取本月是哪一月
public static int getNowMonth() {
Date date = new Date();
GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
gc.setTime(date);
return gc.get(2) + 1;
}
// 获取某个日期的开始时间
public static Timestamp getDayStartTime(Date d) {
Calendar calendar = Calendar.getInstance();
if (null != d)
calendar.setTime(d);
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.set(Calendar.MILLISECOND, 0);
return new Timestamp(calendar.getTimeInMillis());
}
// 获取某个日期的结束时间
public static Timestamp getDayEndTime(Date d) {
Calendar calendar = Calendar.getInstance();
if (null != d)
calendar.setTime(d);
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
calendar.set(Calendar.MILLISECOND, 999);
return new Timestamp(calendar.getTimeInMillis());
}
// 获取本月的开始时间
public static Date getBeginDayOfMonth() {
Calendar calendar = Calendar.getInstance();
calendar.set(getNowYear(), getNowMonth() - 1, 1);
return getDayStartTime(calendar.getTime());
}
// 获取本月的结束时间
public static Date getEndDayOfMonth() {
Calendar calendar = Calendar.getInstance();
calendar.set(getNowYear(), getNowMonth() - 1, 1);
int day = calendar.getActualMaximum(5);
calendar.set(getNowYear(), getNowMonth() - 1, day);
return getDayEndTime(calendar.getTime());
}
}
package com.mmc.csf.common.util.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年9月17日 下午1:52:40
* @explain 类说明
*/
public interface Applet {
}
package com.mmc.csf.common.util.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年11月5日 下午10:37:17
* @explain 类说明
*/
public interface Assign {
}
package com.mmc.csf.common.util.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年12月8日 下午5:34:49
* @explain 类说明
*/
public interface Auto {
}
package com.mmc.csf.common.util.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年11月11日 下午9:27:23
* @explain 类说明
*/
public interface Confirm {
}
package com.mmc.csf.common.util.group;
/**
* author:zhenjie
* Date:2022/2/21
* time:14:38
*/
public interface ConfirmCommand {
}
package com.mmc.csf.common.util.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月28日 下午5:37:44
* @explain 类说明
*/
public interface Create {
}
package com.mmc.csf.common.util.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年9月18日 上午11:22:40
* @explain 类说明
*/
public interface Freeze {
}
package com.mmc.csf.common.util.group;
/**
* @author changwei
* @version 创建时间:2021年9月24日 下午13:58:24
* @explain 类说明:LiveTestVO中必传的上传名字——身份证号参数
*/
public interface IdCardContrast {
}
package com.mmc.csf.common.util.group;
/**
* @author changwei
* @version 创建时间:2021年9月24日 下午13:50:14
* @explain 类说明:LiveTestVO中必传的上传名字——身份证号参数
*/
public interface IdCardInfo {
}
package com.mmc.csf.common.util.group;
/**
* @author changwei
* @version 创建时间:2021年9月17日 下午16:16:14
* @explain 类说明:用于活体验证区分不同的update操作
*/
public interface IdCardPhoto {
}
package com.mmc.csf.common.util.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年11月19日 下午12:49:07
* @explain 类说明
*/
public interface Others {
}
package com.mmc.csf.common.util.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月28日 下午5:37:58
* @explain 类说明
*/
public interface Page {
}
package com.mmc.csf.common.util.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年12月1日 下午1:50:11
* @explain 类说明
*/
public interface Query {
}
package com.mmc.csf.common.util.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年10月29日 下午7:51:46
* @explain 类说明
*/
public interface Rebate {
}
package com.mmc.csf.common.util.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年12月6日 下午10:09:47
* @explain 类说明
*/
public interface Refund {
}
package com.mmc.csf.common.util.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年11月6日 上午11:23:04
* @explain 类说明
*/
public interface Schedule {
}
package com.mmc.csf.common.util.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年12月3日 下午11:11:49
* @explain 类说明
*/
public interface Send {
}
package com.mmc.csf.common.util.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年12月8日 下午2:14:41
* @explain 类说明
*/
public interface Share {
}
package com.mmc.csf.common.util.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年11月8日 下午5:27:12
* @explain 类说明
*/
public interface StartWork {
}
package com.mmc.csf.common.util.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年12月4日 下午1:11:57
* @explain 类说明
*/
public interface Take {
}
package com.mmc.csf.common.util.group;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月28日 下午5:37:52
* @explain 类说明
*/
public interface Update {
}
package com.mmc.csf.common.util.group;
/**
* author:zhenjie
* Date:2021/10/8
* time:16:26
*/
public interface UpdatePassword {
}
package com.mmc.csf.common.util.json;
import org.springframework.beans.BeanUtils;
import java.util.Objects;
/**
* @author 作者 dahang
* @version 创建时间:2022年7月23日
* @explain 同名属性拷贝值
*/
public class BeanCopyUtils {
public static <T> T properties(Object source, T target) {
if (Objects.isNull(source)) {
return target;
}
BeanUtils.copyProperties(source, target);
return target;
}
public static <T> T properties(Object source, Class<T> target) {
T t = null;
try {
t = target.newInstance();
if (Objects.isNull(source)) {
return t;
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
BeanUtils.copyProperties(source, t);
return t;
}
}
package com.mmc.csf.common.util.json;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import java.io.*;
import java.util.List;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月6日 下午4:17:07
* @explain Json操作类
*/
public class JsonUtil {
public static void main(String[] args) {
String array = "[1,24,23]";
List<Integer> list = JSONArray.parseArray(array, Integer.class);
System.out.println(list.get(2));
}
/**
* 把Java对象转换成json字符串
*
* @param object 待转化为JSON字符串的Java对象
* @return json 串 or null
*/
public static String parseObjToJson(Object object) {
String string = null;
try {
string = JSONObject.toJSONString(object);
} catch (Exception e) {
// LOGGER.error(e.getMessage());
}
return string;
}
/**
* 将Json字符串信息转换成对应的Java对象
*
* @param json json字符串对象
* @param c 对应的类型
*/
public static <T> T parseJsonToObj(String json, Class<T> c) {
try {
JSONObject jsonObject = JSON.parseObject(json);
return JSON.toJavaObject(jsonObject, c);
} catch (Exception e) {
// LOGGER.error(e.getMessage());
}
return null;
}
/**
* 读取json文件
*
* @param fileName
* @return
*/
public static String readJsonFile(String fileName) {
String jsonStr = "";
try {
File jsonFile = new File(fileName);
FileReader fileReader = new FileReader(jsonFile);
Reader reader = new InputStreamReader(new FileInputStream(jsonFile), "utf-8");
int ch = 0;
StringBuffer sb = new StringBuffer();
while ((ch = reader.read()) != -1) {
sb.append((char) ch);
}
fileReader.close();
reader.close();
jsonStr = sb.toString();
return jsonStr;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
/**
* 将JSON数据格式化并保存到文件中
*
* @param jsonData 需要输出的json数
* @param filePath 输出的文件地址
* @return
*/
public static boolean createJsonFile(Object jsonData, String filePath) {
String content = JSON.toJSONString(jsonData, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteDateUseDateFormat);
// 标记文件生成是否成功
boolean flag = true;
// 生成json格式文件
try {
// 保证创建一个新文件
File file = new File(filePath);
if (!file.getParentFile().exists()) { // 如果父目录不存在,创建父目录
file.getParentFile().mkdirs();
}
if (file.exists()) { // 如果已存在,删除旧文件
file.delete();
}
file.createNewFile();
// 将格式化后的字符串写入文件
Writer write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
write.write(content);
write.flush();
write.close();
} catch (Exception e) {
flag = false;
e.printStackTrace();
}
return flag;
}
}
package com.mmc.csf.common.util.math;
import java.math.BigDecimal;
/**
* @author 作者 geDuo
* @version 创建时间:2021年9月13日 上午9:22:06
* @explain 金额工具类
*/
public class AmtUtil {
private static final BigDecimal minCashCost = BigDecimal.valueOf(-99999999.99);// -9999万9999元.99
private static final BigDecimal maxCashCost = BigDecimal.valueOf(99999999.99);// 9999万9999元.99
private static final BigDecimal minRepeatCost = BigDecimal.ZERO;// 0
private static final BigDecimal maxRepeatCost = BigDecimal.valueOf(99999999.99);// 9999万9999元.99
public static final BigDecimal REBATE_RATE = (BigDecimal.valueOf(0.01).setScale(2, BigDecimal.ROUND_DOWN));// 返利的百分比
/**
* 变更-金额范围
*
* @param amtPaid
* @return
*/
public static boolean vertifyAmt(BigDecimal amtPaid) {
return (amtPaid != null && (amtPaid.compareTo(minCashCost) >= 0) && (amtPaid.compareTo(maxCashCost) <= 0));
}
/**
* 还款-金额范围
*
* @param amtPaid
* @return
*/
public static boolean vertifyRepeatAmt(BigDecimal amtPaid) {
return (amtPaid != null && (amtPaid.compareTo(minRepeatCost) > 0) && (amtPaid.compareTo(maxRepeatCost) <= 0));
}
public static boolean vertifyRepoAmt(BigDecimal amtPaid) {
return (amtPaid != null && (amtPaid.compareTo(BigDecimal.ZERO) > 0) && (amtPaid.compareTo(maxCashCost) <= 0));
}
}
package com.mmc.csf.common.util.math;
import java.util.Random;
import com.mmc.csf.common.util.date.TDateUtil;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月28日 下午3:17:24
* @explain 编号操作类
*/
public class CodeUtil {
private static Random random = new Random();
// 数据生成有位数字或字母的随机数
public static String randomCode(int num) {
// 0-61 9 9+26=35 35+26 =61 65-90 97-122
StringBuffer sb = new StringBuffer();
for (int i = 0; i < num; i++) {
int y = random.nextInt(62);
if (y <= 9) {
// 数值
sb.append(y);
} else {
if (y <= 35) {
// 大写字母
y += 55;
} else {
// 小写字母
y += 61;
}
sb.append((char) y);
}
}
return sb.toString();
}
/**
* 生成随机数字
*
* @param length[生成随机数的长度]
* @return
*/
public static String getRandomNum(int length) {
StringBuffer sb = new StringBuffer();
Random random = new Random();
for (int i = 0; i < length; i++) {
sb.append(String.valueOf(random.nextInt(10)));
}
return sb.toString();
}
/**
* 生成用户uid
*
* @return
*/
public static String createUserUID() {
return "UID" + CodeUtil.getRandomNum(7);
}
/**
* 生成-现金流水账目no
*/
public static String createPayCashNO() {
StringBuffer sb = new StringBuffer();
sb.append("T");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成-信用流水账目no
*/
public static String createPayCreditNo() {
StringBuffer sb = new StringBuffer();
sb.append("T");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成-飞手工资流水账目no
*/
public static String createPayWagNo() {
StringBuffer sb = new StringBuffer();
sb.append("T");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成订单no
*/
public static String createOrderTaskNO() {
StringBuffer sb = new StringBuffer();
sb.append("D");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成-信用返利账目no
*/
public static String createPayRebateNo() {
StringBuffer sb = new StringBuffer();
sb.append("T");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成行业no
*/
public static String createIndustryNO() {
StringBuffer sb = new StringBuffer();
sb.append("HY");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成服务no
*/
public static String createInspectionNO() {
StringBuffer sb = new StringBuffer();
sb.append("FW");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成服务no
*/
public static String createRoleNo() {
StringBuffer sb = new StringBuffer();
sb.append("JS");
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成商品编号
*
* @return
*/
public static String createWareID() {
return "ID" + CodeUtil.getRandomNum(10);
}
/**
* 生成云仓订单编号
*/
public static String createRepoOrderNo() {
StringBuffer sb = new StringBuffer();
sb.append("R");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 云仓现金流水
*/
public static String createRepoCashNo() {
StringBuffer sb = new StringBuffer();
sb.append("J");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成商品编号
*
* @return
*/
public static String createDeviceCode() {
return "DC" + CodeUtil.getRandomNum(6);
}
/**
* 云仓现金流水
*/
public static String createOrderRefund() {
StringBuffer sb = new StringBuffer();
sb.append("RD");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 返祖订单号
*/
public static String createShareOrderNo() {
StringBuffer sb = new StringBuffer();
sb.append("GX");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 型号编号
*/
public static String createDeviceModelNo() {
return "DM" + CodeUtil.getRandomNum(8);
}
/**
* 仓库编号
*/
public static String createRepoNo() {
return "RN" + CodeUtil.getRandomNum(8);
}
public static String uavOrderCode(Long id) {
StringBuffer sb = new StringBuffer();
sb.append("UD");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmmss"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 活动编号
*/
public static String generateActivityNo() {
return "AC" + CodeUtil.getRandomNum(5);
}
}
package com.mmc.csf.common.util.math;
/**
* @author 作者 geDuo
* @version 创建时间:2022年2月21日 下午3:55:10
* https://www.cnblogs.com/sgh1023/p/14094592.html
* @explain 雪花算法-分布式id
*/
public class SnowFlake {
/**
* 起始的时间戳
*/
private final static long START_STMP = 1480166465631L;
/**
* 每一部分占用的位数
*/
private final static long SEQUENCE_BIT = 12; // 序列号占用的位数
private final static long MACHINE_BIT = 5; // 机器标识占用的位数
private final static long DATACENTER_BIT = 5;// 数据中心占用的位数
/**
* 每一部分的最大值
*/
private final static long MAX_DATACENTER_NUM = -1L ^ (-1L << DATACENTER_BIT);
private final static long MAX_MACHINE_NUM = -1L ^ (-1L << MACHINE_BIT);
private final static long MAX_SEQUENCE = -1L ^ (-1L << SEQUENCE_BIT);
/**
* 每一部分向左的位移
*/
private final static long MACHINE_LEFT = SEQUENCE_BIT;
private final static long DATACENTER_LEFT = SEQUENCE_BIT + MACHINE_BIT;
private final static long TIMESTMP_LEFT = DATACENTER_LEFT + DATACENTER_BIT;
private long datacenterId; // 数据中心
private long machineId; // 机器标识
private long sequence = 0L; // 序列号
private long lastStmp = -1L;// 上一次时间戳
public SnowFlake(long datacenterId, long machineId) {
if (datacenterId > MAX_DATACENTER_NUM || datacenterId < 0) {
throw new IllegalArgumentException("datacenterId can't be greater than MAX_DATACENTER_NUM or less than 0");
}
if (machineId > MAX_MACHINE_NUM || machineId < 0) {
throw new IllegalArgumentException("machineId can't be greater than MAX_MACHINE_NUM or less than 0");
}
this.datacenterId = datacenterId;
this.machineId = machineId;
}
/**
* 产生下一个ID
*
* @return
*/
public synchronized long nextId() {
long currStmp = getNewstmp();
if (currStmp < lastStmp) {
throw new RuntimeException("Clock moved backwards. Refusing to generate id");
}
if (currStmp == lastStmp) {
// 相同毫秒内,序列号自增
sequence = (sequence + 1) & MAX_SEQUENCE;
// 同一毫秒的序列数已经达到最大
if (sequence == 0L) {
currStmp = getNextMill();
}
} else {
// 不同毫秒内,序列号置为0
sequence = 0L;
}
lastStmp = currStmp;
return (currStmp - START_STMP) << TIMESTMP_LEFT // 时间戳部分
| datacenterId << DATACENTER_LEFT // 数据中心部分
| machineId << MACHINE_LEFT // 机器标识部分
| sequence; // 序列号部分
}
private long getNextMill() {
long mill = getNewstmp();
while (mill <= lastStmp) {
mill = getNewstmp();
}
return mill;
}
private long getNewstmp() {
return System.currentTimeMillis();
}
public static void main(String[] args) {
SnowFlake snowFlake = new SnowFlake(2, 3);
for (int i = 0; i < (1 << 12); i++) {
System.out.println(snowFlake.nextId());
}
}
}
package com.mmc.csf.common.util.page;
import java.io.Serializable;
import com.mmc.csf.flyer.qo.BaseInfoQO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月28日 下午3:18:21
* @explain 分页工具类
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageResult<T> implements Serializable{
private static final long serialVersionUID = -2848996493573325801L;
private int pageNo;// 分页起始页
private int pageSize;// 每页记录数
private T list;// 返回的记录集合
private long totalCount;// 总记录条数
private long totalPage;// 总页数
public static PageResult buildPage(int pageNo, int pageSize, int totalCount) {
PageResult page = new PageResult();
page.pageNo = pageNo;
page.pageSize = pageSize;
page.totalCount = totalCount;
page.totalPage = (totalCount % pageSize == 0) ? (totalCount / pageSize) : (totalCount / pageSize + 1);
return page;
}
public static <T> PageResult buildPage(int pageNo, int pageSize, int totalCount, T list) {
PageResult page = PageResult.buildPage(pageNo, pageSize, totalCount);
page.setList(list);
return page;
}
public static PageResult buildPage(BaseInfoQO qo, int totalCount) {
PageResult page = new PageResult();
page.pageNo = qo.getPageNo();
Integer pageSize = qo.getPageSize();
page.pageSize = pageSize;
page.totalCount = totalCount;
page.totalPage = (totalCount % pageSize == 0) ? (totalCount / pageSize) : (totalCount / pageSize + 1);
return page;
}
}
package com.mmc.csf.common.util.page;
import java.io.Serializable;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author 作者 geDuo
* @version 创建时间:2021年11月10日 上午11:40:34
* @explain 类说明
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TimePage implements Serializable {
private static final long serialVersionUID = -2530498038870578257L;
private int pageNo;// 分页起始页
private int pageSize;// 每页记录数
private long totalCount;// 总记录条数
private long totalPage;// 总页数
private long ctime;
public static TimePage buildPage(int pageNo, int pageSize, int totalCount, long ctime) {
TimePage page = new TimePage();
page.pageNo = pageNo;
page.pageSize = pageSize;
page.totalCount = totalCount;
page.totalPage = (totalCount % pageSize == 0) ? (totalCount / pageSize) : (totalCount / pageSize + 1);
page.setCtime(ctime);
return page;
}
}
package com.mmc.csf.common.util.web;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月13日 上午9:25:12
* @explain 类说明
*/
public interface BaseErrorInfoInterface {
/**
* 错误码
*
* @return
*/
String getResultCode();
/**
* 错误描述
*
* @return
*/
String getResultMsg();
}
package com.mmc.csf.common.util.web;
import static com.mmc.csf.common.util.web.ResultEnum.CUSTOM_ERROR;
import static com.mmc.csf.common.util.web.ResultEnum.INTERNAL_SERVER_ERROR;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月13日 上午9:25:43
* @explain 类说明
*/
public class BizException extends RuntimeException {
private static final long serialVersionUID = 1L;
/**
* 错误码
*/
protected String errorCode;
/**
* 错误信息
*/
protected String errorMsg;
public BizException() {
super();
}
public BizException(BaseErrorInfoInterface errorInfoInterface) {
super(errorInfoInterface.getResultCode());
this.errorCode = errorInfoInterface.getResultCode();
this.errorMsg = errorInfoInterface.getResultMsg();
}
public BizException(BaseErrorInfoInterface errorInfoInterface, Throwable cause) {
super(errorInfoInterface.getResultCode(), cause);
this.errorCode = errorInfoInterface.getResultCode();
this.errorMsg = errorInfoInterface.getResultMsg();
}
public BizException(ResultEnum enums) {
super(enums.getResultCode());
this.errorCode = enums.getResultCode();
this.errorMsg = enums.getResultMsg();
}
public BizException(String errorMsg) {
super(errorMsg);
this.errorCode = CUSTOM_ERROR.resultCode;
this.errorMsg = errorMsg;
}
public BizException(String errorCode, String errorMsg) {
super(errorCode);
this.errorCode = errorCode;
this.errorMsg = errorMsg;
}
public BizException(String errorCode, String errorMsg, Throwable cause) {
super(errorCode, cause);
this.errorCode = errorCode;
this.errorMsg = errorMsg;
}
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
@Override
public String getMessage() {
return errorMsg;
}
@Override
public Throwable fillInStackTrace() {
return this;
}
}
package com.mmc.csf.common.util.web;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import static java.lang.System.out;
public class HttpHelper {
// get 请求
public static String httpGet(String url, Header[] headers) throws Exception {
HttpUriRequest uriRequest = new HttpGet(url);
if (null != headers)
uriRequest.setHeaders(headers);
CloseableHttpClient httpClient = null;
try {
httpClient = declareHttpClientSSL(url);
CloseableHttpResponse httpresponse = httpClient.execute(uriRequest);
HttpEntity httpEntity = httpresponse.getEntity();
String result = EntityUtils.toString(httpEntity, REQ_ENCODEING_UTF8);
return result;
} catch (ClientProtocolException e) {
out.println(String.format("http请求失败,uri{%s},exception{%s}", new Object[] { url, e }));
} catch (IOException e) {
out.println(String.format("IO Exception,uri{%s},exception{%s}", new Object[] { url, e }));
} finally {
if (null != httpClient)
httpClient.close();
}
return null;
}
// post 请求
public static String httpPost(String url, String params) throws Exception {
HttpPost post = new HttpPost(url);
post.addHeader("Content-Type", "application/json;charset=" + REQ_ENCODEING_UTF8);
// 设置传输编码格式
StringEntity stringEntity = new StringEntity(params, REQ_ENCODEING_UTF8);
stringEntity.setContentEncoding(REQ_ENCODEING_UTF8);
post.setEntity(stringEntity);
HttpResponse httpresponse = null;
CloseableHttpClient httpClient = null;
try {
httpClient = declareHttpClientSSL(url);
httpresponse = httpClient.execute(post);
HttpEntity httpEntity = httpresponse.getEntity();
String result = EntityUtils.toString(httpEntity, REQ_ENCODEING_UTF8);
return result;
} catch (ClientProtocolException e) {
out.println(String.format("http请求失败,uri{%s},exception{%s}", new Object[] { url, e }));
} catch (IOException e) {
out.println(String.format("IO Exception,uri{%s},exception{%s}", new Object[] { url, e }));
} finally {
if (null != httpClient)
httpClient.close();
}
return null;
}
private static CloseableHttpClient declareHttpClientSSL(String url) {
if (url.startsWith("https://")) {
return sslClient();
} else {
return HttpClientBuilder.create().setConnectionManager(httpClientConnectionManager).build();
}
}
/**
* 设置SSL请求处理
*
* @param httpClient
*/
private static CloseableHttpClient sslClient() {
try {
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] xcs, String str) {
}
public void checkServerTrusted(X509Certificate[] xcs, String str) {
}
};
ctx.init(null, new TrustManager[] { tm }, null);
SSLConnectionSocketFactory sslConnectionSocketFactory = SSLConnectionSocketFactory.getSocketFactory();
return HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory).build();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
} catch (KeyManagementException e) {
throw new RuntimeException(e);
}
}
// this is config
private static final String REQ_ENCODEING_UTF8 = "utf-8";
private static PoolingHttpClientConnectionManager httpClientConnectionManager;
public HttpHelper() {
httpClientConnectionManager = new PoolingHttpClientConnectionManager();
httpClientConnectionManager.setMaxTotal(100);
httpClientConnectionManager.setDefaultMaxPerRoute(20);
}
// get 请求
public static String httpGet(String url) throws Exception {
return httpGet(url, null);
}
}
package com.mmc.csf.common.util.web;
import org.apache.commons.codec.binary.Base64;
import javax.net.ssl.*;
import java.io.*;
import java.net.ConnectException;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Iterator;
import java.util.Map;
/**
* @author 作者 geDuo
* @version 创建时间:2021年9月1日 下午3:56:37
* @explain 类说明
*/
public class HttpsRequestUtil {
public static String httpsRequest(String url, String method, Map<String, String> headerMap, String bodyData)
throws Exception {
HttpsURLConnection conn = null;
OutputStream out = null;
String rsp = null;
byte[] byteArray = bodyData.getBytes("utf-8");
try {
URL uri = new URL(url);
conn = (HttpsURLConnection) uri.openConnection();
// 忽略证书验证--Begin
conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
// 忽略证书验证--End
conn.setRequestMethod(method);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Host", uri.getHost());
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
if (headerMap != null) {
Iterator<Map.Entry<String, String>> it = headerMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
conn.setRequestProperty(entry.getKey(), entry.getValue());
}
}
out = conn.getOutputStream();
out.write(byteArray);
out.close();
if (conn.getResponseCode() == 200) {
rsp = getStreamAsString(conn.getInputStream(), "utf-8");
} else {
rsp = getStreamAsString(conn.getErrorStream(), "utf-8");
}
} catch (Exception e) {
if (null != out) {
out.close();
}
e.printStackTrace();
}
return rsp;
}
/**
* 获取小程序二维码
*
* @param url
* @param method
* @param headerMap
* @param bodyData
* @return
* @throws Exception
*/
public static String getACodeBase64(String url, String method, Map<String, String> headerMap, String bodyData)
throws Exception {
HttpsURLConnection conn = null;
OutputStream out = null;
String rsp = null;
byte[] byteArray = bodyData.getBytes("utf-8");
try {
URL uri = new URL(url);
conn = (HttpsURLConnection) uri.openConnection();
// 忽略证书验证--Begin
conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
// 忽略证书验证--End
conn.setRequestMethod(method);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Host", uri.getHost());
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
if (headerMap != null) {
Iterator<Map.Entry<String, String>> it = headerMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
conn.setRequestProperty(entry.getKey(), entry.getValue());
}
}
out = conn.getOutputStream();
out.write(byteArray);
out.close();
if (conn.getResponseCode() == 200) {
byte[] bytes = InputStreamToByte(conn.getInputStream());
rsp = Base64.encodeBase64String(bytes);
} else {
rsp = getStreamAsString(conn.getErrorStream(), "utf-8");
}
} catch (Exception e) {
if (null != out) {
out.close();
}
e.printStackTrace();
}
return rsp;
}
/**
* 输入流转字节流
*/
private static byte[] InputStreamToByte(InputStream in) throws IOException {
ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int ch;
while ((ch = in.read(buffer)) != -1) {
bytestream.write(buffer, 0, ch);
}
byte data[] = bytestream.toByteArray();
bytestream.close();
return data;
}
private static String getStreamAsString(InputStream stream, String charset) throws IOException {
try {
Reader reader = new InputStreamReader(stream, charset);
StringBuilder response = new StringBuilder();
final char[] buff = new char[1024];
int read = 0;
while ((read = reader.read(buff)) > 0) {
response.append(buff, 0, read);
}
return response.toString();
} finally {
if (stream != null) {
stream.close();
}
}
}
/**
* HTTPS GET请求
*
* @param url
* @param headerMap
* @return
*/
public static String httpsGet(String url, Map<String, String> headerMap) {
String str_return = "";
HttpsURLConnection conn = null;
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
URL console = new URL(url);
conn = (HttpsURLConnection) console.openConnection();
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
if (headerMap != null) {
Iterator<Map.Entry<String, String>> it = headerMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
conn.setRequestProperty(entry.getKey(), entry.getValue());
}
}
conn.setSSLSocketFactory(sc.getSocketFactory());
conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
conn.connect();
InputStream is = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is, ("ISO-8859-1")));
String ret = "";
while (ret != null) {
ret = br.readLine();
if (ret != null && !ret.trim().equals("")) {
str_return = str_return + new String(ret.getBytes("ISO-8859-1"), "utf-8");
}
}
} catch (ConnectException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
conn.disconnect();
}
return str_return;
}
}
// 定制Verifier
class TrustAnyHostnameVerifier implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
class TrustAnyTrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[]{};
}
}
package com.mmc.csf.common.util.web;
import java.io.Serializable;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月13日 上午9:31:43
* @explain 类说明
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "com.mmc.result.ResultBody", description = "请求响应体")
public class ResultBody<T> implements Serializable{
private static final long serialVersionUID = 6341937455634693363L;
/**
* 响应代码
*/
@ApiModelProperty(value = "响应代码")
private String code;
/**
* 响应消息
*/
@ApiModelProperty(value = "响应消息")
private String message;
/**
* 响应结果
*/
@ApiModelProperty(value = "响应结果")
private T result;
public ResultBody(BaseErrorInfoInterface errorInfo) {
this.code = errorInfo.getResultCode();
this.message = errorInfo.getResultMsg();
}
/**
* 成功
*
* @return
*/
public static ResultBody success() {
return success(null);
}
/**
* 成功
*
* @param data
* @return
*/
public static <T> ResultBody success(T data) {
ResultBody rb = new ResultBody();
rb.setCode(ResultEnum.SUCCESS.getResultCode());
rb.setMessage(ResultEnum.SUCCESS.getResultMsg());
rb.setResult(data);
return rb;
}
/**
* 成功
*
* **/
public static ResultBody success1(ResultEnum enums){
ResultBody rb = new ResultBody();
rb.setCode("200");
rb.setMessage(enums.getResultMsg());
rb.setResult(null);
return rb;
}
public void buildSuccess() {
this.setCode(ResultEnum.SUCCESS.getResultCode());
this.setMessage(ResultEnum.SUCCESS.getResultMsg());
}
/**
* 失败
*/
public static ResultBody error(BaseErrorInfoInterface errorInfo) {
ResultBody rb = new ResultBody();
rb.setCode(errorInfo.getResultCode());
rb.setMessage(errorInfo.getResultMsg());
rb.setResult(null);
return rb;
}
/**
* 失败
*/
public static ResultBody error(String code, String message) {
ResultBody rb = new ResultBody();
rb.setCode(code);
rb.setMessage(message);
rb.setResult(null);
return rb;
}
/**
* 失败
*/
public static ResultBody error(ResultEnum enums) {
ResultBody rb = new ResultBody();
rb.setCode(enums.getResultCode());
rb.setMessage(enums.getResultMsg());
rb.setResult(null);
return rb;
}
/**
* 失败
*/
public static ResultBody error(String message) {
ResultBody rb = new ResultBody();
rb.setCode("-1");
rb.setMessage(message);
rb.setResult(null);
return rb;
}
/**
* 失败
*/
public static ResultBody error(ResultEnum enums, Object data) {
ResultBody rb = new ResultBody();
rb.setCode(enums.getResultCode());
rb.setMessage(enums.getResultMsg());
rb.setResult(data);
return rb;
}
public static boolean isSuccess(ResultBody res) {
return res.getCode().equals(ResultEnum.SUCCESS.getResultCode());
}
@Override
public String toString() {
return JSONObject.toJSONString(this);
}
}
package com.mmc.csf.common.util.web;
public class ShareFlyException extends RuntimeException {
private static final long serialVersionUID = 1L;
/**
* 错误码
*/
protected String errorCode;
/**
* 错误信息
*/
protected String errorMsg;
public ShareFlyException() {
super();
}
public ShareFlyException(BaseErrorInfoInterface errorInfoInterface) {
super(errorInfoInterface.getResultCode());
this.errorCode = errorInfoInterface.getResultCode();
this.errorMsg = errorInfoInterface.getResultMsg();
}
public ShareFlyException(BaseErrorInfoInterface errorInfoInterface, Throwable cause) {
super(errorInfoInterface.getResultCode(), cause);
this.errorCode = errorInfoInterface.getResultCode();
this.errorMsg = errorInfoInterface.getResultMsg();
}
public ShareFlyException(ResultEnum enums) {
super(enums.getResultCode());
this.errorCode = enums.getResultCode();
this.errorMsg = enums.getResultMsg();
}
public ShareFlyException(String errorMsg) {
super(errorMsg);
this.errorMsg = errorMsg;
}
public ShareFlyException(String errorCode, String errorMsg) {
super(errorCode);
this.errorCode = errorCode;
this.errorMsg = errorMsg;
}
public ShareFlyException(String errorCode, String errorMsg, Throwable cause) {
super(errorCode, cause);
this.errorCode = errorCode;
this.errorMsg = errorMsg;
}
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
@Override
public String getMessage() {
return errorMsg;
}
@Override
public Throwable fillInStackTrace() {
return this;
}
}
package com.mmc.csf.common.util.web;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "com.mmc.csf.common.util.web.XETResultBody", description = "小鹅通请求响应体")
public class XETResultBody<T> implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 响应代码
*/
@ApiModelProperty(value = "响应代码")
private Integer code;
/**
* 响应消息
*/
@ApiModelProperty(value = "响应消息")
private String msg;
/**
* 响应结果
*/
@ApiModelProperty(value = "响应结果")
private T data;
/**
* 成功
*
* @return
*/
public static XETResultBody success() {
return success(null);
}
/**
* 成功
*
* @param data
* @return
*/
public static <T> XETResultBody success(T data) {
XETResultBody rb = new XETResultBody();
rb.setCode(0);
rb.setMsg(ResultEnum.SUCCESS.getResultMsg());
rb.setData(data);
return rb;
}
/**
* 签名、权限等异常
* @param data
* @param <T>
* @return
*/
public static <T> XETResultBody powerError(T data){
XETResultBody rb = new XETResultBody();
rb.setCode(-1);
rb.setMsg(ResultEnum.SUCCESS.getResultMsg());
rb.setData(data);
return rb;
}
/**
* 业务接口异常
* @param data
* @param <T>
* @return
*/
public static <T> XETResultBody bizError(T data){
XETResultBody rb = new XETResultBody();
rb.setCode(1);
rb.setMsg(ResultEnum.SUCCESS.getResultMsg());
rb.setData(data);
return rb;
}
}
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.mmc.csf</groupId>
<artifactId>iuav-ims</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.mmc.csf.common</groupId>
<artifactId>csf-common</artifactId>
<packaging>pom</packaging>
<modules>
<module>csf-common-model</module>
<module>csf-common-util</module>
</modules>
</project>
\ No newline at end of file
......@@ -114,36 +114,6 @@
<artifactId>easypoi-annotation</artifactId>
</dependency>
<dependency>
<groupId>com.mmc.csf.starter</groupId>
<artifactId>auth-cache-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.mmc.csf.starter</groupId>
<artifactId>client-feign-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.mmc.csf.starter</groupId>
<artifactId>security-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.mmc.csf.starter</groupId>
<artifactId>client-feign-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.mmc.csf.starter</groupId>
<artifactId>ali-oss-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
......
package com.mmc.csf.flyer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @Author LW
* @date 2023/5/13 10:39
* 概要:
// */
//@EnableFeignClients(basePackages = "com.mmc.csf.starter.client") // 所有FeignClient放在client-feign-springboot-starter里面进行管理
//@EnableCircuitBreaker
//@EnableEurekaClient
@SpringBootApplication
public class FlyerApplication {
public static void main(String[] args) {
SpringApplication.run(FlyerApplication.class, args);
}
}
package com.mmc.csf.flyer.controller;
import com.mmc.csf.common.util.web.ResultBody;
import com.mmc.csf.flyer.service.FlyerTrainingService;
import com.mmc.csf.flyer.vo.DronePilotLicenseVO;
import com.mmc.csf.flyer.vo.FlightSkillsVO;
import com.mmc.csf.flyer.vo.RegistrationVO;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* @Author LW
* @date 2023/5/13 11:00
* 概要:
*/
@Api(tags = {"web/小程序-飞手培训-模块"})
@RestController
@RequestMapping("/curriculum/")
public class FlyerTrainingController {
@Resource
private FlyerTrainingService flyerTrainingService;
@ApiOperation(value = "飞手报名")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("/pilotRegistration")
public ResultBody pilotRegistration(@RequestBody RegistrationVO registrationVO, @ApiParam(value = "模拟用户id") Integer id) {
return flyerTrainingService.pilotRegistration(registrationVO, id);
}
@ApiOperation(value = "无人机驾驶员执照-树形图")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = DronePilotLicenseVO.class)})
@GetMapping("/getDronePilotLicense")
public ResultBody getDronePilotLicense() {
return flyerTrainingService.getDronePilotLicense();
}
@ApiOperation(value = "行业应用认证-下拉列表")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = FlightSkillsVO.class)})
@GetMapping("/getIndustryFlightSkills")
public ResultBody getIndustryFlightSkills() {
return flyerTrainingService.getIndustryFlightSkills();
}
}
package com.mmc.csf.flyer.dao;
import com.mmc.csf.flyer.entity.FlightSkillsDO;
import com.mmc.csf.flyer.entity.PilotRegistrationDO;
import com.mmc.csf.flyer.vo.DronePilotLicenseVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @Author LW
* @date 2023/5/15 11:34
* 概要:
*/
@Mapper
public interface FlyerTrainingDao {
/**
* 插入飞手报名登记信息
*
* @param pilotRegistrationDO 飞行员信息登记
*/
void insertPilotRegistrationInfo(PilotRegistrationDO pilotRegistrationDO);
List<DronePilotLicenseVO> selectAllLicenses();
/**
* 行业飞行技能列表
*
* @return {@link List}<{@link FlightSkillsDO}>
*/
List<FlightSkillsDO> listIndustryFlightSkills();
}
package com.mmc.csf.flyer.entity;
import com.mmc.csf.flyer.vo.FlightSkillsVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.xml.soap.Name;
import java.io.Serializable;
/**
* @Author LW
* @date 2023/5/15 17:42
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class FlightSkillsDO implements Serializable {
private static final long serialVersionUID = -6326079527453519916L;
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "行业认证名称")
private String skillsName;
public FlightSkillsVO buildFlightSkillsVO() {
return FlightSkillsVO.builder().id(id).skillsName(skillsName).build();
}
}
package com.mmc.csf.flyer.entity;
import com.mmc.csf.flyer.vo.RegistrationVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.Date;
import java.io.Serializable;
/**
* 飞手报名信息表(PilotRegistrationDO)表实体类
*
* @author makejava
* @since 2023-05-15 14:13:43
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class PilotRegistrationDO implements Serializable {
private static final long serialVersionUID = -1914453807497409611L;
private Integer id;
@ApiModelProperty(value = "申请用户id")
private Integer applyUserId;
@ApiModelProperty(value = "姓名")
private String name;
@ApiModelProperty(value = "城市")
private Integer city;
@ApiModelProperty(value = "手机号")
private String telephone;
@ApiModelProperty(value = "是否有驾照 0:是 1:否")
private Integer drivingLicense;
@ApiModelProperty(value = "省份")
private Integer province;
@ApiModelProperty(value = "无人机驾驶员执照一级分类id")
private Integer uavLicenseLevelOne;
@ApiModelProperty(value = "无人机驾驶员执照二级分类id")
private Integer uavLicenseLevelTwo;
@ApiModelProperty(value = "无人机驾驶员执照三级分类id")
private Integer uavLicenseLevelThree;
@ApiModelProperty(value = "行业应用认证")
private String industryAppAuth;
@ApiModelProperty(value = "备注")
private String remark;
private Date createTime;
private Date updateTime;
private Integer deleted;
public PilotRegistrationDO(RegistrationVO registrationVO, Integer id) {
this.applyUserId = id;
this.name = registrationVO.getName();
this.city = registrationVO.getCity();
this.telephone = registrationVO.getTelephone();
this.drivingLicense = registrationVO.getDrivingLicense();
this.province = registrationVO.getProvince();
this.uavLicenseLevelOne = registrationVO.getUavLicenseLevelOne();
this.uavLicenseLevelTwo = registrationVO.getUavLicenseLevelTwo();
this.uavLicenseLevelThree = registrationVO.getUavLicenseLevelThree();
this.remark = registrationVO.getRemark();
}
}
package com.mmc.csf.flyer.service;
import com.mmc.csf.common.util.web.ResultBody;
import com.mmc.csf.flyer.vo.RegistrationVO;
/**
* @Author LW
* @date 2023/5/15 10:12
* 概要:
*/
public interface FlyerTrainingService {
/**
* 飞手报名
*
* @param registrationVO 注册信息
* @param id id
* @return {@link ResultBody}
*/
ResultBody pilotRegistration(RegistrationVO registrationVO, Integer id);
/**
* 获取无人机飞行员执照
*
* @return {@link ResultBody}
*/
ResultBody getDronePilotLicense();
/**
* 获取行业飞行技能
*
* @return {@link ResultBody}
*/
ResultBody getIndustryFlightSkills();
}
package com.mmc.csf.flyer.service.impl;
import com.mmc.csf.flyer.dao.FlyerTrainingDao;
import com.mmc.csf.common.util.web.ResultBody;
import com.mmc.csf.flyer.entity.FlightSkillsDO;
import com.mmc.csf.flyer.entity.PilotRegistrationDO;
import com.mmc.csf.flyer.service.FlyerTrainingService;
import com.mmc.csf.flyer.vo.DronePilotLicenseVO;
import com.mmc.csf.flyer.vo.RegistrationVO;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author LW
* @date 2023/5/15 10:11
* 概要:
*/
@Service
public class FlyerTrainingServiceImpl implements FlyerTrainingService {
@Resource
private FlyerTrainingDao flyerTrainingDao;
@Override
public ResultBody pilotRegistration(RegistrationVO registrationVO, Integer id) {
PilotRegistrationDO pilotRegistrationDO = new PilotRegistrationDO(registrationVO, id);
if (CollectionUtils.isNotEmpty(registrationVO.getIndustryAppAuth())) {
// 将行业应用认证的id用逗号拼接
String industryAppAuth = registrationVO.getIndustryAppAuth().stream().map(Object::toString).collect(Collectors.joining(","));
pilotRegistrationDO.setIndustryAppAuth(industryAppAuth);
}
flyerTrainingDao.insertPilotRegistrationInfo(pilotRegistrationDO);
return ResultBody.success();
}
@Override
public ResultBody getDronePilotLicense() {
List<DronePilotLicenseVO> allLicenses = flyerTrainingDao.selectAllLicenses();
List<DronePilotLicenseVO> topLevelLicenses = new ArrayList<>();
Map<Integer, DronePilotLicenseVO> licenseMap = new HashMap<>();
// 将每个数据模型对象添加到Map中,以便在递归过程中查找它们的父母
for (DronePilotLicenseVO license : allLicenses) {
license.setChildLicenses(new ArrayList<>());
licenseMap.put(license.getId(), license);
}
// 构建树结构
for (DronePilotLicenseVO license : allLicenses) {
if (license.getParentId() == 0) {
topLevelLicenses.add(license);
} else {
DronePilotLicenseVO parent = licenseMap.get(license.getParentId());
parent.getChildLicenses().add(license);
}
}
return ResultBody.success(topLevelLicenses);
}
@Override
public ResultBody getIndustryFlightSkills() {
List<FlightSkillsDO> flightSkillsList = flyerTrainingDao.listIndustryFlightSkills();
return ResultBody.success(flightSkillsList.stream()
.map(FlightSkillsDO::buildFlightSkillsVO).collect(Collectors.toList()));
}
}
#Application
server:
port: 50002
servlet:
context-path: /uavgoods
#spring
spring:
application:
name: uavgoods
#Database
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql:3306/uav_mall_goods?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
username: csftester
password: csf-TEST-m1200
# Druid数据源配置
type: com.alibaba.druid.pool.DruidDataSource
druid:
initial-size: 10 #初始化连接池大小
min-idle: 10 #最小大小
max-active: 50 #最大大小
max-wait: 60000 #获取连接时最大等待时间,单位毫秒
time-between-eviction-runs-millis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
min-evictable-idle-time-millis: 300000 #配置一个连接在池中最小生存的时间,单位是毫秒
validation-query: SELECT 1 FROM DUAL #用来检测连接是否有效的sql
test-while-idle: true #申请连接的时候检测,建议配置为true,不影响性能,并且保证安全性
testOnBorrow: false #获取连接时执行检测,建议关闭,影响性能
testOnReturn: false #归还连接时执行检测,建议关闭,影响性能
pool-prepared-statements: false #是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭
filters: stat,wall #配置扩展插件,常用的插件有=>stat:监控统计 log4j:日志 wall:防御sql注入
filter:
wall:
config:
multi-statement-allow: true
db-type: mysql
enabled: true
connection-properties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 #打开慢sql记录和延迟时间
web-stat-filter:
url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
enabled: true
stat-view-servlet:
enabled: true
login-username: druid
login-password: druid
#cloud
cloud:
loadbalancer:
retry:
enabled: true
#Redis
redis:
database: 0
host: redis
password: mmc@redis123
port: 6379
#连接池
lettuce:
shutdown-timeout: 1000 # 关闭超时时间-ms
pool:
#最大连接个数
max-active: 30
#等待时间-ms
max-wait: 1000ms
#最大空闲
max-idle: 8
#初始化最小
min-idle: 1
#rabbitMQ
rabbitmq:
host: rabbitmq
port: 5672
username: admin
password: mmc123456
virtual-host: /
listener:
simple:
#acknowledge-mode: manual #设置确认模式手工确认
concurrency: 3 #消费者最小数量
max-concurrency: 10 # 消费者最大数量
# 一般消费者自动签收模式下可以添加下面配置,用于消费抛出异常后进行消息重新投递设置
retry:
enabled: true #是否开启消费者重试(为false时关闭消费者重试)
max-attempts: 3 # 最大重试重新投递消息次数
initial-interval: 900s #重试重新投递消息间隔时间(单位秒)
default-requeue-rejected: false #重试次数超过上面的设置之后是否丢弃(消费者listener抛出异常,是否重回队列,默认true:重回队列, false为不重回队列(结合死信交换机))
#eureka eureka.client.register-with-eureka=true
eureka:
instance:
prefer-ip-address: true
ip-address: mgoods
instance-id: ${eureka.instance.ip-address}:${server.port}@${random.int}
status-page-url: https://testapi.sharefly.mmcuav.cn/${server.servlet.context-path}/swagger-ui.html
client:
fetch-registry: true
service-url:
defaultZone: http://edmin:sharefly1200@eureka:20080/eureka/
#logging
logging:
level:
com:
mmc:
csf: DEBUG
#mybatis
mybatis:
executor-type: simple
mapper-locations: classpath:mapper/**/*.xml
type-aliases-package: com.mmc.csf
configuration:
map-underscore-to-camel-case: true
#feign
feign:
client:
config:
default:
connect-timeout: 3000
read-timeout: 6000
#Okhttp参数配置
httpclient:
enabled: false
okhttp:
enabled: true
hystrix:
enabled: true
hystrix:
command:
default:
execution:
isolation:
thread:
# hystrix 超时时间
timeoutInMilliseconds: 9000
#ribbon-ribbo和hystrix时间取最小的生效,feign和ribbon的超时时间只能选其一生效feign优先级高于ribbon
ribbon:
okhttp:
enabled: true
mmc:
appid: 80001
url: http://121.37.224.147
companycode: MMC
#logstash服务器地址
logstash:
host: 10.86.210.18
#logstash端口
port: 8084
wechat:
sub:
appid: wx5c6a105a0ddca4c5
secret: 96c75255dd26f82f8d55e15b59e101c7
rabbitmq:
enabled: true
exchange: REPOORDER_WX_API_DIRECT_TEST
#Application
server:
port: 10001
servlet:
context-path: /flyer
#spring
spring:
application:
name: flyer
#Database
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://rm-wz9dd796t4j1giz6t2o.mysql.rds.aliyuncs.com:3306/iuav_ims?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
username: tmj
password: MMC@2022&MYSQL
# Druid数据源配置
type: com.alibaba.druid.pool.DruidDataSource
druid:
initial-size: 1 #初始化连接池大小
min-idle: 1 #最小大小
max-active: 1 #最大大小
max-wait: 60000 #获取连接时最大等待时间,单位毫秒
time-between-eviction-runs-millis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
min-evictable-idle-time-millis: 300000 #配置一个连接在池中最小生存的时间,单位是毫秒
validation-query: SELECT 1 FROM DUAL #用来检测连接是否有效的sql
test-while-idle: true #申请连接的时候检测,建议配置为true,不影响性能,并且保证安全性
testOnBorrow: false #获取连接时执行检测,建议关闭,影响性能
testOnReturn: false #归还连接时执行检测,建议关闭,影响性能
pool-prepared-statements: false #是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭
filters: stat,wall #配置扩展插件,常用的插件有=>stat:监控统计 log4j:日志 wall:防御sql注入
filter:
wall:
config:
multi-statement-allow: true
db-type: mysql
enabled: true
connection-properties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 #打开慢sql记录和延迟时间
web-stat-filter:
url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
enabled: true
stat-view-servlet:
enabled: true
login-username: druid
login-password: druid
#cloud
cloud:
loadbalancer:
retry:
enabled: true
#Redis
redis:
database: 0
host: 119.23.248.181
password: mmc@redis123
port: 6379
#连接池
lettuce:
shutdown-timeout: 1000 # 关闭超时时间-ms
pool:
#最大连接个数
max-active: 30
#等待时间-ms
max-wait: 1000ms
#最大空闲
max-idle: 8
#初始化最小
min-idle: 1
#rabbitMQ
rabbitmq:
host: 119.23.248.181
port: 5672
username: admin
password: mmc123456
virtual-host: /
listener:
simple:
#acknowledge-mode: manual #设置确认模式手工确认
concurrency: 3 #消费者最小数量
max-concurrency: 10 # 消费者最大数量
# 一般消费者自动签收模式下可以添加下面配置,用于消费抛出异常后进行消息重新投递设置
retry:
enabled: true #是否开启消费者重试(为false时关闭消费者重试)
max-attempts: 3 # 最大重试重新投递消息次数
initial-interval: 900s #重试重新投递消息间隔时间(单位秒)
default-requeue-rejected: false #重试次数超过上面的设置之后是否丢弃(消费者listener抛出异常,是否重回队列,默认true:重回队列, false为不重回队列(结合死信交换机))
#eureka eureka.client.register-with-eureka=true
eureka:
instance:
prefer-ip-address: true
ip-address: 127.0.0.1
instance-id: ${eureka.instance.ip-address}:${server.port}@${random.int}
status-page-url: http://${eureka.instance.ip-address}:${server.port}${server.servlet.context-path}/swagger-ui.html
client:
fetch-registry: true
service-url:
defaultZone: http://edmin:sharefly1200@127.0.0.1:20080/eureka/
#logging
logging:
level:
com:
mmc:
csf: DEBUG
#mybatis
mybatis:
executor-type: simple
mapper-locations: classpath:mapper/**/*.xml
type-aliases-package: com.mmc.csf
configuration:
map-underscore-to-camel-case: true
##feign
#feign:
# client:
# config:
# default:
# connect-timeout: 3000
# read-timeout: 6000
# #Okhttp参数配置
# httpclient:
# enabled: false
# okhttp:
# enabled: true
# hystrix:
# enabled: true
#hystrix:
# command:
# default:
# execution:
# isolation:
# thread:
# # hystrix 超时时间
# timeoutInMilliseconds: 9000
##ribbon-ribbo和hystrix时间取最小的生效,feign和ribbon的超时时间只能选其一生效feign优先级高于ribbon
#ribbon:
# okhttp:
# enabled: true
#mmc:
# appid: 80001
# url: http://121.37.224.147
# companycode: MMC
#
##logstash服务器地址
#logstash:
# host: 10.86.210.18
##logstash端口
# port: 8084
#
#
#wechat:
# sub:
# appid: wx5c6a105a0ddca4c5
# secret: 96c75255dd26f82f8d55e15b59e101c7
#
#rabbitmq:
# enabled: false
# exchange: REPOORDER_WX_API_DIRECT_DEV
#
## 查看健康情况-开发分支配置则可-其余分支请勿配置
#management:
# endpoints:
# web:
# exposure:
# include: "*"
\ No newline at end of file
#Application
server:
port: 50002
servlet:
context-path: /uavgoods
#spring
spring:
application:
name: uavgoods
#Database
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql:3306/uav_mall_goods?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
username: csfmysql
password: csf-DB-m1200
# Druid数据源配置
type: com.alibaba.druid.pool.DruidDataSource
druid:
initial-size: 10 #初始化连接池大小
min-idle: 10 #最小大小
max-active: 50 #最大大小
max-wait: 60000 #获取连接时最大等待时间,单位毫秒
time-between-eviction-runs-millis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
min-evictable-idle-time-millis: 300000 #配置一个连接在池中最小生存的时间,单位是毫秒
validation-query: SELECT 1 FROM DUAL #用来检测连接是否有效的sql
test-while-idle: true #申请连接的时候检测,建议配置为true,不影响性能,并且保证安全性
testOnBorrow: false #获取连接时执行检测,建议关闭,影响性能
testOnReturn: false #归还连接时执行检测,建议关闭,影响性能
pool-prepared-statements: false #是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭
filters: stat,wall #配置扩展插件,常用的插件有=>stat:监控统计 log4j:日志 wall:防御sql注入
filter:
wall:
config:
multi-statement-allow: true
db-type: mysql
enabled: true
connection-properties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 #打开慢sql记录和延迟时间
web-stat-filter:
url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
enabled: true
stat-view-servlet:
enabled: true
login-username: druid
login-password: druid
#cloud
cloud:
loadbalancer:
retry:
enabled: true
#Redis
redis:
database: 0
host: redis
password: mmc@redis123
port: 6379
#连接池
lettuce:
shutdown-timeout: 1000 # 关闭超时时间-ms
pool:
#最大连接个数
max-active: 30
#等待时间-ms
max-wait: 1000ms
#最大空闲
max-idle: 8
#初始化最小
min-idle: 1
#rabbitMQ
rabbitmq:
host: 120.25.213.190
port: 5672
username: admin
password: mmc123456
virtual-host: /
listener:
simple:
#acknowledge-mode: manual #设置确认模式手工确认
concurrency: 3 #消费者最小数量
max-concurrency: 10 # 消费者最大数量
# 一般消费者自动签收模式下可以添加下面配置,用于消费抛出异常后进行消息重新投递设置
retry:
enabled: true #是否开启消费者重试(为false时关闭消费者重试)
max-attempts: 3 # 最大重试重新投递消息次数
initial-interval: 900s #重试重新投递消息间隔时间(单位秒)
default-requeue-rejected: false #重试次数超过上面的设置之后是否丢弃(消费者listener抛出异常,是否重回队列,默认true:重回队列, false为不重回队列(结合死信交换机))
#eureka eureka.client.register-with-eureka=true
eureka:
instance:
prefer-ip-address: true
ip-address: mgoods
instance-id: ${eureka.instance.ip-address}:${server.port}@${random.int}
client:
fetch-registry: true
service-url:
defaultZone: http://edmin:sharefly1200@eureka:20080/eureka/
#logging
logging:
level:
com:
mmc:
csf: DEBUG
#mybatis
mybatis:
executor-type: simple
mapper-locations: classpath:mapper/**/*.xml
type-aliases-package: com.mmc.csf
configuration:
map-underscore-to-camel-case: true
#feign
feign:
client:
config:
default:
connect-timeout: 3000
read-timeout: 6000
#Okhttp参数配置
httpclient:
enabled: false
okhttp:
enabled: true
hystrix:
enabled: true
hystrix:
command:
default:
execution:
isolation:
thread:
# hystrix 超时时间
timeoutInMilliseconds: 9000
#ribbon-ribbo和hystrix时间取最小的生效,feign和ribbon的超时时间只能选其一生效feign优先级高于ribbon
ribbon:
okhttp:
enabled: true
mmc:
appid: 80001
url: http://121.37.224.147
companycode: MMC
wechat:
sub:
appid: wx5c6a105a0ddca4c5
secret: 96c75255dd26f82f8d55e15b59e101c7
rabbitmq:
enabled: true
exchange: REPOORDER_WX_API_DIRECT_PROD
spring:
profiles:
active: dev
---
spring:
profiles: dev
---
spring:
profiles: beta
---
spring:
profiles: product
_____ _ __ _
/ ____| | / _| |
| (___ | |__ __ _ _ __ ___ | |_| |_ _
\___ \| '_ \ / _` | '__/ _ \ | _| | | | |
____) | | | | (_| | | | __/ | | | | |_| |
|_____/|_| |_|\__,_|_| \___| |_| |_|\__, |
__/ |
|___/
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>139.159.142.254:6003</destination>
<!-- 日志输出编码 -->
<encoder charset="UTF-8"
class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"logLevel": "%level",
"serviceName": "${springAppName:-}",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger{40}",
"rest": "%message"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="LOGSTASH" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mmc.csf.flyer.dao.FlyerTrainingDao">
<insert id="insertPilotRegistrationInfo" parameterType="com.mmc.csf.flyer.entity.PilotRegistrationDO"
useGeneratedKeys="true" keyProperty="id">
INSERT INTO pilot_registration(id, apply_user_id, `name`, city, telephone, driving_license, province,
uav_license, industry_app_auth, remark)
VALUES (#{id}, #{applyUserId}, #{name}, #{city}, #{telephone}, #{drivingLicense}, #{province}, #{uavLicense},
#{industryAppAuth}, #{remark})
</insert>
<select id="selectAllLicenses" resultType="com.mmc.csf.flyer.vo.DronePilotLicenseVO">
select id,
parent_id,
license_type,
create_time,
description
FROM drone_pilot_license
where is_deleted = 0
</select>
<select id="listIndustryFlightSkills" resultType="com.mmc.csf.flyer.entity.FlightSkillsDO">
select id,
skills_name
from flight_skills
</select>
</mapper>
\ No newline at end of file
......@@ -198,5 +198,6 @@
</repositories>
<modules>
<module>flyer-service</module>
<module>csf-common</module>
</modules>
</project>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论