update 生产计划完成率对比报表、导出

master
yinq 13 hours ago
parent bb9d25322a
commit a84caeacf6

@ -3,17 +3,11 @@ package org.dromara.mes.controller;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.sql.SqlUtil;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.mes.domain.bo.ProdMaterialBomBo;
import org.dromara.mes.domain.vo.PlanCompletionRateReportVo;
import org.dromara.mes.domain.vo.ProdMaterialBomVo;
import org.dromara.mes.domain.vo.ProdOrderInfoVo;
import org.dromara.mes.domain.vo.ProdPlanInfoVo;
import org.dromara.mes.domain.vo.*;
import org.dromara.mes.service.IProdReportService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -43,7 +37,7 @@ public class ProdReportController extends BaseController {
* @return
*/
@GetMapping("/planCompletionRateReport")
public TableDataInfo<PlanCompletionRateReportVo> qualityIssuesReportList(@RequestParam(required = false) Map hashMap, PageQuery pageQuery) {
public TableDataInfo<PlanCompletionRateReportVo> planCompletionRateReportList(@RequestParam(required = false) Map hashMap, PageQuery pageQuery) {
return prodReportService.planCompletionRateReportVoList(hashMap, pageQuery);
}
@ -54,9 +48,33 @@ public class ProdReportController extends BaseController {
* @return
*/
@PostMapping("/planCompletionRateReport/export")
public void export(@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);
}
/**
*
*
* @param hashMap
* @return
*/
@GetMapping("/planCompletionContrastReport")
public TableDataInfo<PlanCompletionContrastReportVo> planCompletionContrastReportVoList(@RequestParam(required = false) Map hashMap, PageQuery pageQuery) {
return prodReportService.planCompletionContrastReportVoList(hashMap, pageQuery);
}
/**
*
*
* @param hashMap
* @return
*/
@PostMapping("/planCompletionContrastReport/export")
public void planCompletionContrastReportExport(@RequestParam(required = false) Map hashMap, HttpServletResponse response) {
List<PlanCompletionContrastReportVo> list = prodReportService.planCompletionContrastReportVoList(hashMap);
ExcelUtil.exportExcel(list, "生产计划完成率对比报表", PlanCompletionContrastReportVo.class, response);
}
}

@ -0,0 +1,103 @@
package org.dromara.mes.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
/**
*
*
* @author Yinq
* @date 2025-02-28
*/
@Data
@ExcelIgnoreUnannotated
public class PlanCompletionContrastReportVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "物料名称")
private String materialName;
/**
*
*/
@ExcelProperty(value = "当日计划")
private BigDecimal dayPlanNumber;
/**
*
*/
@ExcelProperty(value = "当日实际")
private BigDecimal dayActualNumber;
/**
*
*/
@ExcelProperty(value = "当日差异")
private BigDecimal dayDeviationNumber;
/**
*
*/
@ExcelProperty(value = "日完成率")
private String dayCompletionRate;
/**
*
*/
@ExcelProperty(value = "当月计划")
private BigDecimal monthPlanNumber;
/**
*
*/
@ExcelProperty(value = "当月实际")
private BigDecimal monthActualNumber;
/**
*
*/
@ExcelProperty(value = "当月差异")
private BigDecimal monthDeviationNumber;
/**
*
*/
@ExcelProperty(value = "月完成率")
private String monthCompletionRate;
/**
*
*/
@ExcelProperty(value = "当年计划")
private BigDecimal yearPlanNumber;
/**
*
*/
@ExcelProperty(value = "当年实际")
private BigDecimal yearActualNumber;
/**
*
*/
@ExcelProperty(value = "当年差异")
private BigDecimal yearDeviationNumber;
/**
*
*/
@ExcelProperty(value = "年完成率")
private String yearCompletionRate;
}

