Browse Source

feat(eam): 添加换线专家组维修工单导出功能

- 新增 eamExchangeOrderExportExcel 接口支持换线专家组维修工单导出
- 添加 eamWorkOrderSearchForDefectExport 查询方法
- 在 EamMapper 中新增数据访问接口
- 在 EamService 和 EamServiceImpl 中实现导出业务逻辑
- 配置 Excel 导出响应头和文件名编码
- 使用 EasyExcel 实现数据导出功能
- 在 XML 映射文件中添加相应的 SQL 查询语句
master
qiankanghui 3 weeks ago
parent
commit
abca0c8ab1
  1. 25
      src/main/java/com/xujie/sys/modules/pms/controller/EamController.java
  2. 2
      src/main/java/com/xujie/sys/modules/pms/mapper/EamMapper.java
  3. 2
      src/main/java/com/xujie/sys/modules/pms/service/EamService.java
  4. 8
      src/main/java/com/xujie/sys/modules/pms/service/Impl/EamServiceImpl.java
  5. 126
      src/main/resources/mapper/pms/EamMapper.xml

25
src/main/java/com/xujie/sys/modules/pms/controller/EamController.java

@ -56,6 +56,31 @@ public class EamController {
@Autowired
private QueryCriteriaConstructorDefault queryCriteriaConstructorDefault;
/**
* @Description 换线专家组维修工单
* @Title
* @author qkh
* @date 2026/2/4
**/
@PostMapping(value="/eamExchangeOrderExportExcel")
public void eamExchangeOrderExportExcel (@RequestBody EamWorkOrderInData data, HttpServletResponse response) throws IOException {
// 设置响应头
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("换线专家组维修工单", "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
//获取数据
List<EamWorkOrderInData> list =
eamService.eamWorkOrderSearchForDefectExport(data);
EasyExcel.write(response.getOutputStream(), EamWorkOrderExportData.class)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.sheet("换线专家组维修工单")
.doWrite(list);
}
/**
* @Description 维护工单导出excel
* @Title eamMaintainOrderExportExcel

2
src/main/java/com/xujie/sys/modules/pms/mapper/EamMapper.java

@ -533,4 +533,6 @@ public interface EamMapper {
QcItemData getEamPropertiesItemByItemNo(@Param("data") QcItemData data);
List<EamMaintainOrderExportData> eamWorkOrderSearchList(@Param("query") EamWorkOrderInData inData);
List<EamWorkOrderInData> eamWorkOrderSearchForDefectExport(@Param("query") EamWorkOrderInData inData);
}

2
src/main/java/com/xujie/sys/modules/pms/service/EamService.java

@ -1223,4 +1223,6 @@ public interface EamService {
QcItemData getEamPropertiesItemByItemNo(QcItemData data);
List<EamMaintainOrderExportData> eamWorkOrderSearchList(EamWorkOrderInData data);
List<EamWorkOrderInData> eamWorkOrderSearchForDefectExport(EamWorkOrderInData data);
}

8
src/main/java/com/xujie/sys/modules/pms/service/Impl/EamServiceImpl.java

@ -1685,6 +1685,14 @@ public class EamServiceImpl implements EamService {
IPage<EamWorkOrderInData> resultList = this.eamMapper.eamWorkOrderSearchForDefect(new Page<EamWorkOrderInData>(inData.getPage(), inData.getLimit()), inData);
return new PageUtils(resultList);
}
//换线专家组不分页查询
@Override
public List<EamWorkOrderInData> eamWorkOrderSearchForDefectExport(EamWorkOrderInData inData) {
if (StringUtils.isNotBlank(inData.getDepartmentName())) {
inData.setDeptArr(inData.getDepartmentName().split(";"));
}
return eamMapper.eamWorkOrderSearchForDefectExport(inData);
}
//同eamWorkOrderSearchForDefect方法但返回值接收对象不同用于导出
@Override
public PageUtils eamWorkOrderSearchForDefect2(EamWorkOrderInData inData){

126
src/main/resources/mapper/pms/EamMapper.xml

@ -4341,6 +4341,132 @@
</where>
ORDER BY a.CreateDate
</select>
<select id="eamWorkOrderSearchForDefectExport"
resultType="com.xujie.sys.modules.pms.data.EamWorkOrderExportData">
SELECT
a.Site,
a.bu_no,
dbo.get_bu_desc(a.site, a.bu_no) as buDesc,
a.OrderNo,
a.PlanID,
a.ObjectID,
a.Status,
a.PlanOperator,
a.ActualOperator,
a.PlanDate,
a.ActualDate,
a.FunctionType,
a.CreateDate,
dbo.eam_Get_eamAdminName_TPM(a.Site,b.CreatedBy) as createBy,
a.Remark,
a.StartTime,
a.EndTime,
a.WorkTime,
dbo.eam_Get_eamAdminName_TPM(a.Site,a.PlanOperator) as planOperatorName,
b.DefectID,
c.DefectDesc,
e.ObjectDesc as objectDesc,
dbo.eam_Get_eam_properties_CodeDesc(a.site, a.bu_no, a.FunctionType, a.PropertiesCode) as codeDesc,
a.result,
b.urgency,
a.disposal_measures,
a.difficulty_level,
a.difficulty_remark,
f.department_name,
a.reach_date,
a.reach_operator,
a.reach_operator_name,
case when a.status = '已废弃' then null else b.CreatedDate end as CreatedDate,
a.handling_method,
dbo.eam_Get_eamResourceDesc(a.Site, a.ObjectID) as resourceDesc,
CASE WHEN (DATEDIFF(SECOND, a.CreateDate, a.reach_date) <![CDATA[<]]> 60) THEN DATEDIFF(SECOND, a.CreateDate, a.reach_date) / 60.0
ELSE DATEDIFF(MINUTE, a.CreateDate, a.reach_date)
END AS responseTime,
b.FeedBackDesc,
dbo.joint_name(a.Site,a.bu_no,a.OrderNo,a.FunctionType) as actualOperatorName,
a.fault_reason,
a.preventive_measure,
a.document_source,
a.repair_reporting_type,
a.repair_type,
a.confirm_assessment,
a.confirm_remark,
a.check_assessment,
a.check_notes
FROM eam_workOrder a
left join eam_defect_feedBack b on a.site = b.site and a.PlanID = b.feedBackID and a.bu_no = b.bu_no
left join eam_defect c on b.DefectID = c.DefectID
left join operator as d on a.site = d.site and a.CreateBy = d.operator_id
left join eam_object as e on a.site = e.site and a.ObjectID = e.ObjectID and a.bu_no = e.bu_no
left join sys_department as f on e.site = f.site and e.dept_id = f.department_id and e.bu_no = f.bu_no
left join Access_dept as ead ON ead.site = f.site and ead.department_id = f.department_id and ead.bu_no = f.bu_no
left join sys_user as ea on ead.username = ea.username
<where>
a.site in (select site from eam_access_site where username = #{query.userName})
and (a.site + '-' + a.bu_no) in (select * from dbo.query_bu(#{query.userName}))
and ea.username = #{query.userName}
<if test="query.buDesc != null and query.buDesc != ''">
AND dbo.get_bu_desc ( a.site, a.bu_no ) = #{query.buDesc}
</if>
<if test="query.deptArr != null">
AND
<foreach collection="query.deptArr" item="item" open="(" separator="or" close=")">
f.department_name like '%' + #{item} + '%'
</foreach>
</if>
<if test="query.orderNo != null and query.orderNo != ''">
AND a.OrderNo like '%' + #{query.orderNo} +'%'
</if>
<if test="query.planID != null and query.planID != ''">
AND a.PlanID like '%' + #{query.planID} +'%'
</if>
<if test="query.objectID != null and query.objectID != ''">
AND a.ObjectID like '%' + #{query.objectID} +'%'
</if>
<if test="query.planOperator != null and query.planOperator != ''">
AND a.PlanOperator like '%' + #{query.planOperator} +'%'
</if>
<if test="query.status != null and query.status != ''">
AND a.status = #{query.status}
</if>
<if test="query.documentSource != null and query.documentSource != ''">
AND a.document_source = #{query.documentSource}
</if>
<if test="query.startDate != null ">
AND a.PlanDate >= #{query.startDate}
</if>
<if test="query.endDate != null ">
AND #{query.endDate} >= a.PlanDate
</if>
<if test="query.actualStartDate != null ">
AND a.ActualDate >= #{query.actualStartDate}
</if>
<if test="query.actualEndDate != null ">
AND DATEADD(DAY, 1, CONVERT(DATE, #{query.actualEndDate})) > a.ActualDate
</if>
<if test="query.urgency != null and query.urgency != ''">
AND b.urgency = #{query.urgency}
</if>
<if test="query.result != null and query.result != ''">
AND a.result = #{query.result}
</if>
<if test="query.repairReportingType != null and query.repairReportingType != ''">
AND a.repair_reporting_type = #{query.repairReportingType}
</if>
<if test="query.repairType != null and query.repairType != ''">
AND a.repair_type = #{query.repairType}
</if>
<if test="query.feedBackDesc != null and query.feedBackDesc != ''">
AND b.FeedBackDesc like '%' +#{query.feedBackDesc}+'%'
</if>
and a.FunctionType =#{query.functionType}
</where>
ORDER BY a.PlanDate,
CASE WHEN b.urgency = '特急' THEN 1
WHEN b.urgency = '紧急' THEN 2
WHEN b.urgency = '一般' THEN 3
END
</select>
<insert id="saveSoundBoxEmailLog" parameterType="com.xujie.sys.modules.pms.entity.SoundBoxEmailLog">
insert into sound_box_email_log (site, component_part_no, notify_no, request_data, response_data, email, created_at, user_id, username)
values (#{site}, #{componentPartNo}, #{notifyNo}, #{requestData}, #{responseData}, #{email}, #{createdAt}, #{userId}, #{username})

Loading…
Cancel
Save