feat(cost): 新增生产月报复制功能,修复考勤校验参数问题,优化表格列操作
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,4 +46,9 @@ public interface ICostProdReportService {
|
||||
* 校验并批量删除生产月报信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/**
|
||||
* 复制生产月报(明细列原样保留,指标列重新插入并更新config中的id引用)
|
||||
*/
|
||||
CostProdReportVo copyReport(Long sourceId, CostProdReportBo bo);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user