From e0d9d6fe48af82c070f7892a0282aa87a2415066 Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Sun, 28 Sep 2025 17:18:54 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E6=96=B0=E5=A2=9EWMS=E6=9C=88?= =?UTF-8?q?=E5=BA=A6=E6=8A=A5=E5=8A=9F=E8=83=BD=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增WMS月度报实体类、VO、BO及Mapper接口W - 实现MS月度报的增删改查及分页查询功能 - 提供导出Excel报表功能 - 添加权限控制注解及-日志记录 完善下拉框查询接口 - 补充MyBatis XML映射文件基础结构 - qms为状态字段添加中文注释说明取值含义 -qms 增加检测结果判断逻辑及规格比较方法 - qms添加标准规格值判断的TODO标记 - 注释掉DmsRealtimeAlarmReportController中权限校验注解 - 注释掉DmsReportController中故障追溯报表权限校验注解 --- .../DmsRealtimeAlarmReportController.java | 4 +- .../dms/controller/DmsReportController.java | 6 +- .../qms/service/impl/QcPDAServiceImpl.java | 59 ++++++- .../WmsMonthlyReportController.java | 117 ++++++++++++++ .../dromara/wms/domain/WmsMonthlyReport.java | 120 ++++++++++++++ .../wms/domain/bo/WmsMonthlyReportBo.java | 116 ++++++++++++++ .../wms/domain/vo/WmsMonthlyReportVo.java | 150 ++++++++++++++++++ .../wms/mapper/WmsMonthlyReportMapper.java | 15 ++ .../wms/service/IWmsMonthlyReportService.java | 69 ++++++++ .../impl/WmsMonthlyReportServiceImpl.java | 150 ++++++++++++++++++ .../mapper/wms/WmsMonthlyReportMapper.xml | 7 + 11 files changed, 801 insertions(+), 12 deletions(-) create mode 100644 ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/controller/WmsMonthlyReportController.java create mode 100644 ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsMonthlyReport.java create mode 100644 ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/bo/WmsMonthlyReportBo.java create mode 100644 ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsMonthlyReportVo.java create mode 100644 ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/mapper/WmsMonthlyReportMapper.java create mode 100644 ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/IWmsMonthlyReportService.java create mode 100644 ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsMonthlyReportServiceImpl.java create mode 100644 ruoyi-modules/hwmom-wms/src/main/resources/mapper/wms/WmsMonthlyReportMapper.xml diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsRealtimeAlarmReportController.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsRealtimeAlarmReportController.java index 6d9feac1..1e4cbfba 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsRealtimeAlarmReportController.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsRealtimeAlarmReportController.java @@ -32,7 +32,7 @@ public class DmsRealtimeAlarmReportController extends BaseController { /** * 实时报警列表 */ - @SaCheckPermission("dms:report:realtimeAlarm:list") + //@SaCheckPermission("dms:report:realtimeAlarm:list") @GetMapping("/list") public TableDataInfo list(RealtimeAlarmReportBo bo, PageQuery pageQuery) { return dmsReportService.queryRealtimeAlarm(bo, pageQuery); @@ -41,7 +41,7 @@ public class DmsRealtimeAlarmReportController extends BaseController { /** * 导出实时报警 */ - @SaCheckPermission("dms:report:realtimeAlarm:export") + //@SaCheckPermission("dms:report:realtimeAlarm:export") @Log(title = "实时报警报表", businessType = BusinessType.EXPORT) @RepeatSubmit() @PostMapping("/export") diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsReportController.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsReportController.java index ab0ecf7b..ed6b2eaf 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsReportController.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsReportController.java @@ -26,17 +26,17 @@ public class DmsReportController { private final IDmsReportService dmsReportService; - @SaCheckPermission("dms:report:faultTrace:list") + //@SaCheckPermission("dms:report:faultTrace:list") @GetMapping("/list") public TableDataInfo list(FaultTraceReportBo bo, PageQuery pageQuery) { return dmsReportService.queryFaultTrace(bo, pageQuery); } - @SaCheckPermission("dms:report:faultTrace:export") + //@SaCheckPermission("dms:report:faultTrace:export") @Log(title = "设备故障处理记录表(详细追溯)", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(FaultTraceReportBo bo, HttpServletResponse response) { List list = dmsReportService.exportFaultTrace(bo); ExcelUtil.exportExcel(list, "设备故障处理记录表(详细追溯)", FaultTraceReportVo.class, response); } -} \ No newline at end of file +} diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcPDAServiceImpl.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcPDAServiceImpl.java index d0215bbf..363ecc46 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcPDAServiceImpl.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcPDAServiceImpl.java @@ -88,7 +88,7 @@ public class QcPDAServiceImpl implements IQcPDAService { } QcInspectionMainBo selectMain = new QcInspectionMainBo(); selectMain.setPlanDetailId(planDetail.getPlanDetailId()); - selectMain.setStatus("0"); + selectMain.setStatus("0");//单据状态(0未处理/1完成) List mainVoList = qcInspectionMainService.queryList(selectMain); if (!mainVoList.isEmpty()){ throw new ServiceException("此生产计划已生成质检任务且未处理!"); @@ -117,7 +117,7 @@ public class QcPDAServiceImpl implements IQcPDAService { inspectionBo.setTeam(planDetail.getTeamName()); inspectionBo.setProductionOrder(planDetail.getPlanCode()); inspectionBo.setBarcode(planDetail.getReturnBarcode()); - inspectionBo.setStatus("0"); + inspectionBo.setStatus("0");//单据状态(0未处理/1完成) qcInspectionMainService.insertByBo(inspectionBo); QcTemplateItemBo itemBo = new QcTemplateItemBo(); @@ -128,7 +128,7 @@ public class QcPDAServiceImpl implements IQcPDAService { QcInspectionResultBo resultBo = new QcInspectionResultBo(); resultBo.setInspectionId(inspectionBo.getInspectionId()); resultBo.setItemId(templateItemVo.getItemId()); - resultBo.setDetectResult("2"); + resultBo.setDetectResult("2");//检测结果(0合格,1不合格,2未判定) resultBo.setItemCode(templateItemVo.getItemCode()); resultBo.setItemName(templateItemVo.getItemName()); resultBo.setInspectionPosition(templateItemVo.getInspectionPosition()); @@ -196,11 +196,17 @@ public class QcPDAServiceImpl implements IQcPDAService { //标准值判断 boolean isWithinRange = (detectValue.compareTo(lowerLimit) >= 0) && (detectValue.compareTo(upperLimit) <= 0); if (isWithinRange) { - resultBo.setDetectResult("0"); + resultBo.setDetectResult("0");//检测结果(0合格,1不合格,2未判定) } else { resultBo.setDetectResult("1"); } - //标准规格值判断 + //todo:标准规格值判断 +// BigDecimal detectValue1 = resultBo.getDetectValue(); +// // 标准值判断和规格判断合并为一行 +// boolean isQualified = (detectValue1.compareTo(existingResult.getLowerLimit()) >= 0) +// && (detectValue1.compareTo(existingResult.getUpperLimit()) <= 0) +// && isWithinSpecification(detectValue1, existingResult.getSpecName ()); +// resultBo.setDetectResult(isQualified ? "0" : "1");//检测结果(0合格,1不合格,2未判定) } @@ -209,7 +215,7 @@ public class QcPDAServiceImpl implements IQcPDAService { // 在循环中更新不合格检查 // 如果该条结果是不合格('1'表示不合格) - if ("1".equals(resultBo.getDetectResult())) { + if ("1".equals(resultBo.getDetectResult())) {//检测结果(0合格,1不合格,2未判定) isUnqualified = true; } } @@ -218,7 +224,7 @@ public class QcPDAServiceImpl implements IQcPDAService { // 设置单据状态为完成('1') bo.setStatus("1");//单据状态(0未处理/1完成) // 设置质检结果:'1'表示不合格,'0'表示合格 - bo.setResult(isUnqualified ? "1" : "0"); + bo.setResult(isUnqualified ? "1" : "0");// 质检结果(0合格/1不合格) // 更新主记录 if (isUnqualified){ bo.setQualifiedQty(new BigDecimal(0)); @@ -312,6 +318,45 @@ public class QcPDAServiceImpl implements IQcPDAService { return true; } + + /** + * 判断检测值是否符合规格要求 + * @param detectedValue 检测值 + * @param spec 规格定义 + * @return 是否符合规格 + */ + boolean isWithinSpecification( BigDecimal detectedValue, String spec) { + if (StringUtils.isBlank(spec)) { + return true; // 无规格要求,默认通过 + } + + try { + // 处理多值规格(如:"A,B,C") + if (spec.contains(",")) { + return Arrays.stream(spec.split("\\s*,\\s*")) + .anyMatch(allowed -> StringUtils.equalsIgnoreCase(allowed, detectedValue.toString())); + } + + // 处理范围规格(如:"20-30" 或 "20x30-20x50" 或 "20x30*0.1-20x50*0.377") + if (spec.contains("-")) { + String[] bounds = spec.split("\\s*-\\s*", 2); + if (bounds.length != 2) return false; + + BigDecimal lower = new BigDecimal(bounds[0].replaceAll("[^0-9.]", "")); + BigDecimal upper = new BigDecimal(bounds[1].replaceAll("[^0-9.]", "")); + return detectedValue.compareTo(lower) >= 0 && detectedValue.compareTo(upper) <= 0; + } + + // 处理精确匹配 + return new BigDecimal(spec.trim()).compareTo(detectedValue) == 0; + + } catch (Exception e) { + log.error("规格比较出错 - 检测值: {}, 规格: {}, 错误: {}", + detectedValue, spec, e.getMessage()); + return false; // 出现异常时默认为不合格 + } + } + /** * 不合格评审处理-开始评审 * @param dispositionType diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/controller/WmsMonthlyReportController.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/controller/WmsMonthlyReportController.java new file mode 100644 index 00000000..60cf7584 --- /dev/null +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/controller/WmsMonthlyReportController.java @@ -0,0 +1,117 @@ +package org.dromara.wms.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.wms.domain.vo.WmsMonthlyReportVo; +import org.dromara.wms.domain.bo.WmsMonthlyReportBo; +import org.dromara.wms.service.IWmsMonthlyReportService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * WMS月度报 + * 前端访问路由地址为:/wms/wmsMonthlyReport + * + * @author zch + * @date 2025-09-25 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/wmsMonthlyReport") +public class WmsMonthlyReportController extends BaseController { + + private final IWmsMonthlyReportService wmsMonthlyReportService; + + /** + * 查询WMS月度报列表 + */ + @SaCheckPermission("wms:wmsMonthlyReport:list") + @GetMapping("/list") + public TableDataInfo list(WmsMonthlyReportBo bo, PageQuery pageQuery) { + return wmsMonthlyReportService.queryPageList(bo, pageQuery); + } + + /** + * 导出WMS月度报列表 + */ + @SaCheckPermission("wms:wmsMonthlyReport:export") + @Log(title = "WMS月度报", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(WmsMonthlyReportBo bo, HttpServletResponse response) { + List list = wmsMonthlyReportService.queryList(bo); + ExcelUtil.exportExcel(list, "WMS月度报", WmsMonthlyReportVo.class, response); + } + + /** + * 获取WMS月度报详细信息 + * + * @param reportId 主键 + */ + @SaCheckPermission("wms:wmsMonthlyReport:query") + @GetMapping("/{reportId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long reportId) { + return R.ok(wmsMonthlyReportService.queryById(reportId)); + } + + /** + * 新增WMS月度报 + */ + @SaCheckPermission("wms:wmsMonthlyReport:add") + @Log(title = "WMS月度报", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody WmsMonthlyReportBo bo) { + return toAjax(wmsMonthlyReportService.insertByBo(bo)); + } + + /** + * 修改WMS月度报 + */ + @SaCheckPermission("wms:wmsMonthlyReport:edit") + @Log(title = "WMS月度报", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody WmsMonthlyReportBo bo) { + return toAjax(wmsMonthlyReportService.updateByBo(bo)); + } + + /** + * 删除WMS月度报 + * + * @param reportIds 主键串 + */ + @SaCheckPermission("wms:wmsMonthlyReport:remove") + @Log(title = "WMS月度报", businessType = BusinessType.DELETE) + @DeleteMapping("/{reportIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] reportIds) { + return toAjax(wmsMonthlyReportService.deleteWithValidByIds(List.of(reportIds), true)); + } + + + /** + * 下拉框查询WMS月度报列表 + */ + + @GetMapping("/getWmsMonthlyReportList") + public R> getWmsMonthlyReportList(WmsMonthlyReportBo bo) { + List list = wmsMonthlyReportService.queryList(bo); + return R.ok(list); + } +} diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsMonthlyReport.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsMonthlyReport.java new file mode 100644 index 00000000..7994547b --- /dev/null +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsMonthlyReport.java @@ -0,0 +1,120 @@ +package org.dromara.wms.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * WMS月度报对象 wms_monthly_report + * + * @author zch + * @date 2025-09-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("wms_monthly_report") +public class WmsMonthlyReport extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 报表主键 + */ + private Long reportId; + + /** + * 报表年份 + */ + private Long reportYear; + + /** + * 报表月份 + */ + private Long reportMonth; + + /** + * 物料类型ID + */ + private Long materialTypeId; + + /** + * 物料类型名称 + */ + private String materialTypeName; + + /** + * 当月入库记录数量 + */ + private Long currentInstockCount; + + /** + * 当月入库总量 + */ + private Long currentInstockQty; + + /** + * 当月出库记录数量 + */ + private Long currentOutstockCount; + + /** + * 当月出库总量 + */ + private Long currentOutstockQty; + + /** + * 上月入库记录数量 + */ + private Long lastInstockCount; + + /** + * 上月入库总量 + */ + private Long lastInstockQty; + + /** + * 上月出库记录数量 + */ + private Long lastOutstockCount; + + /** + * 上月出库总量 + */ + private Long lastOutstockQty; + + /** + * 入库记录数量环比差额(当月-上月) + */ + private Long instockCountDiff; + + /** + * 入库总量环比差额(当月-上月) + */ + private Long instockQtyDiff; + + /** + * 出库记录数量环比差额(当月-上月) + */ + private Long outstockCountDiff; + + /** + * 出库总量环比差额(当月-上月) + */ + private Long outstockQtyDiff; + + /** + * 月末库存物料种类数 + */ + private Long inventoryMaterialCount; + + /** + * 月末库存总量 + */ + private Long inventoryQty; + + +} diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/bo/WmsMonthlyReportBo.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/bo/WmsMonthlyReportBo.java new file mode 100644 index 00000000..9871f65b --- /dev/null +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/bo/WmsMonthlyReportBo.java @@ -0,0 +1,116 @@ +package org.dromara.wms.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.wms.domain.WmsMonthlyReport; + +/** + * WMS月度报业务对象 wms_monthly_report + * + * @author zch + * @date 2025-09-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = WmsMonthlyReport.class, reverseConvertGenerate = false) +public class WmsMonthlyReportBo extends BaseEntity { + + /** + * 报表主键 + */ + private Long reportId; + + /** + * 报表年份 + */ + private Long reportYear; + + /** + * 报表月份 + */ + private Long reportMonth; + + /** + * 物料类型ID + */ + private Long materialTypeId; + + /** + * 物料类型名称 + */ + private String materialTypeName; + + /** + * 当月入库记录数量 + */ + private Long currentInstockCount; + + /** + * 当月入库总量 + */ + private Long currentInstockQty; + + /** + * 当月出库记录数量 + */ + private Long currentOutstockCount; + + /** + * 当月出库总量 + */ + private Long currentOutstockQty; + + /** + * 上月入库记录数量 + */ + private Long lastInstockCount; + + /** + * 上月入库总量 + */ + private Long lastInstockQty; + + /** + * 上月出库记录数量 + */ + private Long lastOutstockCount; + + /** + * 上月出库总量 + */ + private Long lastOutstockQty; + + /** + * 入库记录数量环比差额(当月-上月) + */ + private Long instockCountDiff; + + /** + * 入库总量环比差额(当月-上月) + */ + private Long instockQtyDiff; + + /** + * 出库记录数量环比差额(当月-上月) + */ + private Long outstockCountDiff; + + /** + * 出库总量环比差额(当月-上月) + */ + private Long outstockQtyDiff; + + /** + * 月末库存物料种类数 + */ + private Long inventoryMaterialCount; + + /** + * 月末库存总量 + */ + private Long inventoryQty; + + +} diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsMonthlyReportVo.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsMonthlyReportVo.java new file mode 100644 index 00000000..571becea --- /dev/null +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsMonthlyReportVo.java @@ -0,0 +1,150 @@ +package org.dromara.wms.domain.vo; + +import org.dromara.wms.domain.WmsMonthlyReport; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * WMS月度报视图对象 wms_monthly_report + * + * @author zch + * @date 2025-09-25 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = WmsMonthlyReport.class) +public class WmsMonthlyReportVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 报表主键 + */ + @ExcelProperty(value = "报表主键") + private Long reportId; + + /** + * 报表年份 + */ + @ExcelProperty(value = "报表年份") + private Long reportYear; + + /** + * 报表月份 + */ + @ExcelProperty(value = "报表月份") + private Long reportMonth; + + /** + * 物料类型ID + */ + @ExcelProperty(value = "物料类型ID") + private Long materialTypeId; + + /** + * 物料类型名称 + */ + @ExcelProperty(value = "物料类型名称") + private String materialTypeName; + + /** + * 当月入库记录数量 + */ + @ExcelProperty(value = "当月入库记录数量") + private Long currentInstockCount; + + /** + * 当月入库总量 + */ + @ExcelProperty(value = "当月入库总量") + private Long currentInstockQty; + + /** + * 当月出库记录数量 + */ + @ExcelProperty(value = "当月出库记录数量") + private Long currentOutstockCount; + + /** + * 当月出库总量 + */ + @ExcelProperty(value = "当月出库总量") + private Long currentOutstockQty; + + /** + * 上月入库记录数量 + */ + @ExcelProperty(value = "上月入库记录数量") + private Long lastInstockCount; + + /** + * 上月入库总量 + */ + @ExcelProperty(value = "上月入库总量") + private Long lastInstockQty; + + /** + * 上月出库记录数量 + */ + @ExcelProperty(value = "上月出库记录数量") + private Long lastOutstockCount; + + /** + * 上月出库总量 + */ + @ExcelProperty(value = "上月出库总量") + private Long lastOutstockQty; + + /** + * 入库记录数量环比差额(当月-上月) + */ + @ExcelProperty(value = "入库记录数量环比差额", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "当=月-上月") + private Long instockCountDiff; + + /** + * 入库总量环比差额(当月-上月) + */ + @ExcelProperty(value = "入库总量环比差额", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "当=月-上月") + private Long instockQtyDiff; + + /** + * 出库记录数量环比差额(当月-上月) + */ + @ExcelProperty(value = "出库记录数量环比差额", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "当=月-上月") + private Long outstockCountDiff; + + /** + * 出库总量环比差额(当月-上月) + */ + @ExcelProperty(value = "出库总量环比差额", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "当=月-上月") + private Long outstockQtyDiff; + + /** + * 月末库存物料种类数 + */ + @ExcelProperty(value = "月末库存物料种类数") + private Long inventoryMaterialCount; + + /** + * 月末库存总量 + */ + @ExcelProperty(value = "月末库存总量") + private Long inventoryQty; + + +} diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/mapper/WmsMonthlyReportMapper.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/mapper/WmsMonthlyReportMapper.java new file mode 100644 index 00000000..a282656c --- /dev/null +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/mapper/WmsMonthlyReportMapper.java @@ -0,0 +1,15 @@ +package org.dromara.wms.mapper; + +import org.dromara.wms.domain.WmsMonthlyReport; +import org.dromara.wms.domain.vo.WmsMonthlyReportVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * WMS月度报Mapper接口 + * + * @author zch + * @date 2025-09-25 + */ +public interface WmsMonthlyReportMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/IWmsMonthlyReportService.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/IWmsMonthlyReportService.java new file mode 100644 index 00000000..9b7540d0 --- /dev/null +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/IWmsMonthlyReportService.java @@ -0,0 +1,69 @@ +package org.dromara.wms.service; + +import org.dromara.wms.domain.WmsMonthlyReport; +import org.dromara.wms.domain.vo.WmsMonthlyReportVo; +import org.dromara.wms.domain.bo.WmsMonthlyReportBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * WMS月度报Service接口 + * + * @author zch + * @date 2025-09-25 + */ +public interface IWmsMonthlyReportService { + + /** + * 查询WMS月度报 + * + * @param reportId 主键 + * @return WMS月度报 + */ + WmsMonthlyReportVo queryById(Long reportId); + + /** + * 分页查询WMS月度报列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return WMS月度报分页列表 + */ + TableDataInfo queryPageList(WmsMonthlyReportBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的WMS月度报列表 + * + * @param bo 查询条件 + * @return WMS月度报列表 + */ + List queryList(WmsMonthlyReportBo bo); + + /** + * 新增WMS月度报 + * + * @param bo WMS月度报 + * @return 是否新增成功 + */ + Boolean insertByBo(WmsMonthlyReportBo bo); + + /** + * 修改WMS月度报 + * + * @param bo WMS月度报 + * @return 是否修改成功 + */ + Boolean updateByBo(WmsMonthlyReportBo bo); + + /** + * 校验并批量删除WMS月度报信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsMonthlyReportServiceImpl.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsMonthlyReportServiceImpl.java new file mode 100644 index 00000000..a8eb4ca4 --- /dev/null +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsMonthlyReportServiceImpl.java @@ -0,0 +1,150 @@ +package org.dromara.wms.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.dromara.wms.domain.bo.WmsMonthlyReportBo; +import org.dromara.wms.domain.vo.WmsMonthlyReportVo; +import org.dromara.wms.domain.WmsMonthlyReport; +import org.dromara.wms.mapper.WmsMonthlyReportMapper; +import org.dromara.wms.service.IWmsMonthlyReportService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * WMS月度报Service业务层处理 + * + * @author zch + * @date 2025-09-25 + */ +@RequiredArgsConstructor +@Service +public class WmsMonthlyReportServiceImpl implements IWmsMonthlyReportService { + + private final WmsMonthlyReportMapper baseMapper; + + /** + * 查询WMS月度报 + * + * @param reportId 主键 + * @return WMS月度报 + */ + @Override + public WmsMonthlyReportVo queryById(Long reportId){ + return baseMapper.selectVoById(reportId); + } + + /** + * 分页查询WMS月度报列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return WMS月度报分页列表 + */ + @Override + public TableDataInfo queryPageList(WmsMonthlyReportBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的WMS月度报列表 + * + * @param bo 查询条件 + * @return WMS月度报列表 + */ + @Override + public List queryList(WmsMonthlyReportBo bo) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private MPJLambdaWrapper buildQueryWrapper(WmsMonthlyReportBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper lqw = JoinWrappers.lambda(WmsMonthlyReport.class) + .selectAll(WmsMonthlyReport.class) + .eq(bo.getReportId() != null, WmsMonthlyReport::getReportId, bo.getReportId()) + .eq(bo.getReportYear() != null, WmsMonthlyReport::getReportYear, bo.getReportYear()) + .eq(bo.getReportMonth() != null, WmsMonthlyReport::getReportMonth, bo.getReportMonth()) + .eq(bo.getMaterialTypeId() != null, WmsMonthlyReport::getMaterialTypeId, bo.getMaterialTypeId()) + .like(StringUtils.isNotBlank(bo.getMaterialTypeName()), WmsMonthlyReport::getMaterialTypeName, bo.getMaterialTypeName()) + .eq(bo.getCurrentInstockCount() != null, WmsMonthlyReport::getCurrentInstockCount, bo.getCurrentInstockCount()) + .eq(bo.getCurrentInstockQty() != null, WmsMonthlyReport::getCurrentInstockQty, bo.getCurrentInstockQty()) + .eq(bo.getCurrentOutstockCount() != null, WmsMonthlyReport::getCurrentOutstockCount, bo.getCurrentOutstockCount()) + .eq(bo.getCurrentOutstockQty() != null, WmsMonthlyReport::getCurrentOutstockQty, bo.getCurrentOutstockQty()) + .eq(bo.getLastInstockCount() != null, WmsMonthlyReport::getLastInstockCount, bo.getLastInstockCount()) + .eq(bo.getLastInstockQty() != null, WmsMonthlyReport::getLastInstockQty, bo.getLastInstockQty()) + .eq(bo.getLastOutstockCount() != null, WmsMonthlyReport::getLastOutstockCount, bo.getLastOutstockCount()) + .eq(bo.getLastOutstockQty() != null, WmsMonthlyReport::getLastOutstockQty, bo.getLastOutstockQty()) + .eq(bo.getInstockCountDiff() != null, WmsMonthlyReport::getInstockCountDiff, bo.getInstockCountDiff()) + .eq(bo.getInstockQtyDiff() != null, WmsMonthlyReport::getInstockQtyDiff, bo.getInstockQtyDiff()) + .eq(bo.getOutstockCountDiff() != null, WmsMonthlyReport::getOutstockCountDiff, bo.getOutstockCountDiff()) + .eq(bo.getOutstockQtyDiff() != null, WmsMonthlyReport::getOutstockQtyDiff, bo.getOutstockQtyDiff()) + .eq(bo.getInventoryMaterialCount() != null, WmsMonthlyReport::getInventoryMaterialCount, bo.getInventoryMaterialCount()) + .eq(bo.getInventoryQty() != null, WmsMonthlyReport::getInventoryQty, bo.getInventoryQty()) + .orderByDesc(WmsMonthlyReport::getCreateTime); + return lqw; + } + + /** + * 新增WMS月度报 + * + * @param bo WMS月度报 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(WmsMonthlyReportBo bo) { + WmsMonthlyReport add = MapstructUtils.convert(bo, WmsMonthlyReport.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setReportId(add.getReportId()); + } + return flag; + } + + /** + * 修改WMS月度报 + * + * @param bo WMS月度报 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(WmsMonthlyReportBo bo) { + WmsMonthlyReport update = MapstructUtils.convert(bo, WmsMonthlyReport.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(WmsMonthlyReport entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除WMS月度报信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/hwmom-wms/src/main/resources/mapper/wms/WmsMonthlyReportMapper.xml b/ruoyi-modules/hwmom-wms/src/main/resources/mapper/wms/WmsMonthlyReportMapper.xml new file mode 100644 index 00000000..b9ef5c16 --- /dev/null +++ b/ruoyi-modules/hwmom-wms/src/main/resources/mapper/wms/WmsMonthlyReportMapper.xml @@ -0,0 +1,7 @@ + + + + +