@ -3,8 +3,8 @@ package org.dromara.mes.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.mes.domain.vo.PlanCompletionContrastReportVo;
import org.dromara.mes.domain.vo.PlanCompletionRateReportVo;
import org.dromara.mes.domain.vo.ProdPlanInfoVo;
import java.util.List;
import java.util.Map;
@ -21,9 +21,11 @@ public interface ProdReportMapper {
*
*
* @param hashMap
* @param page
* @param tableName
* @return
*/
Page<PlanCompletionRateReportVo> planCompletionRateReportVoList(@Param("map") Map hashMap, @Param("page") Page<ProdPlanInfoVo> page, @Param("tableName")String tableName);
Page<PlanCompletionRateReportVo> planCompletionRateReportVoList(@Param("map") Map hashMap, @Param("page") Page<PlanCompletionRateReportVo> page, @Param("tableName") String tableName);
/**
*
@ -31,6 +33,24 @@ public interface ProdReportMapper {
* @param hashMap
* @return
*/
List<PlanCompletionRateReportVo> planCompletionRateReportVoList(@Param("map") Map hashMap, @Param("tableName")String tableName);
List<PlanCompletionRateReportVo> planCompletionRateReportVoList(@Param("map") Map hashMap, @Param("tableName") String tableName);
/**
*
*
* @param hashMap
* @param page
* @param tableName
* @return
*/
Page<PlanCompletionContrastReportVo> planCompletionContrastReportVoList(@Param("map") Map hashMap, @Param("page") Page<PlanCompletionContrastReportVo> page, @Param("tableName") String tableName);
/**
*
*
* @param hashMap
* @param tableName
* @return
*/
List<PlanCompletionContrastReportVo> planCompletionContrastReportVoList(@Param("map") Map hashMap, @Param("tableName") String tableName);
}

@ -3,6 +3,7 @@ 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.PlanCompletionContrastReportVo;
import org.dromara.mes.domain.vo.PlanCompletionRateReportVo;
import java.util.List;
@ -20,6 +21,7 @@ public interface IProdReportService {
*
*
* @param hashMap
* @param pageQuery
* @return
*/
TableDataInfo<PlanCompletionRateReportVo> planCompletionRateReportVoList(Map hashMap, PageQuery pageQuery);
@ -32,4 +34,19 @@ public interface IProdReportService {
*/
List<PlanCompletionRateReportVo> planCompletionRateReportVoList(Map hashMap);
/**
*
* @param hashMap
* @param pageQuery
* @return
*/
TableDataInfo<PlanCompletionContrastReportVo> planCompletionContrastReportVoList(Map hashMap, PageQuery pageQuery);
/**
*
*
* @param hashMap
* @return
*/
List<PlanCompletionContrastReportVo> planCompletionContrastReportVoList(Map hashMap);
}

@ -84,6 +84,10 @@ public class ProdBaseMachineInfoServiceImpl implements IProdBaseMachineInfoServi
@Override
public List<ProdBaseMachineInfoVo> queryList(ProdBaseMachineInfoBo bo) {
MPJLambdaWrapper<ProdBaseMachineInfo> lqw = buildQueryWrapper(bo);
if (StringUtils.isNotNull(bo.getProcessId())) {
lqw.leftJoin(ProdBaseMachineProcess.class, ProdBaseMachineProcess::getMachineId, ProdBaseMachineInfo::getMachineId)
.eq(StringUtils.isNotNull(bo.getProcessId()), ProdBaseMachineProcess::getProcessId, bo.getProcessId());
}
return baseMapper.selectVoList(lqw);
}

@ -6,6 +6,7 @@ import org.dromara.common.constant.DatabaseConstants;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.mes.domain.vo.PlanCompletionContrastReportVo;
import org.dromara.mes.domain.vo.PlanCompletionRateReportVo;
import org.dromara.mes.mapper.ProdReportMapper;
import org.dromara.mes.service.IProdReportService;
@ -72,4 +73,28 @@ public class ProdReportServiceImpl implements IProdReportService {
return tableName;
}
/**
*
* @param hashMap
* @param pageQuery
* @return
*/
@Override
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);
return TableDataInfo.build(page);
}
/**
*
* @param hashMap
* @return
*/
@Override
public List<PlanCompletionContrastReportVo> planCompletionContrastReportVoList(Map hashMap) {
String tableName = getPlanInfoTableNameByProcessId(Long.parseLong(String.valueOf(hashMap.get("processId"))));
return prodReportMapper.planCompletionContrastReportVoList(hashMap, tableName);
}
}

