Procházet zdrojové kódy

新增库存预警、超期预警分页接口、过期预警分页接口

lingpeng.li před 2 týdny
rodič
revize
98974d1e01
12 změnil soubory, kde provedl 911 přidání a 0 odebrání
  1. 284 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/controller/InventoryAlertController.java
  2. 203 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/controller/InventoryCountController.java
  3. 149 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/entity/InventoryAlert.java
  4. 169 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/entity/InventoryCount.java
  5. 14 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/mapper/InventoryAlertMapper.java
  6. 14 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/mapper/InventoryCountMapper.java
  7. 5 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/mapper/xml/InventoryAlertMapper.xml
  8. 5 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/mapper/xml/InventoryCountMapper.xml
  9. 16 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/service/IInventoryAlertService.java
  10. 14 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/service/IInventoryCountService.java
  11. 19 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/service/impl/InventoryAlertServiceImpl.java
  12. 19 0
      zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/service/impl/InventoryCountServiceImpl.java

+ 284 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/controller/InventoryAlertController.java

@@ -0,0 +1,284 @@
+package org.jeecg.modules.sparePartsConsumables.inventoryManagement.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.sparePartsConsumables.inventoryManagement.entity.InventoryAlert;
+import org.jeecg.modules.sparePartsConsumables.inventoryManagement.service.IInventoryAlertService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @Description: 库存预警
+ * @Author: jeecg-boot
+ * @Date: 2025-05-22
+ * @Version: V1.0
+ */
+@Api(tags = "库存预警")
+@RestController
+@RequestMapping("/sparePartsConsumables/inventoryAlert")
+@Slf4j
+public class InventoryAlertController extends JeecgController<InventoryAlert, IInventoryAlertService> {
+    @Autowired
+    private IInventoryAlertService inventoryAlertService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param inventoryAlert
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "库存预警-分页列表查询")
+    @ApiOperation(value = "库存预警-分页列表查询", notes = "库存预警-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<InventoryAlert>> queryPageList(InventoryAlert inventoryAlert,
+                                                       @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                       @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                       HttpServletRequest req) {
+        QueryWrapper<InventoryAlert> queryWrapper = QueryGenerator.initQueryWrapper(inventoryAlert, req.getParameterMap());
+        Page<InventoryAlert> page = new Page<InventoryAlert>(pageNo, pageSize);
+        IPage<InventoryAlert> pageList = inventoryAlertService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 添加
+     *
+     * @param inventoryAlert
+     * @return
+     */
+    @AutoLog(value = "库存预警-添加")
+    @ApiOperation(value = "库存预警-添加", notes = "库存预警-添加")
+    @RequiresPermissions("sparePartsConsumables:sbsmzq_inventory_alert:add")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody InventoryAlert inventoryAlert) {
+        inventoryAlertService.save(inventoryAlert);
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     *
+     * @param inventoryAlert
+     * @return
+     */
+    @AutoLog(value = "库存预警-编辑")
+    @ApiOperation(value = "库存预警-编辑", notes = "库存预警-编辑")
+    @RequiresPermissions("sparePartsConsumables:sbsmzq_inventory_alert:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody InventoryAlert inventoryAlert) {
+        inventoryAlertService.updateById(inventoryAlert);
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "库存预警-通过id删除")
+    @ApiOperation(value = "库存预警-通过id删除", notes = "库存预警-通过id删除")
+    @RequiresPermissions("sparePartsConsumables:sbsmzq_inventory_alert:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        inventoryAlertService.removeById(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "库存预警-批量删除")
+    @ApiOperation(value = "库存预警-批量删除", notes = "库存预警-批量删除")
+    @RequiresPermissions("sparePartsConsumables:sbsmzq_inventory_alert:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.inventoryAlertService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "库存预警-通过id查询")
+    @ApiOperation(value = "库存预警-通过id查询", notes = "库存预警-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<InventoryAlert> queryById(@RequestParam(name = "id", required = true) String id) {
+        InventoryAlert inventoryAlert = inventoryAlertService.getById(id);
+        if (inventoryAlert == null) {
+            return Result.error("未找到对应数据");
+        }
+        return Result.OK(inventoryAlert);
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param inventoryAlert
+     */
+    @RequiresPermissions("sparePartsConsumables:sbsmzq_inventory_alert:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, InventoryAlert inventoryAlert) {
+        return super.exportXls(request, inventoryAlert, InventoryAlert.class, "库存预警");
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequiresPermissions("sparePartsConsumables:sbsmzq_inventory_alert:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, InventoryAlert.class);
+    }
+
+
+    /**
+     * 分页列表查询
+     *
+     * @param inventoryAlert
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @ApiOperation(value = "超期预警-分页列表查询", notes = "超期预警-分页列表查询")
+    @GetMapping(value = "/overdueWarningList")
+    public Result<IPage<InventoryAlert>> queryOverduePageList(InventoryAlert inventoryAlert,
+                                                              @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                              @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                              HttpServletRequest req) {
+        QueryWrapper<InventoryAlert> queryWrapper = QueryGenerator.initQueryWrapper(inventoryAlert, req.getParameterMap());
+
+        // 查询全部匹配数据(不分页)
+        List<InventoryAlert> allRecords = inventoryAlertService.list(queryWrapper);
+        List<InventoryAlert> filteredList = new ArrayList<>();
+
+        LocalDate now = LocalDate.now();
+
+        for (InventoryAlert item : allRecords) {
+            if (item.getStorageDate() == null || item.getInventoryDays() == null || item.getWarningValue() == null)
+                continue;
+
+            LocalDate storageDate = item.getStorageDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+            long usedDays = ChronoUnit.DAYS.between(storageDate, now); // 已经使用的天数
+            long remainingDays = item.getInventoryDays() - usedDays;
+            // 筛选出剩余天数大于等于 0 且小于等于预警值的记录
+            if (remainingDays >= 0 && remainingDays <= item.getWarningValue()) {
+                filteredList.add(item);
+            }
+        }
+
+        // 手动分页
+        int total = filteredList.size();
+        int start = (pageNo - 1) * pageSize;
+        int end = Math.min(start + pageSize, total);
+        List<InventoryAlert> paginatedList = (start < total) ? filteredList.subList(start, end) : Collections.emptyList();
+
+        Page<InventoryAlert> resultPage = new Page<>(pageNo, pageSize);
+        resultPage.setTotal(total);
+        resultPage.setRecords(paginatedList);
+
+        return Result.OK(resultPage);
+    }
+
+
+    /**
+     * 分页列表查询
+     *
+     * @param inventoryAlert
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @ApiOperation(value = "过期预警-分页列表查询", notes = "过期预警-分页列表查询")
+    @GetMapping(value = "/expiredWarningList")
+    public Result<IPage<InventoryAlert>> queryExpiredPageList(InventoryAlert inventoryAlert,
+                                                              @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                              @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                              HttpServletRequest req) {
+        QueryWrapper<InventoryAlert> queryWrapper = QueryGenerator.initQueryWrapper(inventoryAlert, req.getParameterMap());
+
+        // 不使用分页,先查出所有数据
+        List<InventoryAlert> allRecords = inventoryAlertService.list(queryWrapper);
+
+        List<InventoryAlert> filteredList = new ArrayList<>();
+        LocalDate now = LocalDate.now();
+
+        for (InventoryAlert item : allRecords) {
+            if (item.getExpirationDate() == null) continue;
+
+            // 每条记录单独获取 warningValue,默认为 Integer.MAX_VALUE
+            int itemWarningValue = item.getWarningValue() != null ? item.getWarningValue() : Integer.MAX_VALUE;
+
+            LocalDate expirationDate = item.getExpirationDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+            long diff = ChronoUnit.DAYS.between(now, expirationDate);
+            // 只保留 diff <= warningValue 的记录
+            if (diff <= itemWarningValue) {
+                String msg;
+                if (diff > 0) {
+                    msg = "还有" + diff + "天过期";
+                } else if (diff == 0) {
+                    msg = "今天过期";
+                } else {
+                    msg = "已过期" + Math.abs(diff) + "天";
+                }
+
+                if (!msg.equals(item.getCurrentQuantity())) {
+                    item.setCurrentQuantity(msg);
+                    inventoryAlertService.updateById(item);
+                }
+
+                filteredList.add(item);
+            }
+        }
+
+        //  手动分页
+        int total = filteredList.size();
+        int start = (pageNo - 1) * pageSize;
+        int end = Math.min(start + pageSize, total);
+        List<InventoryAlert> paginatedList = (start < end) ? filteredList.subList(start, end) : Collections.emptyList();
+
+        Page<InventoryAlert> resultPage = new Page<>(pageNo, pageSize);
+        resultPage.setTotal(total);
+        resultPage.setRecords(paginatedList);
+
+        return Result.OK(resultPage);
+    }
+
+
+}

+ 203 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/controller/InventoryCountController.java

@@ -0,0 +1,203 @@
+package org.jeecg.modules.sparePartsConsumables.inventoryManagement.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.jeecg.common.api.CommonAPI;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.RedisUtil;
+import org.jeecg.common.util.TokenUtils;
+import org.jeecg.modules.sparePartsConsumables.inventoryManagement.entity.InventoryCount;
+import org.jeecg.modules.sparePartsConsumables.inventoryManagement.service.IInventoryCountService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+
+/**
+ * @Description: 库存盘点
+ * @Author: jeecg-boot
+ * @Date: 2025-05-22
+ * @Version: V1.0
+ */
+@Api(tags = "库存盘点")
+@RestController
+@RequestMapping("/sparePartsConsumables/inventoryCount")
+@Slf4j
+public class InventoryCountController extends JeecgController<InventoryCount, IInventoryCountService> {
+
+    @Lazy
+    @Resource
+    private CommonAPI commonApi;
+
+    @Lazy
+    @Resource
+    private RedisUtil redisUtil;
+
+    @Autowired
+    private IInventoryCountService inventoryCountService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param inventoryCount
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "库存盘点-分页列表查询")
+    @ApiOperation(value = "库存盘点-分页列表查询", notes = "库存盘点-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<InventoryCount>> queryPageList(InventoryCount inventoryCount,
+                                                       @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                       @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                       HttpServletRequest req) {
+        QueryWrapper<InventoryCount> queryWrapper = QueryGenerator.initQueryWrapper(inventoryCount, req.getParameterMap());
+        Page<InventoryCount> page = new Page<InventoryCount>(pageNo, pageSize);
+        IPage<InventoryCount> pageList = inventoryCountService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 添加
+     *
+     * @param inventoryCount
+     * @return
+     */
+    @AutoLog(value = "库存盘点-添加")
+    @ApiOperation(value = "库存盘点-添加", notes = "库存盘点-添加")
+    @RequiresPermissions("sparePartsConsumables:sbsmzq_inventory_count:add")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody InventoryCount inventoryCount) {
+        inventoryCountService.save(inventoryCount);
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     *
+     * @param inventoryCount
+     * @return
+     */
+    @AutoLog(value = "库存盘点-编辑")
+    @ApiOperation(value = "库存盘点-编辑", notes = "库存盘点-编辑")
+    @RequiresPermissions("sparePartsConsumables:sbsmzq_inventory_count:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody InventoryCount inventoryCount) {
+        inventoryCountService.updateById(inventoryCount);
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "库存盘点-通过id删除")
+    @ApiOperation(value = "库存盘点-通过id删除", notes = "库存盘点-通过id删除")
+    @RequiresPermissions("sparePartsConsumables:sbsmzq_inventory_count:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        inventoryCountService.removeById(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "库存盘点-批量删除")
+    @ApiOperation(value = "库存盘点-批量删除", notes = "库存盘点-批量删除")
+    @RequiresPermissions("sparePartsConsumables:sbsmzq_inventory_count:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.inventoryCountService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "库存盘点-通过id查询")
+    @ApiOperation(value = "库存盘点-通过id查询", notes = "库存盘点-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<InventoryCount> queryById(@RequestParam(name = "id", required = true) String id) {
+        InventoryCount inventoryCount = inventoryCountService.getById(id);
+        if (inventoryCount == null) {
+            return Result.error("未找到对应数据");
+        }
+        return Result.OK(inventoryCount);
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param inventoryCount
+     */
+    @RequiresPermissions("sparePartsConsumables:sbsmzq_inventory_count:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, InventoryCount inventoryCount) {
+        return super.exportXls(request, inventoryCount, InventoryCount.class, "库存盘点");
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequiresPermissions("sparePartsConsumables:sbsmzq_inventory_count:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, InventoryCount.class);
+    }
+
+
+    /**
+     * 分页列表查询(与我相关)
+     *
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @ApiOperation(value = "设备处置-分页列表查询(与我相关)", notes = "设备处置-分页列表查询(与我相关)")
+    @GetMapping(value = "/listByUser")
+    public Result<IPage<InventoryCount>> queryPageListByUser(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                             @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                             HttpServletRequest req) {
+
+        LoginUser loginUser = TokenUtils.getLoginUser(req, commonApi, redisUtil);
+        // 构建查询条件
+        LambdaQueryWrapper<InventoryCount> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(InventoryCount::getDirector, loginUser.getId());
+        QueryGenerator.initQueryWrapper(queryWrapper, req.getParameterMap());
+        Page<InventoryCount> page = new Page<InventoryCount>(pageNo, pageSize);
+        IPage<InventoryCount> pageList = inventoryCountService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+}

+ 149 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/entity/InventoryAlert.java

@@ -0,0 +1,149 @@
+package org.jeecg.modules.sparePartsConsumables.inventoryManagement.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 库存预警
+ * @Author: jeecg-boot
+ * @Date: 2025-05-22
+ * @Version: V1.0
+ */
+@Data
+@TableName("sbsmzq_inventory_alert")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "sbsmzq_inventory_alert对象", description = "库存预警")
+public class InventoryAlert implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "id")
+    private String id;
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    /**
+     * 创建日期
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+    /**
+     * 更新日期
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+    /**
+     * 所属部门
+     */
+    @ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+    /**
+     * 物料编号
+     */
+    @Excel(name = "物料编号", width = 15)
+    @ApiModelProperty(value = "物料编号")
+    private String materialCode;
+    /**
+     * 物料名称
+     */
+    @Excel(name = "物料名称", width = 15)
+    @ApiModelProperty(value = "物料名称")
+    private String materialName;
+    /**
+     * 分类
+     */
+    @Excel(name = "分类", width = 15)
+    @ApiModelProperty(value = "分类")
+    private String category;
+    /**
+     * 规格型号
+     */
+    @Excel(name = "规格型号", width = 15)
+    @ApiModelProperty(value = "规格型号")
+    private String spec;
+    /**
+     * 单位
+     */
+    @Excel(name = "单位", width = 15)
+    @ApiModelProperty(value = "单位")
+    private Integer unit;
+    /**
+     * 标签码
+     */
+    @Excel(name = "标签码", width = 15)
+    @ApiModelProperty(value = "标签码")
+    private String tagCode;
+    /**
+     * 预警值
+     */
+    @Excel(name = "预警值", width = 15)
+    @ApiModelProperty(value = "预警值")
+    private Integer warningValue;
+    /**
+     * 仓库
+     */
+    @Excel(name = "仓库", width = 15)
+    @ApiModelProperty(value = "仓库")
+    private String warehouseName;
+    /**
+     * 当前值
+     */
+    @Excel(name = "当前值", width = 15)
+    @ApiModelProperty(value = "当前值")
+    private String currentQuantity;
+    /**
+     * 入库时间
+     */
+    @Excel(name = "入库时间", width = 20, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "入库时间")
+    private Date storageDate;
+    /**
+     * 库存天数
+     */
+    @Excel(name = "库存天数", width = 15)
+    @ApiModelProperty(value = "库存天数")
+    private Integer inventoryDays;
+    /**
+     * 过期时间
+     */
+    @Excel(name = "过期时间", width = 20, format = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "过期时间")
+    private Date expirationDate;
+    /**
+     * 库存数量
+     */
+    @Excel(name = "库存数量", width = 15)
+    @ApiModelProperty(value = "库存数量")
+    private Integer inventoryQuantity;
+}

+ 169 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/entity/InventoryCount.java

@@ -0,0 +1,169 @@
+package org.jeecg.modules.sparePartsConsumables.inventoryManagement.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 库存盘点
+ * @Author: jeecg-boot
+ * @Date: 2025-05-22
+ * @Version: V1.0
+ */
+@Data
+@TableName("sbsmzq_inventory_count")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "sbsmzq_inventory_count对象", description = "库存盘点")
+public class InventoryCount implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "id")
+    private String id;
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    /**
+     * 创建日期
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+    /**
+     * 更新日期
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+    /**
+     * 所属部门
+     */
+    @ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+    /**
+     * 盘点单号
+     */
+    @Excel(name = "盘点单号", width = 15)
+    @ApiModelProperty(value = "盘点单号")
+    private String inventoryNumber;
+    /**
+     * 计划盘点开始时间
+     */
+    @Excel(name = "计划盘点开始时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "计划盘点开始时间")
+    private Date checkStartTime;
+    /**
+     * 计划盘点结束时间
+     */
+    @Excel(name = "计划盘点结束时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "计划盘点结束时间")
+    private Date checkEndTime;
+    /**
+     * 备注
+     */
+    @Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remark;
+    /**
+     * 盘点仓库
+     */
+    @Excel(name = "盘点仓库", width = 15)
+    @ApiModelProperty(value = "盘点仓库")
+    private String checkWarehouse;
+    /**
+     * 负责人
+     */
+    @Excel(name = "负责人", width = 15)
+    @ApiModelProperty(value = "负责人")
+    private String director;
+    /**
+     * 库存数量
+     */
+    @Excel(name = "库存数量", width = 15)
+    @ApiModelProperty(value = "库存数量")
+    private Integer inventoryQuantity;
+    /**
+     * 状态
+     */
+    @Excel(name = "状态", width = 15)
+    @ApiModelProperty(value = "状态")
+    private Integer status;
+    /**
+     * 应盘项
+     */
+    @Excel(name = "应盘项", width = 15)
+    @ApiModelProperty(value = "应盘项")
+    private Integer planCount;
+    /**
+     * 已盘项
+     */
+    @Excel(name = "已盘项", width = 15)
+    @ApiModelProperty(value = "已盘项")
+    private Integer actualCount;
+    /**
+     * 盘盈项
+     */
+    @Excel(name = "盘盈项", width = 15)
+    @ApiModelProperty(value = "盘盈项")
+    private Integer inventoryGain;
+    /**
+     * 盘亏项
+     */
+    @Excel(name = "盘亏项", width = 15)
+    @ApiModelProperty(value = "盘亏项")
+    private Integer inventoryLoss;
+    /**
+     * 当前节点
+     */
+    @Excel(name = "当前节点", width = 15)
+    @ApiModelProperty(value = "当前节点")
+    private String currentNode;
+    /**
+     * 审批状态
+     */
+    @Excel(name = "审批状态", width = 15)
+    @ApiModelProperty(value = "审批状态")
+    private Integer approvalStatus;
+    /**
+     * 审批结束时间
+     */
+    @Excel(name = "审批结束时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "审批结束时间")
+    private Date approvalEndTime;
+    /**
+     * 库位
+     */
+    @Excel(name = "库位", width = 15)
+    @ApiModelProperty(value = "库位")
+    private String location;
+}

+ 14 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/mapper/InventoryAlertMapper.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.sparePartsConsumables.inventoryManagement.mapper;
+
+import org.jeecg.modules.sparePartsConsumables.inventoryManagement.entity.InventoryAlert;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 库存预警
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+public interface InventoryAlertMapper extends BaseMapper<InventoryAlert> {
+
+}

+ 14 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/mapper/InventoryCountMapper.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.sparePartsConsumables.inventoryManagement.mapper;
+
+import org.jeecg.modules.sparePartsConsumables.inventoryManagement.entity.InventoryCount;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 库存盘点
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+public interface InventoryCountMapper extends BaseMapper<InventoryCount> {
+
+}

+ 5 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/mapper/xml/InventoryAlertMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.sparePartsConsumables.inventoryManagement.mapper.InventoryAlertMapper">
+
+</mapper>

+ 5 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/mapper/xml/InventoryCountMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.sparePartsConsumables.inventoryManagement.mapper.InventoryCountMapper">
+
+</mapper>

+ 16 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/service/IInventoryAlertService.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.sparePartsConsumables.inventoryManagement.service;
+
+import org.jeecg.modules.sparePartsConsumables.inventoryManagement.entity.InventoryAlert;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 库存预警
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+public interface IInventoryAlertService extends IService<InventoryAlert> {
+
+
+
+}

+ 14 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/service/IInventoryCountService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.sparePartsConsumables.inventoryManagement.service;
+
+import org.jeecg.modules.sparePartsConsumables.inventoryManagement.entity.InventoryCount;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 库存盘点
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+public interface IInventoryCountService extends IService<InventoryCount> {
+
+}

+ 19 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/service/impl/InventoryAlertServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.sparePartsConsumables.inventoryManagement.service.impl;
+
+import org.jeecg.modules.sparePartsConsumables.inventoryManagement.entity.InventoryAlert;
+import org.jeecg.modules.sparePartsConsumables.inventoryManagement.mapper.InventoryAlertMapper;
+import org.jeecg.modules.sparePartsConsumables.inventoryManagement.service.IInventoryAlertService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 库存预警
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+@Service
+public class InventoryAlertServiceImpl extends ServiceImpl<InventoryAlertMapper, InventoryAlert> implements IInventoryAlertService {
+
+}

+ 19 - 0
zgzt-sbsmzq/jeecg-module-lifecycle/src/main/java/org/jeecg/modules/sparePartsConsumables/inventoryManagement/service/impl/InventoryCountServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.sparePartsConsumables.inventoryManagement.service.impl;
+
+import org.jeecg.modules.sparePartsConsumables.inventoryManagement.entity.InventoryCount;
+import org.jeecg.modules.sparePartsConsumables.inventoryManagement.mapper.InventoryCountMapper;
+import org.jeecg.modules.sparePartsConsumables.inventoryManagement.service.IInventoryCountService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 库存盘点
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+@Service
+public class InventoryCountServiceImpl extends ServiceImpl<InventoryCountMapper, InventoryCount> implements IInventoryCountService {
+
+}