feat:添加app-首页报表-生产概况-产品统计

ck
HuangHuiKang 1 month ago
parent 5dd2d7fa59
commit 6030506c8b

@ -164,7 +164,12 @@ public class BaogongRecordController {
ExcelUtils.write(response, "报工统计.xls", "数据", BaogongRecordStatRespVO.class, list);
}
@GetMapping("/trend")
@Operation(summary = "报工趋势统计")
@PreAuthorize("@ss.hasPermission('mes:baogong-record:query')")
public CommonResult<BaogongRecordTrendRespVO> getBaogongRecordTrend(@Valid BaogongRecordTrendReqVO reqVO) {
return success(baogongRecordService.getBaogongRecordTrend(reqVO));
}
}

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.mes.controller.admin.baogongrecord.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 报工趋势按天 Response VO")
@Data
public class BaogongRecordTrendDayRespVO {
@Schema(description = "日期yyyy-MM-dd")
private String day;
@Schema(description = "报工数量(合格+不合格)")
private Long baogongNum;
@Schema(description = "合格率(百分比)")
private BigDecimal passRate;
}

@ -0,0 +1,24 @@
package cn.iocoder.yudao.module.mes.controller.admin.baogongrecord.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 报工趋势 Request VO")
@Data
public class BaogongRecordTrendReqVO {
@Schema(description = "开始时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime beginBaogongTime;
@Schema(description = "结束时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime endBaogongTime;
}

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.mes.controller.admin.baogongrecord.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Schema(description = "管理后台 - 报工趋势汇总 Response VO")
@Data
public class BaogongRecordTrendRespVO {
@Schema(description = "报工数量(合格+不合格)")
private Long baogongNum;
@Schema(description = "合格数量")
private Long passNum;
@Schema(description = "不合格数量")
private Long noPassNum;
@Schema(description = "合格率(百分比)")
private BigDecimal passRate;
@Schema(description = "按天趋势数据")
private List<BaogongRecordTrendDayRespVO> dayTrend;
}

@ -33,5 +33,8 @@ public interface BaogongRecordMapper extends BaseMapperX<BaogongRecordDO> {
IPage<BaogongRecordStatRespVO> selectStatPage(Page<BaogongRecordStatRespVO> page,
@Param("reqVO") BaogongRecordStatPageReqVO reqVO);
BaogongRecordTrendRespVO selectTrendSummary(@Param("reqVO") BaogongRecordTrendReqVO reqVO);
List<BaogongRecordTrendDayRespVO> selectTrendByDay(@Param("reqVO") BaogongRecordTrendReqVO reqVO);
}

@ -60,5 +60,13 @@ public interface BaogongRecordService {
*/
PageResult<BaogongRecordStatRespVO> getBaogongRecordStatPage(BaogongRecordStatPageReqVO reqVO);
/**
* app--
*
* @param reqVO
* @return
*/
BaogongRecordTrendRespVO getBaogongRecordTrend(BaogongRecordTrendReqVO reqVO);
}

@ -7,6 +7,7 @@ import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
import cn.iocoder.yudao.module.mes.controller.admin.baogongrecord.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.baogongrecord.BaogongRecordDO;
@ -81,4 +82,21 @@ public class BaogongRecordServiceImpl implements BaogongRecordService {
return new PageResult<>(result.getRecords(), result.getTotal());
}
@Override
public BaogongRecordTrendRespVO getBaogongRecordTrend(BaogongRecordTrendReqVO reqVO) {
BaogongRecordTrendRespVO respVO = baogongRecordMapper.selectTrendSummary(reqVO);
if (respVO == null) {
respVO = new BaogongRecordTrendRespVO();
respVO.setBaogongNum(0L);
respVO.setPassNum(0L);
respVO.setNoPassNum(0L);
respVO.setPassRate(BigDecimal.ZERO);
}
List<BaogongRecordTrendDayRespVO> dayTrend = baogongRecordMapper.selectTrendByDay(reqVO);
respVO.setDayTrend(dayTrend);
return respVO;
}
}

@ -42,6 +42,52 @@
ORDER BY r.baogong_time DESC
</select>
<select id="selectTrendSummary"
resultType="cn.iocoder.yudao.module.mes.controller.admin.baogongrecord.vo.BaogongRecordTrendRespVO">
SELECT
IFNULL(SUM(IFNULL(r.num, 0) + IFNULL(r.no_pass_num, 0)), 0) AS baogongNum,
IFNULL(SUM(IFNULL(r.num, 0)), 0) AS passNum,
IFNULL(SUM(IFNULL(r.no_pass_num, 0)), 0) AS noPassNum,
CASE
WHEN IFNULL(SUM(IFNULL(r.num, 0) + IFNULL(r.no_pass_num, 0)), 0) = 0 THEN 0
ELSE ROUND(
IFNULL(SUM(IFNULL(r.num, 0)), 0) /
IFNULL(SUM(IFNULL(r.num, 0) + IFNULL(r.no_pass_num, 0)), 0) * 100, 2
)
END AS passRate
FROM mes_baogong_record r
WHERE r.deleted = b'0'
<if test="reqVO.beginBaogongTime != null">
AND r.baogong_time &gt;= #{reqVO.beginBaogongTime}
</if>
<if test="reqVO.endBaogongTime != null">
AND r.baogong_time &lt;= #{reqVO.endBaogongTime}
</if>
</select>
<select id="selectTrendByDay"
resultType="cn.iocoder.yudao.module.mes.controller.admin.baogongrecord.vo.BaogongRecordTrendDayRespVO">
SELECT
DATE_FORMAT(r.baogong_time, '%Y-%m-%d') AS day,
IFNULL(SUM(IFNULL(r.num, 0) + IFNULL(r.no_pass_num, 0)), 0) AS baogongNum,
CASE
WHEN IFNULL(SUM(IFNULL(r.num, 0) + IFNULL(r.no_pass_num, 0)), 0) = 0 THEN 0
ELSE ROUND(
IFNULL(SUM(IFNULL(r.num, 0)), 0) /
IFNULL(SUM(IFNULL(r.num, 0) + IFNULL(r.no_pass_num, 0)), 0) * 100, 2
)
END AS passRate
FROM mes_baogong_record r
WHERE r.deleted = b'0'
<if test="reqVO.beginBaogongTime != null">
AND r.baogong_time &gt;= #{reqVO.beginBaogongTime}
</if>
<if test="reqVO.endBaogongTime != null">
AND r.baogong_time &lt;= #{reqVO.endBaogongTime}
</if>
GROUP BY DATE_FORMAT(r.baogong_time, '%Y-%m-%d')
ORDER BY day ASC
</select>
</mapper>
Loading…
Cancel
Save