@ -40,4 +40,68 @@
ORDER BY materialName
</select>
<select id="planCompletionContrastReportVoList"
resultType="org.dromara.mes.domain.vo.PlanCompletionContrastReportVo">
WITH aggregated_data AS (SELECT t.tenant_id, bmi.material_name AS materialName,
SUM(IIF(FORMAT(t.plan_begin_time, 'yyyy-MM-dd') = FORMAT(CAST(#{map.beginDate} AS DATETIME), 'yyyy-MM-dd'), t.plan_amount, 0)) AS
dayPlanNumber,
SUM(IIF(FORMAT(t.plan_begin_time, 'yyyy-MM-dd') = FORMAT(CAST(#{map.beginDate} AS DATETIME), 'yyyy-MM-dd'), t.complete_amount, 0))
AS dayActualNumber,
SUM(IIF(FORMAT(t.plan_begin_time, 'yyyy-MM') = FORMAT(CAST(#{map.beginDate} AS DATETIME), 'yyyy-MM'), t.plan_amount, 0)) AS
monthPlanNumber,
SUM(IIF(FORMAT(t.plan_begin_time, 'yyyy-MM') = FORMAT(CAST(#{map.beginDate} AS DATETIME), 'yyyy-MM'), t.complete_amount, 0)) AS
monthActualNumber,
SUM(IIF(FORMAT(t.plan_begin_time, 'yyyy') = FORMAT(CAST(#{map.beginDate} AS DATETIME), 'yyyy'), t.plan_amount, 0)) AS
yearPlanNumber,
SUM(IIF(FORMAT(t.plan_begin_time, 'yyyy') = FORMAT(CAST(#{map.beginDate} AS DATETIME), 'yyyy'), t.complete_amount, 0)) AS
yearActualNumber
FROM ${tableName} t
LEFT JOIN base_material_info bmi ON bmi.material_id = t.material_id
<where>
<if test="map.beginDate != null and map.beginDate != ''">
AND FORMAT(t.plan_begin_time, 'yyyy-MM-dd') BETWEEN #{map.beginDate} AND #{map.beginDate}
</if>
<if test="map.processId != null and map.processId != ''">
AND t.process_id = #{map.processId}
</if>
<if test="map.machineId != null and map.machineId != ''">
AND t.release_id = #{map.machineId}
</if>
<if test="map.shiftId != null and map.shiftId != ''">
AND t.shift_id = #{map.shiftId}
</if>
<if test="map.classTeamId != null and map.classTeamId != ''">
AND t.class_team_id = #{map.classTeamId}
</if>
<if test="map.planCode != null and map.planCode != ''">
AND t.plan_code LIKE CONCAT('%', #{map.planCode}, '%')
</if>
<if test="map.materialName != null and map.materialName != ''">
AND bmi.material_name LIKE CONCAT('%', #{map.materialName}, '%')
</if>
</where>
GROUP BY t.tenant_id, bmi.material_name)
SELECT materialName,
-- 当天数据
CAST(dayPlanNumber AS DECIMAL(10, 2)) AS dayPlanNumber,
CAST(dayActualNumber AS DECIMAL(10, 2)) AS dayActualNumber,
CAST(dayActualNumber - dayPlanNumber AS DECIMAL(10, 2)) AS dayDeviationNumber,
CONCAT(CAST(IIF(dayPlanNumber = 0, 0, (dayActualNumber * 100.0 / dayPlanNumber)) AS DECIMAL(10, 2)),
'%') AS dayCompletionRate,
-- 当月数据
CAST(monthPlanNumber AS DECIMAL(10, 2)) AS monthPlanNumber,
CAST(monthActualNumber AS DECIMAL(10, 2)) AS monthActualNumber,
CAST(monthActualNumber - monthPlanNumber AS DECIMAL(10, 2)) AS monthDeviationNumber,
CONCAT(CAST(IIF(monthPlanNumber = 0, 0, (monthActualNumber * 100.0 / monthPlanNumber)) AS DECIMAL(10, 2)),
'%') AS monthCompletionRate,
-- 当年数据
CAST(yearPlanNumber AS DECIMAL(10, 2)) AS yearPlanNumber,
CAST(yearActualNumber AS DECIMAL(10, 2)) AS yearActualNumber,
CAST(yearActualNumber - yearPlanNumber AS DECIMAL(10, 2)) AS yearDeviationNumber,
CONCAT(CAST(IIF(yearPlanNumber = 0, 0, (yearActualNumber * 100.0 / yearPlanNumber)) AS DECIMAL(10, 2)),
'%') AS yearCompletionRate
FROM aggregated_data
ORDER BY materialName
</select>
</mapper>

Loading…
Cancel
Save