feat(cost): 添加生产指标计算结果模块

- 创建 CostProdMetricResult 实体类,包含主键、报表ID、指标ID、计算日期、班组、计算值等字段
- 创建 CostProdMetricResultBo 业务对象,用于接收前端参数并进行验证
- 创建 CostProdMetricResultVo 视图对象,用于返回给前端的数据结构
- 实现 CostProdMetricResultController 控制器,提供增删改查和导出功能
- 创建 CostProdMetricResultMapper 数据访问接口,继承 BaseMapperPlus
- 实现 CostProdMetricResultServiceImpl 服务类,处理业务逻辑和数据操作
- 配置 CostProdMetricResultMapper.xml 映射文件,定义结果映射关系
- 添加完整的 CRUD 操作支持,包括分页查询、单条查询、新增、修改、删除和批量导出功能
- 集成 MyBatis-Plus 分页插件和 LambdaQueryWrapper 查询构建器
- 实现数据校验机制和 Excel 导出功能
This commit is contained in:
2026-06-17 09:57:00 +08:00
parent 931fc74ed7
commit c547456108
8 changed files with 489 additions and 0 deletions

View File

@@ -0,0 +1,99 @@
package com.klp.cost.controller;
import java.util.List;
import java.util.Arrays;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.klp.common.annotation.RepeatSubmit;
import com.klp.common.annotation.Log;
import com.klp.common.core.controller.BaseController;
import com.klp.common.core.domain.PageQuery;
import com.klp.common.core.domain.R;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import com.klp.common.enums.BusinessType;
import com.klp.common.utils.poi.ExcelUtil;
import com.klp.cost.domain.vo.CostProdMetricResultVo;
import com.klp.cost.domain.bo.CostProdMetricResultBo;
import com.klp.cost.service.ICostProdMetricResultService;
import com.klp.common.core.page.TableDataInfo;
/**
* 生产指标计算结果
*
* @author klp
* @date 2026-06-17
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/cost/prodMetricResult")
public class CostProdMetricResultController extends BaseController {
private final ICostProdMetricResultService iCostProdMetricResultService;
/**
* 查询生产指标计算结果列表
*/
@GetMapping("/list")
public TableDataInfo<CostProdMetricResultVo> list(CostProdMetricResultBo bo, PageQuery pageQuery) {
return iCostProdMetricResultService.queryPageList(bo, pageQuery);
}
/**
* 导出生产指标计算结果列表
*/
@Log(title = "生产指标计算结果", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(CostProdMetricResultBo bo, HttpServletResponse response) {
List<CostProdMetricResultVo> list = iCostProdMetricResultService.queryList(bo);
ExcelUtil.exportExcel(list, "生产指标计算结果", CostProdMetricResultVo.class, response);
}
/**
* 获取生产指标计算结果详细信息
*
* @param resultId 主键
*/
@GetMapping("/{resultId}")
public R<CostProdMetricResultVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long resultId) {
return R.ok(iCostProdMetricResultService.queryById(resultId));
}
/**
* 新增生产指标计算结果
*/
@Log(title = "生产指标计算结果", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody CostProdMetricResultBo bo) {
return toAjax(iCostProdMetricResultService.insertByBo(bo));
}
/**
* 修改生产指标计算结果
*/
@Log(title = "生产指标计算结果", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody CostProdMetricResultBo bo) {
return toAjax(iCostProdMetricResultService.updateByBo(bo));
}
/**
* 删除生产指标计算结果
*
* @param resultIds 主键串
*/
@Log(title = "生产指标计算结果", businessType = BusinessType.DELETE)
@DeleteMapping("/{resultIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] resultIds) {
return toAjax(iCostProdMetricResultService.deleteWithValidByIds(Arrays.asList(resultIds), true));
}
}

View File

@@ -0,0 +1,60 @@
package com.klp.cost.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 生产指标计算结果对象 cost_prod_metric_result
*
* @author klp
* @date 2026-06-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("cost_prod_metric_result")
public class CostProdMetricResult extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 主键ID
*/
@TableId(value = "result_id")
private Long resultId;
/**
* 报表ID关联生产日报
*/
private Long reportId;
/**
* 指标ID关联cost_prod_metric
*/
private Long metricId;
/**
* 计算日期
*/
private Date metricDate;
/**
* 班组
*/
private String teamGroup;
/**
* 计算值
*/
private BigDecimal calcValue;
/**
* 标签
*/
private String tags;
/**
* 删除标识 0=正常 2=删除
*/
@TableLogic
private Long delFlag;
}

View File

@@ -0,0 +1,59 @@
package com.klp.cost.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 生产指标计算结果业务对象 cost_prod_metric_result
*
* @author klp
* @date 2026-06-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CostProdMetricResultBo extends BaseEntity {
/**
* 主键ID
*/
private Long resultId;
/**
* 报表ID关联生产日报
*/
private Long reportId;
/**
* 指标ID关联cost_prod_metric
*/
private Long metricId;
/**
* 计算日期
*/
private Date metricDate;
/**
* 班组
*/
private String teamGroup;
/**
* 计算值
*/
private BigDecimal calcValue;
/**
* 标签
*/
private String tags;
}

View File

