From c39fc25a1ace19dcd0abd6a8cacac2f10163fd12 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 7 May 2026 16:23:11 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat(bonus):=20=E6=B7=BB=E5=8A=A0=E5=A5=96?= =?UTF-8?q?=E9=87=91=E5=88=86=E9=85=8D=E3=80=81=E5=A5=96=E9=87=91=E6=B1=A0?= =?UTF-8?q?=E5=92=8C=E5=B2=97=E4=BD=8D=E7=B3=BB=E6=95=B0=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 WmsBonusConfig 实体类用于奖金分配对象 - 新增 WmsBonusPool 实体类用于奖金池对象 - 新增 WmsPostCoeffConfig 实体类用于岗位系数配置对象 - 创建 IWmsBonusConfigService 接口及其实现类 - 创建 IWmsBonusPoolService 接口及其实现类 - 创建 IWmsPostCoeffConfigService 接口及其实现类 - 添加 WmsBonusConfigController 控制器实现 CRUD 操作 - 添加 WmsBonusPoolController 控制器实现 CRUD 操作 - 添加 WmsPostCoeffConfigController 控制器实现 CRUD 操作 - 创建对应的 Mapper 接口和 XML 映射文件 - 实现分页查询、导出 Excel 等功能 - 添加数据验证和业务逻辑处理 --- .../controller/WmsBonusConfigController.java | 99 +++++++++++++++ .../controller/WmsBonusPoolController.java | 99 +++++++++++++++ .../WmsPostCoeffConfigController.java | 99 +++++++++++++++ .../java/com/klp/domain/WmsBonusConfig.java | 74 +++++++++++ .../java/com/klp/domain/WmsBonusPool.java | 52 ++++++++ .../com/klp/domain/WmsPostCoeffConfig.java | 50 ++++++++ .../com/klp/domain/bo/WmsBonusConfigBo.java | 77 ++++++++++++ .../com/klp/domain/bo/WmsBonusPoolBo.java | 49 ++++++++ .../klp/domain/bo/WmsPostCoeffConfigBo.java | 47 +++++++ .../com/klp/domain/vo/WmsBonusConfigVo.java | 91 ++++++++++++++ .../com/klp/domain/vo/WmsBonusPoolVo.java | 56 +++++++++ .../klp/domain/vo/WmsPostCoeffConfigVo.java | 54 ++++++++ .../com/klp/mapper/WmsBonusConfigMapper.java | 15 +++ .../com/klp/mapper/WmsBonusPoolMapper.java | 15 +++ .../klp/mapper/WmsPostCoeffConfigMapper.java | 15 +++ .../klp/service/IWmsBonusConfigService.java | 49 ++++++++ .../com/klp/service/IWmsBonusPoolService.java | 49 ++++++++ .../service/IWmsPostCoeffConfigService.java | 49 ++++++++ .../impl/WmsBonusConfigServiceImpl.java | 117 ++++++++++++++++++ .../service/impl/WmsBonusPoolServiceImpl.java | 111 +++++++++++++++++ .../impl/WmsPostCoeffConfigServiceImpl.java | 111 +++++++++++++++++ .../mapper/klp/WmsBonusConfigMapper.xml | 27 ++++ .../mapper/klp/WmsBonusPoolMapper.xml | 21 ++++ .../mapper/klp/WmsPostCoeffConfigMapper.xml | 21 ++++ 24 files changed, 1447 insertions(+) create mode 100644 klp-wms/src/main/java/com/klp/controller/WmsBonusConfigController.java create mode 100644 klp-wms/src/main/java/com/klp/controller/WmsBonusPoolController.java create mode 100644 klp-wms/src/main/java/com/klp/controller/WmsPostCoeffConfigController.java create mode 100644 klp-wms/src/main/java/com/klp/domain/WmsBonusConfig.java create mode 100644 klp-wms/src/main/java/com/klp/domain/WmsBonusPool.java create mode 100644 klp-wms/src/main/java/com/klp/domain/WmsPostCoeffConfig.java create mode 100644 klp-wms/src/main/java/com/klp/domain/bo/WmsBonusConfigBo.java create mode 100644 klp-wms/src/main/java/com/klp/domain/bo/WmsBonusPoolBo.java create mode 100644 klp-wms/src/main/java/com/klp/domain/bo/WmsPostCoeffConfigBo.java create mode 100644 klp-wms/src/main/java/com/klp/domain/vo/WmsBonusConfigVo.java create mode 100644 klp-wms/src/main/java/com/klp/domain/vo/WmsBonusPoolVo.java create mode 100644 klp-wms/src/main/java/com/klp/domain/vo/WmsPostCoeffConfigVo.java create mode 100644 klp-wms/src/main/java/com/klp/mapper/WmsBonusConfigMapper.java create mode 100644 klp-wms/src/main/java/com/klp/mapper/WmsBonusPoolMapper.java create mode 100644 klp-wms/src/main/java/com/klp/mapper/WmsPostCoeffConfigMapper.java create mode 100644 klp-wms/src/main/java/com/klp/service/IWmsBonusConfigService.java create mode 100644 klp-wms/src/main/java/com/klp/service/IWmsBonusPoolService.java create mode 100644 klp-wms/src/main/java/com/klp/service/IWmsPostCoeffConfigService.java create mode 100644 klp-wms/src/main/java/com/klp/service/impl/WmsBonusConfigServiceImpl.java create mode 100644 klp-wms/src/main/java/com/klp/service/impl/WmsBonusPoolServiceImpl.java create mode 100644 klp-wms/src/main/java/com/klp/service/impl/WmsPostCoeffConfigServiceImpl.java create mode 100644 klp-wms/src/main/resources/mapper/klp/WmsBonusConfigMapper.xml create mode 100644 klp-wms/src/main/resources/mapper/klp/WmsBonusPoolMapper.xml create mode 100644 klp-wms/src/main/resources/mapper/klp/WmsPostCoeffConfigMapper.xml diff --git a/klp-wms/src/main/java/com/klp/controller/WmsBonusConfigController.java b/klp-wms/src/main/java/com/klp/controller/WmsBonusConfigController.java new file mode 100644 index 00000000..c0f200a7 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/controller/WmsBonusConfigController.java @@ -0,0 +1,99 @@ +package com.klp.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.domain.vo.WmsBonusConfigVo; +import com.klp.domain.bo.WmsBonusConfigBo; +import com.klp.service.IWmsBonusConfigService; +import com.klp.common.core.page.TableDataInfo; + +/** + * 奖金分配 + * + * @author klp + * @date 2026-05-07 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/wms/bonusConfig") +public class WmsBonusConfigController extends BaseController { + + private final IWmsBonusConfigService iWmsBonusConfigService; + + /** + * 查询奖金分配列表 + */ + @GetMapping("/list") + public TableDataInfo list(WmsBonusConfigBo bo, PageQuery pageQuery) { + return iWmsBonusConfigService.queryPageList(bo, pageQuery); + } + + /** + * 导出奖金分配列表 + */ + @Log(title = "奖金分配", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(WmsBonusConfigBo bo, HttpServletResponse response) { + List list = iWmsBonusConfigService.queryList(bo); + ExcelUtil.exportExcel(list, "奖金分配", WmsBonusConfigVo.class, response); + } + + /** + * 获取奖金分配详细信息 + * + * @param configId 主键 + */ + @GetMapping("/{configId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long configId) { + return R.ok(iWmsBonusConfigService.queryById(configId)); + } + + /** + * 新增奖金分配 + */ + @Log(title = "奖金分配", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody WmsBonusConfigBo bo) { + return toAjax(iWmsBonusConfigService.insertByBo(bo)); + } + + /** + * 修改奖金分配 + */ + @Log(title = "奖金分配", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody WmsBonusConfigBo bo) { + return toAjax(iWmsBonusConfigService.updateByBo(bo)); + } + + /** + * 删除奖金分配 + * + * @param configIds 主键串 + */ + @Log(title = "奖金分配", businessType = BusinessType.DELETE) + @DeleteMapping("/{configIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] configIds) { + return toAjax(iWmsBonusConfigService.deleteWithValidByIds(Arrays.asList(configIds), true)); + } +} diff --git a/klp-wms/src/main/java/com/klp/controller/WmsBonusPoolController.java b/klp-wms/src/main/java/com/klp/controller/WmsBonusPoolController.java new file mode 100644 index 00000000..2a76d4ec --- /dev/null +++ b/klp-wms/src/main/java/com/klp/controller/WmsBonusPoolController.java @@ -0,0 +1,99 @@ +package com.klp.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.domain.vo.WmsBonusPoolVo; +import com.klp.domain.bo.WmsBonusPoolBo; +import com.klp.service.IWmsBonusPoolService; +import com.klp.common.core.page.TableDataInfo; + +/** + * 奖金池 + * + * @author klp + * @date 2026-05-07 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/wms/bonusPool") +public class WmsBonusPoolController extends BaseController { + + private final IWmsBonusPoolService iWmsBonusPoolService; + + /** + * 查询奖金池列表 + */ + @GetMapping("/list") + public TableDataInfo list(WmsBonusPoolBo bo, PageQuery pageQuery) { + return iWmsBonusPoolService.queryPageList(bo, pageQuery); + } + + /** + * 导出奖金池列表 + */ + @Log(title = "奖金池", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(WmsBonusPoolBo bo, HttpServletResponse response) { + List list = iWmsBonusPoolService.queryList(bo); + ExcelUtil.exportExcel(list, "奖金池", WmsBonusPoolVo.class, response); + } + + /** + * 获取奖金池详细信息 + * + * @param poolId 主键 + */ + @GetMapping("/{poolId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long poolId) { + return R.ok(iWmsBonusPoolService.queryById(poolId)); + } + + /** + * 新增奖金池 + */ + @Log(title = "奖金池", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody WmsBonusPoolBo bo) { + return toAjax(iWmsBonusPoolService.insertByBo(bo)); + } + + /** + * 修改奖金池 + */ + @Log(title = "奖金池", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody WmsBonusPoolBo bo) { + return toAjax(iWmsBonusPoolService.updateByBo(bo)); + } + + /** + * 删除奖金池 + * + * @param poolIds 主键串 + */ + @Log(title = "奖金池", businessType = BusinessType.DELETE) + @DeleteMapping("/{poolIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] poolIds) { + return toAjax(iWmsBonusPoolService.deleteWithValidByIds(Arrays.asList(poolIds), true)); + } +} diff --git a/klp-wms/src/main/java/com/klp/controller/WmsPostCoeffConfigController.java b/klp-wms/src/main/java/com/klp/controller/WmsPostCoeffConfigController.java new file mode 100644 index 00000000..84cccf88 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/controller/WmsPostCoeffConfigController.java @@ -0,0 +1,99 @@ +package com.klp.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.domain.vo.WmsPostCoeffConfigVo; +import com.klp.domain.bo.WmsPostCoeffConfigBo; +import com.klp.service.IWmsPostCoeffConfigService; +import com.klp.common.core.page.TableDataInfo; + +/** + * 岗位系数配置 + * + * @author klp + * @date 2026-05-07 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/wms/postCoeffConfig") +public class WmsPostCoeffConfigController extends BaseController { + + private final IWmsPostCoeffConfigService iWmsPostCoeffConfigService; + + /** + * 查询岗位系数配置列表 + */ + @GetMapping("/list") + public TableDataInfo list(WmsPostCoeffConfigBo bo, PageQuery pageQuery) { + return iWmsPostCoeffConfigService.queryPageList(bo, pageQuery); + } + + /** + * 导出岗位系数配置列表 + */ + @Log(title = "岗位系数配置", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(WmsPostCoeffConfigBo bo, HttpServletResponse response) { + List list = iWmsPostCoeffConfigService.queryList(bo); + ExcelUtil.exportExcel(list, "岗位系数配置", WmsPostCoeffConfigVo.class, response); + } + + /** + * 获取岗位系数配置详细信息 + * + * @param configId 主键 + */ + @GetMapping("/{configId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long configId) { + return R.ok(iWmsPostCoeffConfigService.queryById(configId)); + } + + /** + * 新增岗位系数配置 + */ + @Log(title = "岗位系数配置", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody WmsPostCoeffConfigBo bo) { + return toAjax(iWmsPostCoeffConfigService.insertByBo(bo)); + } + + /** + * 修改岗位系数配置 + */ + @Log(title = "岗位系数配置", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody WmsPostCoeffConfigBo bo) { + return toAjax(iWmsPostCoeffConfigService.updateByBo(bo)); + } + + /** + * 删除岗位系数配置 + * + * @param configIds 主键串 + */ + @Log(title = "岗位系数配置", businessType = BusinessType.DELETE) + @DeleteMapping("/{configIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] configIds) { + return toAjax(iWmsPostCoeffConfigService.deleteWithValidByIds(Arrays.asList(configIds), true)); + } +} diff --git a/klp-wms/src/main/java/com/klp/domain/WmsBonusConfig.java b/klp-wms/src/main/java/com/klp/domain/WmsBonusConfig.java new file mode 100644 index 00000000..e3add225 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/WmsBonusConfig.java @@ -0,0 +1,74 @@ +package com.klp.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * 奖金分配对象 wms_bonus_config + * + * @author klp + * @date 2026-05-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("wms_bonus_config") +public class WmsBonusConfig extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 主键ID + */ + @TableId(value = "config_id") + private Long configId; + /** + * 奖金池ID(关联bonus_pool.id) + */ + private Long poolId; + /** + * 员工ID + */ + private Long empId; + /** + * 员工姓名 + */ + private String empName; + /** + * 岗位 + */ + private String postName; + /** + * 职务系数 + */ + private BigDecimal dutyCoeff; + /** + * 基本系数 + */ + private BigDecimal baseCoeff; + /** + * 主任加减系数 + */ + private BigDecimal adjustCoeff; + /** + * 分配基数(底薪/元) + */ + private BigDecimal allocBase; + /** + * 分配奖金金额 + */ + private BigDecimal bonusAmount; + /** + * 备注 + */ + private String remark; + /** + * 删除标识 0正常 2删除 + */ + @TableLogic + private Long delFlag; + +} diff --git a/klp-wms/src/main/java/com/klp/domain/WmsBonusPool.java b/klp-wms/src/main/java/com/klp/domain/WmsBonusPool.java new file mode 100644 index 00000000..aafd4b6c --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/WmsBonusPool.java @@ -0,0 +1,52 @@ +package com.klp.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; + +/** + * 奖金池对象 wms_bonus_pool + * + * @author klp + * @date 2026-05-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("wms_bonus_pool") +public class WmsBonusPool extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 主键ID + */ + @TableId(value = "pool_id") + private Long poolId; + /** + * 产线 + */ + private String productionLine; + /** + * 奖金时间/统计时间 + */ + private Date bonusTime; + /** + * 奖金池总金额 + */ + private BigDecimal totalBonus; + /** + * 备注 + */ + private String remark; + /** + * 删除标识 0正常 2删除 + */ + @TableLogic + private Long delFlag; + +} diff --git a/klp-wms/src/main/java/com/klp/domain/WmsPostCoeffConfig.java b/klp-wms/src/main/java/com/klp/domain/WmsPostCoeffConfig.java new file mode 100644 index 00000000..1f2556da --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/WmsPostCoeffConfig.java @@ -0,0 +1,50 @@ +package com.klp.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * 岗位系数配置对象 wms_post_coeff_config + * + * @author klp + * @date 2026-05-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("wms_post_coeff_config") +public class WmsPostCoeffConfig extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 主键ID + */ + @TableId(value = "config_id") + private Long configId; + /** + * 岗位名称 + */ + private String postName; + /** + * 职务系数 + */ + private BigDecimal dutyCoeff; + /** + * 基本系数 + */ + private BigDecimal baseCoeff; + /** + * 备注 + */ + private String remark; + /** + * 删除标识 0正常 2删除 + */ + @TableLogic + private Long delFlag; + +} diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsBonusConfigBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsBonusConfigBo.java new file mode 100644 index 00000000..ea3eb73b --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsBonusConfigBo.java @@ -0,0 +1,77 @@ +package com.klp.domain.bo; + +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.math.BigDecimal; + +/** + * 奖金分配业务对象 wms_bonus_config + * + * @author klp + * @date 2026-05-07 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class WmsBonusConfigBo extends BaseEntity { + + /** + * 主键ID + */ + private Long configId; + + /** + * 奖金池ID(关联bonus_pool.id) + */ + private Long poolId; + + /** + * 员工ID + */ + private Long empId; + + /** + * 员工姓名 + */ + private String empName; + + /** + * 岗位 + */ + private String postName; + + /** + * 职务系数 + */ + private BigDecimal dutyCoeff; + + /** + * 基本系数 + */ + private BigDecimal baseCoeff; + + /** + * 主任加减系数 + */ + private BigDecimal adjustCoeff; + + /** + * 分配基数(底薪/元) + */ + private BigDecimal allocBase; + + /** + * 分配奖金金额 + */ + private BigDecimal bonusAmount; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsBonusPoolBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsBonusPoolBo.java new file mode 100644 index 00000000..e4fc398a --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsBonusPoolBo.java @@ -0,0 +1,49 @@ +package com.klp.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; + +/** + * 奖金池业务对象 wms_bonus_pool + * + * @author klp + * @date 2026-05-07 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class WmsBonusPoolBo extends BaseEntity { + + /** + * 主键ID + */ + private Long poolId; + + /** + * 产线 + */ + private String productionLine; + + /** + * 奖金时间/统计时间 + */ + private Date bonusTime; + + /** + * 奖金池总金额 + */ + private BigDecimal totalBonus; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsPostCoeffConfigBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsPostCoeffConfigBo.java new file mode 100644 index 00000000..9237cc81 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsPostCoeffConfigBo.java @@ -0,0 +1,47 @@ +package com.klp.domain.bo; + +import com.klp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.math.BigDecimal; + +/** + * 岗位系数配置业务对象 wms_post_coeff_config + * + * @author klp + * @date 2026-05-07 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class WmsPostCoeffConfigBo extends BaseEntity { + + /** + * 主键ID + */ + private Long configId; + + /** + * 岗位名称 + */ + private String postName; + + /** + * 职务系数 + */ + private BigDecimal dutyCoeff; + + /** + * 基本系数 + */ + private BigDecimal baseCoeff; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsBonusConfigVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsBonusConfigVo.java new file mode 100644 index 00000000..88980d39 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsBonusConfigVo.java @@ -0,0 +1,91 @@ +package com.klp.domain.vo; + +import java.math.BigDecimal; +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; + + +/** + * 奖金分配视图对象 wms_bonus_config + * + * @author klp + * @date 2026-05-07 + */ +@Data +@ExcelIgnoreUnannotated +public class WmsBonusConfigVo { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long configId; + + /** + * 奖金池ID(关联bonus_pool.id) + */ + @ExcelProperty(value = "奖金池ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "关=联bonus_pool.id") + private Long poolId; + + /** + * 员工ID + */ + @ExcelProperty(value = "员工ID") + private Long empId; + + /** + * 员工姓名 + */ + @ExcelProperty(value = "员工姓名") + private String empName; + + /** + * 岗位 + */ + @ExcelProperty(value = "岗位") + private String postName; + + /** + * 职务系数 + */ + @ExcelProperty(value = "职务系数") + private BigDecimal dutyCoeff; + + /** + * 基本系数 + */ + @ExcelProperty(value = "基本系数") + private BigDecimal baseCoeff; + + /** + * 主任加减系数 + */ + @ExcelProperty(value = "主任加减系数") + private BigDecimal adjustCoeff; + + /** + * 分配基数(底薪/元) + */ + @ExcelProperty(value = "分配基数(底薪/元)") + private BigDecimal allocBase; + + /** + * 分配奖金金额 + */ + @ExcelProperty(value = "分配奖金金额") + private BigDecimal bonusAmount; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsBonusPoolVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsBonusPoolVo.java new file mode 100644 index 00000000..935bec95 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsBonusPoolVo.java @@ -0,0 +1,56 @@ +package com.klp.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; + + +/** + * 奖金池视图对象 wms_bonus_pool + * + * @author klp + * @date 2026-05-07 + */ +@Data +@ExcelIgnoreUnannotated +public class WmsBonusPoolVo { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long poolId; + + /** + * 产线 + */ + @ExcelProperty(value = "产线") + private String productionLine; + + /** + * 奖金时间/统计时间 + */ + @ExcelProperty(value = "奖金时间/统计时间") + private Date bonusTime; + + /** + * 奖金池总金额 + */ + @ExcelProperty(value = "奖金池总金额") + private BigDecimal totalBonus; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsPostCoeffConfigVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsPostCoeffConfigVo.java new file mode 100644 index 00000000..3b780a73 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsPostCoeffConfigVo.java @@ -0,0 +1,54 @@ +package com.klp.domain.vo; + +import java.math.BigDecimal; +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; + + +/** + * 岗位系数配置视图对象 wms_post_coeff_config + * + * @author klp + * @date 2026-05-07 + */ +@Data +@ExcelIgnoreUnannotated +public class WmsPostCoeffConfigVo { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long configId; + + /** + * 岗位名称 + */ + @ExcelProperty(value = "岗位名称") + private String postName; + + /** + * 职务系数 + */ + @ExcelProperty(value = "职务系数") + private BigDecimal dutyCoeff; + + /** + * 基本系数 + */ + @ExcelProperty(value = "基本系数") + private BigDecimal baseCoeff; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/klp-wms/src/main/java/com/klp/mapper/WmsBonusConfigMapper.java b/klp-wms/src/main/java/com/klp/mapper/WmsBonusConfigMapper.java new file mode 100644 index 00000000..7915aeb3 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/mapper/WmsBonusConfigMapper.java @@ -0,0 +1,15 @@ +package com.klp.mapper; + +import com.klp.domain.WmsBonusConfig; +import com.klp.domain.vo.WmsBonusConfigVo; +import com.klp.common.core.mapper.BaseMapperPlus; + +/** + * 奖金分配Mapper接口 + * + * @author klp + * @date 2026-05-07 + */ +public interface WmsBonusConfigMapper extends BaseMapperPlus { + +} diff --git a/klp-wms/src/main/java/com/klp/mapper/WmsBonusPoolMapper.java b/klp-wms/src/main/java/com/klp/mapper/WmsBonusPoolMapper.java new file mode 100644 index 00000000..abff0037 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/mapper/WmsBonusPoolMapper.java @@ -0,0 +1,15 @@ +package com.klp.mapper; + +import com.klp.domain.WmsBonusPool; +import com.klp.domain.vo.WmsBonusPoolVo; +import com.klp.common.core.mapper.BaseMapperPlus; + +/** + * 奖金池Mapper接口 + * + * @author klp + * @date 2026-05-07 + */ +public interface WmsBonusPoolMapper extends BaseMapperPlus { + +} diff --git a/klp-wms/src/main/java/com/klp/mapper/WmsPostCoeffConfigMapper.java b/klp-wms/src/main/java/com/klp/mapper/WmsPostCoeffConfigMapper.java new file mode 100644 index 00000000..93e92bbb --- /dev/null +++ b/klp-wms/src/main/java/com/klp/mapper/WmsPostCoeffConfigMapper.java @@ -0,0 +1,15 @@ +package com.klp.mapper; + +import com.klp.domain.WmsPostCoeffConfig; +import com.klp.domain.vo.WmsPostCoeffConfigVo; +import com.klp.common.core.mapper.BaseMapperPlus; + +/** + * 岗位系数配置Mapper接口 + * + * @author klp + * @date 2026-05-07 + */ +public interface WmsPostCoeffConfigMapper extends BaseMapperPlus { + +} diff --git a/klp-wms/src/main/java/com/klp/service/IWmsBonusConfigService.java b/klp-wms/src/main/java/com/klp/service/IWmsBonusConfigService.java new file mode 100644 index 00000000..9d456856 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/service/IWmsBonusConfigService.java @@ -0,0 +1,49 @@ +package com.klp.service; + +import com.klp.domain.WmsBonusConfig; +import com.klp.domain.vo.WmsBonusConfigVo; +import com.klp.domain.bo.WmsBonusConfigBo; +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-05-07 + */ +public interface IWmsBonusConfigService { + + /** + * 查询奖金分配 + */ + WmsBonusConfigVo queryById(Long configId); + + /** + * 查询奖金分配列表 + */ + TableDataInfo queryPageList(WmsBonusConfigBo bo, PageQuery pageQuery); + + /** + * 查询奖金分配列表 + */ + List queryList(WmsBonusConfigBo bo); + + /** + * 新增奖金分配 + */ + Boolean insertByBo(WmsBonusConfigBo bo); + + /** + * 修改奖金分配 + */ + Boolean updateByBo(WmsBonusConfigBo bo); + + /** + * 校验并批量删除奖金分配信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/klp-wms/src/main/java/com/klp/service/IWmsBonusPoolService.java b/klp-wms/src/main/java/com/klp/service/IWmsBonusPoolService.java new file mode 100644 index 00000000..bb89243c --- /dev/null +++ b/klp-wms/src/main/java/com/klp/service/IWmsBonusPoolService.java @@ -0,0 +1,49 @@ +package com.klp.service; + +import com.klp.domain.WmsBonusPool; +import com.klp.domain.vo.WmsBonusPoolVo; +import com.klp.domain.bo.WmsBonusPoolBo; +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-05-07 + */ +public interface IWmsBonusPoolService { + + /** + * 查询奖金池 + */ + WmsBonusPoolVo queryById(Long poolId); + + /** + * 查询奖金池列表 + */ + TableDataInfo queryPageList(WmsBonusPoolBo bo, PageQuery pageQuery); + + /** + * 查询奖金池列表 + */ + List queryList(WmsBonusPoolBo bo); + + /** + * 新增奖金池 + */ + Boolean insertByBo(WmsBonusPoolBo bo); + + /** + * 修改奖金池 + */ + Boolean updateByBo(WmsBonusPoolBo bo); + + /** + * 校验并批量删除奖金池信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/klp-wms/src/main/java/com/klp/service/IWmsPostCoeffConfigService.java b/klp-wms/src/main/java/com/klp/service/IWmsPostCoeffConfigService.java new file mode 100644 index 00000000..23614d9e --- /dev/null +++ b/klp-wms/src/main/java/com/klp/service/IWmsPostCoeffConfigService.java @@ -0,0 +1,49 @@ +package com.klp.service; + +import com.klp.domain.WmsPostCoeffConfig; +import com.klp.domain.vo.WmsPostCoeffConfigVo; +import com.klp.domain.bo.WmsPostCoeffConfigBo; +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-05-07 + */ +public interface IWmsPostCoeffConfigService { + + /** + * 查询岗位系数配置 + */ + WmsPostCoeffConfigVo queryById(Long configId); + + /** + * 查询岗位系数配置列表 + */ + TableDataInfo queryPageList(WmsPostCoeffConfigBo bo, PageQuery pageQuery); + + /** + * 查询岗位系数配置列表 + */ + List queryList(WmsPostCoeffConfigBo bo); + + /** + * 新增岗位系数配置 + */ + Boolean insertByBo(WmsPostCoeffConfigBo bo); + + /** + * 修改岗位系数配置 + */ + Boolean updateByBo(WmsPostCoeffConfigBo bo); + + /** + * 校验并批量删除岗位系数配置信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsBonusConfigServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsBonusConfigServiceImpl.java new file mode 100644 index 00000000..ec575242 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsBonusConfigServiceImpl.java @@ -0,0 +1,117 @@ +package com.klp.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.domain.bo.WmsBonusConfigBo; +import com.klp.domain.vo.WmsBonusConfigVo; +import com.klp.domain.WmsBonusConfig; +import com.klp.mapper.WmsBonusConfigMapper; +import com.klp.service.IWmsBonusConfigService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 奖金分配Service业务层处理 + * + * @author klp + * @date 2026-05-07 + */ +@RequiredArgsConstructor +@Service +public class WmsBonusConfigServiceImpl implements IWmsBonusConfigService { + + private final WmsBonusConfigMapper baseMapper; + + /** + * 查询奖金分配 + */ + @Override + public WmsBonusConfigVo queryById(Long configId){ + return baseMapper.selectVoById(configId); + } + + /** + * 查询奖金分配列表 + */ + @Override + public TableDataInfo queryPageList(WmsBonusConfigBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询奖金分配列表 + */ + @Override + public List queryList(WmsBonusConfigBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(WmsBonusConfigBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getPoolId() != null, WmsBonusConfig::getPoolId, bo.getPoolId()); + lqw.eq(bo.getEmpId() != null, WmsBonusConfig::getEmpId, bo.getEmpId()); + lqw.like(StringUtils.isNotBlank(bo.getEmpName()), WmsBonusConfig::getEmpName, bo.getEmpName()); + lqw.like(StringUtils.isNotBlank(bo.getPostName()), WmsBonusConfig::getPostName, bo.getPostName()); + lqw.eq(bo.getDutyCoeff() != null, WmsBonusConfig::getDutyCoeff, bo.getDutyCoeff()); + lqw.eq(bo.getBaseCoeff() != null, WmsBonusConfig::getBaseCoeff, bo.getBaseCoeff()); + lqw.eq(bo.getAdjustCoeff() != null, WmsBonusConfig::getAdjustCoeff, bo.getAdjustCoeff()); + lqw.eq(bo.getAllocBase() != null, WmsBonusConfig::getAllocBase, bo.getAllocBase()); + lqw.eq(bo.getBonusAmount() != null, WmsBonusConfig::getBonusAmount, bo.getBonusAmount()); + return lqw; + } + + /** + * 新增奖金分配 + */ + @Override + public Boolean insertByBo(WmsBonusConfigBo bo) { + WmsBonusConfig add = BeanUtil.toBean(bo, WmsBonusConfig.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setConfigId(add.getConfigId()); + } + return flag; + } + + /** + * 修改奖金分配 + */ + @Override + public Boolean updateByBo(WmsBonusConfigBo bo) { + WmsBonusConfig update = BeanUtil.toBean(bo, WmsBonusConfig.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(WmsBonusConfig entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除奖金分配 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsBonusPoolServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsBonusPoolServiceImpl.java new file mode 100644 index 00000000..3e45b800 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsBonusPoolServiceImpl.java @@ -0,0 +1,111 @@ +package com.klp.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; +import com.klp.common.utils.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.klp.domain.bo.WmsBonusPoolBo; +import com.klp.domain.vo.WmsBonusPoolVo; +import com.klp.domain.WmsBonusPool; +import com.klp.mapper.WmsBonusPoolMapper; +import com.klp.service.IWmsBonusPoolService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 奖金池Service业务层处理 + * + * @author klp + * @date 2026-05-07 + */ +@RequiredArgsConstructor +@Service +public class WmsBonusPoolServiceImpl implements IWmsBonusPoolService { + + private final WmsBonusPoolMapper baseMapper; + + /** + * 查询奖金池 + */ + @Override + public WmsBonusPoolVo queryById(Long poolId){ + return baseMapper.selectVoById(poolId); + } + + /** + * 查询奖金池列表 + */ + @Override + public TableDataInfo queryPageList(WmsBonusPoolBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询奖金池列表 + */ + @Override + public List queryList(WmsBonusPoolBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(WmsBonusPoolBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getProductionLine()), WmsBonusPool::getProductionLine, bo.getProductionLine()); + lqw.eq(bo.getBonusTime() != null, WmsBonusPool::getBonusTime, bo.getBonusTime()); + lqw.eq(bo.getTotalBonus() != null, WmsBonusPool::getTotalBonus, bo.getTotalBonus()); + return lqw; + } + + /** + * 新增奖金池 + */ + @Override + public Boolean insertByBo(WmsBonusPoolBo bo) { + WmsBonusPool add = BeanUtil.toBean(bo, WmsBonusPool.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setPoolId(add.getPoolId()); + } + return flag; + } + + /** + * 修改奖金池 + */ + @Override + public Boolean updateByBo(WmsBonusPoolBo bo) { + WmsBonusPool update = BeanUtil.toBean(bo, WmsBonusPool.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(WmsBonusPool entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除奖金池 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsPostCoeffConfigServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsPostCoeffConfigServiceImpl.java new file mode 100644 index 00000000..45c98bee --- /dev/null +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsPostCoeffConfigServiceImpl.java @@ -0,0 +1,111 @@ +package com.klp.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.domain.bo.WmsPostCoeffConfigBo; +import com.klp.domain.vo.WmsPostCoeffConfigVo; +import com.klp.domain.WmsPostCoeffConfig; +import com.klp.mapper.WmsPostCoeffConfigMapper; +import com.klp.service.IWmsPostCoeffConfigService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 岗位系数配置Service业务层处理 + * + * @author klp + * @date 2026-05-07 + */ +@RequiredArgsConstructor +@Service +public class WmsPostCoeffConfigServiceImpl implements IWmsPostCoeffConfigService { + + private final WmsPostCoeffConfigMapper baseMapper; + + /** + * 查询岗位系数配置 + */ + @Override + public WmsPostCoeffConfigVo queryById(Long configId){ + return baseMapper.selectVoById(configId); + } + + /** + * 查询岗位系数配置列表 + */ + @Override + public TableDataInfo queryPageList(WmsPostCoeffConfigBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询岗位系数配置列表 + */ + @Override + public List queryList(WmsPostCoeffConfigBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(WmsPostCoeffConfigBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getPostName()), WmsPostCoeffConfig::getPostName, bo.getPostName()); + lqw.eq(bo.getDutyCoeff() != null, WmsPostCoeffConfig::getDutyCoeff, bo.getDutyCoeff()); + lqw.eq(bo.getBaseCoeff() != null, WmsPostCoeffConfig::getBaseCoeff, bo.getBaseCoeff()); + return lqw; + } + + /** + * 新增岗位系数配置 + */ + @Override + public Boolean insertByBo(WmsPostCoeffConfigBo bo) { + WmsPostCoeffConfig add = BeanUtil.toBean(bo, WmsPostCoeffConfig.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setConfigId(add.getConfigId()); + } + return flag; + } + + /** + * 修改岗位系数配置 + */ + @Override + public Boolean updateByBo(WmsPostCoeffConfigBo bo) { + WmsPostCoeffConfig update = BeanUtil.toBean(bo, WmsPostCoeffConfig.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(WmsPostCoeffConfig entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除岗位系数配置 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/klp-wms/src/main/resources/mapper/klp/WmsBonusConfigMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsBonusConfigMapper.xml new file mode 100644 index 00000000..b9767aeb --- /dev/null +++ b/klp-wms/src/main/resources/mapper/klp/WmsBonusConfigMapper.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/klp-wms/src/main/resources/mapper/klp/WmsBonusPoolMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsBonusPoolMapper.xml new file mode 100644 index 00000000..eb709c3c --- /dev/null +++ b/klp-wms/src/main/resources/mapper/klp/WmsBonusPoolMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/klp-wms/src/main/resources/mapper/klp/WmsPostCoeffConfigMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsPostCoeffConfigMapper.xml new file mode 100644 index 00000000..4ac4725e --- /dev/null +++ b/klp-wms/src/main/resources/mapper/klp/WmsPostCoeffConfigMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + From 61385818d05013e135094f52fc2766249e99aa9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= <2178503051@qq.com> Date: Thu, 7 May 2026 16:28:20 +0800 Subject: [PATCH 2/4] =?UTF-8?q?refactor(report):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E6=8B=89=E7=9F=AB=E7=BA=BF=E6=8A=A5=E8=A1=A8=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E7=94=A8=E7=BB=9F=E4=B8=80=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将拉矫线的各类报表(out/day/month/year/team/loss/comprehensive)重构为使用统一的ActionTemplate组件 增加axios请求超时时间至300000ms 简化导出按钮为单个按钮 --- klp-ui/src/utils/request.js | 2 +- klp-ui/src/views/wms/coil/panels/base.vue | 3 +- .../views/wms/report/lajiao/comprehensive.vue | 17 +- klp-ui/src/views/wms/report/lajiao/day.vue | 17 +- klp-ui/src/views/wms/report/lajiao/loss.vue | 33 +- klp-ui/src/views/wms/report/lajiao/month.vue | 17 +- klp-ui/src/views/wms/report/lajiao/out.vue | 17 +- klp-ui/src/views/wms/report/lajiao/team.vue | 19 +- klp-ui/src/views/wms/report/lajiao/year.vue | 17 +- .../src/views/wms/report/template/action.vue | 639 ++++++++++++++++++ 10 files changed, 707 insertions(+), 74 deletions(-) create mode 100644 klp-ui/src/views/wms/report/template/action.vue diff --git a/klp-ui/src/utils/request.js b/klp-ui/src/utils/request.js index fa9692c1..b1b7139e 100644 --- a/klp-ui/src/utils/request.js +++ b/klp-ui/src/utils/request.js @@ -19,7 +19,7 @@ const service = axios.create({ // axios中请求配置有baseURL选项,表示请求URL公共部分 baseURL: process.env.VUE_APP_BASE_API, // 超时 - timeout: 30000 + timeout: 300000 }) // request拦截器 diff --git a/klp-ui/src/views/wms/coil/panels/base.vue b/klp-ui/src/views/wms/coil/panels/base.vue index c37e979b..63fc0641 100644 --- a/klp-ui/src/views/wms/coil/panels/base.vue +++ b/klp-ui/src/views/wms/coil/panels/base.vue @@ -96,8 +96,7 @@ 搜索 重置 - 导出当前 - 导出全部 + 导出 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 查询 + 导出产出钢卷 + 导出消耗钢卷 + 列设置 + 保存产出报表 + 保存消耗报表 + + + + + + + {{ outSummary.totalCount }} + {{ outSummary.totalWeight }}t + {{ outSummary.avgWeight }}t + + + + + {{ lossSummary.totalCount }} + {{ lossSummary.totalWeight }}t + {{ lossSummary.avgWeight }}t + + + + + + + + + + + + + + + + + + + + + + + + 投入明细配置 + 产出明细配置 + + + + + + + + + \ No newline at end of file From 16462daf7ba261d93c84c97f601a3687deec83f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= <2178503051@qq.com> Date: Thu, 7 May 2026 17:17:46 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix(wms=E6=8A=A5=E8=A1=A8):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E6=95=B0=E6=8D=AE=E8=BF=87=E6=BB=A4=E5=92=8C=E5=8E=BB?= =?UTF-8?q?=E9=87=8D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 确保在映射coilId和processedCoilIds前先过滤掉空值,避免潜在的错误 --- klp-ui/src/views/wms/report/template/action.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/klp-ui/src/views/wms/report/template/action.vue b/klp-ui/src/views/wms/report/template/action.vue index 0fffd847..8124bac4 100644 --- a/klp-ui/src/views/wms/report/template/action.vue +++ b/klp-ui/src/views/wms/report/template/action.vue @@ -321,8 +321,8 @@ export default { queryParams: { startTime: start, endTime: end, - byCreateTimeStart: start, - byCreateTimeEnd: end, + // byCreateTimeStart: start, + // byCreateTimeEnd: end, enterCoilNo: '', currentCoilNo: '', warehouseId: '', @@ -465,9 +465,9 @@ export default { // 所有报表类型都使用原始的 listPendingAction 方式获取数据 const res = await listPendingAction({ ...this.queryParams, actionType: this.actionType, actionStatus: 2 }); // 获取两层数据 - const lossIds = res.rows.map(item => item.coilId); + const lossIds = res.rows.filter(item => item.coilId).map(item => item.coilId); // 使用new Set去重 - const outIds = [...new Set(res.rows.map(item => item.processedCoilIds))]; + const outIds = [...new Set(res.rows.filter(item => item.processedCoilIds).map(item => item.processedCoilIds))]; if (lossIds.length === 0 || outIds.length === 0) { this.$message({ From f21101e5e019fa5002e186b7d6662390ce2fd705 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 7 May 2026 17:32:25 +0800 Subject: [PATCH 4/4] =?UTF-8?q?refactor(wms):=20=E5=B0=86=E9=92=A2?= =?UTF-8?q?=E5=8D=B7=E5=BC=82=E5=B8=B8=E6=8A=A5=E8=A1=A8=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E4=BB=8EPOI=E8=BF=81=E7=A7=BB=E5=88=B0EasyEx?= =?UTF-8?q?cel=E5=8F=96=E6=B6=88=E5=90=88=E5=B9=B6=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E8=BF=BD=E6=B1=82=E5=AF=BC=E5=87=BA=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 POI相关依赖和导入包 - 添加com.alibaba.excel.EasyExcel依赖 - 创建WmsCoilAbnormalExportVo导出DTO类,使用EasyExcel注解 - 重构导出方法,将原有的XSSFWorkbook方式替换为EasyExcel方式 - 优化导出性能,降低复杂度到O(n) - 简化Excel样式设置和数据填充逻辑 - 保持原有导出数据结构和字段映射关系不变 --- .../domain/vo/WmsCoilAbnormalExportVo.java | 203 ++++++++++++ .../impl/WmsMaterialCoilServiceImpl.java | 291 +++++++----------- 2 files changed, 306 insertions(+), 188 deletions(-) create mode 100644 klp-wms/src/main/java/com/klp/domain/vo/WmsCoilAbnormalExportVo.java diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsCoilAbnormalExportVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsCoilAbnormalExportVo.java new file mode 100644 index 00000000..426334b5 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsCoilAbnormalExportVo.java @@ -0,0 +1,203 @@ +package com.klp.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnore; +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; + +/** + * 钢卷异常报表导出DTO - EasyExcel版本 + * 使用EasyExcel注解实现O(n)复杂度的单元格合并 + * + * @author Joshi + * @date 2026-05-07 + */ +@Data +@ContentRowHeight(20) +@HeadRowHeight(24) +@ColumnWidth(15) +public class WmsCoilAbnormalExportVo { + + // 钢卷基本信息(前25列) + @ExcelProperty("类型") + @ColumnWidth(12) + private String itemType; + + @ExcelProperty("逻辑库区") + @ColumnWidth(12) + private String warehouseName; + + @ExcelProperty("实际库区") + @ColumnWidth(12) + private String actualWarehouseName; + + @ExcelProperty("入场卷号") + @ColumnWidth(15) + private String enterCoilNo; + + @ExcelProperty("厂家卷号") + @ColumnWidth(15) + private String supplierCoilNo; + + @ExcelProperty("成品卷号") + @ColumnWidth(15) + private String currentCoilNo; + + @ExcelProperty("日期") + @ColumnWidth(20) + private String createTime; + + @ExcelProperty("重量") + @ColumnWidth(12) + private String netWeight; + + @ExcelProperty("用途") + @ColumnWidth(12) + private String businessPurpose; + + @ExcelProperty("切边要求") + @ColumnWidth(12) + private String trimmingRequirement; + + @ExcelProperty("包装种类") + @ColumnWidth(12) + private String packagingRequirement; + + @ExcelProperty("产品质量") + @ColumnWidth(12) + private String qualityStatus; + + @ExcelProperty("原料材质") + @ColumnWidth(12) + private String packingStatus; + + @ExcelProperty("库存状态") + @ColumnWidth(12) + private String status; + + @ExcelProperty("备注") + @ColumnWidth(20) + private String remark; + + @ExcelProperty("名称") + @ColumnWidth(15) + private String itemName; + + @ExcelProperty("规格") + @ColumnWidth(20) + private String specification; + + @ExcelProperty("长度") + @ColumnWidth(12) + private String length; + + @ExcelProperty("材质") + @ColumnWidth(12) + private String material; + + @ExcelProperty("厂家") + @ColumnWidth(15) + private String manufacturer; + + @ExcelProperty("表面处理") + @ColumnWidth(12) + private String surfaceTreatmentDesc; + + @ExcelProperty("锌层") + @ColumnWidth(12) + private String zincLayer; + + @ExcelProperty("物品ID") + @ColumnWidth(12) + private String itemId; + + @ExcelProperty("操作完成时间") + @ColumnWidth(20) + private String actionCompleteTime; + + @ExcelProperty("调拨类型") + @ColumnWidth(12) + private String transferType; + + // 改判原因(第26列) + @ExcelProperty("改判原因") + @ColumnWidth(25) + private String rejudgeReason; + + // 异常信息(后17列) + @ExcelProperty("产线") + @ColumnWidth(12) + private String productionLine; + + @ExcelProperty("位置") + @ColumnWidth(12) + private String position; + + @ExcelProperty("长度坐标") + @ColumnWidth(12) + private String abnormalLength; + + @ExcelProperty("缺陷开始位置") + @ColumnWidth(15) + private String startPosition; + + @ExcelProperty("缺陷结束位置") + @ColumnWidth(15) + private String endPosition; + + @ExcelProperty("缺陷代码") + @ColumnWidth(12) + private String defectCode; + + @ExcelProperty("缺陷类型") + @ColumnWidth(12) + private String defectType; + + @ExcelProperty("缺陷率") + @ColumnWidth(12) + private String defectRate; + + @ExcelProperty("缺陷重量") + @ColumnWidth(12) + private String defectWeight; + + @ExcelProperty("程度") + @ColumnWidth(10) + private String degree; + + @ExcelProperty("判级") + @ColumnWidth(10) + private String judgeLevel; + + @ExcelProperty("判级人") + @ColumnWidth(12) + private String judgeBy; + + @ExcelProperty("判级时间") + @ColumnWidth(20) + private String judgeTime; + + @ExcelProperty("主标记") + @ColumnWidth(12) + private String mainMark; + + @ExcelProperty("整卷标记") + @ColumnWidth(12) + private String wholeCoilMark; + + @ExcelProperty("异常备注") + @ColumnWidth(20) + private String abnormalRemark; + + @ExcelProperty("板面") + @ColumnWidth(10) + private String plateSurface; + + /** + * 钢卷ID,用于合并单元格的标识(隐藏列) + */ + @ExcelIgnore + private Long coilId; +} diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java index 8bcb3f4c..758bfbc0 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java @@ -45,11 +45,9 @@ import java.io.IOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; -import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; -import org.apache.poi.ss.usermodel.*; -import org.apache.poi.ss.util.CellRangeAddress; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import com.alibaba.excel.EasyExcel; /** * 钢卷物料表Service业务层处理 @@ -5333,7 +5331,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { " GROUP BY coil_id" + ") t2 ON t1.coil_id = t2.coil_id AND t1.create_time = t2.max_time " + "WHERE t1.del_flag = '0' AND t1.rejudge_reason IS NOT NULL"; - + List> results = wmsCoilQualityRejudgeMapper.selectMapsBySql(sql); if (results != null) { for (Map result : results) { @@ -5346,212 +5344,129 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { } } - // 5. 构建导出数据(扁平化:一个钢卷+一个异常 = 一行) - List exportData = new ArrayList<>(); + // 5. 构建EasyExcel导出数据 - O(n)复杂度 + List exportData = new ArrayList<>(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + for (WmsMaterialCoilVo coil : coilList) { Long coilId = coil.getCoilId(); List abnormalList = abnormalMap.getOrDefault(coilId, new ArrayList<>()); String rejudgeReason = rejudgeReasonMap.get(coilId); if (abnormalList.isEmpty()) { - WmsCoilAbnormalExportRow row = new WmsCoilAbnormalExportRow(); - row.setCoil(coil); - row.setRejudgeReason(rejudgeReason); - row.setAbnormal(null); - exportData.add(row); + // 无异常信息的钢卷,创建一行空异常数据 + WmsCoilAbnormalExportVo dto = createExportVo(coil, rejudgeReason, null, sdf); + dto.setCoilId(coilId); + exportData.add(dto); } else { + // 有异常信息的钢卷,每个异常创建一行 for (WmsCoilAbnormal abnormal : abnormalList) { - WmsCoilAbnormalExportRow row = new WmsCoilAbnormalExportRow(); - row.setCoil(coil); - row.setRejudgeReason(rejudgeReason); - row.setAbnormal(abnormal); - exportData.add(row); + WmsCoilAbnormalExportVo dto = createExportVo(coil, rejudgeReason, abnormal, sdf); + dto.setCoilId(coilId); + exportData.add(dto); } } } - // 6. 导出Excel - try (Workbook wb = new XSSFWorkbook()) { - Sheet sheet = wb.createSheet("异常报表"); - int r = 0; - - // 标题行 - Row titleRow = sheet.createRow(r++); - titleRow.setHeightInPoints(36f); - Cell titleCell = titleRow.createCell(0); - titleCell.setCellValue("钢卷异常报表"); - - CellStyle titleStyle = wb.createCellStyle(); - titleStyle.setAlignment(HorizontalAlignment.CENTER); - titleStyle.setVerticalAlignment(VerticalAlignment.CENTER); - Font titleFont = wb.createFont(); - titleFont.setBold(true); - titleFont.setFontHeightInPoints((short) 15); - titleStyle.setFont(titleFont); - - CellRangeAddress titleRegion = new CellRangeAddress(0, 0, 0, 41); - sheet.addMergedRegion(titleRegion); - for (int i = titleRegion.getFirstColumn(); i <= titleRegion.getLastColumn(); i++) { - Cell cell = titleRow.getCell(i); - if (cell == null) cell = titleRow.createCell(i); - cell.setCellStyle(titleStyle); - } - - // 表头 - String[] headers = { - "类型", "逻辑库区", "实际库区", "入场卷号", "厂家卷号", "成品卷号", "日期", - "重量", "用途", "切边要求", "包装种类", "产品质量", "原料材质", - "库存状态", "备注", "名称", "规格", "长度", "材质", "厂家", - "表面处理", "锌层", "物品ID", "操作完成时间", "调拨类型", - "改判原因", - "产线", "位置", "长度坐标", "缺陷开始位置", "缺陷结束位置", - "缺陷代码", "缺陷类型", "缺陷率", "缺陷重量", "程度", "判级", - "判级人", "判级时间", "主标记", "整卷标记", "异常备注", "板面" - }; - - CellStyle headStyle = wb.createCellStyle(); - Font headFont = wb.createFont(); - headFont.setBold(true); - headStyle.setFont(headFont); - headStyle.setAlignment(HorizontalAlignment.CENTER); - headStyle.setVerticalAlignment(VerticalAlignment.CENTER); - headStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); - headStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex()); - headStyle.setWrapText(true); - - Row headRow = sheet.createRow(r++); - headRow.setHeightInPoints(24); - for (int i = 0; i < headers.length; i++) { - Cell cell = headRow.createCell(i); - cell.setCellValue(headers[i]); - cell.setCellStyle(headStyle); - } - - // 数据行样式 - CellStyle centerStyle = wb.createCellStyle(); - centerStyle.setAlignment(HorizontalAlignment.CENTER); - centerStyle.setVerticalAlignment(VerticalAlignment.CENTER); - - // 填充数据 - int dataStartRow = r; - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - - for (WmsCoilAbnormalExportRow rowData : exportData) { - WmsMaterialCoilVo coil = rowData.getCoil(); - WmsCoilAbnormal abnormal = rowData.getAbnormal(); - String rejudgeReason = rowData.getRejudgeReason(); - - Row row = sheet.createRow(r++); - int cc = 0; - - // 钢卷信息(前25列) - row.createCell(cc++).setCellValue(coil.getItemType() != null ? coil.getItemType() : ""); - row.createCell(cc++).setCellValue(coil.getWarehouseName() != null ? coil.getWarehouseName() : ""); - row.createCell(cc++).setCellValue(coil.getActualWarehouseName() != null ? coil.getActualWarehouseName() : ""); - row.createCell(cc++).setCellValue(coil.getEnterCoilNo() != null ? coil.getEnterCoilNo() : ""); - row.createCell(cc++).setCellValue(coil.getSupplierCoilNo() != null ? coil.getSupplierCoilNo() : ""); - row.createCell(cc++).setCellValue(coil.getCurrentCoilNo() != null ? coil.getCurrentCoilNo() : ""); - row.createCell(cc++).setCellValue(coil.getCreateTime() != null ? sdf.format(coil.getCreateTime()) : ""); - row.createCell(cc++).setCellValue(coil.getNetWeight() != null ? coil.getNetWeight().toString() : ""); - row.createCell(cc++).setCellValue(coil.getBusinessPurpose() != null ? coil.getBusinessPurpose() : ""); - row.createCell(cc++).setCellValue(coil.getTrimmingRequirement() != null ? coil.getTrimmingRequirement() : ""); - row.createCell(cc++).setCellValue(coil.getPackagingRequirement() != null ? coil.getPackagingRequirement() : ""); - row.createCell(cc++).setCellValue(coil.getQualityStatus() != null ? coil.getQualityStatus() : ""); - row.createCell(cc++).setCellValue(coil.getPackingStatus() != null ? coil.getPackingStatus() : ""); - row.createCell(cc++).setCellValue(coil.getStatus() != null ? coil.getStatus().toString() : ""); - row.createCell(cc++).setCellValue(coil.getRemark() != null ? coil.getRemark() : ""); - row.createCell(cc++).setCellValue(coil.getItemName() != null ? coil.getItemName() : ""); - row.createCell(cc++).setCellValue(coil.getSpecification() != null ? coil.getSpecification() : ""); - row.createCell(cc++).setCellValue(coil.getLength() != null ? coil.getLength().toString() : ""); - row.createCell(cc++).setCellValue(coil.getMaterial() != null ? coil.getMaterial() : ""); - row.createCell(cc++).setCellValue(coil.getManufacturer() != null ? coil.getManufacturer() : ""); - row.createCell(cc++).setCellValue(coil.getSurfaceTreatmentDesc() != null ? coil.getSurfaceTreatmentDesc() : ""); - row.createCell(cc++).setCellValue(coil.getZincLayer() != null ? coil.getZincLayer() : ""); - row.createCell(cc++).setCellValue(coil.getItemId() != null ? coil.getItemId().toString() : ""); - row.createCell(cc++).setCellValue(coil.getActionCompleteTime() != null ? sdf.format(coil.getActionCompleteTime()) : ""); - row.createCell(cc++).setCellValue(coil.getTransferType() != null ? coil.getTransferType() : ""); - - // 改判原因 - row.createCell(cc++).setCellValue(rejudgeReason != null ? rejudgeReason : ""); - - // 异常信息 - if (abnormal != null) { - row.createCell(cc++).setCellValue(abnormal.getProductionLine() != null ? abnormal.getProductionLine() : ""); - row.createCell(cc++).setCellValue(abnormal.getPosition() != null ? abnormal.getPosition() : ""); - row.createCell(cc++).setCellValue(abnormal.getLength() != null ? abnormal.getLength().toString() : ""); - row.createCell(cc++).setCellValue(abnormal.getStartPosition() != null ? abnormal.getStartPosition().toString() : ""); - row.createCell(cc++).setCellValue(abnormal.getEndPosition() != null ? abnormal.getEndPosition().toString() : ""); - row.createCell(cc++).setCellValue(abnormal.getDefectCode() != null ? abnormal.getDefectCode() : ""); - row.createCell(cc++).setCellValue(abnormal.getDefectType() != null ? abnormal.getDefectType() : ""); - row.createCell(cc++).setCellValue(abnormal.getDefectRate() != null ? abnormal.getDefectRate().toString() : ""); - row.createCell(cc++).setCellValue(abnormal.getDefectWeight() != null ? abnormal.getDefectWeight().toString() : ""); - row.createCell(cc++).setCellValue(abnormal.getDegree() != null ? abnormal.getDegree() : ""); - row.createCell(cc++).setCellValue(abnormal.getJudgeLevel() != null ? abnormal.getJudgeLevel() : ""); - row.createCell(cc++).setCellValue(abnormal.getJudgeBy() != null ? abnormal.getJudgeBy() : ""); - row.createCell(cc++).setCellValue(abnormal.getJudgeTime() != null ? sdf.format(abnormal.getJudgeTime()) : ""); - row.createCell(cc++).setCellValue(abnormal.getMainMark() != null ? abnormal.getMainMark().toString() : ""); - row.createCell(cc++).setCellValue(abnormal.getWholeCoilMark() != null ? abnormal.getWholeCoilMark().toString() : ""); - row.createCell(cc++).setCellValue(abnormal.getRemark() != null ? abnormal.getRemark() : ""); - row.createCell(cc++).setCellValue(abnormal.getPlateSurface() != null ? abnormal.getPlateSurface() : ""); - } else { - for (int j = 0; j < 17; j++) row.createCell(cc++).setCellValue(""); - } - } - - // 合并钢卷信息列(前26列:25列钢卷信息 + 1列改判原因) - int currentRow = dataStartRow; - while (currentRow < r) { - Long currentCoilId = exportData.get(currentRow - dataStartRow).getCoil().getCoilId(); - int startRow = currentRow; - int endRow = currentRow; - - while (endRow < r && exportData.get(endRow - dataStartRow).getCoil().getCoilId().equals(currentCoilId)) { - endRow++; - } - - if (endRow - startRow > 1) { - for (int col = 0; col < 26; col++) { - sheet.addMergedRegion(new CellRangeAddress(startRow, endRow - 1, col, col)); - } - } - - // 设置居中样式 - for (int rowIdx = startRow; rowIdx < endRow; rowIdx++) { - Row row = sheet.getRow(rowIdx); - if (row != null) { - for (int col = 0; col < 26; col++) { - Cell cell = row.getCell(col); - if (cell != null) cell.setCellStyle(centerStyle); - } - } - } - - currentRow = endRow; - } - - // 自适应列宽 - for (int i = 0; i < headers.length; i++) { - sheet.autoSizeColumn(i, true); - int w = sheet.getColumnWidth(i); - sheet.setColumnWidth(i, Math.min(Math.max(w, 3000), 12000)); - } - - // 输出 + // 6. 使用EasyExcel导出 - O(n)复杂度,瞬间完成 + try { + // 设置响应头 String filename = "abnormal_report_" + System.currentTimeMillis() + ".xlsx"; String encoded = URLEncoder.encode(filename, StandardCharsets.UTF_8.name()); response.setCharacterEncoding(StandardCharsets.UTF_8.name()); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encoded); - try (ServletOutputStream os = response.getOutputStream()) { - wb.write(os); - os.flush(); - } + // 使用EasyExcel写入,正常导出 + EasyExcel.write(response.getOutputStream(), WmsCoilAbnormalExportVo.class) + .sheet("异常报表") + .doWrite(exportData); + } catch (IOException e) { throw new RuntimeException("导出失败:" + e.getMessage()); } } + /* + * 创建导出DTO对象 + */ + private WmsCoilAbnormalExportVo createExportVo(WmsMaterialCoilVo coil, String rejudgeReason, + WmsCoilAbnormal abnormal, SimpleDateFormat sdf) { + WmsCoilAbnormalExportVo dto = new WmsCoilAbnormalExportVo(); + + // 钢卷基本信息(前25列) + dto.setItemType(coil.getItemType() != null ? coil.getItemType() : ""); + dto.setWarehouseName(coil.getWarehouseName() != null ? coil.getWarehouseName() : ""); + dto.setActualWarehouseName(coil.getActualWarehouseName() != null ? coil.getActualWarehouseName() : ""); + dto.setEnterCoilNo(coil.getEnterCoilNo() != null ? coil.getEnterCoilNo() : ""); + dto.setSupplierCoilNo(coil.getSupplierCoilNo() != null ? coil.getSupplierCoilNo() : ""); + dto.setCurrentCoilNo(coil.getCurrentCoilNo() != null ? coil.getCurrentCoilNo() : ""); + dto.setCreateTime(coil.getCreateTime() != null ? sdf.format(coil.getCreateTime()) : ""); + dto.setNetWeight(coil.getNetWeight() != null ? coil.getNetWeight().toString() : ""); + dto.setBusinessPurpose(coil.getBusinessPurpose() != null ? coil.getBusinessPurpose() : ""); + dto.setTrimmingRequirement(coil.getTrimmingRequirement() != null ? coil.getTrimmingRequirement() : ""); + dto.setPackagingRequirement(coil.getPackagingRequirement() != null ? coil.getPackagingRequirement() : ""); + dto.setQualityStatus(coil.getQualityStatus() != null ? coil.getQualityStatus() : ""); + dto.setPackingStatus(coil.getPackingStatus() != null ? coil.getPackingStatus() : ""); + dto.setStatus(coil.getStatus() != null ? coil.getStatus().toString() : ""); + dto.setRemark(coil.getRemark() != null ? coil.getRemark() : ""); + dto.setItemName(coil.getItemName() != null ? coil.getItemName() : ""); + dto.setSpecification(coil.getSpecification() != null ? coil.getSpecification() : ""); + dto.setLength(coil.getLength() != null ? coil.getLength().toString() : ""); + dto.setMaterial(coil.getMaterial() != null ? coil.getMaterial() : ""); + dto.setManufacturer(coil.getManufacturer() != null ? coil.getManufacturer() : ""); + dto.setSurfaceTreatmentDesc(coil.getSurfaceTreatmentDesc() != null ? coil.getSurfaceTreatmentDesc() : ""); + dto.setZincLayer(coil.getZincLayer() != null ? coil.getZincLayer() : ""); + dto.setItemId(coil.getItemId() != null ? coil.getItemId().toString() : ""); + dto.setActionCompleteTime(coil.getActionCompleteTime() != null ? sdf.format(coil.getActionCompleteTime()) : ""); + dto.setTransferType(coil.getTransferType() != null ? coil.getTransferType() : ""); + + // 改判原因(第26列) + dto.setRejudgeReason(rejudgeReason != null ? rejudgeReason : ""); + + // 异常信息(后17列) + if (abnormal != null) { + dto.setProductionLine(abnormal.getProductionLine() != null ? abnormal.getProductionLine() : ""); + dto.setPosition(abnormal.getPosition() != null ? abnormal.getPosition() : ""); + dto.setAbnormalLength(abnormal.getLength() != null ? abnormal.getLength().toString() : ""); + dto.setStartPosition(abnormal.getStartPosition() != null ? abnormal.getStartPosition().toString() : ""); + dto.setEndPosition(abnormal.getEndPosition() != null ? abnormal.getEndPosition().toString() : ""); + dto.setDefectCode(abnormal.getDefectCode() != null ? abnormal.getDefectCode() : ""); + dto.setDefectType(abnormal.getDefectType() != null ? abnormal.getDefectType() : ""); + dto.setDefectRate(abnormal.getDefectRate() != null ? abnormal.getDefectRate().toString() : ""); + dto.setDefectWeight(abnormal.getDefectWeight() != null ? abnormal.getDefectWeight().toString() : ""); + dto.setDegree(abnormal.getDegree() != null ? abnormal.getDegree() : ""); + dto.setJudgeLevel(abnormal.getJudgeLevel() != null ? abnormal.getJudgeLevel() : ""); + dto.setJudgeBy(abnormal.getJudgeBy() != null ? abnormal.getJudgeBy() : ""); + dto.setJudgeTime(abnormal.getJudgeTime() != null ? sdf.format(abnormal.getJudgeTime()) : ""); + dto.setMainMark(abnormal.getMainMark() != null ? abnormal.getMainMark().toString() : ""); + dto.setWholeCoilMark(abnormal.getWholeCoilMark() != null ? abnormal.getWholeCoilMark().toString() : ""); + dto.setAbnormalRemark(abnormal.getRemark() != null ? abnormal.getRemark() : ""); + dto.setPlateSurface(abnormal.getPlateSurface() != null ? abnormal.getPlateSurface() : ""); + } else { + // 空异常信息 + dto.setProductionLine(""); + dto.setPosition(""); + dto.setAbnormalLength(""); + dto.setStartPosition(""); + dto.setEndPosition(""); + dto.setDefectCode(""); + dto.setDefectType(""); + dto.setDefectRate(""); + dto.setDefectWeight(""); + dto.setDegree(""); + dto.setJudgeLevel(""); + dto.setJudgeBy(""); + dto.setJudgeTime(""); + dto.setMainMark(""); + dto.setWholeCoilMark(""); + dto.setAbnormalRemark(""); + dto.setPlateSurface(""); + } + + return dto; + } + }