“rs测试修改10.12版”

This commit is contained in:
weizhong committed 2025-10-12 10:13:27 +08:00
1 parent 4a6a6728e4
commit bc379bf3b8
12 files changed
+1037 -305

No files matched your search

@@ -44,6 +44,8 @@ import org.dromara.common.oss.factory.OssFactory;
import org.dromara.common.oss.entity.UploadResult;
import java.io.IOException;
import java.text.SimpleDateFormat;
import org.dromara.system.service.ISysOssService;
import org.dromara.system.domain.vo.SysOssVo;
/**
* 出国申请Controller
@@ -65,6 +67,9 @@ public class RsOverseasApplicationController extends BaseController {
@Autowired
private IRegistrationFormService registrationFormService;
@Autowired
private ISysOssService ossService;
/**
* 查询出国申请列表
*/
@@ -182,13 +187,14 @@ public class RsOverseasApplicationController extends BaseController {
@SaCheckPermission("rs:overseas:add")
@Log(title = "出国申请", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated(AddGroup.class) @RequestBody RsOverseasApplicationBo bo) {
public R<Map<String, Object>> add(@Validated(AddGroup.class) @RequestBody RsOverseasApplicationBo bo) {
// 🔍 调试日志:检查接收到的关键字段
System.out.println("========== Controller 接收到的数据 ==========");
System.out.println("emergencyContact: " + bo.getEmergencyContact());
System.out.println("destination: " + bo.getDestination());
System.out.println("idNumber: " + bo.getIdNumber());
System.out.println("unitContact: " + bo.getUnitContact());
// unitContact 字段已删除
// System.out.println("unitContact: " + bo.getUnitContact());
System.out.println("===============================================");
// 自动设置申请人信息
@@ -208,7 +214,15 @@ public class RsOverseasApplicationController extends BaseController {
// 状态由Service层控制,新增时为草稿状态
bo.setApplyTime(new Date());
return toAjax(applicationService.insertByBo(bo));
boolean result = applicationService.insertByBo(bo);
if (result) {
// 🔴 返回新创建的applicationId,供前端上传文件时使用
Map<String, Object> data = new HashMap<>();
data.put("applicationId", bo.getApplicationId());
return R.ok("操作成功", data);
} else {
return R.fail("新增失败");
}
}
/**
@@ -460,32 +474,28 @@ public class RsOverseasApplicationController extends BaseController {
return R.fail("文件大小超过10MB限制");
}
// 生成文件名
String originalFilename = file.getOriginalFilename();
String fileName = "stamped_" + applicationId + "_" + System.currentTimeMillis()
+ getFileExtension(originalFilename);
// 上传到OSS
OssClient ossClient = OssFactory.instance();
String filePath = "overseas/stamped/" + fileName;
UploadResult uploadResult = ossClient.upload(file.getInputStream(), filePath,
file.getSize(), file.getContentType());
// 更新申请记录 - 只更新盖章文件相关字段
applicationService.updateStampedFileInfo(applicationId, uploadResult.getUrl(),
originalFilename, new Date(), "1");
// 使用系统OSS服务上传文件(自动保存到sys_oss表)
SysOssVo ossResult = ossService.upload(file);
// 更新申请记录 - 存储OSS ID和文件路径
applicationService.updateStampedFileInfo(
applicationId,
ossResult.getUrl(), // 文件URL
ossResult.getOriginalName(), // 原始文件名
new Date(), // 上传时间
"1", // 上传状态:已上传
ossResult.getOssId() // OSS文件ID
);
// 返回结果
Map<String, Object> result = new HashMap<>();
result.put("filePath", uploadResult.getUrl());
result.put("fileName", originalFilename);
result.put("filePath", ossResult.getUrl());
result.put("fileName", ossResult.getOriginalName());
result.put("uploadTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
result.put("ossId", ossResult.getOssId());
return R.ok("盖章文件上传成功", result);
} catch (IOException e) {
e.printStackTrace();
return R.fail("文件上传失败:" + e.getMessage());
} catch (Exception e) {
e.printStackTrace();
return R.fail("系统异常:" + e.getMessage());
@@ -512,38 +522,78 @@ public class RsOverseasApplicationController extends BaseController {
return R.fail("文件大小超过10MB限制");
}
// 生成文件名
String originalFilename = file.getOriginalFilename();
String fileName = "party_retention_" + applicationId + "_" + System.currentTimeMillis()
+ getFileExtension(originalFilename);
// 上传到OSS
OssClient ossClient = OssFactory.instance();
String filePath = "overseas/party-retention/" + fileName;
UploadResult uploadResult = ossClient.upload(file.getInputStream(), filePath,
file.getSize(), file.getContentType());
// 更新申请记录 - 只更新党籍保留附件相关字段
applicationService.updatePartyRetentionFileInfo(applicationId, uploadResult.getUrl(),
originalFilename, new Date(), "1");
// 使用系统OSS服务上传文件(自动保存到sys_oss表)
SysOssVo ossResult = ossService.upload(file);
// 更新申请记录 - 存储OSS ID和文件路径
applicationService.updatePartyRetentionFileInfo(
applicationId,
ossResult.getUrl(), // 文件URL
ossResult.getOriginalName(), // 原始文件名
new Date(), // 上传时间
"1", // 上传状态:已上传
ossResult.getOssId() // OSS文件ID
);
// 返回结果
Map<String, Object> result = new HashMap<>();
result.put("filePath", uploadResult.getUrl());
result.put("fileName", originalFilename);
result.put("filePath", ossResult.getUrl());
result.put("fileName", ossResult.getOriginalName());
result.put("uploadTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
result.put("ossId", ossResult.getOssId());
return R.ok("党籍保留附件上传成功", result);
} catch (IOException e) {
e.printStackTrace();
return R.fail("文件上传失败:" + e.getMessage());
} catch (Exception e) {
e.printStackTrace();
return R.fail("系统异常:" + e.getMessage());
}
}
/**
* 下载盖章文件(安全下载)
*/
@SaCheckPermission("rs:overseas:query")
@GetMapping("/downloadStampedFile/{applicationId}")
public void downloadStampedFile(@PathVariable Long applicationId, HttpServletResponse response) {
try {
RsOverseasApplicationVo application = applicationService.queryById(applicationId);
if (application == null || application.getStampedFileOssId() == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write("{\"code\":404,\"msg\":\"文件不存在\"}");
return;
}
// 使用系统OSS服务进行安全下载
ossService.secureDownload(application.getStampedFileOssId(), response);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 下载党籍保留附件(安全下载)
*/
@SaCheckPermission("rs:overseas:query")
@GetMapping("/downloadPartyRetentionFile/{applicationId}")
public void downloadPartyRetentionFile(@PathVariable Long applicationId, HttpServletResponse response) {
try {
RsOverseasApplicationVo application = applicationService.queryById(applicationId);
if (application == null || application.getPartyRetentionFileOssId() == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write("{\"code\":404,\"msg\":\"文件不存在\"}");
return;
}
// 使用系统OSS服务进行安全下载
ossService.secureDownload(application.getPartyRetentionFileOssId(), response);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 验证文件类型
*/
@@ -132,12 +132,6 @@ public class RsOverseasApplication extends BaseEntity {
@ExcelProperty(value = "登记备案责任单位负责人签名")
private String unitLeaderSignature;
/**
* 登记备案责任单位联系人
*/
@ExcelProperty(value = "登记备案责任单位联系人")
private String unitContact;
/**
* 办公电话
*/
@@ -236,12 +230,6 @@ public class RsOverseasApplication extends BaseEntity {
@ExcelProperty(value = "出国天数")
private Integer duration;
/**
* 预算金额
*/
@ExcelProperty(value = "预算金额")
private BigDecimal budget;
/**
* 邀请方信息
*/
@@ -347,6 +335,12 @@ public class RsOverseasApplication extends BaseEntity {
@ExcelProperty(value = "盖章文件上传状态")
private String stampedFileUploadStatus;
/**
* 盖章文件OSS ID(用于安全下载)
*/
@ExcelIgnore
private Long stampedFileOssId;
/**
* 党籍保留附件文件路径
*/
@@ -372,6 +366,12 @@ public class RsOverseasApplication extends BaseEntity {
@ExcelProperty(value = "党籍保留附件上传状态")
private String partyRetentionUploadStatus;
/**
* 党籍保留附件OSS ID(用于安全下载)
*/
@ExcelIgnore
private Long partyRetentionFileOssId;
/**
* 基础字段:创建者
*/
@@ -127,12 +127,6 @@ public class RsOverseasApplicationBo extends BaseEntity {
*/
private String unitLeaderSignature;
/**
* 登记备案责任单位联系人
*/
@NotBlank(message = "登记备案责任单位联系人不能为空", groups = { AddGroup.class, EditGroup.class })
private String unitContact;
/**
* 办公电话
*/
@@ -212,11 +206,6 @@ public class RsOverseasApplicationBo extends BaseEntity {
@Min(value = 1, message = "出国天数必须大于0", groups = { AddGroup.class, EditGroup.class })
private Integer duration;
/**
* 预算金额
*/
private BigDecimal budget;
/**
* 行程安排
*/
@@ -58,16 +58,6 @@ public class RsOverseasApplicationQuery extends PageQuery {
*/
private Long applicantId;
/**
* 预算金额范围 - 最小值
*/
private BigDecimal budgetMin;
/**
* 预算金额范围 - 最大值
*/
private BigDecimal budgetMax;
/**
* 申请时间范围 - 开始时间
*/
@@ -129,11 +129,6 @@ public class RsOverseasApplicationVo implements Serializable {
*/
private String unitLeaderSignature;
/**
* 登记备案责任单位联系人
*/
private String unitContact;
/**
* 办公电话
*/
@@ -216,11 +211,6 @@ public class RsOverseasApplicationVo implements Serializable {
*/
private Integer duration;
/**
* 预算金额
*/
private BigDecimal budget;
/**
* 邀请函信息
*/
@@ -324,6 +314,37 @@ public class RsOverseasApplicationVo implements Serializable {
*/
private String stampedFileUploadStatus;
/**
* 盖章文件OSS ID(用于安全下载)
*/
private Long stampedFileOssId;
/**
* 党籍保留附件文件路径
*/
private String partyRetentionFilePath;
/**
* 党籍保留附件文件名
*/
private String partyRetentionFileName;
/**
* 党籍保留附件上传时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date partyRetentionUploadTime;
/**
* 党籍保留附件上传状态:0-未上传,1-已上传
*/
private String partyRetentionUploadStatus;
/**
* 党籍保留附件OSS ID(用于安全下载)
*/
private Long partyRetentionFileOssId;
/**
* 租户编号
*/
@@ -167,10 +167,11 @@ public interface IRsOverseasApplicationService {
* @param fileName 文件名
* @param uploadTime 上传时间
* @param uploadStatus 上传状态
* @param ossId OSS文件ID
* @return 是否成功
*/
Boolean updateStampedFileInfo(Long applicationId, String filePath, String fileName,
java.util.Date uploadTime, String uploadStatus);
java.util.Date uploadTime, String uploadStatus, Long ossId);
/**
* 更新党籍保留附件信息
@@ -180,10 +181,11 @@ public interface IRsOverseasApplicationService {
* @param fileName 文件名
* @param uploadTime 上传时间
* @param uploadStatus 上传状态
* @param ossId OSS文件ID
* @return 是否成功
*/
Boolean updatePartyRetentionFileInfo(Long applicationId, String filePath, String fileName,
java.util.Date uploadTime, String uploadStatus);
java.util.Date uploadTime, String uploadStatus, Long ossId);
/**
* 校验出国登记前置条件
@@ -237,7 +237,8 @@ public class RsOverseasApplicationServiceImpl implements IRsOverseasApplicationS
// ==================== 单位和联系信息 ====================
if (update.getRegistrationUnit() != null) updateWrapper.set(RsOverseasApplication::getRegistrationUnit, update.getRegistrationUnit());
if (update.getUnitLeaderSignature() != null) updateWrapper.set(RsOverseasApplication::getUnitLeaderSignature, update.getUnitLeaderSignature());
if (update.getUnitContact() != null) updateWrapper.set(RsOverseasApplication::getUnitContact, update.getUnitContact());
// unitContact 字段已删除
// if (update.getUnitContact() != null) updateWrapper.set(RsOverseasApplication::getUnitContact, update.getUnitContact());
if (update.getOfficePhone() != null) updateWrapper.set(RsOverseasApplication::getOfficePhone, update.getOfficePhone());
if (update.getMobilePhone() != null) updateWrapper.set(RsOverseasApplication::getMobilePhone, update.getMobilePhone());
if (update.getContactPhone() != null) updateWrapper.set(RsOverseasApplication::getContactPhone, update.getContactPhone());
@@ -252,7 +253,8 @@ public class RsOverseasApplicationServiceImpl implements IRsOverseasApplicationS
if (update.getStartDate() != null) updateWrapper.set(RsOverseasApplication::getStartDate, update.getStartDate());
if (update.getEndDate() != null) updateWrapper.set(RsOverseasApplication::getEndDate, update.getEndDate());
if (update.getDuration() != null) updateWrapper.set(RsOverseasApplication::getDuration, update.getDuration());
if (update.getBudget() != null) updateWrapper.set(RsOverseasApplication::getBudget, update.getBudget());
// budget 字段已删除
// if (update.getBudget() != null) updateWrapper.set(RsOverseasApplication::getBudget, update.getBudget());
// ==================== 证件和文档 ====================
if (update.getInvitation() != null) updateWrapper.set(RsOverseasApplication::getInvitation, update.getInvitation());
@@ -502,9 +504,10 @@ public class RsOverseasApplicationServiceImpl implements IRsOverseasApplicationS
if (applicationData.getEndDate() != null) {
existingApp.setEndDate(applicationData.getEndDate());
}
if (applicationData.getBudget() != null) {
existingApp.setBudget(applicationData.getBudget());
}
// budget 字段已删除
// if (applicationData.getBudget() != null) {
// existingApp.setBudget(applicationData.getBudget());
// }
if (applicationData.getItinerary() != null) {
existingApp.setItinerary(applicationData.getItinerary());
}
@@ -559,8 +562,9 @@ public class RsOverseasApplicationServiceImpl implements IRsOverseasApplicationS
lqw.eq(StringUtils.isNotBlank(query.getApprovalLevel()), RsOverseasApplication::getApprovalLevel, query.getApprovalLevel());
lqw.like(StringUtils.isNotBlank(query.getCurrentApprover()), RsOverseasApplication::getCurrentApprover, query.getCurrentApprover());
lqw.eq(query.getApplicantId() != null, RsOverseasApplication::getApplicantId, query.getApplicantId());
lqw.ge(query.getBudgetMin() != null, RsOverseasApplication::getBudget, query.getBudgetMin());
lqw.le(query.getBudgetMax() != null, RsOverseasApplication::getBudget, query.getBudgetMax());
// budget 字段已删除,移除相关查询条件
// lqw.ge(query.getBudgetMin() != null, RsOverseasApplication::getBudget, query.getBudgetMin());
// lqw.le(query.getBudgetMax() != null, RsOverseasApplication::getBudget, query.getBudgetMax());
lqw.ge(query.getApplyTimeBegin() != null, RsOverseasApplication::getApplyTime, query.getApplyTimeBegin());
lqw.le(query.getApplyTimeEnd() != null, RsOverseasApplication::getApplyTime, query.getApplyTimeEnd());
lqw.ge(query.getStartDateBegin() != null, RsOverseasApplication::getStartDate, query.getStartDateBegin());
@@ -595,7 +599,8 @@ public class RsOverseasApplicationServiceImpl implements IRsOverseasApplicationS
// ==================== 单位和联系信息 ====================
entity.setRegistrationUnit(bo.getRegistrationUnit()); // 登记备案责任单位
entity.setUnitLeaderSignature(bo.getUnitLeaderSignature()); // 单位负责人签名
entity.setUnitContact(bo.getUnitContact()); // 单位联系人
// unitContact 字段已删除
// entity.setUnitContact(bo.getUnitContact()); // 单位联系人
entity.setOfficePhone(bo.getOfficePhone()); // 办公电话
entity.setMobilePhone(bo.getMobilePhone()); // 移动电话
entity.setContactPhone(bo.getContactPhone()); // 联系电话(兼容字段)
@@ -610,7 +615,8 @@ public class RsOverseasApplicationServiceImpl implements IRsOverseasApplicationS
entity.setStartDate(bo.getStartDate());
entity.setEndDate(bo.getEndDate());
entity.setDuration(bo.getDuration());
entity.setBudget(bo.getBudget());
// budget 字段已删除
// entity.setBudget(bo.getBudget());
// ==================== 证件和文档 ====================
entity.setInvitation(bo.getInvitation());
@@ -669,7 +675,7 @@ public class RsOverseasApplicationServiceImpl implements IRsOverseasApplicationS
@Override
@Transactional
public Boolean updateStampedFileInfo(Long applicationId, String filePath, String fileName,
java.util.Date uploadTime, String uploadStatus) {
java.util.Date uploadTime, String uploadStatus, Long ossId) {
return baseMapper.update(null,
new LambdaUpdateWrapper<RsOverseasApplication>()
.eq(RsOverseasApplication::getApplicationId, applicationId)
@@ -677,6 +683,7 @@ public class RsOverseasApplicationServiceImpl implements IRsOverseasApplicationS
.set(RsOverseasApplication::getStampedRegistrationFileName, fileName)
.set(RsOverseasApplication::getStampedFileUploadTime, uploadTime)
.set(RsOverseasApplication::getStampedFileUploadStatus, uploadStatus)
.set(RsOverseasApplication::getStampedFileOssId, ossId)
) > 0;
}
@@ -686,7 +693,7 @@ public class RsOverseasApplicationServiceImpl implements IRsOverseasApplicationS
@Override
@Transactional
public Boolean updatePartyRetentionFileInfo(Long applicationId, String filePath, String fileName,
java.util.Date uploadTime, String uploadStatus) {
java.util.Date uploadTime, String uploadStatus, Long ossId) {
return baseMapper.update(null,
new LambdaUpdateWrapper<RsOverseasApplication>()
.eq(RsOverseasApplication::getApplicationId, applicationId)
@@ -694,6 +701,7 @@ public class RsOverseasApplicationServiceImpl implements IRsOverseasApplicationS
.set(RsOverseasApplication::getPartyRetentionFileName, fileName)
.set(RsOverseasApplication::getPartyRetentionUploadTime, uploadTime)
.set(RsOverseasApplication::getPartyRetentionUploadStatus, uploadStatus)
.set(RsOverseasApplication::getPartyRetentionFileOssId, ossId)
) > 0;
}
@@ -198,7 +198,8 @@ public class RsOverseasRecordServiceImpl implements IRsOverseasRecordService {
record.setActualStartDate(application.getStartDate());
record.setActualEndDate(application.getEndDate());
record.setActualDuration(application.getDuration());
record.setActualBudget(application.getBudget());
// 预算字段已删除,不再设置
// record.setActualBudget(application.getBudget());
record.setInvitation(application.getInvitation());
record.setItinerary(application.getItinerary());
record.setAccommodationPlan(application.getAccommodationPlan());
@@ -22,7 +22,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="personnelCategory" column="personnel_category"/>
<result property="registrationUnit" column="registration_unit"/>
<result property="unitLeaderSignature" column="unit_leader_signature"/>
<result property="unitContact" column="unit_contact"/>
<result property="officePhone" column="office_phone"/>
<result property="mobilePhone" column="mobile_phone"/>
<result property="contactPhone" column="contact_phone"/>
@@ -40,7 +39,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="startDate" column="start_date"/>
<result property="endDate" column="end_date"/>
<result property="duration" column="duration"/>
<result property="budget" column="budget"/>
<result property="invitation" column="invitation"/>
<result property="itinerary" column="itinerary"/>
<result property="accommodationPlan" column="accommodation_plan"/>
@@ -56,8 +54,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="signature" column="signature"/>
<result property="stampedRegistrationFilePath" column="stamped_registration_file_path"/>
<result property="stampedRegistrationFileName" column="stamped_registration_file_name"/>
<result property="stampedFileOssId" column="stamped_file_oss_id"/>
<result property="stampedFileUploadTime" column="stamped_file_upload_time"/>
<result property="stampedFileUploadStatus" column="stamped_file_upload_status"/>
<result property="partyRetentionFilePath" column="party_retention_file_path"/>
<result property="partyRetentionFileName" column="party_retention_file_name"/>
<result property="partyRetentionFileOssId" column="party_retention_file_oss_id"/>
<result property="partyRetentionUploadTime" column="party_retention_upload_time"/>
<result property="partyRetentionUploadStatus" column="party_retention_upload_status"/>
<result property="tenantId" column="tenant_id"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
@@ -80,16 +84,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select oa.application_id, oa.serial_number, oa.applicant_id, oa.applicant_name,
oa.gender, oa.birth_date, oa.photo, oa.id_number, oa.political_status, oa.registered_address,
oa.department, oa.position, oa.professional_title, oa.administrative_level, oa.personnel_category,
oa.registration_unit, oa.unit_leader_signature, oa.unit_contact, oa.office_phone, oa.mobile_phone,
oa.registration_unit, oa.unit_leader_signature, oa.office_phone, oa.mobile_phone,
oa.contact_phone, oa.contact_email, oa.document_name, oa.document_number,
oa.destination_country, oa.exit_reason, oa.visit_relationship, oa.remarks,
oa.purpose, oa.purpose_detail, oa.destination, oa.destination_city,
oa.start_date, oa.end_date, oa.duration, oa.budget, oa.invitation, oa.itinerary,
oa.start_date, oa.end_date, oa.duration, oa.invitation, oa.itinerary,
oa.accommodation_plan, oa.transportation_plan, oa.status, oa.current_approver, oa.approval_level,
oa.apply_time, oa.approval_time, oa.admin_remark, oa.applicant_remark,
oa.emergency_contact, oa.signature,
oa.stamped_registration_file_path, oa.stamped_registration_file_name,
oa.stamped_file_upload_time, oa.stamped_file_upload_status,
oa.stamped_file_upload_time, oa.stamped_file_upload_status, oa.stamped_file_oss_id,
oa.party_retention_file_path, oa.party_retention_file_name,
oa.party_retention_upload_time, oa.party_retention_upload_status, oa.party_retention_file_oss_id,
oa.tenant_id, oa.create_by, oa.create_time, oa.update_by, oa.update_time, oa.deleted,
CASE
WHEN oa.status IS NULL OR oa.status = '' THEN '草稿'
@@ -191,12 +197,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="applicantId != null">
AND oa.applicant_id = #{applicantId}
</if>
<if test="budgetMin != null">
AND oa.budget >= #{budgetMin}
</if>
<if test="budgetMax != null">
AND oa.budget &lt;= #{budgetMax}
</if>
<if test="applyTimeBegin != null">
AND oa.apply_time >= #{applyTimeBegin}
</if>
@@ -246,12 +246,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="applicantId != null">
AND oa.applicant_id = #{applicantId}
</if>
<if test="budgetMin != null">
AND oa.budget >= #{budgetMin}
</if>
<if test="budgetMax != null">
AND oa.budget &lt;= #{budgetMax}
</if>
<if test="applyTimeBegin != null">
AND oa.apply_time >= #{applyTimeBegin}
</if>
@@ -320,7 +314,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="personnelCategory != null and personnelCategory != ''">personnel_category,</if>
<if test="registrationUnit != null and registrationUnit != ''">registration_unit,</if>
<if test="unitLeaderSignature != null and unitLeaderSignature != ''">unit_leader_signature,</if>
<if test="unitContact != null and unitContact != ''">unit_contact,</if>
<if test="officePhone != null and officePhone != ''">office_phone,</if>
<if test="mobilePhone != null and mobilePhone != ''">mobile_phone,</if>
<if test="contactPhone != null and contactPhone != ''">contact_phone,</if>
@@ -338,7 +331,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="startDate != null">start_date,</if>
<if test="endDate != null">end_date,</if>
<if test="duration != null">duration,</if>
<if test="budget != null">budget,</if>
<if test="invitation != null and invitation != ''">invitation,</if>
<if test="itinerary != null and itinerary != ''">itinerary,</if>
<if test="accommodationPlan != null and accommodationPlan != ''">accommodation_plan,</if>
@@ -380,7 +372,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="personnelCategory != null and personnelCategory != ''">#{personnelCategory},</if>
<if test="registrationUnit != null and registrationUnit != ''">#{registrationUnit},</if>
<if test="unitLeaderSignature != null and unitLeaderSignature != ''">#{unitLeaderSignature},</if>
<if test="unitContact != null and unitContact != ''">#{unitContact},</if>
<if test="officePhone != null and officePhone != ''">#{officePhone},</if>
<if test="mobilePhone != null and mobilePhone != ''">#{mobilePhone},</if>
<if test="contactPhone != null and contactPhone != ''">#{contactPhone},</if>
@@ -398,7 +389,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="startDate != null">#{startDate},</if>
<if test="endDate != null">#{endDate},</if>
<if test="duration != null">#{duration},</if>
<if test="budget != null">#{budget},</if>
<if test="invitation != null and invitation != ''">#{invitation},</if>
<if test="itinerary != null and itinerary != ''">#{itinerary},</if>
<if test="accommodationPlan != null and accommodationPlan != ''">#{accommodationPlan},</if>
@@ -445,7 +435,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="personnelCategory != null">personnel_category = #{personnelCategory},</if>
<if test="registrationUnit != null">registration_unit = #{registrationUnit},</if>
<if test="unitLeaderSignature != null">unit_leader_signature = #{unitLeaderSignature},</if>
<if test="unitContact != null">unit_contact = #{unitContact},</if>
<if test="officePhone != null">office_phone = #{officePhone},</if>
<if test="mobilePhone != null">mobile_phone = #{mobilePhone},</if>
<if test="contactPhone != null">contact_phone = #{contactPhone},</if>
@@ -463,7 +452,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="startDate != null">start_date = #{startDate},</if>
<if test="endDate != null">end_date = #{endDate},</if>
<if test="duration != null">duration = #{duration},</if>
<if test="budget != null">budget = #{budget},</if>
<if test="invitation != null">invitation = #{invitation},</if>
<if test="itinerary != null">itinerary = #{itinerary},</if>
<if test="accommodationPlan != null">accommodation_plan = #{accommodationPlan},</if>
@@ -216,7 +216,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
oa.application_id, oa.applicant_id, oa.applicant_name, oa.department,
oa.position, oa.contact_phone, oa.contact_email, oa.purpose, oa.purpose_detail, oa.destination, oa.destination_city,
oa.start_date as actual_start_date, oa.end_date as actual_end_date, oa.duration as actual_duration,
oa.budget as actual_budget,
NULL as actual_budget,
oa.invitation, oa.itinerary, oa.accommodation_plan, oa.transportation_plan,
'1' as completion_status, NULL as achievement, NULL as report_content, NULL as certificate_path,
oa.tenant_id, NULL as create_dept, oa.create_by, oa.create_time, oa.update_by, oa.update_time, oa.deleted,