@@ -0,0 +1,70 @@
package com.klp.cost.domain.vo;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.klp.common.annotation.ExcelDictFormat;
import com.klp.common.convert.ExcelDictConvert;
import lombok.Data;
/**
* 生产指标计算结果视图对象 cost_prod_metric_result
*
* @author klp
* @date 2026-06-17
*/
@Data
@ExcelIgnoreUnannotated
public class CostProdMetricResultVo {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long resultId;
/**
* 报表ID关联生产日报
*/
@ExcelProperty(value = "报表ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "关=联生产日报")
private Long reportId;
/**
* 指标ID关联cost_prod_metric
*/
@ExcelProperty(value = "指标ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "关=联cost_prod_metric")
private Long metricId;
/**
* 计算日期
*/
@ExcelProperty(value = "计算日期")
private Date metricDate;
/**
* 班组
*/
@ExcelProperty(value = "班组")
private String teamGroup;
/**
* 计算值
*/
@ExcelProperty(value = "计算值")
private BigDecimal calcValue;
/**
* 标签
*/
@ExcelProperty(value = "标签")
private String tags;
}

View File

@@ -0,0 +1,15 @@
package com.klp.cost.mapper;
import com.klp.cost.domain.CostProdMetricResult;
import com.klp.cost.domain.vo.CostProdMetricResultVo;
import com.klp.common.core.mapper.BaseMapperPlus;
/**
* 生产指标计算结果Mapper接口
*
* @author klp
* @date 2026-06-17
*/
public interface CostProdMetricResultMapper extends BaseMapperPlus<CostProdMetricResultMapper, CostProdMetricResult, CostProdMetricResultVo> {
}

View File

@@ -0,0 +1,49 @@
package com.klp.cost.service;
import com.klp.cost.domain.CostProdMetricResult;
import com.klp.cost.domain.vo.CostProdMetricResultVo;
import com.klp.cost.domain.bo.CostProdMetricResultBo;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 生产指标计算结果Service接口
*
* @author klp
* @date 2026-06-17
*/
public interface ICostProdMetricResultService {
/**
* 查询生产指标计算结果
*/
CostProdMetricResultVo queryById(Long resultId);
/**
* 查询生产指标计算结果列表
*/
TableDataInfo<CostProdMetricResultVo> queryPageList(CostProdMetricResultBo bo, PageQuery pageQuery);
/**
* 查询生产指标计算结果列表
*/
List<CostProdMetricResultVo> queryList(CostProdMetricResultBo bo);
/**
* 新增生产指标计算结果
*/
Boolean insertByBo(CostProdMetricResultBo bo);
/**
* 修改生产指标计算结果
*/
Boolean updateByBo(CostProdMetricResultBo bo);
/**
* 校验并批量删除生产指标计算结果信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@@ -0,0 +1,114 @@
package com.klp.cost.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.common.utils.StringUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.cost.domain.bo.CostProdMetricResultBo;
import com.klp.cost.domain.vo.CostProdMetricResultVo;
import com.klp.cost.domain.CostProdMetricResult;
import com.klp.cost.mapper.CostProdMetricResultMapper;
import com.klp.cost.service.ICostProdMetricResultService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 生产指标计算结果Service业务层处理
*
* @author klp
* @date 2026-06-17
*/
@RequiredArgsConstructor
@Service
public class CostProdMetricResultServiceImpl implements ICostProdMetricResultService {
private final CostProdMetricResultMapper baseMapper;
/**
* 查询生产指标计算结果
*/
@Override
public CostProdMetricResultVo queryById(Long resultId){
return baseMapper.selectVoById(resultId);
}
/**
* 查询生产指标计算结果列表
*/
@Override
public TableDataInfo<CostProdMetricResultVo> queryPageList(CostProdMetricResultBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<CostProdMetricResult> lqw = buildQueryWrapper(bo);
Page<CostProdMetricResultVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询生产指标计算结果列表
*/
@Override
public List<CostProdMetricResultVo> queryList(CostProdMetricResultBo bo) {
LambdaQueryWrapper<CostProdMetricResult> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<CostProdMetricResult> buildQueryWrapper(CostProdMetricResultBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<CostProdMetricResult> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getReportId() != null, CostProdMetricResult::getReportId, bo.getReportId());
lqw.eq(bo.getMetricId() != null, CostProdMetricResult::getMetricId, bo.getMetricId());
lqw.eq(bo.getMetricDate() != null, CostProdMetricResult::getMetricDate, bo.getMetricDate());
lqw.eq(StringUtils.isNotBlank(bo.getTeamGroup()), CostProdMetricResult::getTeamGroup, bo.getTeamGroup());
lqw.eq(bo.getCalcValue() != null, CostProdMetricResult::getCalcValue, bo.getCalcValue());
lqw.eq(StringUtils.isNotBlank(bo.getTags()), CostProdMetricResult::getTags, bo.getTags());
return lqw;
}
/**
* 新增生产指标计算结果
*/
@Override
public Boolean insertByBo(CostProdMetricResultBo bo) {
CostProdMetricResult add = BeanUtil.toBean(bo, CostProdMetricResult.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setResultId(add.getResultId());
}
return flag;
}
/**
* 修改生产指标计算结果
*/
@Override
public Boolean updateByBo(CostProdMetricResultBo bo) {
CostProdMetricResult update = BeanUtil.toBean(bo, CostProdMetricResult.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(CostProdMetricResult entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除生产指标计算结果
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}