diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/cost/pojo/entity/CostCalculationEmployeeEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/cost/pojo/entity/CostCalculationEmployeeEntity.java
new file mode 100644
index 000000000..5c866b428
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/cost/pojo/entity/CostCalculationEmployeeEntity.java
@@ -0,0 +1,101 @@
+/**
+ * BladeX Commercial License Agreement
+ * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
+ *
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ *
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ *
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ *
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ *
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ *
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.desk.cost.pojo.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+import java.io.Serial;
+
+/**
+ * 成本计算产值配置表 实体类
+ *
+ * @author BladeX
+ * @since 2026-04-21
+ */
+@Data
+@TableName("MES_COST_CALCULATION_EMPLOYEE")
+@Schema(description = "MesCostCalculationEmployee对象")
+@EqualsAndHashCode(callSuper = true)
+public class CostCalculationEmployeeEntity extends BaseEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+
+ /**
+ * 作业中心id
+ */
+ @Schema(description = "作业中心id")
+ private Long workCenterId;
+
+ /**
+ * 作业中心名称
+ */
+ @Schema(description = "作业中心编码")
+ private String workCenterCode;
+
+ /**
+ * 作业中心名称
+ */
+ @Schema(description = "作业中心名称")
+ private String workCenterName;
+
+ /**
+ * 员工工号
+ */
+ @Schema(description = "员工工号")
+ private String employeeCode;
+
+ /**
+ * 员工姓名
+ */
+ @Schema(description = "员工姓名")
+ private String employeeName;
+
+
+ /**
+ * 备注
+ */
+ @Schema(description = "备注")
+ private String remarks;
+
+ /**
+ * 创建人姓名
+ */
+ @Schema(description = "创建人姓名")
+ private String createUserName;
+
+ /**
+ * 更新人姓名
+ */
+ @Schema(description = "更新人姓名")
+ private String updateUserName;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/cost/pojo/entity/CostCalculationOutputEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/cost/pojo/entity/CostCalculationOutputEntity.java
new file mode 100644
index 000000000..a9c50564f
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/cost/pojo/entity/CostCalculationOutputEntity.java
@@ -0,0 +1,99 @@
+/**
+ * BladeX Commercial License Agreement
+ * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
+ *
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ *
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ *
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ *
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ *
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ *
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.desk.cost.pojo.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+import java.io.Serial;
+
+/**
+ * 成本计算产值配置表 实体类
+ *
+ * @author BladeX
+ * @since 2026-04-21
+ */
+@Data
+@TableName("MES_COST_CALCULATION_OUTPUT")
+@Schema(description = "MesCostCalculationOutput对象")
+@EqualsAndHashCode(callSuper = true)
+public class CostCalculationOutputEntity extends BaseEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 月份
+ */
+ @Schema(description = "月份")
+ private String month;
+
+ /**
+ * 作业中心id
+ */
+ @Schema(description = "作业中心id")
+ private Long workCenterId;
+
+ /**
+ * 作业中心名称
+ */
+ @Schema(description = "作业中心编码")
+ private String workCenterCode;
+
+ /**
+ * 作业中心名称
+ */
+ @Schema(description = "作业中心名称")
+ private String workCenterName;
+
+ /**
+ * 产值
+ */
+ @Schema(description = "产值")
+ private Double output;
+
+ /**
+ * 备注
+ */
+ @Schema(description = "备注")
+ private String remarks;
+
+ /**
+ * 创建人姓名
+ */
+ @Schema(description = "创建人姓名")
+ private String createUserName;
+
+ /**
+ * 更新人姓名
+ */
+ @Schema(description = "更新人姓名")
+ private String updateUserName;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/cost/pojo/entity/CostStatisticsEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/cost/pojo/entity/CostStatisticsEntity.java
index 97ad66961..0ddc50fe2 100644
--- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/cost/pojo/entity/CostStatisticsEntity.java
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/cost/pojo/entity/CostStatisticsEntity.java
@@ -133,4 +133,16 @@ public class CostStatisticsEntity extends BaseEntity {
@Schema(description = "交付中心")
private Long jcId;
+ /**
+ * 产值
+ */
+ @Schema(description = "产值")
+ private BigDecimal output;
+
+ /**
+ * 成本费用率
+ */
+ @Schema(description = "成本费用率")
+ private BigDecimal costRate;
+
}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/cost/pojo/vo/CostCalculationEmployeeVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/cost/pojo/vo/CostCalculationEmployeeVO.java
new file mode 100644
index 000000000..aeaed2425
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/cost/pojo/vo/CostCalculationEmployeeVO.java
@@ -0,0 +1,46 @@
+/**
+ * BladeX Commercial License Agreement
+ * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
+ *
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ *
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ *
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ *
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ *
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ *
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.desk.cost.pojo.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.desk.cost.pojo.entity.CostCalculationEmployeeEntity;
+
+import java.io.Serial;
+
+/**
+ * 成本计算物料配置表 视图实体类
+ *
+ * @author BladeX
+ * @since 2026-04-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CostCalculationEmployeeVO extends CostCalculationEmployeeEntity {
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+}
diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/cost/pojo/vo/CostCalculationOutputVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/cost/pojo/vo/CostCalculationOutputVO.java
new file mode 100644
index 000000000..84cb6b64e
--- /dev/null
+++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/cost/pojo/vo/CostCalculationOutputVO.java
@@ -0,0 +1,46 @@
+/**
+ * BladeX Commercial License Agreement
+ * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
+ *
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ *
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ *
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ *
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ *
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ *
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.desk.cost.pojo.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.desk.cost.pojo.entity.CostCalculationOutputEntity;
+
+import java.io.Serial;
+
+/**
+ * 成本计算物料配置表 视图实体类
+ *
+ * @author BladeX
+ * @since 2026-04-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CostCalculationOutputVO extends CostCalculationOutputEntity {
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/controller/CostCalculationEmployeeController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/controller/CostCalculationEmployeeController.java
new file mode 100644
index 000000000..e41d6b593
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/controller/CostCalculationEmployeeController.java
@@ -0,0 +1,227 @@
+/**
+ * BladeX Commercial License Agreement
+ * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
+ *
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ *
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ *
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ *
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ *
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ *
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.desk.cost.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.Valid;
+import lombok.AllArgsConstructor;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.excel.util.ExcelUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.annotation.IsAdmin;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.desk.cost.excel.CostCalculationEmployeeExcel;
+import org.springblade.desk.cost.pojo.entity.CostCalculationEmployeeEntity;
+import org.springblade.desk.cost.pojo.vo.CostCalculationEmployeeVO;
+import org.springblade.desk.cost.service.ICostCalculationEmployeeService;
+import org.springblade.desk.cost.wrapper.CostCalculationEmployeeWrapper;
+import org.springblade.desk.dashboard.pojo.entity.BsWorkCenterEntity;
+import org.springblade.desk.dashboard.service.IBsWorkCenterService;
+import org.springblade.system.cache.UserCache;
+import org.springblade.system.pojo.entity.UserInfo;
+import org.springframework.beans.BeanUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 成本计算物料配置表 控制器
+ *
+ * @author BladeX
+ * @since 2026-04-21
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/costCalculationEmployee")
+@Tag(name = "成本计算物料配置表", description = "成本计算物料配置表接口")
+public class CostCalculationEmployeeController extends BladeController {
+
+ private final ICostCalculationEmployeeService costCalculationEmployeeService;
+ private final IBsWorkCenterService workCenterService;
+
+
+ /**
+ * 成本计算物料配置表 详情
+ */
+ @GetMapping("/detail")
+ @ApiOperationSupport(order = 1)
+ @Operation(summary = "详情", description = "传入CostCalculationEmployee")
+ public R detail(CostCalculationEmployeeEntity costCalculationEmployee) {
+ CostCalculationEmployeeEntity detail = costCalculationEmployeeService.getOne(Condition.getQueryWrapper(costCalculationEmployee));
+ return R.data(CostCalculationEmployeeWrapper.build().entityVO(detail));
+ }
+ /**
+ * 成本计算物料配置表 分页
+ */
+ @GetMapping("/list")
+ @ApiOperationSupport(order = 2)
+ @Operation(summary = "分页", description = "传入CostCalculationEmployee")
+ public R> list(@Parameter(hidden = true) @RequestParam Map costCalculationEmployee, Query query) {
+ IPage pages = costCalculationEmployeeService.page(Condition.getPage(query), Condition.getQueryWrapper(costCalculationEmployee, CostCalculationEmployeeEntity.class));
+ return R.data(CostCalculationEmployeeWrapper.build().pageVO(pages));
+ }
+
+ /**
+ * 成本计算物料配置表 自定义分页
+ */
+ @GetMapping("/page")
+ @ApiOperationSupport(order = 3)
+ @Operation(summary = "分页", description = "传入CostCalculationEmployee")
+ public R> page(CostCalculationEmployeeVO costCalculationEmployee, Query query) {
+ IPage pages = costCalculationEmployeeService.selectCostCalculationEmployeePage(Condition.getPage(query), costCalculationEmployee);
+ return R.data(pages);
+ }
+
+ /**
+ * 成本计算物料配置表 新增
+ */
+ @PostMapping("/save")
+ @ApiOperationSupport(order = 4)
+ @Operation(summary = "新增", description = "传入CostCalculationEmployee")
+ public R save(@Valid @RequestBody CostCalculationEmployeeEntity costCalculationEmployee) {
+ return R.status(costCalculationEmployeeService.save(costCalculationEmployee));
+ }
+
+ /**
+ * 成本计算物料配置表 修改
+ */
+ @PostMapping("/update")
+ @ApiOperationSupport(order = 5)
+ @Operation(summary = "修改", description = "传入CostCalculationEmployee")
+ public R update(@Valid @RequestBody CostCalculationEmployeeEntity costCalculationEmployee) {
+ return R.status(costCalculationEmployeeService.updateById(costCalculationEmployee));
+ }
+
+ /**
+ * 成本计算物料配置表 新增或修改
+ */
+ @PostMapping("/submit")
+ @ApiOperationSupport(order = 6)
+ @Operation(summary = "新增或修改", description = "传入CostCalculationEmployee")
+ public R submit(@Valid @RequestBody CostCalculationEmployeeEntity costCalculationEmployee) {
+ return R.status(costCalculationEmployeeService.saveOrUpdate(costCalculationEmployee));
+ }
+
+ /**
+ * 成本计算物料配置表 删除
+ */
+ @PostMapping("/remove")
+ @ApiOperationSupport(order = 7)
+ @Operation(summary = "逻辑删除", description = "传入ids")
+ public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
+ return R.status(costCalculationEmployeeService.deleteLogic(Func.toLongList(ids)));
+ }
+
+
+ /**
+ * 导出数据
+ */
+ @IsAdmin
+ @GetMapping("/export-costCalculationEmployee")
+ @ApiOperationSupport(order = 9)
+ @Operation(summary = "导出数据", description = "传入CostCalculationEmployee")
+ public void exportCostCalculationEmployee(@Parameter(hidden = true) @RequestParam Map costCalculationEmployee, BladeUser bladeUser, HttpServletResponse response) {
+ QueryWrapper queryWrapper = Condition.getQueryWrapper(costCalculationEmployee, CostCalculationEmployeeEntity.class);
+ //if (!AuthUtil.isAdministrator()) {
+ // queryWrapper.lambda().eq(CostCalculationEmployee::getTenantId, bladeUser.getTenantId());
+ //}
+ //queryWrapper.lambda().eq(CostCalculationEmployeeEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED);
+ List list = costCalculationEmployeeService.export(queryWrapper);
+ ExcelUtil.export(response, "成本计算员工配置表数据" + DateUtil.time(), "成本计算员工配置表数据表", list, CostCalculationEmployeeExcel.class);
+ }
+
+ /**
+ * 导入模版
+ */
+ @GetMapping("/importTemplate")
+ @ApiOperationSupport(order = 9)
+ @Operation(summary = "导入模版", description = "导入模版")
+ public void importTemplate(HttpServletResponse response) {
+ List list = new ArrayList<>();
+ ExcelUtil.export(response, "成本计算员工配置表数据" + DateUtil.time(), "成本计算员工配置表数据", list, CostCalculationEmployeeExcel.class);
+ }
+
+ /**
+ * [基础分类] 导入Excel
+ */
+ @PostMapping("/import")
+ @ApiOperationSupport(order = 72)
+ @Operation(summary = "导入Excel", description = "MultipartFile")
+ public R importExcel(@RequestParam("file") MultipartFile file) {
+ List importList = ExcelUtil.read(
+ file, 0, 1, CostCalculationEmployeeExcel.class
+ );
+ if(CollectionUtils.isEmpty(importList)){
+ return R.fail("无法导入空数据!");
+ }
+ List list = new ArrayList<>();
+ for(CostCalculationEmployeeExcel employExcel : importList){
+ //根据员工编号查询,有则删除
+ CostCalculationEmployeeEntity old = costCalculationEmployeeService.getOne(Wrappers.lambdaQuery().eq(CostCalculationEmployeeEntity::getEmployeeCode,employExcel.getEmployeeCode()));
+ if(old != null){
+ costCalculationEmployeeService.deleteLogic(Func.toLongList(old.getId().toString()));
+ }
+ BsWorkCenterEntity workCenter = workCenterService.getOne(Wrappers.lambdaQuery().eq(BsWorkCenterEntity::getWcName,employExcel.getWorkCenterName()));
+ if(workCenter == null){
+ return R.fail("作业中心[" + employExcel.getWorkCenterName() + "]不存在!");
+ }
+ UserInfo userInfo = UserCache.getUserByCode(employExcel.getEmployeeCode());
+ if(userInfo == null){
+ return R.fail("员工工号[" + employExcel.getEmployeeCode() + "]不存在!");
+ }
+ CostCalculationEmployeeEntity entity = new CostCalculationEmployeeEntity();
+ BeanUtils.copyProperties(employExcel,entity);
+ entity.setWorkCenterName(workCenter.getWcName());
+ entity.setWorkCenterCode(workCenter.getWcCode());
+ entity.setWorkCenterId(workCenter.getId());
+ entity.setEmployeeName(userInfo.getUser().getRealName());
+ entity.setCreateUserName(UserCache.getUser(Long.valueOf(AuthUtil.getUserId())).getRealName());
+ entity.setUpdateUserName(UserCache.getUser(Long.valueOf(AuthUtil.getUserId())).getRealName());
+ list.add(entity);
+ }
+ if(CollectionUtils.isNotEmpty(list)){
+ costCalculationEmployeeService.saveBatch(list);
+ }
+
+ return R.data("导入成功");
+ }
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/controller/CostCalculationOutputController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/controller/CostCalculationOutputController.java
new file mode 100644
index 000000000..46f520bfd
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/controller/CostCalculationOutputController.java
@@ -0,0 +1,224 @@
+/**
+ * BladeX Commercial License Agreement
+ * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
+ *
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ *
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ *
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ *
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ *
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ *
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.desk.cost.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.Valid;
+import lombok.AllArgsConstructor;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.excel.util.ExcelUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.annotation.IsAdmin;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.desk.cost.excel.CostCalculationOutputExcel;
+import org.springblade.desk.cost.pojo.entity.CostCalculationOutputEntity;
+import org.springblade.desk.cost.pojo.vo.CostCalculationOutputVO;
+import org.springblade.desk.cost.service.ICostCalculationOutputService;
+import org.springblade.desk.cost.wrapper.CostCalculationOutputWrapper;
+import org.springblade.desk.dashboard.pojo.entity.BsWorkCenterEntity;
+import org.springblade.desk.dashboard.service.IBsWorkCenterService;
+import org.springblade.system.cache.UserCache;
+import org.springframework.beans.BeanUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 成本计算物料配置表 控制器
+ *
+ * @author BladeX
+ * @since 2026-04-21
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/costCalculationOutput")
+@Tag(name = "成本计算物料配置表", description = "成本计算物料配置表接口")
+public class CostCalculationOutputController extends BladeController {
+
+ private final ICostCalculationOutputService costCalculationOutputService;
+ private final IBsWorkCenterService workCenterService;
+
+
+ /**
+ * 成本计算物料配置表 详情
+ */
+ @GetMapping("/detail")
+ @ApiOperationSupport(order = 1)
+ @Operation(summary = "详情", description = "传入CostCalculationOutput")
+ public R detail(CostCalculationOutputEntity costCalculationOutput) {
+ CostCalculationOutputEntity detail = costCalculationOutputService.getOne(Condition.getQueryWrapper(costCalculationOutput));
+ return R.data(CostCalculationOutputWrapper.build().entityVO(detail));
+ }
+ /**
+ * 成本计算物料配置表 分页
+ */
+ @GetMapping("/list")
+ @ApiOperationSupport(order = 2)
+ @Operation(summary = "分页", description = "传入CostCalculationOutput")
+ public R> list(@Parameter(hidden = true) @RequestParam Map costCalculationOutput, Query query) {
+ IPage pages = costCalculationOutputService.page(Condition.getPage(query), Condition.getQueryWrapper(costCalculationOutput, CostCalculationOutputEntity.class));
+ return R.data(CostCalculationOutputWrapper.build().pageVO(pages));
+ }
+
+ /**
+ * 成本计算物料配置表 自定义分页
+ */
+ @GetMapping("/page")
+ @ApiOperationSupport(order = 3)
+ @Operation(summary = "分页", description = "传入CostCalculationOutput")
+ public R> page(CostCalculationOutputVO costCalculationOutput, Query query) {
+ IPage pages = costCalculationOutputService.selectCostCalculationOutputPage(Condition.getPage(query), costCalculationOutput);
+ return R.data(pages);
+ }
+
+ /**
+ * 成本计算物料配置表 新增
+ */
+ @PostMapping("/save")
+ @ApiOperationSupport(order = 4)
+ @Operation(summary = "新增", description = "传入CostCalculationOutput")
+ public R save(@Valid @RequestBody CostCalculationOutputEntity costCalculationOutput) {
+ return R.status(costCalculationOutputService.save(costCalculationOutput));
+ }
+
+ /**
+ * 成本计算物料配置表 修改
+ */
+ @PostMapping("/update")
+ @ApiOperationSupport(order = 5)
+ @Operation(summary = "修改", description = "传入CostCalculationOutput")
+ public R update(@Valid @RequestBody CostCalculationOutputEntity costCalculationOutput) {
+ return R.status(costCalculationOutputService.updateById(costCalculationOutput));
+ }
+
+ /**
+ * 成本计算物料配置表 新增或修改
+ */
+ @PostMapping("/submit")
+ @ApiOperationSupport(order = 6)
+ @Operation(summary = "新增或修改", description = "传入CostCalculationOutput")
+ public R submit(@Valid @RequestBody CostCalculationOutputEntity costCalculationOutput) {
+ return R.status(costCalculationOutputService.saveOrUpdate(costCalculationOutput));
+ }
+
+ /**
+ * 成本计算物料配置表 删除
+ */
+ @PostMapping("/remove")
+ @ApiOperationSupport(order = 7)
+ @Operation(summary = "逻辑删除", description = "传入ids")
+ public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
+ return R.status(costCalculationOutputService.deleteLogic(Func.toLongList(ids)));
+ }
+
+
+ /**
+ * 导出数据
+ */
+ @IsAdmin
+ @GetMapping("/export-costCalculationOutput")
+ @ApiOperationSupport(order = 9)
+ @Operation(summary = "导出数据", description = "传入CostCalculationOutput")
+ public void exportCostCalculationOutput(@Parameter(hidden = true) @RequestParam Map costCalculationOutput, BladeUser bladeUser, HttpServletResponse response) {
+ QueryWrapper queryWrapper = Condition.getQueryWrapper(costCalculationOutput, CostCalculationOutputEntity.class);
+ //if (!AuthUtil.isAdministrator()) {
+ // queryWrapper.lambda().eq(CostCalculationOutput::getTenantId, bladeUser.getTenantId());
+ //}
+ //queryWrapper.lambda().eq(CostCalculationOutputEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED);
+ List list = costCalculationOutputService.export(queryWrapper);
+ ExcelUtil.export(response, "成本计算产值配置表数据" + DateUtil.time(), "成本计算物料产值表数据表", list, CostCalculationOutputExcel.class);
+ }
+
+ /**
+ * 导入模版
+ */
+ @GetMapping("/importTemplate")
+ @ApiOperationSupport(order = 9)
+ @Operation(summary = "导入模版", description = "导入模版")
+ public void importTemplate(HttpServletResponse response) {
+ List list = new ArrayList<>();
+ ExcelUtil.export(response, "成本计算产值配置表数据" + DateUtil.time(), "成本计算产值配置表数据", list, CostCalculationOutputExcel.class);
+ }
+
+ /**
+ * [基础分类] 导入Excel
+ */
+ @PostMapping("/import")
+ @ApiOperationSupport(order = 72)
+ @Operation(summary = "导入Excel", description = "MultipartFile")
+ public R importExcel(@RequestParam("file") MultipartFile file) {
+ List importList = ExcelUtil.read(
+ file, 0, 1, CostCalculationOutputExcel.class
+ );
+ if(CollectionUtils.isEmpty(importList)){
+ return R.fail("无法导入空数据!");
+ }
+ List list = new ArrayList<>();
+ for(CostCalculationOutputExcel outputExcel : importList){
+ //根据月份和作业中心查询,有则删除
+ CostCalculationOutputEntity old = costCalculationOutputService.getOne(Wrappers.lambdaQuery()
+ .eq(CostCalculationOutputEntity::getMonth,outputExcel.getMonth())
+ .eq(CostCalculationOutputEntity::getWorkCenterName,outputExcel.getWorkCenterName()));
+ if(old != null){
+ costCalculationOutputService.deleteLogic(Func.toLongList(old.getId().toString()));
+ }
+ BsWorkCenterEntity workCenter = workCenterService.getOne(Wrappers.lambdaQuery().eq(BsWorkCenterEntity::getWcName,outputExcel.getWorkCenterName()));
+ if(workCenter == null){
+ return R.fail("作业中心[" + outputExcel.getWorkCenterName() + "]不存在!");
+ }
+
+ CostCalculationOutputEntity entity = new CostCalculationOutputEntity();
+ BeanUtils.copyProperties(outputExcel,entity);
+ entity.setWorkCenterName(workCenter.getWcName());
+ entity.setWorkCenterCode(workCenter.getWcCode());
+ entity.setWorkCenterId(workCenter.getId());
+ entity.setCreateUserName(UserCache.getUser(Long.valueOf(AuthUtil.getUserId())).getRealName());
+ entity.setUpdateUserName(UserCache.getUser(Long.valueOf(AuthUtil.getUserId())).getRealName());
+ list.add(entity);
+ }
+ if(CollectionUtils.isNotEmpty(list)){
+ costCalculationOutputService.saveBatch(list);
+ }
+
+ return R.data("导入成功");
+ }
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/excel/CostCalculationEmployeeExcel.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/excel/CostCalculationEmployeeExcel.java
new file mode 100644
index 000000000..eee779e3a
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/excel/CostCalculationEmployeeExcel.java
@@ -0,0 +1,70 @@
+/**
+ * BladeX Commercial License Agreement
+ * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
+ *
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ *
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ *
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ *
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ *
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ *
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.desk.cost.excel;
+
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+/**
+ * 成本计算物料配置表 Excel实体类
+ *
+ * @author BladeX
+ * @since 2026-04-21
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class CostCalculationEmployeeExcel implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+
+ /**
+ * 物料编码
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("作业中心名称")
+ private String workCenterName;
+
+ /**
+ * 物料编码
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("人员工号")
+ private String employeeCode;
+
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/excel/CostCalculationOutputExcel.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/excel/CostCalculationOutputExcel.java
new file mode 100644
index 000000000..d16e34e83
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/excel/CostCalculationOutputExcel.java
@@ -0,0 +1,76 @@
+/**
+ * BladeX Commercial License Agreement
+ * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
+ *
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ *
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ *
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ *
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ *
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ *
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.desk.cost.excel;
+
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+/**
+ * 成本计算物料配置表 Excel实体类
+ *
+ * @author BladeX
+ * @since 2026-04-21
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class CostCalculationOutputExcel implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 物料编码
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("月份")
+ private String month;
+
+ /**
+ * 物料编码
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("作业中心名称")
+ private String workCenterName;
+
+ /**
+ * 物料编码
+ */
+ @ColumnWidth(20)
+ @ExcelProperty("产值")
+ private Double output;
+
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostCalculationEmployeeMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostCalculationEmployeeMapper.java
new file mode 100644
index 000000000..45c0aeff0
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostCalculationEmployeeMapper.java
@@ -0,0 +1,64 @@
+/**
+ * BladeX Commercial License Agreement
+ * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
+ *
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ *
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ *
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ *
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ *
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ *
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.desk.cost.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.desk.cost.excel.CostCalculationEmployeeExcel;
+import org.springblade.desk.cost.pojo.entity.CostCalculationEmployeeEntity;
+import org.springblade.desk.cost.pojo.vo.CostCalculationEmployeeVO;
+
+import java.util.List;
+
+/**
+ * 成本计算物料配置表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2026-04-21
+ */
+public interface CostCalculationEmployeeMapper extends BaseMapper {
+
+ /**
+ * 自定义分页
+ *
+ * @param page 分页参数
+ * @param CostCalculationEmployee 查询参数
+ * @return List
+ */
+ List selectCostCalculationEmployeePage(IPage page, CostCalculationEmployeeVO CostCalculationEmployee);
+
+
+ /**
+ * 获取导出数据
+ *
+ * @param queryWrapper 查询条件
+ * @return List
+ */
+ List export(@Param("ew") Wrapper queryWrapper);
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostCalculationEmployeeMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostCalculationEmployeeMapper.xml
new file mode 100644
index 000000000..aa260ae81
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostCalculationEmployeeMapper.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select * from MES_COST_CALCULATION_EMPLOYEE
+
+ is_deleted = 0
+
+
+
+
+
+ SELECT * FROM MES_COST_CALCULATION_EMPLOYEE ${ew.customSqlSegment}
+
+
+
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostCalculationOutputMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostCalculationOutputMapper.java
new file mode 100644
index 000000000..64c570fd2
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostCalculationOutputMapper.java
@@ -0,0 +1,64 @@
+/**
+ * BladeX Commercial License Agreement
+ * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
+ *
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ *
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ *
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ *
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ *
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ *
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.desk.cost.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.desk.cost.excel.CostCalculationOutputExcel;
+import org.springblade.desk.cost.pojo.entity.CostCalculationOutputEntity;
+import org.springblade.desk.cost.pojo.vo.CostCalculationOutputVO;
+
+import java.util.List;
+
+/**
+ * 成本计算物料配置表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2026-04-21
+ */
+public interface CostCalculationOutputMapper extends BaseMapper {
+
+ /**
+ * 自定义分页
+ *
+ * @param page 分页参数
+ * @param CostCalculationOutput 查询参数
+ * @return List
+ */
+ List selectCostCalculationOutputPage(IPage page, CostCalculationOutputVO CostCalculationOutput);
+
+
+ /**
+ * 获取导出数据
+ *
+ * @param queryWrapper 查询条件
+ * @return List
+ */
+ List export(@Param("ew") Wrapper queryWrapper);
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostCalculationOutputMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostCalculationOutputMapper.xml
new file mode 100644
index 000000000..5a32dad3f
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostCalculationOutputMapper.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select * from MES_COST_CALCULATION_OUTPUT
+
+ is_deleted = 0
+
+ and month = #{param2.month}
+
+
+ and WORK_CENTER_ID = #{param2.workCenterId}
+
+
+
+
+
+
+ SELECT * FROM MES_COST_CALCULATION_OUTPUT ${ew.customSqlSegment}
+
+
+
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostStatisticsMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostStatisticsMapper.java
index efd4e3548..d967831c7 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostStatisticsMapper.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostStatisticsMapper.java
@@ -74,4 +74,8 @@ public interface CostStatisticsMapper extends BaseMapper {
List exportWorkCenterMaterialCost(@Param("workCenterId")Long workCenterId, @Param("month")String month);
List exportAssistantMaterialCost(@Param("month")String month);
+
+ BigDecimal getWorkCenterMaterialCostByUser(@Param("userCode")String userCode, @Param("month")String month);
+
+ BigDecimal getAssistantMaterialCostByUser(@Param("userCode")String userCode,@Param("month")String month);
}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostStatisticsMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostStatisticsMapper.xml
index 3853cbb6a..bf4a32b96 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostStatisticsMapper.xml
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostStatisticsMapper.xml
@@ -71,6 +71,20 @@
AND a.GOODS_ID NOT IN ( SELECT id FROM ST_GOODS WHERE GOODS_CODE IN ( SELECT GOODS_CODE FROM MES_COST_CALCULATION_GOODS ) )
+
+ SELECT
+ nvl(sum(a.SIR_MONEY),0)
+ FROM
+ ST_STOCK_INOUT_RECORD a
+ left join blade_user b on a.user_id = b.id
+ WHERE
+ a.IS_DELETED = 0
+ AND a.IN_OUT_TYPE = 1
+ AND b.code = #{userCode}
+ AND to_char( IN_OUT_DATE, 'yyyy-MM' ) = #{month}
+ AND a.GOODS_ID NOT IN ( SELECT id FROM ST_GOODS WHERE GOODS_CODE IN ( SELECT GOODS_CODE FROM MES_COST_CALCULATION_GOODS ) )
+
+
SELECT
nvl(sum( a.SIR_MONEY ),0)
@@ -83,6 +97,18 @@
AND to_char( IN_OUT_DATE, 'yyyy-MM' ) = #{month}
AND a.GOODS_ID NOT IN ( SELECT id FROM ST_GOODS WHERE GOODS_CODE IN ( SELECT GOODS_CODE FROM MES_COST_CALCULATION_GOODS ) )
+
+ SELECT
+ nvl(sum( a.SIR_MONEY ),0)
+ FROM
+ ST_STOCK_INOUT_RECORD a left join blade_user b on a.user_id = b.id
+ WHERE
+ a.is_deleted = 0
+ AND b.code != #{userCode}
+ AND a.IN_OUT_TYPE = 1
+ AND to_char( IN_OUT_DATE, 'yyyy-MM' ) = #{month}
+ AND a.GOODS_ID NOT IN ( SELECT id FROM ST_GOODS WHERE GOODS_CODE IN ( SELECT GOODS_CODE FROM MES_COST_CALCULATION_GOODS ) )
+
SELECT nvl(
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/service/ICostCalculationEmployeeService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/service/ICostCalculationEmployeeService.java
new file mode 100644
index 000000000..e93a2c9cf
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/service/ICostCalculationEmployeeService.java
@@ -0,0 +1,62 @@
+/**
+ * BladeX Commercial License Agreement
+ * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
+ *
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ *
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ *
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ *
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ *
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ *
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.desk.cost.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.desk.cost.excel.CostCalculationEmployeeExcel;
+import org.springblade.desk.cost.pojo.entity.CostCalculationEmployeeEntity;
+import org.springblade.desk.cost.pojo.vo.CostCalculationEmployeeVO;
+
+import java.util.List;
+
+/**
+ * 成本计算物料配置表 服务类
+ *
+ * @author BladeX
+ * @since 2026-04-21
+ */
+public interface ICostCalculationEmployeeService extends BaseService {
+ /**
+ * 自定义分页
+ *
+ * @param page 分页参数
+ * @param costCalculationEmployee 查询参数
+ * @return IPage
+ */
+ IPage selectCostCalculationEmployeePage(IPage page, CostCalculationEmployeeVO costCalculationEmployee);
+
+
+ /**
+ * 导出数据
+ *
+ * @param queryWrapper 查询条件
+ * @return List
+ */
+ List export(Wrapper queryWrapper);
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/service/ICostCalculationOutputService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/service/ICostCalculationOutputService.java
new file mode 100644
index 000000000..ac3bf5e81
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/service/ICostCalculationOutputService.java
@@ -0,0 +1,62 @@
+/**
+ * BladeX Commercial License Agreement
+ * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
+ *
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ *
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ *
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ *
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ *
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ *
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.desk.cost.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.desk.cost.excel.CostCalculationOutputExcel;
+import org.springblade.desk.cost.pojo.entity.CostCalculationOutputEntity;
+import org.springblade.desk.cost.pojo.vo.CostCalculationOutputVO;
+
+import java.util.List;
+
+/**
+ * 成本计算物料配置表 服务类
+ *
+ * @author BladeX
+ * @since 2026-04-21
+ */
+public interface ICostCalculationOutputService extends BaseService {
+ /**
+ * 自定义分页
+ *
+ * @param page 分页参数
+ * @param costCalculationOutput 查询参数
+ * @return IPage
+ */
+ IPage selectCostCalculationOutputPage(IPage page, CostCalculationOutputVO costCalculationOutput);
+
+
+ /**
+ * 导出数据
+ *
+ * @param queryWrapper 查询条件
+ * @return List
+ */
+ List export(Wrapper queryWrapper);
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/service/impl/CostCalculationEmployeeServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/service/impl/CostCalculationEmployeeServiceImpl.java
new file mode 100644
index 000000000..6efbb470e
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/service/impl/CostCalculationEmployeeServiceImpl.java
@@ -0,0 +1,64 @@
+/**
+ * BladeX Commercial License Agreement
+ * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
+ *
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ *
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ *
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ *
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ *
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ *
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.desk.cost.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.desk.cost.excel.CostCalculationEmployeeExcel;
+import org.springblade.desk.cost.mapper.CostCalculationEmployeeMapper;
+import org.springblade.desk.cost.pojo.entity.CostCalculationEmployeeEntity;
+import org.springblade.desk.cost.pojo.vo.CostCalculationEmployeeVO;
+import org.springblade.desk.cost.service.ICostCalculationEmployeeService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 成本计算物料配置表 服务实现类
+ *
+ * @author BladeX
+ * @since 2026-04-21
+ */
+@Service
+public class CostCalculationEmployeeServiceImpl extends BaseServiceImpl implements ICostCalculationEmployeeService {
+
+ @Override
+ public IPage selectCostCalculationEmployeePage(IPage page, CostCalculationEmployeeVO costCalculationEmployee) {
+ return page.setRecords(baseMapper.selectCostCalculationEmployeePage(page, costCalculationEmployee));
+ }
+
+
+ @Override
+ public List export(Wrapper queryWrapper) {
+ List costCalculationEmployeeList = baseMapper.export(queryWrapper);
+ //CostCalculationEmployeeList.forEach(CostCalculationEmployee -> {
+ // CostCalculationEmployee.setTypeName(DictCache.getValue(DictEnum.YES_NO, CostCalculationEmployee.getType()));
+ //});
+ return costCalculationEmployeeList;
+ }
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/service/impl/CostCalculationOutputServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/service/impl/CostCalculationOutputServiceImpl.java
new file mode 100644
index 000000000..49b721a19
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/service/impl/CostCalculationOutputServiceImpl.java
@@ -0,0 +1,64 @@
+/**
+ * BladeX Commercial License Agreement
+ * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
+ *
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ *
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ *
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ *
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ *
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ *
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.desk.cost.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.desk.cost.excel.CostCalculationOutputExcel;
+import org.springblade.desk.cost.mapper.CostCalculationOutputMapper;
+import org.springblade.desk.cost.pojo.entity.CostCalculationOutputEntity;
+import org.springblade.desk.cost.pojo.vo.CostCalculationOutputVO;
+import org.springblade.desk.cost.service.ICostCalculationOutputService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 成本计算物料配置表 服务实现类
+ *
+ * @author BladeX
+ * @since 2026-04-21
+ */
+@Service
+public class CostCalculationOutputServiceImpl extends BaseServiceImpl implements ICostCalculationOutputService {
+
+ @Override
+ public IPage selectCostCalculationOutputPage(IPage page, CostCalculationOutputVO costCalculationOutput) {
+ return page.setRecords(baseMapper.selectCostCalculationOutputPage(page, costCalculationOutput));
+ }
+
+
+ @Override
+ public List export(Wrapper queryWrapper) {
+ List costCalculationOutputList = baseMapper.export(queryWrapper);
+ //CostCalculationOutputList.forEach(CostCalculationOutput -> {
+ // CostCalculationOutput.setTypeName(DictCache.getValue(DictEnum.YES_NO, CostCalculationOutput.getType()));
+ //});
+ return costCalculationOutputList;
+ }
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/service/impl/CostStatisticsServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/service/impl/CostStatisticsServiceImpl.java
index 0685aa687..0f136e0ea 100644
--- a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/service/impl/CostStatisticsServiceImpl.java
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/service/impl/CostStatisticsServiceImpl.java
@@ -39,20 +39,15 @@ import org.springblade.desk.basic.service.IWorkCenterService;
import org.springblade.desk.cost.excel.CostStatisticsExcel;
import org.springblade.desk.cost.excel.StStockInoutRecordExcel;
import org.springblade.desk.cost.mapper.CostStatisticsMapper;
-import org.springblade.desk.cost.pojo.entity.CostCalculationProcessEntity;
-import org.springblade.desk.cost.pojo.entity.CostStatisticsEntity;
-import org.springblade.desk.cost.pojo.entity.SubjectFeeDetailEntity;
-import org.springblade.desk.cost.pojo.entity.SubjectFeeEntity;
+import org.springblade.desk.cost.pojo.entity.*;
import org.springblade.desk.cost.pojo.vo.CostStatisticsVO;
-import org.springblade.desk.cost.service.ICostCalculationProcessService;
-import org.springblade.desk.cost.service.ICostStatisticsService;
-import org.springblade.desk.cost.service.ISubjectFeeDetailService;
-import org.springblade.desk.cost.service.ISubjectFeeService;
+import org.springblade.desk.cost.service.*;
import org.springblade.desk.produce.service.IWorkPlanService;
import org.springblade.system.cache.UserCache;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -72,6 +67,8 @@ public class CostStatisticsServiceImpl extends BaseServiceImpl selectCostStatisticsPage(IPage page, CostStatisticsVO CostStatistics) {
return page.setRecords(baseMapper.selectCostStatisticsPage(page, CostStatistics));
@@ -114,18 +111,45 @@ public class CostStatisticsServiceImpl extends BaseServiceImpllambdaQuery().eq(CostCalculationEmployeeEntity::getWorkCenterId,workCenter.getId()));
+ if(costCalculationEmployee == null){
+ //作业中心材料费用(剔除成本计算维护的物料)
+ workCenterMaterialCost = baseMapper.getWorkCenterMaterialCost(workCenter.getId(),month);
+ //费用科目中维护的作业中心材料费用
+ erpWorkCenterMaterialCost = getMaterialCost(subjectFeeList,workCenter,month);
+ //作业中心辅助人员材料费用比例
+ BigDecimal rate = baseMapper.getWorkCenterAssistantRate(workCenter.getId(),month);
+ //辅助人员材料费用
+ assistantMaterialCost = assistantMaterialCostSum.multiply(rate).divide(BigDecimal.valueOf(100),2, BigDecimal.ROUND_HALF_UP);
+ //材料费用
+ materialCost = workCenterMaterialCost.add(assistantMaterialCost).add(erpWorkCenterMaterialCost);
+ }else{
+ //作业中心材料费用(剔除成本计算维护的物料)
+ workCenterMaterialCost = baseMapper.getWorkCenterMaterialCostByUser(costCalculationEmployee.getEmployeeCode(),month);
+ //费用科目中维护的作业中心材料费用
+ erpWorkCenterMaterialCost = getMaterialCost(subjectFeeList,workCenter,month);
+ assistantMaterialCost = baseMapper.getAssistantMaterialCostByUser(costCalculationEmployee.getEmployeeCode(),month);
+ //材料费用
+ materialCost = workCenterMaterialCost.add(assistantMaterialCost).add(erpWorkCenterMaterialCost);
+ }
+
//月度产出
List processList = costCalculationProcessService.list(Wrappers.lambdaQuery().eq(CostCalculationProcessEntity::getWorkCenterId,workCenter.getId()));
+ //产值
+ BigDecimal output = BigDecimal.ZERO;
+ //成本费用率
+ BigDecimal costRate = BigDecimal.ZERO;
+ CostCalculationOutputEntity costCalculationOutput = costCalculationOutputService.getOne(Wrappers.lambdaQuery().eq(CostCalculationOutputEntity::getMonth,month).eq(CostCalculationOutputEntity::getWorkCenterId,workCenter.getId()));
+ if(costCalculationOutput != null){
+ output = BigDecimal.valueOf(costCalculationOutput.getOutput());
+ costRate = productCost.add(materialCost).divide(output,2, RoundingMode.HALF_UP);
+ }
BigDecimal monthOutputArea = BigDecimal.ZERO;
BigDecimal monthOutputVolume = BigDecimal.ZERO;
BigDecimal unitCost = BigDecimal.ZERO;
@@ -157,6 +181,8 @@ public class CostStatisticsServiceImpl extends BaseServiceImpl
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ *
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ *
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ *
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ *
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ *
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.desk.cost.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.desk.cost.pojo.entity.CostCalculationEmployeeEntity;
+import org.springblade.desk.cost.pojo.vo.CostCalculationEmployeeVO;
+
+import java.util.Objects;
+
+/**
+ * 成本计算物料配置表 包装类,返回视图层所需的字段
+ *
+ * @author BladeX
+ * @since 2026-04-21
+ */
+public class CostCalculationEmployeeWrapper extends BaseEntityWrapper {
+
+ public static CostCalculationEmployeeWrapper build() {
+ return new CostCalculationEmployeeWrapper();
+ }
+
+ @Override
+ public CostCalculationEmployeeVO entityVO(CostCalculationEmployeeEntity costCalculationEmployee) {
+ CostCalculationEmployeeVO costCalculationEmployeeVO = Objects.requireNonNull(BeanUtil.copyProperties(costCalculationEmployee, CostCalculationEmployeeVO.class));
+
+ //User createUser = UserCache.getUser(CostCalculationEmployee.getCreateUser());
+ //User updateUser = UserCache.getUser(CostCalculationEmployee.getUpdateUser());
+ //CostCalculationEmployeeVO.setCreateUserName(createUser.getName());
+ //CostCalculationEmployeeVO.setUpdateUserName(updateUser.getName());
+
+ return costCalculationEmployeeVO;
+ }
+
+
+}
diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/wrapper/CostCalculationOutputWrapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/wrapper/CostCalculationOutputWrapper.java
new file mode 100644
index 000000000..3b61209b9
--- /dev/null
+++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/wrapper/CostCalculationOutputWrapper.java
@@ -0,0 +1,60 @@
+/**
+ * BladeX Commercial License Agreement
+ * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
+ *
+ * Use of this software is governed by the Commercial License Agreement
+ * obtained after purchasing a license from BladeX.
+ *
+ * 1. This software is for development use only under a valid license
+ * from BladeX.
+ *
+ * 2. Redistribution of this software's source code to any third party
+ * without a commercial license is strictly prohibited.
+ *
+ * 3. Licensees may copyright their own code but cannot use segments
+ * from this software for such purposes. Copyright of this software
+ * remains with BladeX.
+ *
+ * Using this software signifies agreement to this License, and the software
+ * must not be used for illegal purposes.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
+ * not liable for any claims arising from secondary or illegal development.
+ *
+ * Author: Chill Zhuang (bladejava@qq.com)
+ */
+package org.springblade.desk.cost.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.desk.cost.pojo.entity.CostCalculationOutputEntity;
+import org.springblade.desk.cost.pojo.vo.CostCalculationOutputVO;
+
+import java.util.Objects;
+
+/**
+ * 成本计算物料配置表 包装类,返回视图层所需的字段
+ *
+ * @author BladeX
+ * @since 2026-04-21
+ */
+public class CostCalculationOutputWrapper extends BaseEntityWrapper {
+
+ public static CostCalculationOutputWrapper build() {
+ return new CostCalculationOutputWrapper();
+ }
+
+ @Override
+ public CostCalculationOutputVO entityVO(CostCalculationOutputEntity costCalculationOutput) {
+ CostCalculationOutputVO costCalculationOutputVO = Objects.requireNonNull(BeanUtil.copyProperties(costCalculationOutput, CostCalculationOutputVO.class));
+
+ //User createUser = UserCache.getUser(CostCalculationOutput.getCreateUser());
+ //User updateUser = UserCache.getUser(CostCalculationOutput.getUpdateUser());
+ //CostCalculationOutputVO.setCreateUserName(createUser.getName());
+ //CostCalculationOutputVO.setUpdateUserName(updateUser.getName());
+
+ return costCalculationOutputVO;
+ }
+
+
+}