From e95e9adfcdec89244bef4f5524bb32aaa7946b50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= <2178503051@qq.com> Date: Wed, 27 May 2026 13:19:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(cost):=20=E6=96=B0=E5=A2=9E=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E6=9C=88=E6=8A=A5=E5=A4=8D=E5=88=B6=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8D=E8=80=83=E5=8B=A4=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E9=97=AE=E9=A2=98=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=A1=A8=E6=A0=BC=E5=88=97=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CostProdReportController.java | 12 ++ .../cost/service/ICostProdReportService.java | 5 + .../impl/CostProdReportServiceImpl.java | 60 ++++++++ klp-ui/src/api/cost/prodReport.js | 9 ++ klp-ui/src/views/cost/comprehensive.vue | 141 +++++++++++++----- .../wms/hrm/attendance/attendanceCheck.vue | 4 +- 6 files changed, 188 insertions(+), 43 deletions(-) diff --git a/klp-cost/src/main/java/com/klp/cost/controller/CostProdReportController.java b/klp-cost/src/main/java/com/klp/cost/controller/CostProdReportController.java index c767d543..5554cd74 100644 --- a/klp-cost/src/main/java/com/klp/cost/controller/CostProdReportController.java +++ b/klp-cost/src/main/java/com/klp/cost/controller/CostProdReportController.java @@ -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 copy(@NotNull(message = "源报表ID不能为空") @PathVariable Long sourceId, + @RequestBody CostProdReportBo bo) { + return R.ok(iCostProdReportService.copyReport(sourceId, bo)); + } } diff --git a/klp-cost/src/main/java/com/klp/cost/service/ICostProdReportService.java b/klp-cost/src/main/java/com/klp/cost/service/ICostProdReportService.java index 7126e801..9be8afe9 100644 --- a/klp-cost/src/main/java/com/klp/cost/service/ICostProdReportService.java +++ b/klp-cost/src/main/java/com/klp/cost/service/ICostProdReportService.java @@ -46,4 +46,9 @@ public interface ICostProdReportService { * 校验并批量删除生产月报信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 复制生产月报(明细列原样保留,指标列重新插入并更新config中的id引用) + */ + CostProdReportVo copyReport(Long sourceId, CostProdReportBo bo); } diff --git a/klp-cost/src/main/java/com/klp/cost/service/impl/CostProdReportServiceImpl.java b/klp-cost/src/main/java/com/klp/cost/service/impl/CostProdReportServiceImpl.java index d7e0471a..446bdcaa 100644 --- a/klp-cost/src/main/java/com/klp/cost/service/impl/CostProdReportServiceImpl.java +++ b/klp-cost/src/main/java/com/klp/cost/service/impl/CostProdReportServiceImpl.java @@ -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); + } } diff --git a/klp-ui/src/api/cost/prodReport.js b/klp-ui/src/api/cost/prodReport.js index 518410ed..b369c5b1 100644 --- a/klp-ui/src/api/cost/prodReport.js +++ b/klp-ui/src/api/cost/prodReport.js @@ -42,3 +42,12 @@ export function delProdReport(reportId) { method: 'delete' }) } + +// 复制生产月报 +export function copyProdReport(sourceId, data) { + return request({ + url: '/cost/prodReport/copy/' + sourceId, + method: 'post', + data: data + }) +} diff --git a/klp-ui/src/views/cost/comprehensive.vue b/klp-ui/src/views/cost/comprehensive.vue index 2ef819d6..c63380ae 100644 --- a/klp-ui/src/views/cost/comprehensive.vue +++ b/klp-ui/src/views/cost/comprehensive.vue @@ -90,11 +90,19 @@ - + @@ -195,6 +203,7 @@ 新增 修改 删除 + 复制 @@ -218,14 +227,26 @@
确 定取 消
+ + + + + + + +
+ 确 定 + 取 消 +
+