feat(mobile): 添加PDA停机功能和优化维修流程

- 在DmsBillsFaultInstanceMapper中添加approveStatus字段支持
- 新增PDA停机原因列表查询接口
- 实现PDA停机记录新增功能,支持自动匹配停机类型
- 添加三色灯状态参数同步机制,针对OLD-01~OLD-05设备
- PDA报修默认设置为已审批通过状态
- 优化PDA开始维修流程,移除异常处理包装
- 完善PDA完成维修流程,改进维修结果存储方式
- 自动创建维修记录和更新派工计划状态
- 添加事务注解确保数据一致性
master
zangch@mesnac.com 2 weeks ago
parent db08d8425c
commit cca55021e5

@ -10,6 +10,8 @@ import com.aucma.dms.domain.vo.DmsBillsFaultInstanceScanVo;
import com.aucma.dms.domain.vo.DmsBillsInspectInstanceScanVo;
import com.aucma.base.domain.BaseDeviceLedger;
import com.aucma.base.service.IBaseDeviceLedgerService;
import com.aucma.base.domain.BaseDeviceParamVal;
import com.aucma.base.service.IBaseDeviceParamValService;
import com.aucma.dms.service.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -17,6 +19,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -67,6 +70,17 @@ public class DmsMobileController extends BaseController {
@Autowired
private IBaseDeviceLedgerService baseDeviceLedgerService;
@Autowired
private IBaseDeviceParamValService baseDeviceParamValService;
// 停机原因服务
@Autowired
private IDmsBaseShutReasonService dmsBaseShutReasonService;
// 停机记录服务
@Autowired
private IDmsRecordShutDownService dmsRecordShutDownService;
/**
*
* 使aucma-baseBaseDeviceLedgerDmsBaseDeviceLedger
@ -210,6 +224,101 @@ public class DmsMobileController extends BaseController {
return dms;
}
// ========== PDA 停机相关 ==========
/**
* PDA- isFlag=1
*/
@GetMapping("/shutReason/list")
public AjaxResult listShutReasonsForPda(DmsBaseShutReason reason) {
reason.setIsFlag("1");
List<DmsBaseShutReason> list = dmsBaseShutReasonService.selectDmsBaseShutReasonList(reason);
return success(list);
}
/**
* PDA-
*/
@PostMapping("/shutDown/add")
@Transactional(rollbackFor = Exception.class)
public AjaxResult addShutDownForPda(@RequestBody DmsRecordShutDown shutDown) {
// 若传入了停机原因ID则查询原因并回填类型
if (shutDown.getShutReason() != null) {
DmsBaseShutReason query = new DmsBaseShutReason();
query.setShutReason(shutDown.getShutReason());
query.setIsFlag("1");
List<DmsBaseShutReason> reasons = dmsBaseShutReasonService.selectDmsBaseShutReasonList(query);
if (!reasons.isEmpty()) {
shutDown.setShutType(reasons.get(0).getShutTypeId());
// 若前端未传 deviceId尝试从原因带出
if (shutDown.getDeviceId() == null) {
shutDown.setDeviceId(reasons.get(0).getDeviceId());
}
}
}
// 默认启用标识
if (shutDown.getIsFlag() == null) {
shutDown.setIsFlag(1L);
}
int rows = dmsRecordShutDownService.insertDmsRecordShutDown(shutDown);
// 对指定设备OLD-01~OLD-05同步写入三色灯状态参数供设备状态统计使用
String deviceCode = shutDown.getDeviceCode();
if (deviceCode != null && deviceCode.startsWith("OLD-")) {
insertTriColorStatusParams(deviceCode, shutDown.getDeviceId());
}
return success(rows);
}
/**
* //
*/
private void insertTriColorStatusParams(String deviceCode, Long deviceId) {
// 仅处理 OLD-01~OLD-05
if (!"OLD-01".equals(deviceCode) && !"OLD-02".equals(deviceCode)
&& !"OLD-03".equals(deviceCode) && !"OLD-04".equals(deviceCode)
&& !"OLD-05".equals(deviceCode)) {
return;
}
// 补齐 deviceId如果未传
Long resolvedDeviceId = deviceId;
if (resolvedDeviceId == null) {
BaseDeviceLedger query = new BaseDeviceLedger();
query.setDeviceCode(deviceCode);
query.setIsFlag(1L);
List<BaseDeviceLedger> list = baseDeviceLedgerService.selectBaseDeviceLedgerList(query);
if (!list.isEmpty()) {
resolvedDeviceId = list.get(0).getObjId();
}
}
Date now = new Date();
// 运行、暂停、报警 三个参数,只有“暂停”置 TRUE其余 FALSE
List<BaseDeviceParamVal> records = new ArrayList<>();
records.add(buildParamVal("295", deviceCode, resolvedDeviceId, "机台状态-三色灯机器运行", "False", now));
records.add(buildParamVal("296", deviceCode, resolvedDeviceId, "机台状态-三色灯机器暂停", "True", now));
records.add(buildParamVal("297", deviceCode, resolvedDeviceId, "机台状态-三色灯机器报警", "False", now));
for (BaseDeviceParamVal rec : records) {
baseDeviceParamValService.insertBaseDeviceParamVal(rec);
}
}
private BaseDeviceParamVal buildParamVal(String paramCode, String deviceCode, Long deviceId,
String paramName, String paramValue, Date time) {
BaseDeviceParamVal v = new BaseDeviceParamVal();
v.setParamCode(paramCode);
v.setDeviceCode(deviceCode);
v.setDeviceId(deviceId);
v.setParamName(paramName);
v.setParamValue(paramValue);
v.setCollectTime(time);
v.setRecordTime(time);
return v;
}
/**
* PDA-
* <p>
@ -236,6 +345,8 @@ public class DmsMobileController extends BaseController {
}
}*/
dmsBillsFaultInstance.setFileUrls(fileUrls);
// PDA发起的报修默认视为已审批通过避免进入待审批状态
dmsBillsFaultInstance.setApproveStatus("2");
return success(dmsBillsFaultInstanceService.insertDmsBillsFaultInstance(dmsBillsFaultInstance));
}
@ -321,91 +432,87 @@ public class DmsMobileController extends BaseController {
* - 12
*/
@PostMapping("/startRepair")
@Transactional(rollbackFor = Exception.class)
public AjaxResult startRepair(@RequestBody DmsFaultInstanceActivity dmsFaultInstanceActivity) {
try {
Long repairInstanceId = dmsFaultInstanceActivity.getRepairInstanceId();
String repairer = dmsFaultInstanceActivity.getRepairer();
Long repairInstanceId = dmsFaultInstanceActivity.getRepairInstanceId();
String repairer = dmsFaultInstanceActivity.getRepairer();
log.info("PDA开始维修故障报修ID: {}, 维修人: {}", repairInstanceId, repairer);
log.info("PDA开始维修故障报修ID: {}, 维修人: {}", repairInstanceId, repairer);
// ========== 步骤1调用原有的开始维修逻辑 ==========
int result = dmsBillsFaultInstanceService.startRepair(dmsFaultInstanceActivity);
// ========== 步骤2查询故障报修详情 ==========
DmsBillsFaultInstance fault = dmsBillsFaultInstanceService
.selectDmsBillsFaultInstanceByRepairInstanceId(repairInstanceId);
if (fault == null) {
log.warn("故障报修[{}]不存在", repairInstanceId);
return success(result);
}
// ========== 步骤3检查是否已有维修工单 ==========
DmsRepairWorkOrder existingOrder = dmsRepairWorkOrderService.selectByFaultInstanceId(repairInstanceId);
if (existingOrder == null) {
// ========== 步骤4【断点1】自动创建维修工单 ==========
DmsRepairWorkOrder newOrder = new DmsRepairWorkOrder();
newOrder.setFaultInstanceId(repairInstanceId);
newOrder.setDeviceId(fault.getDeviceId());
newOrder.setFaultType(fault.getFaultType());
newOrder.setFaultDescription(fault.getFaultDescription());
newOrder.setRepairType(fault.getRepairType());
newOrder.setOrderStatus("2"); // 直接设为维修中PDA开始维修即进入维修状态
newOrder.setPriority("3"); // 默认中优先级
newOrder.setActualStartTime(new Date());
// 设置执行人信息
if (dmsFaultInstanceActivity.getHandleUserId() != null) {
newOrder.setExecutorId(dmsFaultInstanceActivity.getHandleUserId());
}
if (repairer != null && !repairer.isEmpty()) {
newOrder.setExecutorName(repairer);
}
dmsRepairWorkOrderService.insertDmsRepairWorkOrder(newOrder);
log.info("【断点1】PDA自动创建维修工单工单ID: {}, 工单编号: {}",
newOrder.getWorkOrderId(), newOrder.getWorkOrderCode());
// ========== 步骤5【断点2】自动创建派工计划并接收 ==========
DmsDispatchPlan plan = new DmsDispatchPlan();
plan.setWorkOrderId(newOrder.getWorkOrderId());
plan.setWorkOrderCode(newOrder.getWorkOrderCode());
plan.setDeviceId(fault.getDeviceId());
plan.setDispatchType("1"); // 单人派工
plan.setReceiveStatus("1"); // 直接设为已接收PDA开始维修即表示已接收
plan.setExecutionStatus("1"); // 执行中
if (dmsFaultInstanceActivity.getHandleUserId() != null) {
plan.setExecutorId(dmsFaultInstanceActivity.getHandleUserId());
}
if (repairer != null && !repairer.isEmpty()) {
plan.setExecutorName(repairer);
}
plan.setDispatchNotes("由PDA端开始维修自动生成");
dmsDispatchPlanService.insertDmsDispatchPlan(plan);
log.info("【断点2】PDA自动创建派工计划并接收计划ID: {}", plan.getPlanId());
} else {
// 已有维修工单,更新状态为维修中
if (!"2".equals(existingOrder.getOrderStatus()) && !"3".equals(existingOrder.getOrderStatus())) {
DmsRepairWorkOrder updateOrder = new DmsRepairWorkOrder();
updateOrder.setWorkOrderId(existingOrder.getWorkOrderId());
updateOrder.setOrderStatus("2"); // 维修中
updateOrder.setActualStartTime(new Date());
if (dmsFaultInstanceActivity.getHandleUserId() != null) {
updateOrder.setExecutorId(dmsFaultInstanceActivity.getHandleUserId());
}
if (repairer != null && !repairer.isEmpty()) {
updateOrder.setExecutorName(repairer);
}
dmsRepairWorkOrderService.updateDmsRepairWorkOrder(updateOrder);
log.info("PDA更新已有维修工单[{}]状态为维修中", existingOrder.getWorkOrderCode());
}
}
// ========== 步骤1调用原有的开始维修逻辑 ==========
int result = dmsBillsFaultInstanceService.startRepair(dmsFaultInstanceActivity);
// ========== 步骤2查询故障报修详情 ==========
DmsBillsFaultInstance fault = dmsBillsFaultInstanceService
.selectDmsBillsFaultInstanceByRepairInstanceId(repairInstanceId);
if (fault == null) {
log.warn("故障报修[{}]不存在", repairInstanceId);
return success(result);
} catch (Exception e) {
log.error("PDA开始维修失败", e);
return error("开始维修失败:" + e.getMessage());
}
// ========== 步骤3检查是否已有维修工单 ==========
DmsRepairWorkOrder existingOrder = dmsRepairWorkOrderService.selectByFaultInstanceId(repairInstanceId);
if (existingOrder == null) {
// ========== 步骤4【断点1】自动创建维修工单 ==========
DmsRepairWorkOrder newOrder = new DmsRepairWorkOrder();
newOrder.setFaultInstanceId(repairInstanceId);
newOrder.setDeviceId(fault.getDeviceId());
newOrder.setFaultType(fault.getFaultType());
newOrder.setFaultDescription(fault.getFaultDescription());
newOrder.setRepairType(fault.getRepairType());
newOrder.setOrderStatus("2"); // 直接设为维修中PDA开始维修即进入维修状态
newOrder.setPriority("3"); // 默认中优先级
newOrder.setActualStartTime(new Date());
// 设置执行人信息
if (dmsFaultInstanceActivity.getHandleUserId() != null) {
newOrder.setExecutorId(dmsFaultInstanceActivity.getHandleUserId());
}
if (repairer != null && !repairer.isEmpty()) {
newOrder.setExecutorName(repairer);
}
dmsRepairWorkOrderService.insertDmsRepairWorkOrder(newOrder);
log.info("【断点1】PDA自动创建维修工单工单ID: {}, 工单编号: {}",
newOrder.getWorkOrderId(), newOrder.getWorkOrderCode());
// ========== 步骤5【断点2】自动创建派工计划并接收 ==========
DmsDispatchPlan plan = new DmsDispatchPlan();
plan.setWorkOrderId(newOrder.getWorkOrderId());
plan.setWorkOrderCode(newOrder.getWorkOrderCode());
plan.setDeviceId(fault.getDeviceId());
plan.setDispatchType("1"); // 单人派工
plan.setReceiveStatus("1"); // 直接设为已接收PDA开始维修即表示已接收
plan.setExecutionStatus("1"); // 执行中
if (dmsFaultInstanceActivity.getHandleUserId() != null) {
plan.setExecutorId(dmsFaultInstanceActivity.getHandleUserId());
}
if (repairer != null && !repairer.isEmpty()) {
plan.setExecutorName(repairer);
}
plan.setDispatchNotes("由PDA端开始维修自动生成");
dmsDispatchPlanService.insertDmsDispatchPlan(plan);
log.info("【断点2】PDA自动创建派工计划并接收计划ID: {}", plan.getPlanId());
} else {
// 已有维修工单,更新状态为维修中
if (!"2".equals(existingOrder.getOrderStatus()) && !"3".equals(existingOrder.getOrderStatus())) {
DmsRepairWorkOrder updateOrder = new DmsRepairWorkOrder();
updateOrder.setWorkOrderId(existingOrder.getWorkOrderId());
updateOrder.setOrderStatus("2"); // 维修中
updateOrder.setActualStartTime(new Date());
if (dmsFaultInstanceActivity.getHandleUserId() != null) {
updateOrder.setExecutorId(dmsFaultInstanceActivity.getHandleUserId());
}
if (repairer != null && !repairer.isEmpty()) {
updateOrder.setExecutorName(repairer);
}
dmsRepairWorkOrderService.updateDmsRepairWorkOrder(updateOrder);
log.info("PDA更新已有维修工单[{}]状态为维修中", existingOrder.getWorkOrderCode());
}
}
return success(result);
}
/**
@ -417,91 +524,91 @@ public class DmsMobileController extends BaseController {
* - 3
*/
@PostMapping("/completeRepair")
@Transactional(rollbackFor = Exception.class)
public AjaxResult completeRepair(DmsFaultInstanceActivity dmsFaultInstanceActivity, @RequestParam(value = "files", required = false) List<MultipartFile> files) throws JsonProcessingException {
try {
Long repairInstanceId = dmsFaultInstanceActivity.getRepairInstanceId();
String repairer = dmsFaultInstanceActivity.getRepairer();
Long repairInstanceId = dmsFaultInstanceActivity.getRepairInstanceId();
String repairer = dmsFaultInstanceActivity.getRepairer();
log.info("PDA完成维修故障报修ID: {}, 维修人: {}", repairInstanceId, repairer);
log.info("PDA完成维修故障报修ID: {}, 维修人: {}", repairInstanceId, repairer);
// ========== 步骤1原有逻辑 - 设置确认信息和解析配件 ==========
dmsFaultInstanceActivity.setRepairConfirm(2);
dmsFaultInstanceActivity.setConfirmTime(new Date());
String parts1 = dmsFaultInstanceActivity.getParts1();
if (parts1 != null && !parts1.isEmpty()) {
ObjectMapper objectMapper = new ObjectMapper();
List<DmsFaultCompentsParts> parts2 = objectMapper.readValue(parts1, new TypeReference<List<DmsFaultCompentsParts>>() {});
dmsFaultInstanceActivity.setParts(parts2);
}
List<String> fileUrls = new ArrayList<>();
dmsFaultInstanceActivity.setFileUrls(fileUrls);
// ========== 步骤2调用原有的完成维修逻辑 ==========
int result = dmsBillsFaultInstanceService.completeRepair(dmsFaultInstanceActivity);
// ========== 步骤3查询关联的维修工单 ==========
DmsRepairWorkOrder workOrder = dmsRepairWorkOrderService.selectByFaultInstanceId(repairInstanceId);
if (workOrder != null) {
// ========== 步骤4更新维修工单状态为已完成 ==========
DmsRepairWorkOrder updateOrder = new DmsRepairWorkOrder();
updateOrder.setWorkOrderId(workOrder.getWorkOrderId());
updateOrder.setOrderStatus("3"); // 已完成
updateOrder.setActualEndTime(new Date());
updateOrder.setRepairResult(dmsFaultInstanceActivity.getRepairContent());
dmsRepairWorkOrderService.updateDmsRepairWorkOrder(updateOrder);
log.info("PDA更新维修工单[{}]状态为已完成", workOrder.getWorkOrderCode());
// ========== 步骤5【断点3】自动创建维修记录 ==========
DmsRepairRecord record = new DmsRepairRecord();
record.setWorkOrderId(workOrder.getWorkOrderId());
record.setWorkOrderCode(workOrder.getWorkOrderCode());
record.setDeviceId(workOrder.getDeviceId());
record.setDeviceCode(workOrder.getDeviceCode());
record.setDeviceName(workOrder.getDeviceName());
record.setFaultPhenomenon(workOrder.getFaultDescription());
// 维修人员信息
if (dmsFaultInstanceActivity.getHandleUserId() != null) {
record.setRepairerId(dmsFaultInstanceActivity.getHandleUserId());
} else if (workOrder.getExecutorId() != null) {
record.setRepairerId(workOrder.getExecutorId());
}
if (repairer != null && !repairer.isEmpty()) {
record.setRepairerName(repairer);
} else if (workOrder.getExecutorName() != null) {
record.setRepairerName(workOrder.getExecutorName());
}
// 维修时间
record.setStartTime(workOrder.getActualStartTime());
record.setEndTime(new Date());
// 维修内容
record.setRepairResult(dmsFaultInstanceActivity.getRepairContent());
// 默认未存档
record.setIsArchived("0");
dmsRepairRecordService.insertDmsRepairRecord(record);
log.info("【断点3】PDA自动创建维修记录记录ID: {}", record.getRecordId());
// ========== 步骤6更新派工计划状态为已完成 ==========
DmsDispatchPlan queryPlan = new DmsDispatchPlan();
queryPlan.setWorkOrderId(workOrder.getWorkOrderId());
List<DmsDispatchPlan> plans = dmsDispatchPlanService.selectDmsDispatchPlanList(queryPlan);
if (!CollectionUtils.isEmpty(plans)) {
DmsDispatchPlan updatePlan = new DmsDispatchPlan();
updatePlan.setPlanId(plans.get(0).getPlanId());
updatePlan.setExecutionStatus("2"); // 已完成
dmsDispatchPlanService.updateDmsDispatchPlan(updatePlan);
log.info("PDA更新派工计划[{}]状态为已完成", plans.get(0).getPlanCode());
}
} else {
log.warn("故障报修[{}]无关联维修工单,跳过维修记录创建", repairInstanceId);
}
return success(result);
} catch (Exception e) {
log.error("PDA完成维修失败", e);
return error("完成维修失败:" + e.getMessage());
// ========== 步骤1原有逻辑 - 设置确认信息和解析配件 ==========
dmsFaultInstanceActivity.setRepairConfirm(2);
dmsFaultInstanceActivity.setConfirmTime(new Date());
// 标记完成节点,确保维修内容/安全措施等信息持久化并可回显
dmsFaultInstanceActivity.setProcessActivityId(1021L);
String parts1 = dmsFaultInstanceActivity.getParts1();
if (parts1 != null && !parts1.isEmpty()) {
ObjectMapper objectMapper = new ObjectMapper();
List<DmsFaultCompentsParts> parts2 = objectMapper.readValue(parts1, new TypeReference<List<DmsFaultCompentsParts>>() {});
dmsFaultInstanceActivity.setParts(parts2);
}
List<String> fileUrls = new ArrayList<>();
dmsFaultInstanceActivity.setFileUrls(fileUrls);
// ========== 步骤2调用原有的完成维修逻辑 ==========
int result = dmsBillsFaultInstanceService.completeRepair(dmsFaultInstanceActivity);
// ========== 步骤3查询关联的维修工单 ==========
DmsRepairWorkOrder workOrder = dmsRepairWorkOrderService.selectByFaultInstanceId(repairInstanceId);
if (workOrder != null) {
// ========== 步骤4更新维修工单状态为已完成 ==========
DmsRepairWorkOrder updateOrder = new DmsRepairWorkOrder();
updateOrder.setWorkOrderId(workOrder.getWorkOrderId());
updateOrder.setOrderStatus("3"); // 已完成
updateOrder.setActualEndTime(new Date());
updateOrder.setRepairResult("1"); // 维修结果1-成功
updateOrder.setRepairNotes(dmsFaultInstanceActivity.getRepairContent()); // 维修内容存到维修说明
dmsRepairWorkOrderService.updateDmsRepairWorkOrder(updateOrder);
log.info("PDA更新维修工单[{}]状态为已完成", workOrder.getWorkOrderCode());
// ========== 步骤5【断点3】自动创建维修记录 ==========
DmsRepairRecord record = new DmsRepairRecord();
record.setWorkOrderId(workOrder.getWorkOrderId());
record.setWorkOrderCode(workOrder.getWorkOrderCode());
record.setDeviceId(workOrder.getDeviceId());
record.setDeviceCode(workOrder.getDeviceCode());
record.setDeviceName(workOrder.getDeviceName());
record.setFaultPhenomenon(workOrder.getFaultDescription());
// 维修人员信息
if (dmsFaultInstanceActivity.getHandleUserId() != null) {
record.setRepairerId(dmsFaultInstanceActivity.getHandleUserId());
} else if (workOrder.getExecutorId() != null) {
record.setRepairerId(workOrder.getExecutorId());
}
if (repairer != null && !repairer.isEmpty()) {
record.setRepairerName(repairer);
} else if (workOrder.getExecutorName() != null) {
record.setRepairerName(workOrder.getExecutorName());
}
// 维修时间
record.setStartTime(workOrder.getActualStartTime());
record.setEndTime(new Date());
// 维修结果和维修方法
record.setRepairResult("1"); // 维修结果1-成功
record.setRepairMethod(dmsFaultInstanceActivity.getRepairContent()); // 维修内容存到维修方法
// 默认未存档
record.setIsArchived("0");
dmsRepairRecordService.insertDmsRepairRecord(record);
log.info("【断点3】PDA自动创建维修记录记录ID: {}", record.getRecordId());
// ========== 步骤6更新派工计划状态为已完成 ==========
DmsDispatchPlan queryPlan = new DmsDispatchPlan();
queryPlan.setWorkOrderId(workOrder.getWorkOrderId());
List<DmsDispatchPlan> plans = dmsDispatchPlanService.selectDmsDispatchPlanList(queryPlan);
if (!CollectionUtils.isEmpty(plans)) {
DmsDispatchPlan updatePlan = new DmsDispatchPlan();
updatePlan.setPlanId(plans.get(0).getPlanId());
updatePlan.setExecutionStatus("2"); // 已完成
dmsDispatchPlanService.updateDmsDispatchPlan(updatePlan);
log.info("PDA更新派工计划[{}]状态为已完成", plans.get(0).getPlanCode());
}
} else {
log.warn("故障报修[{}]无关联维修工单,跳过维修记录创建", repairInstanceId);
}
return success(result);
}

@ -138,6 +138,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="faultLevel != null">fault_level,</if>
<if test="faultDescription != null">fault_description,</if>
<if test="designOperations != null">design_operations,</if>
<if test="approveStatus != null">approveStatus,</if>
<if test="applyTime != null">apply_time,</if>
<if test="realBeginTime != null">real_begin_time,</if>
<if test="realEndTime != null">real_end_time,</if>
@ -166,6 +167,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="faultLevel != null">#{faultLevel},</if>
<if test="faultDescription != null">#{faultDescription},</if>
<if test="designOperations != null">#{designOperations},</if>
<if test="approveStatus != null">#{approveStatus},</if>
<if test="applyTime != null">#{applyTime},</if>
<if test="realBeginTime != null">#{realBeginTime},</if>
<if test="realEndTime != null">#{realEndTime},</if>

Loading…
Cancel
Save