7 changed files with 669 additions and 2 deletions
@ -0,0 +1,26 @@ |
|||
package com.galaxis.rcs.common.entity; |
|||
|
|||
import lombok.Data; |
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* 接口任务(api_task) |
|||
*/ |
|||
@Data |
|||
public class ApiTask implements Serializable { |
|||
/** 任务id */ |
|||
private Long taskId; |
|||
/** 环境id */ |
|||
private Long envId; |
|||
/** 任务类型 0 入库 1 出库 2礼品出库 3礼品回库 */ |
|||
private Integer taskType; |
|||
/** 任务状态 0创建 1执行中 2完成 3错误 4取消 */ |
|||
private Integer taskStatus; |
|||
/** 托盘号 */ |
|||
private String lpn; |
|||
/** 创建时间 */ |
|||
private Date createAt; |
|||
/** */ |
|||
private Date updateAt; |
|||
} |
|||
@ -0,0 +1,68 @@ |
|||
package com.galaxis.rcs.common.query; |
|||
|
|||
import static com.querydsl.core.types.PathMetadataFactory.*; |
|||
import com.querydsl.core.types.dsl.*; |
|||
import com.querydsl.core.types.*; |
|||
import com.querydsl.sql.*; |
|||
import java.sql.Types; |
|||
import com.galaxis.rcs.common.entity.ApiTask; |
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* 接口任务(api_task) |
|||
*/ |
|||
@SuppressWarnings("ALL") |
|||
public class QApiTask extends RelationalPathBase<ApiTask> { |
|||
/** api_task表 */ |
|||
public static final QApiTask apiTask = new QApiTask("api_task"); |
|||
|
|||
/** 任务id */ |
|||
public final NumberPath<Long> taskId = createNumber("taskId", Long.class); |
|||
/** 环境id */ |
|||
public final NumberPath<Long> envId = createNumber("envId", Long.class); |
|||
/** 任务类型 0 入库 1 出库 2礼品出库 3礼品回库 */ |
|||
public final NumberPath<Integer> taskType = createNumber("taskType", Integer.class); |
|||
/** 任务状态 0创建 1执行中 2完成 3错误 4取消 */ |
|||
public final NumberPath<Integer> taskStatus = createNumber("taskStatus", Integer.class); |
|||
/** 托盘号 */ |
|||
public final StringPath lpn = createString("lpn"); |
|||
/** 创建时间 */ |
|||
public final DateTimePath<Date> createAt = createDateTime("createAt", Date.class); |
|||
/** */ |
|||
public final DateTimePath<Date> updateAt = createDateTime("updateAt", Date.class); |
|||
|
|||
public QApiTask(String variable) { |
|||
super(ApiTask.class, forVariable(variable), "rcs2_tw_zhanghui", "api_task"); |
|||
addMetadata(); |
|||
} |
|||
|
|||
public QApiTask(String variable, String schema, String table) { |
|||
super(ApiTask.class, forVariable(variable), schema, table); |
|||
addMetadata(); |
|||
} |
|||
|
|||
public QApiTask(String variable, String schema) { |
|||
super(ApiTask.class, forVariable(variable), schema, "api_task"); |
|||
addMetadata(); |
|||
} |
|||
|
|||
public QApiTask(Path<? extends ApiTask> path) { |
|||
super(path.getType(), path.getMetadata(), "rcs2_tw_zhanghui", "api_task"); |
|||
addMetadata(); |
|||
} |
|||
|
|||
public QApiTask(PathMetadata metadata) { |
|||
super(ApiTask.class, metadata, "rcs2_tw_zhanghui", "api_task"); |
|||
addMetadata(); |
|||
} |
|||
|
|||
private void addMetadata() { |
|||
addMetadata(taskId, ColumnMetadata.named("task_id").withIndex(1).ofType(Types.BIGINT).withSize(19)); |
|||
addMetadata(envId, ColumnMetadata.named("env_id").withIndex(2).ofType(Types.BIGINT).withSize(19)); |
|||
addMetadata(taskType, ColumnMetadata.named("task_type").withIndex(3).ofType(Types.INTEGER).withSize(10)); |
|||
addMetadata(taskStatus, ColumnMetadata.named("task_status").withIndex(4).ofType(Types.INTEGER).withSize(10)); |
|||
addMetadata(lpn, ColumnMetadata.named("lpn").withIndex(5).ofType(Types.VARCHAR).withSize(64)); |
|||
addMetadata(createAt, ColumnMetadata.named("create_at").withIndex(6).ofType(Types.TIMESTAMP).withSize(3)); |
|||
addMetadata(updateAt, ColumnMetadata.named("update_at").withIndex(7).ofType(Types.TIMESTAMP).withSize(3)); |
|||
} |
|||
} |
|||
@ -0,0 +1,319 @@ |
|||
package com.yvan.workbench.controller; |
|||
|
|||
import com.galaxis.rcs.inv.InvManager; |
|||
import com.querydsl.core.util.StringUtils; |
|||
import org.clever.core.Conv; |
|||
|
|||
import org.clever.data.jdbc.DaoFactory; |
|||
import org.clever.data.jdbc.QueryDSL; |
|||
import org.clever.web.mvc.annotation.RequestBody; |
|||
|
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.concurrent.atomic.AtomicBoolean; |
|||
|
|||
import static com.galaxis.rcs.common.query.QLccBasContainer.lccBasContainer; |
|||
import static com.galaxis.rcs.common.query.QLccBasLocation.lccBasLocation; |
|||
import static com.galaxis.rcs.common.query.QLccInvLpn.lccInvLpn; |
|||
import static com.galaxis.rcs.common.query.QApiTask.apiTask; |
|||
|
|||
/** |
|||
* 接口 |
|||
*/ |
|||
public class ApiController { |
|||
|
|||
private final static String catalogCode = "f1"; |
|||
|
|||
private final static String projectUUID = "tw_zh"; |
|||
|
|||
private final static long envId = 13; |
|||
private final static String inPos = "504_506"; |
|||
private final static String outPos = "504_503"; |
|||
|
|||
// 礼品托盘
|
|||
private final static String giftLpn = "GLPN"; |
|||
// 礼品托盘位
|
|||
private final static String gifPos = "500_500"; |
|||
|
|||
static final QueryDSL queryDSL = DaoFactory.getQueryDSL(); |
|||
|
|||
private static final AtomicBoolean cl2Running = new AtomicBoolean(false); |
|||
private static final AtomicBoolean clxRunning = new AtomicBoolean(false); |
|||
private final static Thread cl2DemoTask = new Thread(() -> { |
|||
|
|||
String gstore = "504_501"; |
|||
String agvId = "1"; |
|||
String[] demoLocList = {"rack1/0/1/0", "rack1/1/1/0", "rack1/2/1/0", "rack1/3/1/0"}; |
|||
|
|||
while (true) { |
|||
if (!cl2Running.get()) { |
|||
continue; |
|||
} |
|||
// 查询车上是否有托盘
|
|||
long aInvCount = queryDSL.select(lccInvLpn).from(lccInvLpn) |
|||
.where(lccInvLpn.locCode.eq(agvId) |
|||
.and(lccInvLpn.qty.gt(0)) |
|||
.and(lccInvLpn.envId.eq(envId))) |
|||
.fetchCount(); |
|||
// 查询地堆上是否有托盘
|
|||
long gInvCount = queryDSL.select(lccInvLpn).from(lccInvLpn) |
|||
.where(lccInvLpn.locCode.eq(gstore) |
|||
.and(lccInvLpn.qty.gt(0)) |
|||
.and(lccInvLpn.envId.eq(envId))) |
|||
.fetchCount(); |
|||
List<String> emptyLocList = queryDSL.select(lccBasLocation.locCode).from(lccBasLocation) |
|||
.where(lccBasLocation.locCode.in(demoLocList).and(lccBasLocation.envId.eq(envId))) |
|||
.where(lccBasLocation.locCode.notIn( |
|||
queryDSL.select(lccInvLpn.locCode).from(lccInvLpn) |
|||
.where(lccInvLpn.qty.gt(0).and(lccInvLpn.envId.eq(envId)) |
|||
))).fetch(); |
|||
|
|||
// if (gInvCount <= 0) {
|
|||
// emptyLocList.add(gstore);
|
|||
// }
|
|||
|
|||
Map<String, Object> params = new HashMap<>(); |
|||
params.put("projectUUID", "tw_zh"); |
|||
params.put("envId", envId); |
|||
params.put("agvId", agvId); |
|||
try { |
|||
if (aInvCount >= 1) { |
|||
|
|||
// 随机一个可用货位
|
|||
double a = Math.random() * emptyLocList.size(); |
|||
String locCode = emptyLocList.get(Conv.asInteger(a)); |
|||
params.put("targetStoreLoc", locCode); |
|||
RcsController.agvUnload(params); |
|||
RcsController.waitTaskFinish(params); |
|||
Thread.sleep(1000); |
|||
|
|||
} else { |
|||
// 如果入库口有托盘
|
|||
long gInboundInvCount = queryDSL.select(lccInvLpn).from(lccInvLpn) |
|||
.where(lccInvLpn.locCode.eq(inPos) |
|||
.and(lccInvLpn.qty.gt(0)) |
|||
.and(lccInvLpn.envId.eq(envId))) |
|||
.fetchCount(); |
|||
|
|||
if (gInboundInvCount >= 1) { |
|||
double a = Math.random() * emptyLocList.size(); |
|||
String locCode = emptyLocList.get(Conv.asInteger(a)); |
|||
params.put("fromStoreLoc", inPos); |
|||
params.put("targetStoreLoc", locCode); |
|||
|
|||
RcsController.agvCarry(params); |
|||
RcsController.waitTaskFinish(params); |
|||
Thread.sleep(1000); |
|||
|
|||
} else if (gInvCount >= 1){ |
|||
|
|||
double a = Math.random() * emptyLocList.size(); |
|||
String locCode = emptyLocList.get(Conv.asInteger(a)); |
|||
params.put("fromStoreLoc", gstore); |
|||
params.put("targetStoreLoc", locCode); |
|||
|
|||
RcsController.agvCarry(params); |
|||
RcsController.waitTaskFinish(params); |
|||
Thread.sleep(1000); |
|||
} else { |
|||
|
|||
} |
|||
|
|||
|
|||
} |
|||
} catch (InterruptedException e) { |
|||
throw new RuntimeException(e); |
|||
} |
|||
|
|||
|
|||
} |
|||
}); |
|||
private final static Thread clxDemoTask = new Thread(() -> { |
|||
|
|||
String gstore = "500_500"; |
|||
String agvId = "2"; |
|||
String[] demoLocList = {"rack1/0/2/0", "rack1/1/2/0", "rack1/2/2/0", "rack1/3/2/0"}; |
|||
|
|||
while (true) { |
|||
if (!clxRunning.get()) { |
|||
continue; |
|||
} |
|||
|
|||
} |
|||
}); |
|||
|
|||
public static RR<?> in_bound(@RequestBody Map<String, Object> params) { |
|||
//"pos": "1",
|
|||
//"lpn": "托盘号,可以为空",
|
|||
//"car_no": "cl2"
|
|||
String pos = Conv.asString(params.get("pos")); |
|||
String lpn = Conv.asString(params.get("lpn")); |
|||
String carNo = Conv.asString(params.get("car_no")); |
|||
|
|||
lpn = queryDSL.select(lccBasContainer.lpn).from(lccBasContainer) |
|||
.where(lccBasContainer.envId.eq(envId).and(lccBasContainer.containerType.eq("pallet"))) |
|||
.where(lccBasContainer.lpn.notIn( |
|||
queryDSL.select(lccInvLpn.lpn).from(lccInvLpn) |
|||
.where(lccInvLpn.envId.eq(envId).and(lccInvLpn.qty.gt(0))) |
|||
)).fetchFirst(); |
|||
|
|||
if (StringUtils.isNullOrEmpty(lpn)) { |
|||
return RR.fail("当前库存已满,无法入库"); |
|||
} |
|||
try { |
|||
InvManager.invSave(envId, 0L, lpn, inPos, 1); |
|||
} catch (Exception e) { |
|||
return RR.fail("当前入库位有货,无法入库"); |
|||
} |
|||
|
|||
queryDSL.insert(apiTask) |
|||
.set(apiTask.envId, envId) |
|||
.set(apiTask.taskType, 0) |
|||
.set(apiTask.taskStatus, 0) |
|||
.set(apiTask.lpn, lpn).execute(); |
|||
|
|||
|
|||
return RR.success(); |
|||
} |
|||
|
|||
// 出库
|
|||
public static RR<?> out_bound(@RequestBody Map<String, Object> params) { |
|||
//"pos": "1",
|
|||
//"lpn": "托盘号,可以为空",
|
|||
//"car_no": "cl2"
|
|||
String pos = Conv.asString(params.get("pos")); |
|||
String lpn = Conv.asString(params.get("lpn")); |
|||
String carNo = Conv.asString(params.get("car_no")); |
|||
|
|||
long count = queryDSL.select(lccInvLpn).from(lccInvLpn) |
|||
.innerJoin(lccBasContainer).on(lccInvLpn.lpn.eq(lccBasContainer.lpn)) |
|||
.where(lccInvLpn.envId.eq(envId).and(lccBasContainer.containerType.eq("pallet"))) |
|||
.fetchCount(); |
|||
|
|||
if (count < 2) { |
|||
return RR.fail("当前库存不足,无法出库"); |
|||
} |
|||
|
|||
count = queryDSL.select(lccInvLpn).from(lccInvLpn) |
|||
.where(lccInvLpn.locCode.eq(outPos).and(lccInvLpn.envId.eq(envId)).and(lccInvLpn.qty.gt(0))) |
|||
.fetchCount(); |
|||
|
|||
if (count >= 1) { |
|||
return RR.fail("当前出库位有货,无法出库"); |
|||
} |
|||
|
|||
queryDSL.insert(apiTask) |
|||
.set(apiTask.envId, envId) |
|||
.set(apiTask.taskType, 1) |
|||
.set(apiTask.taskStatus, 0) |
|||
.set(apiTask.lpn, lpn).execute(); |
|||
|
|||
return RR.success(); |
|||
} |
|||
|
|||
// 礼品位请求
|
|||
public static RR<?> gift_slot(@RequestBody Map<String, Object> params) { |
|||
String carNo = Conv.asString(params.get("car_no")); |
|||
// 查询礼品所在货位
|
|||
long count = queryDSL.select(lccInvLpn).from(lccInvLpn) |
|||
.where(lccInvLpn.envId.eq(envId).and(lccInvLpn.lpn.eq(giftLpn)).and(lccInvLpn.qty.gt(0)).and(lccInvLpn.locCode.eq(gifPos))) |
|||
.fetchCount(); |
|||
if (count >= 1) { |
|||
return RR.fail("当前礼品托盘在礼品位"); |
|||
} |
|||
// 取消礼品位请求的任务
|
|||
queryDSL.update(apiTask).set(apiTask.taskStatus, 4) |
|||
.where(apiTask.taskType.in(2, 3).and(apiTask.taskStatus.eq(0))) |
|||
.execute(); |
|||
count = queryDSL.select(apiTask).from(apiTask) |
|||
.where(apiTask.taskType.in(2, 3).and(apiTask.taskStatus.eq(1))) |
|||
.fetchCount(); |
|||
if (count >= 1) { |
|||
return RR.fail("当前礼品位有任务,请等待"); |
|||
} |
|||
queryDSL.insert(apiTask) |
|||
.set(apiTask.envId, envId) |
|||
.set(apiTask.taskType, 2) |
|||
.set(apiTask.taskStatus, 0) |
|||
.set(apiTask.lpn, giftLpn).execute(); |
|||
return RR.success(); |
|||
} |
|||
|
|||
// 礼品回库
|
|||
public static RR<?> gift_back(@RequestBody Map<String, Object> params) { |
|||
String carNo = Conv.asString(params.get("car_no")); |
|||
// 查询礼品所在货位
|
|||
long count = queryDSL.select(lccInvLpn).from(lccInvLpn) |
|||
.where(lccInvLpn.envId.eq(envId).and(lccInvLpn.lpn.eq(giftLpn)).and(lccInvLpn.qty.gt(0)).and(lccInvLpn.locCode.eq(gifPos))) |
|||
.fetchCount(); |
|||
if (count <= 0) { |
|||
return RR.fail("当前礼品托盘不在礼品位"); |
|||
} |
|||
// 取消礼品位请求的任务
|
|||
queryDSL.update(apiTask).set(apiTask.taskStatus, 4) |
|||
.where(apiTask.taskType.in(2, 3).and(apiTask.taskStatus.eq(0))) |
|||
.execute(); |
|||
count = queryDSL.select(apiTask).from(apiTask) |
|||
.where(apiTask.taskType.in(2, 3).and(apiTask.taskStatus.eq(1))) |
|||
.fetchCount(); |
|||
if (count >= 1) { |
|||
return RR.fail("当前礼品位有任务,请等待"); |
|||
} |
|||
queryDSL.insert(apiTask) |
|||
.set(apiTask.envId, envId) |
|||
.set(apiTask.taskType, 3) |
|||
.set(apiTask.taskStatus, 0) |
|||
.set(apiTask.lpn, giftLpn).execute(); |
|||
return RR.success(); |
|||
} |
|||
|
|||
// 启动演示
|
|||
public static RR<?> demo_start(@RequestBody Map<String, Object> params) { |
|||
String carNo = Conv.asString(params.get("car_no")); |
|||
if (StringUtils.isNullOrEmpty(carNo)) { |
|||
cl2Running.set(true); |
|||
clxRunning.set(true); |
|||
} else if (carNo.equals("cl2")) { |
|||
cl2Running.set(true); |
|||
} else if (carNo.equals("clx")) { |
|||
clxRunning.set(true); |
|||
} else { |
|||
return RR.fail("参数错误, car_no 必须为空字符串 或者 cl2 或者 clx"); |
|||
} |
|||
|
|||
if (!cl2DemoTask.isAlive()) { |
|||
cl2DemoTask.start(); |
|||
} |
|||
if (!clxDemoTask.isAlive()) { |
|||
clxDemoTask.start(); |
|||
} |
|||
|
|||
return RR.success(); |
|||
} |
|||
|
|||
// 停止演示
|
|||
public static RR<?> demo_stop(@RequestBody Map<String, Object> params) { |
|||
String carNo = Conv.asString(params.get("car_no")); |
|||
if (StringUtils.isNullOrEmpty(carNo)) { |
|||
cl2Running.set(false); |
|||
clxRunning.set(false); |
|||
} else if (carNo.equals("cl2")) { |
|||
cl2Running.set(false); |
|||
} else if (carNo.equals("clx")) { |
|||
clxRunning.set(false); |
|||
} else { |
|||
return RR.fail("参数错误, car_no 必须为空字符串 或者 cl2 或者 clx"); |
|||
} |
|||
|
|||
return RR.success(); |
|||
} |
|||
|
|||
// 充电
|
|||
public static RR<?> move_to_charger(@RequestBody Map<String, Object> params) { |
|||
|
|||
return RR.success(); |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,253 @@ |
|||
package com.yvan.workbench.controller; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonInclude; |
|||
import com.fasterxml.jackson.annotation.JsonInclude.Include; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
import lombok.experimental.Accessors; |
|||
import org.clever.core.model.response.BaseResponse; |
|||
import org.clever.core.validator.FieldError; |
|||
|
|||
import java.io.PrintWriter; |
|||
import java.io.Serial; |
|||
import java.io.StringWriter; |
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* ajax异步请求的响应消息<br/> |
|||
* <p/> |
|||
* 作者:LiZW <br/> |
|||
* 创建时间:2016-5-8 21:32 <br/> |
|||
*/ |
|||
@JsonInclude(Include.NON_NULL) |
|||
@EqualsAndHashCode(callSuper = true) |
|||
@Accessors(chain = true) |
|||
@Data |
|||
public class RR<T> extends BaseResponse { |
|||
@Serial |
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
public static <T> RR<T> success(T data, String msg) { |
|||
return new RR<>(data, msg); |
|||
} |
|||
|
|||
public static <T> RR<T> success(T data) { |
|||
return new RR<>(data, "操作成功"); |
|||
} |
|||
|
|||
public static RR<?> success() { |
|||
return new RR<>(true, "操作成功"); |
|||
} |
|||
|
|||
public static <T> RR<T> fail(String msg) { |
|||
return new RR<>(false, msg); |
|||
} |
|||
|
|||
public static <T> RR<T> fail(Throwable throwable, String exceptionMessage) { |
|||
return new RR<>(throwable, exceptionMessage); |
|||
} |
|||
|
|||
public static RR<?> fail() { |
|||
return new RR<>(false, "操作失败"); |
|||
} |
|||
|
|||
public static <T> RR<T> create(boolean success, String msg) { |
|||
return new RR<>(success, msg); |
|||
} |
|||
|
|||
/** |
|||
* 下次请求是否需要验证码 |
|||
*/ |
|||
private boolean isNeedValidateCode = false; |
|||
/** |
|||
* 操作是否成功 |
|||
*/ |
|||
private boolean success = false; |
|||
/** |
|||
* 请求响应返回的数据 |
|||
*/ |
|||
private T data; |
|||
/** |
|||
* 请求成功后跳转地址 |
|||
*/ |
|||
private String successUrl; |
|||
/** |
|||
* 请求失败后跳转地址 |
|||
*/ |
|||
private String failUrl; |
|||
/** |
|||
* 操作成功消息 |
|||
*/ |
|||
private String msg; |
|||
/** |
|||
* 服务器是否发生异常 |
|||
*/ |
|||
private boolean hasException = false; |
|||
/** |
|||
* 服务端异常消息 |
|||
*/ |
|||
private String exceptionMessage; |
|||
/** |
|||
* 服务端异常的堆栈信息 |
|||
*/ |
|||
private String exceptionStack; |
|||
/** |
|||
* 请求数据验证的错误消息 |
|||
*/ |
|||
private List<FieldError> fieldErrors; |
|||
|
|||
/** |
|||
* 默认构造,默认请求操作失败 success=false |
|||
*/ |
|||
public RR() { |
|||
} |
|||
|
|||
/** |
|||
* 请求服务端发生异常(hasException = true)时,使用的构造方法<br/> |
|||
* |
|||
* @param throwable 请求的异常对象 |
|||
* @param exceptionMessage 请求的异常时的消息 |
|||
*/ |
|||
public RR(Throwable throwable, String exceptionMessage) { |
|||
this(null, false, null, true, throwable, exceptionMessage); |
|||
} |
|||
|
|||
/** |
|||
* 服务端请求完成并且操作成功(success = true)<br/> |
|||
* |
|||
* @param data 请求响应数据 |
|||
* @param msg success=true时,请求成功时的消息 |
|||
*/ |
|||
public RR(T data, String msg) { |
|||
this(data, true, msg, false, null, null); |
|||
} |
|||
|
|||
/** |
|||
* 服务端请求没有发生异常时,使用的构造方法<br/> |
|||
* |
|||
* @param success 请求结果是否成功 |
|||
* @param msg success=true时,请求成功时的消息 |
|||
* @param msg success=false时,请求失败时的消息 |
|||
*/ |
|||
public RR(boolean success, String msg) { |
|||
this(null, success, msg, false, null, null); |
|||
} |
|||
|
|||
/** |
|||
* 服务端请求完成,没有发生异常时,使用的构造方法<br/> |
|||
* |
|||
* @param data 请求响应数据 |
|||
* @param success 请求结果是否成功 |
|||
* @param msg success=true时,请求成功时的消息 |
|||
* @param msg success=false时,请求失败时的消息 |
|||
*/ |
|||
public RR(T data, boolean success, String msg) { |
|||
this(data, success, msg, false, null, null); |
|||
} |
|||
|
|||
/** |
|||
* @param data 请求响应数据 |
|||
* @param success 请求结果是否成功 |
|||
* @param msg success=true时,请求成功时的消息 |
|||
* @param msg success=false时,请求失败时的消息 |
|||
* @param hasException 是否发生服务器异常 |
|||
* @param throwable 请求的异常对象 |
|||
* @param exceptionMessage 请求的异常时的消息 |
|||
*/ |
|||
public RR(T data, boolean success, String msg, boolean hasException, Throwable throwable, String exceptionMessage) { |
|||
this.data = data; |
|||
this.success = success; |
|||
this.msg = msg; |
|||
this.msg = msg; |
|||
this.hasException = hasException; |
|||
this.exceptionStack = getStackTraceAsString(throwable); |
|||
this.exceptionMessage = exceptionMessage; |
|||
} |
|||
|
|||
/** |
|||
* 增加验证错误消息<br/> |
|||
*/ |
|||
public RR<?> addFieldError(FieldError fieldError) { |
|||
if (this.fieldErrors == null) { |
|||
this.fieldErrors = new ArrayList<>(); |
|||
} |
|||
this.fieldErrors.add(fieldError); |
|||
return this; |
|||
} |
|||
|
|||
/** |
|||
* 设置异常信息<br/> |
|||
* 1.请求失败 success=false<br/> |
|||
* 2.设置 hasException = true |
|||
* 3.给返回的异常堆栈属性赋值(exceptionStack)<br/> |
|||
* |
|||
* @param e 异常对象 |
|||
*/ |
|||
public void setException(Throwable e) { |
|||
if (e != null) { |
|||
this.success = false; |
|||
this.hasException = true; |
|||
} |
|||
this.exceptionStack = getStackTraceAsString(e); |
|||
} |
|||
|
|||
/** |
|||
* 将ErrorStack转化为String(获取异常的堆栈信息)<br/> |
|||
* |
|||
* @param e 异常对象 |
|||
* @return 异常的堆栈信息 |
|||
*/ |
|||
private static String getStackTraceAsString(Throwable e) { |
|||
if (e == null) { |
|||
return ""; |
|||
} |
|||
StringWriter stringWriter = new StringWriter(); |
|||
e.printStackTrace(new PrintWriter(stringWriter)); |
|||
return stringWriter.toString(); |
|||
} |
|||
|
|||
/*-------------------------------------------------------------- |
|||
* getter、setter |
|||
* -------------------------------------------------------------*/ |
|||
|
|||
/** |
|||
* 设置请求是否成功<br/> |
|||
* <b> |
|||
* 设置true,置空msg<br/> |
|||
* 设置false,置空msg<br/> |
|||
* </b> |
|||
*/ |
|||
public void setSuccess(boolean success) { |
|||
this.success = success; |
|||
if (success) { |
|||
this.msg = null; |
|||
} else { |
|||
this.msg = null; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 设置请求成功返回的消息,置空msg |
|||
*/ |
|||
public void setSuccessMessage(String msg) { |
|||
if (msg != null) { |
|||
this.msg = msg; |
|||
this.msg = null; |
|||
} else { |
|||
this.msg = null; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 设置请求失败返回的消息,置空msg |
|||
*/ |
|||
public void setFailMessage(String msg) { |
|||
if (msg != null) { |
|||
this.msg = msg; |
|||
this.msg = null; |
|||
} else { |
|||
this.msg = null; |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue