feat(cost): 新增生产月报复制功能,修复考勤校验参数问题,优化表格列操作

This commit is contained in:
2026-05-27 13:19:55 +08:00
parent 454d8de6a2
commit e95e9adfcd
6 changed files with 188 additions and 43 deletions

View File

@@ -96,4 +96,16 @@ public class CostProdReportController extends BaseController {
@PathVariable Long[] reportIds) {
return toAjax(iCostProdReportService.deleteWithValidByIds(Arrays.asList(reportIds), true));
}
/**
* 复制生产月报
* 明细列原样保留指标列重新插入并更新config中的id引用
*/
@Log(title = "生产月报", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/copy/{sourceId}")
public R<CostProdReportVo> copy(@NotNull(message = "源报表ID不能为空") @PathVariable Long sourceId,
@RequestBody CostProdReportBo bo) {
return R.ok(iCostProdReportService.copyReport(sourceId, bo));
}
}

View File

@@ -46,4 +46,9 @@ public interface ICostProdReportService {
* 校验并批量删除生产月报信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 复制生产月报明细列原样保留指标列重新插入并更新config中的id引用
*/
CostProdReportVo copyReport(Long sourceId, CostProdReportBo bo);
}

View File

@@ -1,6 +1,9 @@
package com.klp.cost.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -12,7 +15,9 @@ import org.springframework.stereotype.Service;
import com.klp.cost.domain.bo.CostProdReportBo;
import com.klp.cost.domain.vo.CostProdReportVo;
import com.klp.cost.domain.CostProdReport;
import com.klp.cost.domain.CostProdMetric;
import com.klp.cost.mapper.CostProdReportMapper;
import com.klp.cost.mapper.CostProdMetricMapper;
import com.klp.cost.service.ICostProdReportService;
import java.util.List;
@@ -30,6 +35,7 @@ import java.util.Collection;
public class CostProdReportServiceImpl implements ICostProdReportService {
private final CostProdReportMapper baseMapper;
private final CostProdMetricMapper metricMapper;
/**
* 查询生产月报
@@ -110,4 +116,58 @@ public class CostProdReportServiceImpl implements ICostProdReportService {
}
return baseMapper.deleteBatchIds(ids) > 0;
}
/**
* 复制生产月报
* 明细列原样保留itemId不变指标列重新插入并更新config中的id引用
*/
@Override
public CostProdReportVo copyReport(Long sourceId, CostProdReportBo bo) {
CostProdReport source = baseMapper.selectById(sourceId);
if (source == null) {
throw new RuntimeException("源报表不存在");
}
// 创建新报表先插入以获取ID
CostProdReport newRp = new CostProdReport();
BeanUtil.copyProperties(source, newRp, "reportId", "colConfig");
newRp.setReportTitle(bo.getReportTitle() != null ? bo.getReportTitle() : source.getReportTitle() + "-副本");
if (bo.getReportDate() != null) newRp.setReportDate(bo.getReportDate());
if (bo.getLineType() != null) newRp.setLineType(bo.getLineType());
if (bo.getInputWeight() != null) newRp.setInputWeight(bo.getInputWeight());
if (bo.getOutputWeight() != null) newRp.setOutputWeight(bo.getOutputWeight());
if (bo.getRemark() != null) newRp.setRemark(bo.getRemark());
baseMapper.insert(newRp);
Long newRid = newRp.getReportId();
// 处理colConfig为每个指标列重新插入metric记录更新id引用
String colConfig = source.getColConfig();
if (StringUtils.isNotBlank(colConfig)) {
JSONObject cfg = JSONUtil.parseObj(colConfig);
JSONArray columns = cfg.getJSONArray("columns");
if (columns != null && columns.size() > 0) {
for (int i = 0; i < columns.size(); i++) {
JSONObject col = columns.getJSONObject(i);
if ("m".equals(col.getStr("t"))) {
String idStr = col.getStr("id");
Long oldMetricId = idStr != null ? Long.parseLong(idStr) : null;
if (oldMetricId != null) {
CostProdMetric srcMetric = metricMapper.selectById(oldMetricId);
if (srcMetric != null) {
CostProdMetric newMetric = new CostProdMetric();
BeanUtil.copyProperties(srcMetric, newMetric, "metricId", "reportId");
newMetric.setReportId(newRid);
metricMapper.insert(newMetric);
col.set("id", String.valueOf(newMetric.getMetricId()));
}
}
}
}
newRp.setColConfig(cfg.toString());
}
baseMapper.updateById(newRp);
}
return baseMapper.selectVoById(newRid);
}
}