feat(mes): 新增看板接口

- 新增看板接口5,返回合格数/不合格数统计数据
- 新增看板接口6,返回产品良率统计数据
master
Yangk 2 weeks ago
parent 280a25eefe
commit 250c85b1ee

@ -1,6 +1,5 @@
package org.dromara.mes.controller; package org.dromara.mes.controller;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
@ -18,7 +17,6 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
* MESController * MESController
* *
@ -40,7 +38,8 @@ public class ProdReportController extends BaseController {
* @return * @return
*/ */
@GetMapping("/planCompletionRateReport") @GetMapping("/planCompletionRateReport")
public TableDataInfo<PlanCompletionRateReportVo> planCompletionRateReportList(@RequestParam(required = false) Map hashMap, PageQuery pageQuery) { public TableDataInfo<PlanCompletionRateReportVo> planCompletionRateReportList(
@RequestParam(required = false) Map hashMap, PageQuery pageQuery) {
return prodReportService.planCompletionRateReportVoList(hashMap, pageQuery); return prodReportService.planCompletionRateReportVoList(hashMap, pageQuery);
} }
@ -51,12 +50,12 @@ public class ProdReportController extends BaseController {
* @return * @return
*/ */
@PostMapping("/planCompletionRateReport/export") @PostMapping("/planCompletionRateReport/export")
public void planCompletionRateReportListExport(@RequestParam(required = false) Map hashMap, HttpServletResponse response) { public void planCompletionRateReportListExport(@RequestParam(required = false) Map hashMap,
HttpServletResponse response) {
List<PlanCompletionRateReportVo> list = prodReportService.planCompletionRateReportVoList(hashMap); List<PlanCompletionRateReportVo> list = prodReportService.planCompletionRateReportVoList(hashMap);
ExcelUtil.exportExcel(list, "生产计划完成率报表", PlanCompletionRateReportVo.class, response); ExcelUtil.exportExcel(list, "生产计划完成率报表", PlanCompletionRateReportVo.class, response);
} }
/** /**
* *
* *
@ -64,7 +63,8 @@ public class ProdReportController extends BaseController {
* @return * @return
*/ */
@GetMapping("/planCompletionContrastReport") @GetMapping("/planCompletionContrastReport")
public TableDataInfo<PlanCompletionContrastReportVo> planCompletionContrastReportVoList(@RequestParam(required = false) Map hashMap, PageQuery pageQuery) { public TableDataInfo<PlanCompletionContrastReportVo> planCompletionContrastReportVoList(
@RequestParam(required = false) Map hashMap, PageQuery pageQuery) {
return prodReportService.planCompletionContrastReportVoList(hashMap, pageQuery); return prodReportService.planCompletionContrastReportVoList(hashMap, pageQuery);
} }
@ -75,12 +75,12 @@ public class ProdReportController extends BaseController {
* @return * @return
*/ */
@PostMapping("/planCompletionContrastReport/export") @PostMapping("/planCompletionContrastReport/export")
public void planCompletionContrastReportExport(@RequestParam(required = false) Map hashMap, HttpServletResponse response) { public void planCompletionContrastReportExport(@RequestParam(required = false) Map hashMap,
HttpServletResponse response) {
List<PlanCompletionContrastReportVo> list = prodReportService.planCompletionContrastReportVoList(hashMap); List<PlanCompletionContrastReportVo> list = prodReportService.planCompletionContrastReportVoList(hashMap);
ExcelUtil.exportExcel(list, "生产计划完成率对比报表", PlanCompletionContrastReportVo.class, response); ExcelUtil.exportExcel(list, "生产计划完成率对比报表", PlanCompletionContrastReportVo.class, response);
} }
/** /**
* *
* *
@ -123,12 +123,12 @@ public class ProdReportController extends BaseController {
return R.ok(vos); return R.ok(vos);
} }
/** /**
* *
*/ */
@GetMapping("/workHourReport") @GetMapping("/workHourReport")
public TableDataInfo<WorkHourReportVo> workHourReport(@RequestParam(required = false) Map hashMap, PageQuery pageQuery) { public TableDataInfo<WorkHourReportVo> workHourReport(@RequestParam(required = false) Map hashMap,
PageQuery pageQuery) {
return prodReportService.workHourReportList(hashMap, pageQuery); return prodReportService.workHourReportList(hashMap, pageQuery);
} }
@ -145,7 +145,8 @@ public class ProdReportController extends BaseController {
* *
*/ */
@GetMapping("/teamWorkReport") @GetMapping("/teamWorkReport")
public TableDataInfo<TeamWorkReportVo> teamWorkReport(@RequestParam(required = false) Map hashMap, PageQuery pageQuery) { public TableDataInfo<TeamWorkReportVo> teamWorkReport(@RequestParam(required = false) Map hashMap,
PageQuery pageQuery) {
return prodReportService.teamWorkReportList(hashMap, pageQuery); return prodReportService.teamWorkReportList(hashMap, pageQuery);
} }
@ -163,7 +164,8 @@ public class ProdReportController extends BaseController {
* *
*/ */
@GetMapping("/wipTrackingReport") @GetMapping("/wipTrackingReport")
public TableDataInfo<WipTrackingReportVo> wipTrackingReport(@RequestParam(required = false) Map hashMap, PageQuery pageQuery) { public TableDataInfo<WipTrackingReportVo> wipTrackingReport(@RequestParam(required = false) Map hashMap,
PageQuery pageQuery) {
return prodReportService.wipTrackingReportList(hashMap, pageQuery); return prodReportService.wipTrackingReportList(hashMap, pageQuery);
} }
@ -205,7 +207,8 @@ public class ProdReportController extends BaseController {
* *
*/ */
@GetMapping("/processWorkOrderStats/page") @GetMapping("/processWorkOrderStats/page")
public TableDataInfo<HashMap<String, Object>> processWorkOrderStatsPage(@RequestParam(required = false) Map hashMap, PageQuery pageQuery) { public TableDataInfo<HashMap<String, Object>> processWorkOrderStatsPage(@RequestParam(required = false) Map hashMap,
PageQuery pageQuery) {
return prodReportService.processWorkOrderStatsPage(hashMap, pageQuery); return prodReportService.processWorkOrderStatsPage(hashMap, pageQuery);
} }
@ -286,4 +289,22 @@ public class ProdReportController extends BaseController {
return R.ok(result); return R.ok(result);
} }
/**
* 5/
*/
@GetMapping("/dashboard/data5")
public R<HashMap<String, Object>> dashboardData5(@RequestParam(required = false) Map hashMap) {
HashMap<String, Object> vos = prodReportService.getDashboardData5(hashMap);
return R.ok(vos);
}
/**
* 6
*/
@GetMapping("/dashboard/data6")
public R<HashMap<String, Object>> dashboardData6(@RequestParam(required = false) Map hashMap) {
HashMap<String, Object> vos = prodReportService.getDashboardData6(hashMap);
return R.ok(vos);
}
} }

@ -1,6 +1,5 @@
package org.dromara.mes.service; package org.dromara.mes.service;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.mes.domain.vo.*; import org.dromara.mes.domain.vo.*;
@ -60,7 +59,8 @@ public interface IProdReportService {
/** /**
* *
* @param hashMap * @param hashMap
* @return */ * @return
*/
List<HashMap<String, Object>> yieldSummaryByMachine(Map hashMap); List<HashMap<String, Object>> yieldSummaryByMachine(Map hashMap);
/** /**
@ -200,4 +200,20 @@ public interface IProdReportService {
*/ */
List<HashMap<String, Object>> getDashboardData4(Map hashMap); List<HashMap<String, Object>> getDashboardData4(Map hashMap);
/**
* 5/
*
* @param hashMap
* @return x1: , y1:
*/
HashMap<String, Object> getDashboardData5(Map hashMap);
/**
* 6
*
* @param hashMap
* @return x1: , y1:
*/
HashMap<String, Object> getDashboardData6(Map hashMap);
} }

@ -43,7 +43,8 @@ public class ProdReportServiceImpl implements IProdReportService {
@Override @Override
public TableDataInfo<PlanCompletionRateReportVo> planCompletionRateReportVoList(Map hashMap, PageQuery pageQuery) { public TableDataInfo<PlanCompletionRateReportVo> planCompletionRateReportVoList(Map hashMap, PageQuery pageQuery) {
String tableName = getPlanInfoTableNameByProcessId(Long.parseLong(String.valueOf(hashMap.get("processId")))); String tableName = getPlanInfoTableNameByProcessId(Long.parseLong(String.valueOf(hashMap.get("processId"))));
Page<PlanCompletionRateReportVo> page = prodReportMapper.planCompletionRateReportVoList(hashMap, pageQuery.build(), tableName); Page<PlanCompletionRateReportVo> page = prodReportMapper.planCompletionRateReportVoList(hashMap,
pageQuery.build(), tableName);
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
@ -108,9 +109,11 @@ public class ProdReportServiceImpl implements IProdReportService {
* @return * @return
*/ */
@Override @Override
public TableDataInfo<PlanCompletionContrastReportVo> planCompletionContrastReportVoList(Map hashMap, PageQuery pageQuery) { public TableDataInfo<PlanCompletionContrastReportVo> planCompletionContrastReportVoList(Map hashMap,
PageQuery pageQuery) {
String tableName = getPlanInfoTableNameByProcessId(Long.parseLong(String.valueOf(hashMap.get("processId")))); String tableName = getPlanInfoTableNameByProcessId(Long.parseLong(String.valueOf(hashMap.get("processId"))));
Page<PlanCompletionContrastReportVo> page = prodReportMapper.planCompletionContrastReportVoList(hashMap, pageQuery.build(), tableName); Page<PlanCompletionContrastReportVo> page = prodReportMapper.planCompletionContrastReportVoList(hashMap,
pageQuery.build(), tableName);
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
@ -157,7 +160,8 @@ public class ProdReportServiceImpl implements IProdReportService {
Long processId = parseProcessId(String.valueOf(hashMap.get("processId"))); Long processId = parseProcessId(String.valueOf(hashMap.get("processId")));
String detailTable = getPlanDetailTableNameByProcessId(processId); String detailTable = getPlanDetailTableNameByProcessId(processId);
String planTable = getPlanInfoTableNameByProcessId(processId); String planTable = getPlanInfoTableNameByProcessId(processId);
Page<WorkHourReportVo> page = prodReportMapper.workHourReportList(hashMap, pageQuery.build(), detailTable, planTable); Page<WorkHourReportVo> page = prodReportMapper.workHourReportList(hashMap, pageQuery.build(), detailTable,
planTable);
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
@ -188,7 +192,8 @@ public class ProdReportServiceImpl implements IProdReportService {
Long processId = parseProcessId(String.valueOf(hashMap.get("processId"))); Long processId = parseProcessId(String.valueOf(hashMap.get("processId")));
String detailTable = getPlanDetailTableNameByProcessId(processId); String detailTable = getPlanDetailTableNameByProcessId(processId);
String planTable = getPlanInfoTableNameByProcessId(processId); String planTable = getPlanInfoTableNameByProcessId(processId);
Page<TeamWorkReportVo> page = prodReportMapper.teamWorkReportList(hashMap, pageQuery.build(), detailTable, planTable); Page<TeamWorkReportVo> page = prodReportMapper.teamWorkReportList(hashMap, pageQuery.build(), detailTable,
planTable);
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
@ -316,7 +321,8 @@ public class ProdReportServiceImpl implements IProdReportService {
* @param orderIds ID * @param orderIds ID
* @param orderProcessMap * @param orderProcessMap
*/ */
private void batchQueryProcessProgress(List<String> planCodes, Map<String, List<ProcessProgressVo>> planProcessMap) { private void batchQueryProcessProgress(List<String> planCodes,
Map<String, List<ProcessProgressVo>> planProcessMap) {
// 查询半制品工序进度prod_plan_info_2 // 查询半制品工序进度prod_plan_info_2
queryProcessProgressByTable(planCodes, "prod_plan_info_2", planProcessMap); queryProcessProgressByTable(planCodes, "prod_plan_info_2", planProcessMap);
@ -327,13 +333,13 @@ public class ProdReportServiceImpl implements IProdReportService {
queryProcessProgressByTable(planCodes, "prod_plan_info_4", planProcessMap); queryProcessProgressByTable(planCodes, "prod_plan_info_4", planProcessMap);
// 对每个计划的工序进度进行排序 // 对每个计划的工序进度进行排序
planProcessMap.values().forEach(processList -> planProcessMap.values().forEach(processList -> processList.sort((a, b) -> {
processList.sort((a, b) -> { if (a.getProcessOrder() == null)
if (a.getProcessOrder() == null) return 1; return 1;
if (b.getProcessOrder() == null) return -1; if (b.getProcessOrder() == null)
return -1;
return a.getProcessOrder().compareTo(b.getProcessOrder()); return a.getProcessOrder().compareTo(b.getProcessOrder());
}) }));
);
} }
/** /**
@ -342,12 +348,14 @@ public class ProdReportServiceImpl implements IProdReportService {
* @param tableName * @param tableName
* @param orderProcessMap * @param orderProcessMap
*/ */
private void queryProcessProgressByTable(List<String> planCodes, String tableName, Map<String, List<ProcessProgressVo>> planProcessMap) { private void queryProcessProgressByTable(List<String> planCodes, String tableName,
Map<String, List<ProcessProgressVo>> planProcessMap) {
try { try {
// 使用批量查询避免 N+1一次性查询该工序表下所有计划的工序进度 // 使用批量查询避免 N+1一次性查询该工序表下所有计划的工序进度
// 返回结果中包含 planCode 字段,便于在此处进行分组 // 返回结果中包含 planCode 字段,便于在此处进行分组
String tenantId = LoginHelper.getTenantId(); String tenantId = LoginHelper.getTenantId();
List<ProcessProgressVo> batchResults = prodReportMapper.getPlansProcessProgressBatch(planCodes, tableName, tenantId); List<ProcessProgressVo> batchResults = prodReportMapper.getPlansProcessProgressBatch(planCodes, tableName,
tenantId);
if (batchResults != null && !batchResults.isEmpty()) { if (batchResults != null && !batchResults.isEmpty()) {
for (ProcessProgressVo progress : batchResults) { for (ProcessProgressVo progress : batchResults) {
String planCode = progress.getPlanCode(); String planCode = progress.getPlanCode();
@ -459,20 +467,24 @@ public class ProdReportServiceImpl implements IProdReportService {
for (String planTableName : planTables) { for (String planTableName : planTables) {
try { try {
List<ProcessProgressVo> processProgress = prodReportMapper.getPlanProcessProgress(planCode, planTableName); List<ProcessProgressVo> processProgress = prodReportMapper.getPlanProcessProgress(planCode,
planTableName);
if (processProgress != null && !processProgress.isEmpty()) { if (processProgress != null && !processProgress.isEmpty()) {
allProcessProgress.addAll(processProgress); allProcessProgress.addAll(processProgress);
} }
} catch (Exception e) { } catch (Exception e) {
// 记录日志但不中断处理 // 记录日志但不中断处理
System.out.println("查询工序进度失败,计划编码: " + planCode + ", 表: " + planTableName + ", 错误: " + e.getMessage()); System.out.println(
"查询工序进度失败,计划编码: " + planCode + ", 表: " + planTableName + ", 错误: " + e.getMessage());
} }
} }
// 按工序顺序排序 // 按工序顺序排序
allProcessProgress.sort((a, b) -> { allProcessProgress.sort((a, b) -> {
if (a.getProcessOrder() == null) return 1; if (a.getProcessOrder() == null)
if (b.getProcessOrder() == null) return -1; return 1;
if (b.getProcessOrder() == null)
return -1;
return a.getProcessOrder().compareTo(b.getProcessOrder()); return a.getProcessOrder().compareTo(b.getProcessOrder());
}); });
@ -516,10 +528,12 @@ public class ProdReportServiceImpl implements IProdReportService {
// 时间字段转换 // 时间字段转换
if (vo.getPlanBeginTime() != null) { if (vo.getPlanBeginTime() != null) {
exportVo.setPlanBeginTime(vo.getPlanBeginTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); exportVo.setPlanBeginTime(
vo.getPlanBeginTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
} }
if (vo.getRealBeginTime() != null) { if (vo.getRealBeginTime() != null) {
exportVo.setRealBeginTime(vo.getRealBeginTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); exportVo.setRealBeginTime(
vo.getRealBeginTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
} }
if (vo.getPlanEndTime() != null) { if (vo.getPlanEndTime() != null) {
exportVo.setPlanEndTime(vo.getPlanEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); exportVo.setPlanEndTime(vo.getPlanEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
@ -548,7 +562,8 @@ public class ProdReportServiceImpl implements IProdReportService {
.append(")"); .append(")");
// 如果有进度百分比,添加进度信息 // 如果有进度百分比,添加进度信息
if (process.getProcessProgress() != null && process.getProcessProgress().compareTo(BigDecimal.ZERO) > 0) { if (process.getProcessProgress() != null
&& process.getProcessProgress().compareTo(BigDecimal.ZERO) > 0) {
processDetail.append(" ").append(process.getProcessProgress()).append("%"); processDetail.append(" ").append(process.getProcessProgress()).append("%");
} }
} }
@ -558,8 +573,6 @@ public class ProdReportServiceImpl implements IProdReportService {
return exportVo; return exportVo;
} }
/** /**
* ID * ID
* @param orderInfo * @param orderInfo
@ -575,7 +588,8 @@ public class ProdReportServiceImpl implements IProdReportService {
if ("2".equals(dispatchType)) { if ("2".equals(dispatchType)) {
// 工艺路线派工通过工艺路线ID获取工序列表 // 工艺路线派工通过工艺路线ID获取工序列表
Long routeId = dispatchIdObj instanceof Integer ? ((Integer) dispatchIdObj).longValue() : (Long) dispatchIdObj; Long routeId = dispatchIdObj instanceof Integer ? ((Integer) dispatchIdObj).longValue()
: (Long) dispatchIdObj;
ProdBaseRouteProcessBo bo = new ProdBaseRouteProcessBo(); ProdBaseRouteProcessBo bo = new ProdBaseRouteProcessBo();
bo.setRouteId(routeId); bo.setRouteId(routeId);
List<ProdBaseRouteProcessVo> routeProcessList = prodBaseRouteProcessService.queryList(bo); List<ProdBaseRouteProcessVo> routeProcessList = prodBaseRouteProcessService.queryList(bo);
@ -588,7 +602,8 @@ public class ProdReportServiceImpl implements IProdReportService {
} else if ("3".equals(dispatchType)) { } else if ("3".equals(dispatchType)) {
// 单工序派工直接使用dispatchId作为工序ID // 单工序派工直接使用dispatchId作为工序ID
if (dispatchIdObj != null) { if (dispatchIdObj != null) {
Long processId = dispatchIdObj instanceof Integer ? ((Integer) dispatchIdObj).longValue() : (Long) dispatchIdObj; Long processId = dispatchIdObj instanceof Integer ? ((Integer) dispatchIdObj).longValue()
: (Long) dispatchIdObj;
processIds.add(processId); processIds.add(processId);
} }
} else { } else {
@ -605,7 +620,6 @@ public class ProdReportServiceImpl implements IProdReportService {
return processIds; return processIds;
} }
/** /**
* *
* @param hashMap * @param hashMap
@ -618,7 +632,6 @@ public class ProdReportServiceImpl implements IProdReportService {
return prodReportMapper.hourlyOutputByHour(hashMap, detailTable, planTable); return prodReportMapper.hourlyOutputByHour(hashMap, detailTable, planTable);
} }
/** /**
* *
* processId * processId
@ -630,7 +643,8 @@ public class ProdReportServiceImpl implements IProdReportService {
if (tenantId != null && !tenantId.isEmpty()) { if (tenantId != null && !tenantId.isEmpty()) {
hashMap.put("tenantId", tenantId); hashMap.put("tenantId", tenantId);
} }
} catch (Exception ignore) {} } catch (Exception ignore) {
}
Long processId = parseProcessId(hashMap.get("processId")); Long processId = parseProcessId(hashMap.get("processId"));
String planTable = getPlanInfoTableNameByProcessId(processId); String planTable = getPlanInfoTableNameByProcessId(processId);
return prodReportMapper.processWorkOrderStats(hashMap, planTable); return prodReportMapper.processWorkOrderStats(hashMap, planTable);
@ -646,7 +660,8 @@ public class ProdReportServiceImpl implements IProdReportService {
if (tenantId != null && !tenantId.isEmpty()) { if (tenantId != null && !tenantId.isEmpty()) {
hashMap.put("tenantId", tenantId); hashMap.put("tenantId", tenantId);
} }
} catch (Exception ignore) {} } catch (Exception ignore) {
}
Long processId = parseProcessId(hashMap.get("processId")); Long processId = parseProcessId(hashMap.get("processId"));
String planTable = getPlanInfoTableNameByProcessId(processId); String planTable = getPlanInfoTableNameByProcessId(processId);
Page<HashMap<String, Object>> mpPage = pageQuery.build(); Page<HashMap<String, Object>> mpPage = pageQuery.build();
@ -686,12 +701,23 @@ public class ProdReportServiceImpl implements IProdReportService {
} }
private Long asLong(Object o) { private Long asLong(Object o) {
if (o == null) return null; if (o == null)
try { return Long.parseLong(String.valueOf(o)); } catch (Exception e) { return null; } return null;
try {
return Long.parseLong(String.valueOf(o));
} catch (Exception e) {
return null;
} }
}
private BigDecimal asBigDecimal(Object o) { private BigDecimal asBigDecimal(Object o) {
if (o == null) return BigDecimal.ZERO; if (o == null)
try { return new BigDecimal(String.valueOf(o)); } catch (Exception e) { return BigDecimal.ZERO; } return BigDecimal.ZERO;
try {
return new BigDecimal(String.valueOf(o));
} catch (Exception e) {
return BigDecimal.ZERO;
}
} }
/** /**
@ -827,4 +853,54 @@ public class ProdReportServiceImpl implements IProdReportService {
return result; return result;
} }
/**
* 5/
*/
@Override
public HashMap<String, Object> getDashboardData5(Map hashMap) {
HashMap<String, Object> result = new HashMap<>();
// TODO: 根据实际业务逻辑查询数据
// 示例数据结构
List<String> x1 = new ArrayList<>();
x1.add("合格数");
x1.add("不合格数");
List<String> y1 = new ArrayList<>();
y1.add("8");
y1.add("1");
result.put("x1", x1);
result.put("y1", y1);
return result;
}
/**
* 6
*/
@Override
public HashMap<String, Object> getDashboardData6(Map hashMap) {
HashMap<String, Object> result = new HashMap<>();
// TODO: 根据实际业务逻辑查询数据
// 示例数据结构
List<String> x1 = new ArrayList<>();
x1.add("产品1");
x1.add("产品2");
x1.add("产品3");
x1.add("产品4");
x1.add("产品5");
x1.add("产品6");
List<Integer> y1 = new ArrayList<>();
y1.add(98);
y1.add(95);
y1.add(93);
y1.add(95);
y1.add(93);
y1.add(97);
result.put("x1", x1);
result.put("y1", y1);
return result;
}
} }

Loading…
Cancel
Save