提交 5ae1e0be 作者: xiaowang

合并分支 'feature/flyer' 到 'master'

飞手培训

查看合并请求 !1
<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.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author 作者 geDuo
* @version 创建时间:2021年7月17日 下午5:28:19
* @explain 日期时间工具类
*/
public class TDateUtil {
public static final String ONE_WEEK = "oneweek";
public static final String ONE_MONTH = "onemonth";
public static final String THREE_MONTH = "threemonth";
public static final String SIX_MONTH = "sixmonth";
public static final String ONE_YEAR = "oneyear";
public static String getCurrentDate() {
SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm");// 设置日期格式
String date = df.format(new Date());// new Date()为获取当前系统时间
return date;
}
public static String getCurrentDateByType(String format) {
SimpleDateFormat df = new SimpleDateFormat(format);// 设置日期格式
String date = df.format(new Date());// new Date()为获取当前系统时间
return date;
}
public static String getCurrentDateMidd() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式
String date = df.format(new Date());// new Date()为获取当前系统时间
return date;
}
public static Date getDate(String str, String format) {
Date date = null;
try {
SimpleDateFormat df = new SimpleDateFormat(format);// 设置日期格式
// String dates=df.format(new Date());// new Date()为获取当前系统时间
date = df.parse(str);
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
/**
* date类型转字符串
*/
public static String getDateStr(Date date, String type) {
SimpleDateFormat format = new SimpleDateFormat(type);
String s = format.format(date);
return s;
}
/**
* 根据日期获得随机数
*/
public static Integer getDateRandom(Date date, String format, int count) {
String code = "";
for (int i = 0; i < count; i++) {
code = code + (int) (Math.random() * 9);
}
code = TDateUtil.getDateStr(date, format) + code;
return Integer.parseInt(code);
}
/**
* 10位数的秒转日期字符
*
* @param mss
* @return
*/
public static Date dateFromSecond(long sceondTime) {
return new Date(sceondTime * 1000);
}
/**
* 10位数的秒转日期字符
*
* @param mss
* @return
*/
public static String dateFromSecondStr(long sceondTime) {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(sceondTime * 1000));
}
/**
* 秒转时分秒
*
* @param secondTime
* @return
*/
public static String hmsFromSecond(Integer secondTime) {
Integer hour = secondTime / 60 / 60;
Integer minutes = secondTime / 60 % 60;
Integer remainingSeconds = secondTime % 60;
return (hour + "h" + minutes + "min" + remainingSeconds + "s");
}
public static String hmsFromSecondFormat(long secondTime) {
long day = secondTime / 60 / 60 / 24;
long hour = secondTime / 60 / 60 % 24;
long minutes = secondTime / 60 % 60;
long remainingSeconds = secondTime % 60;
if (day > 0) {
return (day + "天" + hour + "小时" + minutes + "分" + remainingSeconds + "秒");
}
return (hour + "小时" + minutes + "分" + remainingSeconds + "秒");
}
/**
* 两个日期的相差秒数
*
* @param maxDate
* @param minDate
* @return
*/
public static long calLastedTime(Date maxDate, Date minDate) {
long a = maxDate.getTime();
long b = minDate.getTime();
long c = (a - b) / 1000;
return c;
}
/**
* 获取某个月的月底最后一天的时间
*/
public static Date getMonthLatestDay(Date date) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
// 获取当前月最后一天
Calendar ca = Calendar.getInstance();
ca.setTime(date);
ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
String last = format.format(ca.getTime());
Date dates = getDate(last, "yyyy-MM-dd");
return dates;
}
/**
* 某个时间 加N天
*/
public static Date nextNumDay(Date d, int num) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
Date now = d;
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
calendar.add(Calendar.DAY_OF_MONTH, num);
String last = format.format(calendar.getTime());
date = getDate(last, "yyyy-MM-dd");
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
/**
* 某天个时间加 N 小时
* @param now
* @param num
* @return
*/
public static Date addHourTime(Date now,int num){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
calendar.add(Calendar.HOUR,num);
String last = format.format(calendar.getTime());
date = getDate(last, "yyyy-MM-dd HH:mm:ss");
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
/**
* 某个时间加n个月加n天(负数为减)
*/
@SuppressWarnings("static-access")
public static Date getMonthNDayN(Date date, int month, int day) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date news = null;
try {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, month);
calendar.add(calendar.DATE, day);
String last = format.format(calendar.getTime());
news = getDate(last, "yyyy-MM-dd");
} catch (Exception e) {
e.printStackTrace();
}
return news;
}
/**
* 时间戳-计算小时
*/
public static long getDistanceTime(long time1, long time2) {
long diff = 0;
long day = 0;
long hour = 0;
if (time1 < time2) {
diff = time2 - time1;
} else {
diff = time1 - time2;
}
day = diff / (24 * 60 * 60 * 1000);
hour = (diff / (60 * 60 * 1000) - day * 24);
return hour;
}
/**
* 两个时间之间相差距离多少天
*
* @param one 时间参数 1:
* @param two 时间参数 2:
* @return 相差天数
*/
public static int distanceDays(Date one, Date two) {
int days = 0;
long time1 = one.getTime();
long time2 = two.getTime();
long diff;
if (time1 < time2) {
diff = time2 - time1;
} else {
diff = time1 - time2;
}
days = new Long(diff / (1000 * 60 * 60 * 24)).intValue();
return days;
}
public static Date nextNumDateTime(Date d, int num) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
Date now = d;
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
calendar.add(Calendar.DAY_OF_MONTH, num);
String last = format.format(calendar.getTime());
date = getDate(last, "yyyy-MM-dd HH:mm:ss");
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
public static String createYearWeek(String startStr, String endStr) {
if (startStr == null || "".equals(startStr) || endStr == null || "".equals(endStr)) {
return "起止日期不能为空";
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date start = null;
Date end = null;
Date startDate;
Date endDate;
int dayOfWeek;
boolean goOn = true;
int no = 0;
try {
start = sdf.parse(startStr);
end = sdf.parse(endStr);
} catch (ParseException e) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
try {
start = simpleDateFormat.parse(startStr);
end = simpleDateFormat.parse(endStr);
} catch (ParseException pe) {
pe.printStackTrace();
}
}
if (start.compareTo(end) > -1) {
return "结束日期必须大于开始日期";
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(start);
dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
List<Map<String, String>> weekList = new ArrayList<>();
if (dayOfWeek > 1 && dayOfWeek < 7) {
do {
startDate = start;
calendar.add(Calendar.DATE, (8 - dayOfWeek));
endDate = calendar.getTime();
no += 1;
Map<String, String> map = new HashMap<>();
map.put("startOfWeek", sdf.format(startDate));
map.put("weekNo", no + "");
if (endDate.compareTo(end) < 0) {
map.put("endOfWeek", sdf.format(endDate));
weekList.add(map);
calendar.add(Calendar.DATE, 1);
start = calendar.getTime();
dayOfWeek = 2;
} else {
map.put("endOfWeek", sdf.format(end));
weekList.add(map);
goOn = false;
}
} while (goOn);
} else {
no += 1;
startDate = start;
if (dayOfWeek == 1) {
endDate = start;
} else {
calendar.add(Calendar.DATE, 1);
endDate = calendar.getTime();
}
Map<String, String> map = new HashMap<>();
map.put("startOfWeek", sdf.format(startDate));
map.put("endOfWeek", sdf.format(endDate));
map.put("weekNo", no + "");
weekList.add(map);
calendar.add(Calendar.DATE, 1);
start = calendar.getTime();
do {
startDate = start;
calendar.add(Calendar.DATE, 6);
endDate = calendar.getTime();
no += 1;
map = new HashMap<>();
map.put("startOfWeek", sdf.format(startDate));
map.put("weekNo", no + "");
if (endDate.compareTo(end) < 0) {
map.put("endOfWeek", sdf.format(endDate));
weekList.add(map);
calendar.add(Calendar.DATE, 1);
start = calendar.getTime();
} else {
map.put("endOfWeek", sdf.format(end));
weekList.add(map);
goOn = false;
}
} while (goOn);
}
return weekList.toString();
}
/**
* 获取起止日期
*
* @param sdf 需要显示的日期格式
* @param date 需要参照的日期
* @param n 最近n周
* @param option 0 开始日期;1 结束日期
* @param k 0 包含本周 1 不包含本周
* @return
*/
public static String getFromToDate(SimpleDateFormat sdf, Date date, int n, int option, int k) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
int offset = 0 == option ? 1 - dayOfWeek : 7 - dayOfWeek;
int amount = 0 == option ? offset - (n - 1 + k) * 7 : offset - k * 7;
calendar.add(Calendar.DATE, amount);
return sdf.format(calendar.getTime());
}
/**
* 根据当前日期获得最近n周的日期区间(包含本周)
*
* @param n
* @param sdf
* @return
*/
public static String getNWeekTimeInterval(int n, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);// 设置日期格式
String beginDate = getFromToDate(sdf, new Date(), n, 0, 0);
String endDate = getFromToDate(sdf, new Date(), n, 1, 0);
return beginDate + "," + endDate;
}
/**
* 根据当前日期获得最近n周的日期区间(不包含本周)
*
* @param n
* @param sdf
* @return
*/
public static String getNWeekTimeIntervalTwo(int n, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);// 设置日期格式
String beginDate = getFromToDate(sdf, new Date(), n, 0, 1);
String endDate = getFromToDate(sdf, new Date(), n, 1, 1);
return beginDate + "," + endDate;
}
/**
* 根据当前日期获得本周的日期区间(本周周一和周日日期)
*
* @param sdf
* @return
*/
public static String getThisWeekTimeInterval(String format) {
return getNWeekTimeInterval(1, format);
}
/**
* 根据当前日期获得上周的日期区间(上周周一和周日日期)
*
* @param sdf
* @return
*/
public static String getLastWeekTimeInterval(String format) {
return getNWeekTimeIntervalTwo(1, format);
}
/**
* 获取某个日期最近一个的星期日
*
* @return
*/
public static Date getLatestWeekend(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
Date endDate = TDateUtil.nextNumDay(date, w * -1);
return endDate;
}
/**
* 获取N周的星期一的日期(正加负减)
*
* @param date
* @return
*/
public static Date getMinMonday(Date date, int weekNum) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
Date endDate = TDateUtil.nextNumDay(date, w * -1);
Date startDate = TDateUtil.nextNumDay(endDate, (weekNum * 7) + 1);
return startDate;
}
/**
* 获取某个月加几个月后一号的日期
*/
@SuppressWarnings("static-access")
public static Date getAddMonThDay(Date date, int i) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(calendar.MONTH, i);
calendar.set(Calendar.DAY_OF_MONTH, 1);
String last = format.format(calendar.getTime());
date = getDate(last, "yyyy-MM-dd");
return date;
}
/**
* 某个月最后一天
*/
public static Date getAnyMonthLastDay(Date date) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
// 获取当前月最后一天
Calendar ca = Calendar.getInstance();
ca.setTime(date);
ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
String last = format.format(ca.getTime());
date = getDate(last, "yyyy-MM-dd");
return date;
}
public static Date getDate(Date date, String type) {
SimpleDateFormat format = new SimpleDateFormat(type);
String s = format.format(date);
return getDate(s, type);
}
/**
* 获取去年今天的日期
*/
public static Date getLastYearTodayDate() {
Calendar instance = Calendar.getInstance();
instance.add(Calendar.YEAR,-1);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String s = format.format(instance.getTime());
return getDate(s, "yyyy-MM-dd");
}
/**
* 获取昨天的日期
* @param type
* @return
*/
public static String getYesterdayDateByType(String type){
Calendar instance = Calendar.getInstance();
instance.add(Calendar.DAY_OF_MONTH,-1);
Date time = instance.getTime();
SimpleDateFormat format = new SimpleDateFormat(type);
return format.format(time);
}
/**
* 判断两个时间是不是在同一个月
*/
public static boolean isSameMonth(Date date1, Date date2) {
Calendar c = Calendar.getInstance();
c.setTime(date1);
int month1 = c.get(Calendar.MONTH);
c.setTime(date2);
int month2 = c.get(Calendar.MONTH);
if (month1 == month2) {
return true;
}
return false;
}
/**
* 间隔天数
* @param startTime
* @param endTime
* @return
*/
public static int isolateDayNum(String startTime, String endTime){
Date startDate = getDate(startTime, "yyyy-MM-dd");
Date endDate = getDate(endTime, "yyyy-MM-dd");
long differentMillis = endDate.getTime() - startDate.getTime();
long dayNum = differentMillis/(1000*60*60*24);
return (int)dayNum;
}
/**
* 获取某月最后一天的时间
* @param yearMonth
* @return
*/
public static String getLastDateTimeOfMonth(String yearMonth){
SimpleDateFormat format0 = new SimpleDateFormat("yyyy-MM");
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar instance = Calendar.getInstance();
try {
Date parse = format0.parse(yearMonth);
instance.setTime(parse);
instance.set(Calendar.DAY_OF_MONTH, instance.getActualMaximum(Calendar.DAY_OF_MONTH));
instance.set(Calendar.HOUR_OF_DAY, 23);
instance.set(Calendar.MINUTE, 59);
instance.set(Calendar.SECOND, 59);
String format = format1.format(instance.getTime());
return format;
} catch (Exception e){
e.printStackTrace();
}
return null;
}
public static Date getStrToDate(String str){
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
Date date = null;
try {
if (str==null){
date = null;
}else {
date = dateFormat.parse(str);
}
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
public static int getStageByDate(Date date){
Calendar instance = Calendar.getInstance();
instance.setTime(date);
//当前时间
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
String format = dateFormat.format(date);
try {
Date currentTime = dateFormat.parse(format);
Date parse1 = dateFormat.parse("05:00:00");
Date parse2 = dateFormat.parse("11:00:00");
Date parse3 = dateFormat.parse("17:00:00");
Date parse4 = dateFormat.parse("00:00:00");
//A:05:00-11:00 | B:11:00-17:00 | C:00:00-05:00,17:00-00:00
if (currentTime.after(parse4) && currentTime.before(parse1) ) {
return 3;
}else if (currentTime.after(parse1) && currentTime.before(parse2)) {
return 1;
}else if(currentTime.after(parse2) && currentTime.before(parse3)){
return 2;
}else if(currentTime.after(parse3) && currentTime.after(parse4)){
return 4;
}
}catch (Exception e){
e.printStackTrace();
}
return 0;
}
public static String getCurrentYear(){
Calendar date = Calendar.getInstance();
String year = String.valueOf(date.get(Calendar.YEAR));
return year;
}
}
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;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月13日 上午9:29:58
* @explain 类说明
*/
public enum ResultEnum implements BaseErrorInfoInterface {
// 数据操作错误定义
SUCCESS("200", "success"), BODY_NOT_MATCH("400", "请求的数据格式不符!"), SIGNATURE_NOT_MATCH("401", "请求的数字签名不匹配!"),
NOT_FOUND("404", "未找到该资源!"), INTERNAL_SERVER_ERROR("500", "服务器内部错误!"), SERVER_BUSY("503", "服务器正忙,请稍后再试!"),
FILE_UPLOAD_ERROR("600", "文件上传有误"), FILE_UPLOAD_NULL_ERROR("601", "上传的文件不能为空"),
TOKEN_EXPIRED_ERROR("602", "登录信息已过期,请重新登录"), TOKEN_INVALID_ERROR("603", "无效的登录信息"),
VERIFY_CODE_ERROR("604", "验证码错误,请重新输入"), TOKEN_REDIS_ERROR("605", "登录失效"),
AUTH_ACCOUNT_ERROR("606", "当前账号未授权,请先授权"), TOEKN_REPEAT_ERROR("607", "该账号已在其他设备登录,请重新登录"),
TOKEN_NOT_VALID_ERROR("608", "access_token已失效或access_token不是最新的"),
SCHEDULE_SYS_ERROR("703", "系统定时任务执行错误"),
FORM_REPEAT_ERROR("704", "操作次数频繁,请稍后重试"), DATA_VERSION_ERROR("705", "数据写入版本不一致,请稍后重试。"),
REQUEST_PARAM_ILLEGAL_ERROR("706", "请求参数非法"),
DATA_INSERT_ERROR("707", "数据插入失败"),
SCORE_RELEASE_ERROR("708", "积分发放失败,请重试或联系管理员!"),
ENTRY_INTO_FORCE_TIME_SET_ERROR("709", "生效时间不能小于当前时间!"),
INFO_NO_EXISTENCE_OR_STATUS_ERROR("710", "信息不存在或状态有误!"),
// 业务操作错误定义
CUSTOM_ERROR("-1", "自定义业务错误消息"),
FEIGN_ORDER_SERVLET_ERROR("4001", "访问订单服务失败"), FEIGN_USER_SERVLET_ERROR("4002", "访问用户服务失败"),
FEIGN_PAY_SERVLET_ERROR("4003", "访问消耗服务失败"),
DISABLE_ACCOUNT_TOKEN_ERROR("4004", "账号信息变更,登录失效"),
FEIGN_OPERATION_SERVLET_ERROR("4005", "访问行业服务失败"),
ADMIN_ROLE_REPEAT_ERROR("4006", "操作失败,超级管理员和运营管理员有且只有一个"),
FEIGN_FLYER_SERVLET_ERROR("4007", "访问飞手服务失败"),
FEIGN_REPOORDER_SERVLET_ERROR("4008", "访问订单服务失败"),
FEIGN_REPOPAY_SERVLET_ERROR("4009", "访问云仓消耗服务失败"),
FEIGN_REPOUSER_SERVLET_ERROR("4010", "访问云仓用户服务失败"),
FEIGN_WARE_SERVLET_ERROR("4010", "访问云仓商品服务失败"),
FEIGN_DEVICE_SERVLET_ERROR("4011", "访问云仓设备服务失败"),
CENTER_USER_SERVLET_ERROR("4012", "访问用户中心服务失败"), GATEWAY_HYSRIX_ERROR("4013", "服务器貌似在开小差~"),
FEIGN_FLYER_PAY_SERVLET_ERROR("4014", "访问飞手消耗服务失败"),
MALL_USER_SERVLET_ERROR("4015", "访问机城用户服务失败"),
PRIMARY_KEY_DEFECT("5001", "主键ID缺失"),
WALLET_NOT_FIND_ERROR("5002", "钱包账户不存在"),
PARAM_DEFECT("5004", "参数缺失"),
LOGIN_ACCOUNT_NOT_EXIT_ERROR("5005", "账号不存在"),
LOGIN_PASSWORD_ERROR("5006", "密码错误"),
LOGIN_ACCOUNT_STATUS_ERROR("5008", "外部访问"),
OPERATE_USER_ORDERCOUNT_ERROR("5007", "当前账号有存在相关订单未关闭"),
WALLET_CASH_NOT_ENOUGH_ERROR("5009", "现金余额不足"),
AMT_PAID_VERITY_ERROR("5010", "变更额度不在有效范围"),
CREDIT_NOT_ENOUGH_ERROR("5011", "信用余额不足,当前信用余额:"),
CREDIT_METHOD_ERROR("5012", "变更类型有误"),
CREDIT_OWED_BEGGER_ERROR("5013", "归还额度不可超过剩余欠款,当前剩余欠款:"),
CASH_ADD_OWED_ERROR("5014", "该账号仍有剩余欠款,请先将全部欠款归还后,再进行充值。"),
WALLET_CREDIT_NOT_ENOUGH_ERROR("5015", "信用余额不足"),
ORDER_PAY_FORMAT_ERROR("5016", "现金和信用金额不能同时为空"),
WALLET_CASH_FREEZE_NOT_ENOUGH_ERROR("5017", "现金的冻结余额不足"),
WALLET_CREDIT_FREEZE_NOT_ENOUGH_ERROR("5018", "信用的冻结余额不足"),
ORDER_CASH_FREEZE_NOT_FIND_ERROR("5019", "现金的冻结余额不存在"),
ORDER_CREDIT_FREEZE_NOT_FIND_ERROR("5019", "信用的冻结余额不存在"),
WALLET_BANLANCE_NOT_ENOUGH_ERROR("5020", "现金和信用的余额不足"),
WALLET_FREEZE_NOT_ENOUGH_ERROR("5020", "现金和信用的冻结余额不足"),
CREDIT_REPEAT_NULL_ERROR("5021", "欠款归还不能为空"),
CREDIT_CHANGE_NULL_ERROR("5021", "信用余额变更不能为空"),
ORDER_TOTAL_COST_ERROR("5022", "结算金额不能大于预支付的金额"),
ORDER_PAY_NOT_ENOUGH_ERROR("5023", "总余额不足,订单无法结算"),
NOT_MENU_POWER_ERROR("5024", "当前账号无平台使用权限"),
OPENID_NOT_FIND_ERROR("5025", "OPENID未注册,请登录授权后调用"),
PASSWORD_INCONSISTENT("5026", "新密码与确认密码不一致,请确认一致"),
WX_ACCESS_TOKEN_ERROR("5027", "获取微信AccessToken失败"),
WX_NOT_REL_ERROR("5028", "获取微信公众号用户信息失败"),
WX_NOT_SEND_MSG_PARAM_ERROR("5029", "userId和openId至少一个不为空"),
APPLET_QR_CODE_CREATE_ERROR("5030", "生成小程序码错误:"),
APPLET_USER_ACCESS_TOKE_ERROR("5031", "获取accessToken签名校验失败"),
REBATE_AMT_NOT_MIN_ERROR("5032", "金额不足300元无法提现,300元为最低门槛"),
REBATE_AMT_NOT_ENOUGH_ERROR("5033", "申请失败,超过可提现的金额"),
BANK_INFO_NOT_SAVE_ERROR("5034", "请先完善收款账号,才可以申请提现"),
REBATE_APPLY_STATUS_ERROR("5035", "提现状态有误"),
REBATE_INFO_NOT_FIND_ERROR("5036", "提现申请单信息不存在"),
REBATE_FAIL_EXIT_ERROR("5037", "你的收款账号信息有误,请修改信息后重新申请提现。"),
REBATE_AMT_FORMAT_ERROR("5038", "提现金额必须大于0元"),
REBATE_REPEAT_CHECK_ERROR("5039", "提现申请单已被审批,切勿重复审批。"),
CHOOSE_FLYER_NUM_ERROR("5040", "请至少选中一个飞手。"),
CHOOSE_FLYER_MORE_NUM_ERROR("5041", "暂只支持一个订单只能指派一个飞手。"),
ORDER_NO_EXIT_ERROR("5042", "订单信息不存在。"),
ORDER_STATUS_ERROR("5043", "订单状态流程有误。"),
INTERFACE_NOT_INVAILD("5044", "接口已废弃或不存在"),
PAPER_CODE_NOT_INVAILD("5045", "接口已废弃或不存在"),
PHONE_INVAILD_ERROR("5046", "无效的手机号"),
TIME_CODE_INVAILD_ERROR("5047", "无效的时间编码"),
REPEACT_COMMIT_ERROR("5048", "已提交,切勿重复提交"),
IMPORT_EXCEL_ERROR("5049", "excel导入失败"),
REQ_SMS_CODE_ERROR("5050", "注册码格式有误"),
SKU_NOT_PRICE_ERROR("5051", "当前SKU未配置价格"),
SKU_NOT_ENOUGH_ERROR("5052", "套餐(sku)数量不足"),
LEASE_DATE_MATH_ERROR("5053", "租期开始日不能大于结束日"),
ADD_LEASE_ADDR_ERROR("5054", "请选择收货方式"),
SHOP_NEED_PHONE_ERROR("5055", "门店自取需要您的联系电话,请填写联系电话"),
ORDER_POWER_ERROR("5056", "订单不存在或你无权操作该订单"),
ORDER_AUTH_ERROR("5057", "请完成认证再下单"),
EXPRESS_RETURN_ERROR("5058", "请完善物流单号和物流公司"),
SHOP_RETURN_ERROR("5059", "请选择门店"),
ORDER_REFUND_EXIT_ERROR("5060", "该订单已提交过退款申请,请勿重复申请。"),
ORDER_EXPRESS_ERROR("5061", "获取订单物流信息有误。"),
ORDER_PAY_JOB_ERROR("5062", "执行定时任务有误"),
NO_AUTH_ORDER_ERROR("5063", "请完成企业认证或实名认证后再进行下单"),
WARE_NOT_ENOUGH_ERROR("5064", "商品数量不足"),
EX_INFO_ERROR("5065", "物流信息不完善"),
NOT_REAL_AUTH_ERROR("5066", "请完成实名认证后再进行操作"),
REBATE_NOT_ENOUGH_ERROR("5067", "提现申请金额需在10至8000元范围之内"),
MORE_THAN_LIMIT_ERROR("5067", "提现申请金额需在0.1至98000元范围之内"),
FLYER_ENT_MORE_THAN_LIMIT_ERROR("50670", "飞手机构用户银行卡单笔最低10元,最高100,000元"),
FLYER_MORE_THAN_LIMIT_ERROR("50671", "飞手个人用户银行卡单笔最低10元,最高5,000元"),
MORE_THAN_LIMIT_TODAY_ERROR("50672", "单个账户每月提现额度为100,000元"),
SYSTEM_AMT_NOT_ENOUGH_ERROR("5068", "系统处理中,请稍后再试。"),
FEIGN_XZH_SERVLET_ERROR("5069", "访问线上支付接口服务失败"),
XZH_SERVLET_ERROR("5070", "调用线上支付失败:"),
XZH_FAIL_ERROR("5071", "支付服务失败:"),
REFUSE_COUNT_ERROR("5072", "今日拒绝的次数已达上限,暂不可参与抢单"),
APPLY_ORDER_COUNT_ERROR("5073", "请勿重复接单"),
ORDER_ARRIVE_ERROR("5074", "抢单失败,订单已被指派"),
REST_APPLY_ORDER_ERROR("5075", "请先开启接单状态后再进行抢单"),
EVALUATED_ERROR("5076", "您已经评价过啦!"),
BACKET_TYPE_ERROR("5077", "红包类型有误"),
BACKET_NOT_ENOUGH_ERROR("5078", "红包已被抢光"),
USER_PHONE_AUTH_ERROR("5079", "请授权登录后领取"),
TOKEN_REQUIRED_ERROR("5080", "Please bring a token"),
UNIONID_NOT_ERROR("5081", "UnionId不能为空"),
OPENID_NOT_ERROR("5081", "云享飞openid、云飞手openid、云仓openid、无人机城openid至少要有一个"),
NO_EVALUATED_ERROR("5090", "暂无评价信息!"),
DAY_NUM_ERROR("5091", "天数有误"),
TASK_TYPE_ERROR("5092", "您的账号类型为个人飞手,只能抢任务人数1人的订单。"),
TASK_FLYER_COUNT_LESS_ERROR("5093", "机构认证的飞手多于任务需要的飞手才可以抢单。"),
FLYER_REBATE_ERROR("5094", "提现失败,请稍后重试"),
OPERATION_SYS_ERROR("5095", "操作失败,请稍后重试"),
WAG_CHECK_STATUS_ERROR("5096", "操作失败,未通过或待确认状态才能进行重新编辑"),
EXPORT_NO_DATA_ERROR("5097", "查询到当前符合条件的数据为0条"),
WAG_ZERO_ERROR("5098", "工资抵扣后当月工资不能少于0元"),
WAG_REPEAT_DATE_ERROR("5099", "操作失败,工资日期重复:"),
BUY_NUM_ERROR("5100", "购买数量必须大于0"),
SHOP_CAR_ERROR("5101", "购物车信息不存在"),
GOODS_VERSION_ERROR("5102", "操作失败,当前商品已经发生信息变更,请刷新后重试"),
WAG_DETAIL_COUNT_ERROR("5103", "账单天数必须大于0"),
WAG_TERM_PARAM_ERROR("5104", "飞手工资、结算基数、操作三个选项必须填一个"),
IMPORT_PARAM_ERROR("5105", "导入的数据行不能为空或者格式错误"),
SHOP_GOODS_NOT_ERROR("5106", "当前商品已下架或已删除"),
ALL_PAY_ERROR("5107", "当前订单为分期付款,请先上传尾款凭证"),
FLYER_EVLT_PARAM_ERROR("5108", "飞手评分参数有误,请检查"),
FLYER_REPEAT_BIND_ERROR("5108", "飞手已被绑定过,请勿重复绑定"),
FLYER_NUM_BIND_ERROR("5108", "飞手数量有误,本任务需要的飞手人数为:"),
FLYER_ORDER_TYPE_ERROR("5110", "飞手类型有误,该订单只允许个人飞手接单"),
FLYER_ENT_ORDER_TYPE_ERROR("5111", "飞手类型有误,该订单只允许飞手机构接单"),
PHONE_NUM_EXIT_ERROR("5112", "手机号已存在"),
FLYER_UN_BIND_ERROR("5113", "飞手已被解绑,请勿重复解绑"),
REPEAT_NOTIFICATION("5114", "您已对此订单进行过催付款操作"),
FLYER_WORK_ERROR("5115", "指派飞手失败,飞手休息中:"),
DISABLE_APPLY_ORDER_ERROR("5116", "当前时间此订单不可抢"),
COMPANY_EXIT_ERROR("5117", "单位名称已存在"),
COMPANY_NOT_BIND_ERROR("5118", "未绑定单位,请先绑定单位"),
COMPANY_REMOVE_ERROR("5119", "删除失败,请先移除该单位的账号信息"),
COMPANY_REMOVE_CHILD_ERROR("5120", "删除失败,请先移除该单位的子级单位"),
EXIST_THE_SAME_GOODS_ERROR("5121", "购物车已存在您选择的商品"),
// clientOAuth
OAUTH_CLIENT_NOT_FOUND("6404", "client_id不存在或已注销"),
OAUTH_SECRET_ERROR("6405", "client_secret有误"),
OAUTH_AUTHORIZE_ERROR("6406", "当前账号未获得任何授权,请确认"),
OAUTH_API_AUTH_ERROR("6407", "当前资源未被授权"),
OAUTH_CREATE_TOKEN_ERROR("6408", "系统内部错误,获取accessToken失败,"),
PWD_CREATE_ERROR("6001", "创建密码失败"),
PWD_CONPARED_ERROR("6002", "密码错误"), PWD_ALERT_ERROR("6003", "密码不一致"),
PWD_REQUEST_AUTH_ERROR("6003", "密码请求验证"),
APPLET_PORT_TYPE_ERROR("7001", "小程序端口类型错误"),
APPLET_GET_OPENID_ERROR("7002", "获取小程序openid失败"),
UPDATE_USER_ACCOUNT_REPEAT("7003", "修改后的账户名已存在"), ADD_USER_ACCOUNT_NAME_EXISTS("7004", "新增账户名已经存在"),
ACCOUNT_NOT_FIND_ERROR("8000", "账号信息不存在"),
REPEAT_SOFT_DELETE("8001", "账号已删除"),
ADMIN_ROLE_DELETE_ERROR("8002", "此账号为管理员账号,禁止删除"),
ROLE_ADMIN_DELETE_ERROR("8003", "此角色为管理员角色,禁止删除"),
ROLE_NAME_REPEAT_ERROR("8004", "角色名已存在"),
ROLE_AVL_USER_DELETE_ERROR("8005", "此角色尚有可用账号,请将所有账号移除后在进行操作"),
ROLE_AVL_USER_STATUS_ERROR("8006", "此角色尚有可用账号,请将所有账号禁用后在进行操作"),
ROLE_SYSTEM_DELETE_ERROR("8007", "此角色为系统角色,禁止删除"),
ADMIN_ROLE_POWER_ERROR("8008", "禁止修改管理类角色权限"), SYSTEM_ROLE_POWER_ERROR("8009", "禁止修改系统类角色权限"),
ROLE_SELF_POWER_ERROR("8010", "禁止修改与当前登录账号角色相同的角色权限"),
ADMIN_ACCOUNT_DISABLE_ERROR("8011", "此账号为管理员账号,禁用失败"),
OPERATE_USER_DEL_ERROR("8012", "该账号仍有进行中的订单需要负责,请先移交订单后再删除。"),
OPERATE_USER_DISABLED_ERROR("8013", "该账号仍有进行中的订单需要负责,请先移交订单后再禁用。"),
DELETE_USER_UNFILLED_ORDER_EXIST("9001", "平台中有此账号相关的订单,不可删除此账号"),
STOP_UNFILLED_ORDER_EXIST("9002", "平台中有此账号相关的订单正在进行中,不可停用此账号"),
ACCOUNT_ALREADY_DELETED("10001", "此账号已经被删除"),
ACCOUNT_ALREADY_STOP("10002", "此账号已经被停用,不能登录此小程序,详情请联系管理员"),
INDUSTRY_NAME_CREATE_ERROR("20001", "行业名称请勿重复,请重新输入"),
INSPECTION_NAME_CREATE_ERROR("20002", "服务名称请勿重复,请重新输入"),
INSPECTION_REPEAT("20003", "绑定服务重复"),
INDUSTRY_REPEAT("20004", "绑定行业重复"),
INSERT_INDUSTRY_SUCCESS("20005", "新增行业成功"),
UPDATE_INDUSTRY_SUCCESS("20006", "修改行业成功"),
DELETE_INDUSTRY_SUCCESS("20007", "删除行业成功"),
INSERT_INSPECTION_SUCCESS("20008", "新增服务成功"),
UPDATE_INSPECTION_SUCCESS("20009", "修改服务成功"),
DELETE_INSPECTION_SUCCESS("20010", "删除服务成功"),
SORT_PARAMETER_ERROR("28199", "排序参数错误"),
OPRATING_FREQUENCY_TOO_HIGH("28449", "更新频率过快,请重试"),
INSERT_INDUSTRY_INSPECTION_SUCCESS("20011", "添加对应服务成功"),
INSERT_INSPECTION_INDUSTRY_SUCCESS("20012", "添加对应行业成功"),
DELETE_INDUSTRY_INSPECTION_SUCCESS("20013", "删除对应服务成功"),
DELETE_INSPECTION_INDUSTRY_SUCCESS("20014", "删除对应行业成功"),
INSERT_INDUSTRY_SHELF_SUCCESS("20015", "行业上架成功"),
DELETE_INDUSTRY_SHELF_SUCCESS("20016", "行业下架成功"),
INSERT_INSPECTION_SHELF_SUCCESS("20017", "服务上架成功"),
DELETE_INSPECTION_SHELF_SUCCESS("20018", "服务下架成功"),
DELETE_INSPECTION_ERROR("20022", "该服务仍有未完成的订单,不可删除"),
INSPECTION_NOT_EXIST("20023", "很抱歉,目前该服务已下架"),
FAKE_NUM_CREATE_ERROR("20024", "输入的数据有误,请重新输入!"),
WORK_TYPE_NAME_ERROR("20026", "服务作业类型重复,请重新输入"),
EXIST_BINDING_INSPECTION_ERROR("20027", "此作业类型被服务绑定,删除失败!"),
UPLOAD_IMG_ERROR("20019", "请选择jpg,png,jpeg格式的图片"),
UPLOAD_VIDEO_ERROR("20020", "请选择MP4,avi,mov,mkv格式的视频"),
UPLOAD_DOC_ERROR("20021", "请选择doc,ppt,pdf,xls格式的文件"),
UPLOAD_IMG_LESS_3M_ERROR("20022", "请上传小于3M的图片"),
INSERT_ORDER_SUCCESS("21000", "新增订单成功"),
UPDATE_ORDER_SUCCESS("21001", "修改订单成功"),
ORDER_TRANS_SUCCESS("21002", "订单移交成功"),
ORDER_EVALUATE_SUCCESS("21003", "订单评价完成"),
ORDER_BEFORE_PAY_ERROR("21004", "订单预支付失败"),
ORDER_CLOSE_PAY_ERROR("21005", "订单结算支付失败"),
INSERT_ORDER_DETAIL_SUCCESS("21006", "新增订单动态成功"),
CHECK_USER_ERROR("22001", "用户未通过验证"),
GET_ORDER_LIST_ERROR("22002", "获取订单列表失败"),
COMMANT_CAR_NAME_EXIST("22003", "指挥车名字已存在,请重新输入"),
//认证提示
APP_CODE_ERROR("30301", "appcode 错误"),
REQUE_ENVIROMENT_ERROR("30302", "请求的 Method、Path 或者环境错误"),
REQUEST_PARAMETER_ERROR("30303", "请求参数错误"),
SERVICE_NOT_AUTHORIZED("30304", "服务未被授权(或URL和Path不正确)"),
TIMES_USED_UP("30305", "很抱歉,目前我们的实名认证次数已达上限,正在处理中,请稍后再进行认证。"),
OTHER_ERROR("30306", "其他错误/服务次数用完"),
LIVE_AUTHENTICATION_FAILED("3824", "活体认证失败"),
ID_INFO_AND_ID_card_MISMATCH("3904", "身份信息与身份证不匹配"),
LIVE_AUTHENTICATION_SUCESS("3999", "活体验证成功"),
NO_REAL_NAME("3854", "用户未实名认证"),
URL_FORMAT_ERROR("37462", "URL格式错误"),
URL_ADDRESS_ERROR("36752", "URL地址错误"),
INTERFACE_ACCESS_EXCEPTION("36894", "接口访问异常/次数用尽"),
FRONT_BACK_VAGUE("35556", "身份证正反面不明确"),
ID_CARD_THOTO_MESSAGE_ERROR("36651", "身份照信息错误"),
EXPTION_ID_CARD_THOTO_MESSAGE_ERROR("36651", "信息异常"),
PHOTO_FORMAT_ERROR("12138", "身份证图片格式错误"),
VALIDATION_INFO_EXPIRED("32815", "认证时间过长信息过期或认证信息不完整,请重新开始认证"),
REAL_IMAGE_AUTHENTICATION_SUCESS("38844", "验证成功"),
REAL_IMAGE_AUTHENTICATION_FAILED("38855", "验证失败,请再次进行人脸识别"),
IDENTITY_HAS_BEEN_AUTHENTICATED("34444", "此身份证信息已经被认证,请重试"),
REAL_NAME_ACCOUNT_ID_ERROR("36771", "账户id错误"),
REAL_NAME_FUSING_ERROR("36772", "认证失败,请重新认证"),
//企业认证
BUSINESS_LICENSE_CHECK_ANALYSIS_ERROR("30400", "营业执照解析失败,请上传有效清晰的执照"),
BUSINESS_LICENSE_CHECK_PARAMETER_ERROR("30401", "企业信息与营业执照信息不一致,请重新上传"),
BANK_ACCOUNT_CHECK1_ERROR("30402", "账号与开户名不符"),
BANK_ACCOUNT_CHECK2_ERROR("30403", "开户行名称错误"),
BANK_ACCOUNT_CHECK3_ERROR("30404", "仅支持对公账户验证,不支持个人卡"),
BANK_ACCOUNT_CHECK4_ERROR("30405", "企业账号信息有误,请重新输入"),
BANK_ACCOUNT_CHECK5_ERROR("30406", "24小时之内不能重复申请"),
BANK_ACCOUNT_CHECK6_ERROR("30407", "很抱歉,目前我们的企业认证次数已达上限,如需继续认证请及时联系相关负责人进行处理,联系方式:科比特管理人员,18938853647。"),
BANK_ACCOUNT_CHECK7_ERROR("30408", "企业名称与开户名称不一致,请确认一致后再提交认证"),
ENTERPRISE_HAVE_VERIFIED("30409", "您输入的企业信息已被其他用户认证,请重新输入"),
ID_NUMBER_PARA_ERROR("30410", "身份证号码有错,请重新输入"),
DEAL_ERROR("30411", "有报错,请联系平台客服。"),
NOT_DATA_ERROR("30412", "查无数据"),
API_STOP_USE_ERROR("30413", "接口停用"),
OFFICE_DATA_SUSTAIN_ERROR("30414", "官方数据源维护,请稍候再试"),
SERVER_SUSTAIN_ERROR("30415", "服务商维护,请稍候再试"),
PARA_ERROR("30416", "参数错误,请重新输入"),
VERIFY_COUNT_ERROR("30416", "认证次数上限,请联系管理员"),
NOT_ENT_VERIFY_ERROR("30417", "机构未认证或认证未通过,请先进行机构认证"),
NOT__VERIFY_ERROR("30418", "机构未认证或飞手认证未通过,请先进行认证"),
//渠道认证
NOT_ENT_USER("30501", "感谢您有意向成为我们的渠道商,请先完成企业认证。"),
NEW_NOT_ENT_USER("30502", "此用户未进行企业认证,渠道变更失败!"),
BEFORE_NOT_CHANNEL_USER("30503", "此用户还不是渠道"),
//飞手端认证
NOT_AUTH_FLYER_ERROR("30600", "飞手未认证,请先完成飞手认证"),
NOT_HAVE_AUTH_FLYER_ERROR("30601", "没有认证的飞手,暂不可接单"),
//设备型号提醒
DEVICE_MODEL_REPEAT_ERROR("30700", "产品名称不可重复,请重新输入"),
DEVICE_MODEL_FAILURE_ERROR("30701", "设备添加失败"),
DEVICE_MODEL_REMOVE_ERROR("30702", "设备未在仓库,删除失败"),
DEVICE_MODEL_UPDATE_ERROR("30703", "设备修改失败"),
DEVICE_HAS_BEEN_RENT_ERROR("30704", "该设备不在仓库,不能出库"),
//仓库提醒
REPO_INFO_NAME("30800", "仓库名称不可重复,请重新输入"),
REPO_INFO_FAILURE("30801", "仓库添加失败"),
REPO_INFO_REMOVE("30702", "仓库删除失败"),
//商品
WARE_NAME_HAS_BEEN_EXIST("30900", "商品名称已存在"),
WARE_TYPE_NAME_HAS_BEEN_EXIST("30901", "分类名称已存在"),
WARE_TYPE_ICON_NOT_NULL("30902", "一级分类图标不能为空"),
GROUP_DONT_DELETE("30903", "该分类下尚有商品存在"),
GOODS_STATUS_ERROR("30904", "状态有误"),
GOODS_ON_SHELF_SUCCESS("30905", "商品上架成功"),
GOODS_DOWN_SHELF_SUCCESS("30906", "商品下架成功"),
GOODS_SKU_IS_NOT_NULL("30907", "商品规格不能为空"),
GOODS_PIC_IS_NOT_NULL("30908", "主图不能为空"),
GOODS_DESC_IS_NOT_NULL("30910", "商品描述不能为空"),
GOODS_GROUP_IS_NOT_NULL("30911", "商品类型不能为空"),
GROUP_DONT_DELETE_BY_CHILD("30912", "该分类下尚有子分类存在"),
GOODS_NOT_EXIST_OR_ALREADY_DOWN_SHELF("30913", "商品不存在或已下架"),
GOODS_NAME_IS_NOT_NULL("30914", "商品名称不能为空或名字长度不能大于60"),
GOODS_DELETE_FAIL("30915", "批量删除商品失败,商品已被其他商品绑定"),
BRAND_DELETE_FAIL("30916", "删除失败,产品管理中有产品绑定该品牌名称"),
//返祖
RETURN_SHARE_ORDER_ERROR("40000", "设备返祖订单相关信息找不到,请重新输入订单号"),
RETURN_SHARE_ORDER_NOT_FINISH_ERROR("40001", "此设备的订单未完成,请添加其他设备"),
RETURN_SHARE_ORDER_HAS_BEEN_ADD_ERROR("40002", "此订单的设备已经被添加过,不能重复添加"),
//宣传中心
EXIST_SAME_NAME_OF_MODULE_ERROR("40500", "所属产品中不能有相同名字的模块"),
EXIST_SAME_NAME_OF_BANNER_ERROR("40501", "名称重复,请重新输入"),
EXIST_SAME_CODE_OF_MODULE_ERROR("40502", "moduleCode已重复,请输入其他moduleCode"),
HAS_BEEN_USE_ERROR("40503", "此标签有用户在使用,不能删除!"),
FILE_PARSE_ERROR("40600", "上传文件无数据或内容识别失败,请重新上传"),
HAS_BEEN_APPLY_ERROR("40601", "已提交申请!将有客服人员与你联系"),
PRICE_TO_HIGH_ERROR("40602", "标价确认在0-10000000万元内"),
EXIST_SAME_NAME_ERROR("40603", "快讯名称重复,请重新上传"),
TENDER_FORMAT_ERROR("40604", "招标序号或内容不能为空,请补全后上传"),
TENDER_CONTENT_TOO_LONG_ERROR("40605", "存在招标内容字符过长"),
GOODS_CATEGORY_NAME_EXIST_ERROR("40605", "名称重复,请重新输入!"),
CONTRACT_STATUS_MISTAKEN("40607", "当前合同状态不可进行编辑!"),
CONTRACT_STATUS_CANNOT_BE_DELETED("40607", "当前合同状态不可进行删除!"),
CONTRACT_NOT_EXIST("40608", "合同不存在或已删除!"),
CONTRACT_STATUS_DOES_NOT_ALLOW_FILE("40609", "该状态合同不允许归档!"),
SEAL_INFO_NOT_EXIST("40610", "请前往印章管理上传印章或设置默认印章!"),
AGENCY_NO_FLYER("40611", "机构下暂无飞手,快去招募吧~"),
NO_FLYER_WORK("40612", "现在没有飞手上班哦~"),
TEMPORARY_NOT_SUPPORT_TRANSFER_ORDER("40613", "个人订单暂不支持转单操作~"),
ELECTRONIC_SIGNATURE_NOT_REAL_NAME_AUTHENTICATION("40614", "请完成电子签约实名认证后再进行操作"),
DIRECTORY_DOES_NOT_EXIST("40615", "目录不存在或已删除"),
DEFAULT_DIRECTORY_CANNOT_BE_DEL("40616", "默认目录不可删除"),
THERE_ARE_CATEGORIES_IN_THE_DIRECTORY("40167", "该目录下有分类存在不可删除"),
DIRECTORY_NAME_HAS_BEEN_EXIST("40168", "目录名称已存在"),
FAILED_TO_ADD_DATA("40169", "数据新增失败,请稍后重试"),
FAILED_TO_EDIT_DATA("40170", "数据修改失败,请稍后重试"),
SKU_DOES_NOT_EXIST_OR_HAS_BEEN_DELETED("40171", "sku不存在或已删除,请刷新后重试!"),
SPEC_DOES_NOT_EXIST_OR_HAS_BEEN_DELETED("40172", "规格不存在或已删除,请刷新后重试!"),
SKU_ALREADY_EXIST_IN_THIS_INDUSTRY("40173", "该所属行业下已经存在sku,请检查后重试!"),
SPEC_EXIST_UNDER_THE_SKU("40174", "该sku下有规格存在,无法删除!"),
SPEC_NOT_CONFIG_PRICE("40175", "存在规格没有配置价格,请联系客服获取报价!"),
SHOP_CAR_SIZE_MORE_2("40176", "行业购物车下单数量仅限一个"),
CONTRACT_TEMPLATE_NOT_EXIST_OR_DELETED("40177", "合同模板不存在或已删除!"),
SCORE_ERROR("40177", "您输入的积分数量有误,请重新输入!"),
PLEASE_FILL_IN_THE_CONTRACT_TEMPLATE_FIRST("40178", "请先填充合同模板!"),
SCORE_NOT_GIVE_MYSELF("40179","积分不能转赠给本人,请重新操作"),
ALREADY_FINISH_ENT_AUTH_ERROR("2000", "助力已完成!"),
SYSTEM_ERROR ("2001","系统错误,请稍后重试") ,
RULE_ERROR ("2002","当前兑换比例已失效,请刷新后重试"),
COUNT_LIMIT_ERROR("2003", "参与次数已达上线"),
ALREADY_ENT_AUTH_ERROR("2004","助力失败,您已完成企业认证!"),
ALREADY_REAL_NAME_AUTH_ERROR("2005","助力失败,您已完成实名认证!"),
PARTICIPATE_BUT_NOT_AUTH_ERROR("2006", "待完成授权或认证"),
ALREADY_HELP_ERROR("2007", "已助力"),
ALREADY_STOP_ERROR("2008", "活动已下线"),
HELP_FAIL_ERROR("2009", "不能给自己助力哦!"),
ALREADY_BINDING_ERROR("2010", "优惠券已被绑定"),
ALREADY_DIVIDE_ERROR("2011", "订单已分成"),
DIVIDE_OBJ_NOT_EXIST("2012", "先点击确认添加分成对象");
/**
* 错误码
*
* @return
*/
String resultCode;
/**
* 错误描述
*
* @return
*/
String resultMsg;
ResultEnum(String resultCode, String resultMsg) {
this.resultCode = resultCode;
this.resultMsg = resultMsg;
}
@Override
public String getResultCode() {
return resultCode;
}
@Override
public String getResultMsg() {
return resultMsg;
}
}
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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论