feat(mes): 新增看板接口

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

@ -1,6 +1,5 @@
package org.dromara.mes.controller;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
@ -18,7 +17,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* MESController
*
@ -40,7 +38,8 @@ public class ProdReportController extends BaseController {
* @return
*/
@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);
}
@ -51,12 +50,12 @@ public class ProdReportController extends BaseController {
* @return
*/
@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);
ExcelUtil.exportExcel(list, "生产计划完成率报表", PlanCompletionRateReportVo.class, response);
}
/**
*
*
@ -64,7 +63,8 @@ public class ProdReportController extends BaseController {
* @return
*/
@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);
}
@ -75,12 +75,12 @@ public class ProdReportController extends BaseController {
* @return
*/
@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);
ExcelUtil.exportExcel(list, "生产计划完成率对比报表", PlanCompletionContrastReportVo.class, response);
}
/**
*
*
@ -123,12 +123,12 @@ public class ProdReportController extends BaseController {
return R.ok(vos);
}
/**
*
*/
@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);
}
@ -145,7 +145,8 @@ public class ProdReportController extends BaseController {
*
*/
@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);
}
@ -163,7 +164,8 @@ public class ProdReportController extends BaseController {
*
*/
@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);
}
@ -205,7 +207,8 @@ public class ProdReportController extends BaseController {
*
*/
@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);
}
@ -286,4 +289,22 @@ public class ProdReportController extends BaseController {
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;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.mes.domain.vo.*;
@ -60,7 +59,8 @@ public interface IProdReportService {
/**
*
* @param hashMap
* @return */
* @return
*/
List<HashMap<String, Object>> yieldSummaryByMachine(Map hashMap);
/**
@ -120,7 +120,7 @@ public interface IProdReportService {
* @param productOrderId ID
* @return
*/
// List<ProcessProgressVo> getOrderProcessProgress(Long productOrderId);
// List<ProcessProgressVo> getOrderProcessProgress(Long productOrderId);
/**
* VO
@ -200,4 +200,20 @@ public interface IProdReportService {
*/
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
public TableDataInfo<PlanCompletionRateReportVo> planCompletionRateReportVoList(Map hashMap, PageQuery pageQuery) {
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);
}
@ -91,7 +92,7 @@ public class ProdReportServiceImpl implements IProdReportService {
if (StringUtils.isNull(processId)) {
// 默认返回半制品表
tableName = DatabaseConstants.TABLE_NAME_PROD_PRODUCT_PLAN_DETAIL_PREFIX + "_2";
}else if (processId == 17L) {
} else if (processId == 17L) {
tableName = DatabaseConstants.TABLE_NAME_PROD_PRODUCT_PLAN_DETAIL_PREFIX + "_3";
} else if (processId == 18L) {
tableName = DatabaseConstants.TABLE_NAME_PROD_PRODUCT_PLAN_DETAIL_PREFIX + "_4";
@ -108,9 +109,11 @@ public class ProdReportServiceImpl implements IProdReportService {
* @return
*/
@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"))));
Page<PlanCompletionContrastReportVo> page = prodReportMapper.planCompletionContrastReportVoList(hashMap, pageQuery.build(), tableName);
Page<PlanCompletionContrastReportVo> page = prodReportMapper.planCompletionContrastReportVoList(hashMap,
pageQuery.build(), tableName);
return TableDataInfo.build(page);
}
@ -157,7 +160,8 @@ public class ProdReportServiceImpl implements IProdReportService {
Long processId = parseProcessId(String.valueOf(hashMap.get("processId")));
String detailTable = getPlanDetailTableNameByProcessId(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);
}
@ -188,7 +192,8 @@ public class ProdReportServiceImpl implements IProdReportService {
Long processId = parseProcessId(String.valueOf(hashMap.get("processId")));
String detailTable = getPlanDetailTableNameByProcessId(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);
}
@ -316,7 +321,8 @@ public class ProdReportServiceImpl implements IProdReportService {
* @param orderIds ID
* @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
queryProcessProgressByTable(planCodes, "prod_plan_info_2", planProcessMap);
@ -327,13 +333,13 @@ public class ProdReportServiceImpl implements IProdReportService {
queryProcessProgressByTable(planCodes, "prod_plan_info_4", planProcessMap);
// 对每个计划的工序进度进行排序
planProcessMap.values().forEach(processList ->
processList.sort((a, b) -> {
if (a.getProcessOrder() == null) return 1;
if (b.getProcessOrder() == null) return -1;
planProcessMap.values().forEach(processList -> processList.sort((a, b) -> {
if (a.getProcessOrder() == null)
return 1;
if (b.getProcessOrder() == null)
return -1;
return a.getProcessOrder().compareTo(b.getProcessOrder());
})
);
}));
}
/**
@ -342,12 +348,14 @@ public class ProdReportServiceImpl implements IProdReportService {
* @param tableName
* @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 {
// 使用批量查询避免 N+1一次性查询该工序表下所有计划的工序进度
// 返回结果中包含 planCode 字段,便于在此处进行分组
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()) {
for (ProcessProgressVo progress : batchResults) {
String planCode = progress.getPlanCode();
@ -459,20 +467,24 @@ public class ProdReportServiceImpl implements IProdReportService {
for (String planTableName : planTables) {
try {
List<ProcessProgressVo> processProgress = prodReportMapper.getPlanProcessProgress(planCode, planTableName);
List<ProcessProgressVo> processProgress = prodReportMapper.getPlanProcessProgress(planCode,
planTableName);
if (processProgress != null && !processProgress.isEmpty()) {
allProcessProgress.addAll(processProgress);
}
} catch (Exception e) {
// 记录日志但不中断处理
System.out.println("查询工序进度失败,计划编码: " + planCode + ", 表: " + planTableName + ", 错误: " + e.getMessage());
System.out.println(
"查询工序进度失败,计划编码: " + planCode + ", 表: " + planTableName + ", 错误: " + e.getMessage());
}
}
// 按工序顺序排序
allProcessProgress.sort((a, b) -> {
if (a.getProcessOrder() == null) return 1;
if (b.getProcessOrder() == null) return -1;
if (a.getProcessOrder() == null)
return 1;
if (b.getProcessOrder() == null)
return -1;
return a.getProcessOrder().compareTo(b.getProcessOrder());
});
@ -516,10 +528,12 @@ public class ProdReportServiceImpl implements IProdReportService {
// 时间字段转换
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) {
exportVo.setRealBeginTime(vo.getRealBeginTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
exportVo.setRealBeginTime(
vo.getRealBeginTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
}
if (vo.getPlanEndTime() != null) {
exportVo.setPlanEndTime(vo.getPlanEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
@ -548,7 +562,8 @@ public class ProdReportServiceImpl implements IProdReportService {
.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("%");
}
}
@ -558,8 +573,6 @@ public class ProdReportServiceImpl implements IProdReportService {
return exportVo;
}
/**
* ID
* @param orderInfo
@ -575,7 +588,8 @@ public class ProdReportServiceImpl implements IProdReportService {
if ("2".equals(dispatchType)) {
// 工艺路线派工通过工艺路线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();
bo.setRouteId(routeId);
List<ProdBaseRouteProcessVo> routeProcessList = prodBaseRouteProcessService.queryList(bo);
@ -588,7 +602,8 @@ public class ProdReportServiceImpl implements IProdReportService {
} else if ("3".equals(dispatchType)) {
// 单工序派工直接使用dispatchId作为工序ID
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);
}
} else {
@ -605,7 +620,6 @@ public class ProdReportServiceImpl implements IProdReportService {
return processIds;
}
/**
*
* @param hashMap
@ -618,7 +632,6 @@ public class ProdReportServiceImpl implements IProdReportService {
return prodReportMapper.hourlyOutputByHour(hashMap, detailTable, planTable);
}
/**
*
* processId
@ -630,7 +643,8 @@ public class ProdReportServiceImpl implements IProdReportService {
if (tenantId != null && !tenantId.isEmpty()) {
hashMap.put("tenantId", tenantId);
}
} catch (Exception ignore) {}
} catch (Exception ignore) {
}
Long processId = parseProcessId(hashMap.get("processId"));
String planTable = getPlanInfoTableNameByProcessId(processId);
return prodReportMapper.processWorkOrderStats(hashMap, planTable);
@ -646,7 +660,8 @@ public class ProdReportServiceImpl implements IProdReportService {
if (tenantId != null && !tenantId.isEmpty()) {
hashMap.put("tenantId", tenantId);
}
} catch (Exception ignore) {}
} catch (Exception ignore) {
}
Long processId = parseProcessId(hashMap.get("processId"));
String planTable = getPlanInfoTableNameByProcessId(processId);
Page<HashMap<String, Object>> mpPage = pageQuery.build();
@ -686,12 +701,23 @@ public class ProdReportServiceImpl implements IProdReportService {
}
private Long asLong(Object o) {
if (o == null) return null;
try { return Long.parseLong(String.valueOf(o)); } catch (Exception e) { return null; }
if (o == null)
return null;
try {
return Long.parseLong(String.valueOf(o));
} catch (Exception e) {
return null;
}
}
private BigDecimal asBigDecimal(Object o) {
if (o == null) return BigDecimal.ZERO;
try { return new BigDecimal(String.valueOf(o)); } catch (Exception e) { return BigDecimal.ZERO; }
if (o == null)
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;
}
/**
* 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