干燥机配套车间生产管理系统/云平台服务端
zhuguifei
7 小时以前 a0a030ec98b711e82720be38c6ea9ddf4a07a22b
Merge branch 'master' of http://lanpucloud.cn:1111/r/herb
已修改1个文件
已添加24个文件
1508 ■■■■■ 文件已修改
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryEquipment.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryMaintenanceRecord.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryRepairRecords.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DrySpareParts.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DrySpareStockLog.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryMaintenanceRecordController.java 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRepairRecordsController.java 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DrySparePartsController.java 227 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DrySpareStockLogController.java 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryMaintenanceRecordMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryRepairRecordsMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DrySparePartsMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DrySpareStockLogMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryMaintenanceRecordMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryRepairRecordsMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DrySparePartsMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DrySpareStockLogMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryMaintenanceRecordService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryRepairRecordsService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDrySparePartsService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDrySpareStockLogService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryMaintenanceRecordServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRepairRecordsServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DrySparePartsServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DrySpareStockLogServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryEquipment.java
@@ -91,6 +91,35 @@
    @ApiModelProperty(value = "设备IP")
    private String ip;
    /**制造商*/
    @Excel(name = "制造商", width = 15)
    @ApiModelProperty(value = "制造商")
    private String manufacturer;
    /**购入日期*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "购入日期")
    private Date purchaseDate;
    /**启用日期*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "启用日期")
    private Date startDate;
    /**安装位置*/
    @Excel(name = "安装位置", width = 15)
    @ApiModelProperty(value = "安装位置")
    private String location;
    /**设备状态*/
    @Excel(name = "设备状态", width = 15, dicCode = "eqp_status")
    @Dict(dicCode = "eqp_status")
    @ApiModelProperty(value = "设备状态")
    private String status;
    /**报废日期*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "报废日期")
    private Date scrapDate;
    public DryEquipment() {
    }
    public DryEquipment(RealTimeDataVo realTimeDataVo) {
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryMaintenanceRecord.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,90 @@
package org.jeecg.modules.dry.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * @Description: dry_maintenance_record
 * @Author: jeecg-boot
 * @Date:   2025-07-21
 * @Version: V1.0
 */
@Data
@TableName("dry_maintenance_record")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="dry_maintenance_record对象", description="dry_maintenance_record")
public class DryMaintenanceRecord implements Serializable {
    private static final long serialVersionUID = 1L;
    /**主键ID*/
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "主键ID")
    private Integer id;
    /**保养编号*/
    @Excel(name = "保养编号", width = 15)
    @ApiModelProperty(value = "保养编号")
    private String planNumber;
    /**设备编号*/
    @Excel(name = "设备编号", width = 15, dictTable = "dry_equipment", dicText = "name", dicCode = "id")
    @Dict(dictTable = "dry_equipment", dicText = "name", dicCode = "id")
    @ApiModelProperty(value = "设备编号")
    private String equipmentId;
    /**保养周期*/
    @Excel(name = "保养周期", width = 15)
    @ApiModelProperty(value = "保养周期")
    private String cycle;
    /**保养时间*/
    @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 java.util.Date maintDate;
    /**保养人员*/
    @Excel(name = "保养人员", width = 15)
    @ApiModelProperty(value = "保养人员")
    private String technician;
    /**保养内容*/
    @Excel(name = "保养内容", width = 15)
    @ApiModelProperty(value = "保养内容")
    private String content;
    /**备件使用情况*/
    @Excel(name = "备件使用情况", width = 15)
    @ApiModelProperty(value = "备件使用情况")
    private String spareParts;
    /**备注*/
    @Excel(name = "备注", width = 15)
    @ApiModelProperty(value = "备注")
    private String remark;
    /**创建人*/
    @ApiModelProperty(value = "创建人")
    private String createBy;
    /**创建日期*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "创建日期")
    private Date createTime;
    /**更新人*/
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    /**更新日期*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "更新日期")
    private Date updateTime;
}
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DryRepairRecords.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,114 @@
package org.jeecg.modules.dry.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * @Description: ç»´ä¿®è®°å½•
 * @Author: jeecg-boot
 * @Date:   2025-07-21
 * @Version: V1.0
 */
@Data
@TableName("dry_repair_records")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="dry_repair_records对象", description="维修记录")
public class DryRepairRecords implements Serializable {
    private static final long serialVersionUID = 1L;
    /**主键ID*/
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "主键ID")
    private Integer id;
    /**维修单号*/
    @Excel(name = "维修单号", width = 15)
    @ApiModelProperty(value = "维修单号")
    private String orderNumber;
    /**设备编号*/
    @Excel(name = "设备编号", width = 15, dictTable = "dry_equipment", dicText = "name", dicCode = "id")
    @Dict(dictTable = "dry_equipment", dicText = "name", dicCode = "id")
    @ApiModelProperty(value = "设备编号")
    private String equId;
    /**故障时间*/
    @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 java.util.Date faultTime;
    /**报修人*/
    @Excel(name = "报修人", width = 15)
    @ApiModelProperty(value = "报修人")
    private java.lang.String reporter;
    /**维修开始时间*/
    @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 java.util.Date startTime;
    /**维修结束时间*/
    @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 java.util.Date endTime;
    /**维修人员*/
    @Excel(name = "维修人员", width = 15)
    @ApiModelProperty(value = "维修人员")
    private String technician;
    /**故障类型*/
    @Excel(name = "故障类型", width = 15)
    @ApiModelProperty(value = "故障类型")
    private String faultType;
    /**故障描述*/
    @Excel(name = "故障描述", width = 15)
    @ApiModelProperty(value = "故障描述")
    private String description;
    /**维修措施*/
    @Excel(name = "维修措施", width = 15)
    @ApiModelProperty(value = "维修措施")
    private String solution;
    /**更换配件清单(JSON格式存储)*/
    @Excel(name = "更换配件清单(JSON格式存储)", width = 15)
    @ApiModelProperty(value = "更换配件清单(JSON格式存储)")
    private String parts;
    /**维修费用*/
    @Excel(name = "维修费用", width = 15)
    @ApiModelProperty(value = "维修费用")
    private BigDecimal cost;
    /**维修状态*/
    @Excel(name = "维修状态", width = 15)
    @ApiModelProperty(value = "维修状态")
    private String status;
    /**创建人*/
    @ApiModelProperty(value = "创建人")
    private String createBy;
    /**创建日期*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "创建日期")
    private Date createTime;
    /**更新人*/
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    /**更新日期*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "更新日期")
    private Date updateTime;
}
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DrySpareParts.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,91 @@
package org.jeecg.modules.dry.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * @Description: å¤‡å“å¤‡ä»¶
 * @Author: jeecg-boot
 * @Date:   2025-07-23
 * @Version: V1.0
 */
@Data
@TableName("dry_spare_parts")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="dry_spare_parts对象", description="备品备件")
public class DrySpareParts implements Serializable {
    private static final long serialVersionUID = 1L;
    /**主键ID*/
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "主键ID")
    private Integer id;
    /**零件编号*/
    @Excel(name = "零件编号", width = 15)
    @ApiModelProperty(value = "零件编号")
    private String partNumber;
    /**零件名称*/
    @Excel(name = "零件名称", width = 15)
    @ApiModelProperty(value = "零件名称")
    private String partName;
    /**分类*/
    @Excel(name = "分类", width = 15)
    @ApiModelProperty(value = "分类")
    private String category;
    /**规格型号*/
    @Excel(name = "规格型号", width = 15)
    @ApiModelProperty(value = "规格型号")
    private String specModel;
    /**单位*/
    @Excel(name = "单位", width = 15)
    @ApiModelProperty(value = "单位")
    private String unit;
    /**供应商*/
    @Excel(name = "供应商", width = 15)
    @ApiModelProperty(value = "供应商")
    private String supplier;
    /**最低库存*/
    @Excel(name = "最低库存", width = 15)
    @ApiModelProperty(value = "最低库存")
    private BigDecimal minStock;
    /**安全库存*/
    @Excel(name = "安全库存", width = 15)
    @ApiModelProperty(value = "安全库存")
    private BigDecimal safeStock;
    /**库位*/
    @Excel(name = "库位", width = 15)
    @ApiModelProperty(value = "库位")
    private String location;
    /**当前库存*/
    @Excel(name = "当前库存", width = 15)
    @ApiModelProperty(value = "当前库存")
    private BigDecimal currentStock;
    /**冻结库存*/
    @Excel(name = "冻结库存", width = 15)
    @ApiModelProperty(value = "冻结库存")
    private BigDecimal frozenStock;
    /**备注*/
    @Excel(name = "备注", width = 15)
    @ApiModelProperty(value = "备注")
    private String remark;
    /**状态*/
    @Excel(name = "状态", width = 15)
    @ApiModelProperty(value = "状态")
    private String status;
}
jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/entity/DrySpareStockLog.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
package org.jeecg.modules.dry.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * @Description: å‡ºå…¥åº“记录表
 * @Author: jeecg-boot
 * @Date:   2025-07-23
 * @Version: V1.0
 */
@Data
@TableName("dry_spare_stock_log")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="dry_spare_stock_log对象", description="出入库记录表")
public class DrySpareStockLog implements Serializable {
    private static final long serialVersionUID = 1L;
    /**主键ID*/
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "主键ID")
    private Integer id;
    /**操作编号*/
    @Excel(name = "操作编号", width = 15)
    @ApiModelProperty(value = "操作编号")
    private String operationNumber;
    /**零件编号*/
    @Excel(name = "零件编号", width = 15, dictTable = "dry_spare_parts", dicText = "part_name", dicCode = "part_number")
    @Dict(dictTable = "dry_spare_parts", dicText = "part_name", dicCode = "part_number")
    @ApiModelProperty(value = "零件编号")
    private String partNumber;
    /**操作类型*/
    @Excel(name = "操作类型", width = 15)
    @ApiModelProperty(value = "操作类型")
    private String operationType;
    /**数量*/
    @Excel(name = "数量", width = 15)
    @ApiModelProperty(value = "数量")
    private BigDecimal quantity;
    /**操作时间*/
    @Excel(name = "操作时间", width = 15, format = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "操作时间")
    private Date operationTime;
    /**操作人*/
    @Excel(name = "操作人", width = 15)
    @ApiModelProperty(value = "操作人")
    private String operator;
    /**关联单号(如维修单号)*/
    @Excel(name = "关联单号(如维修单号)", width = 15)
    @ApiModelProperty(value = "关联单号(如维修单号)")
    private String relatedOrder;
    /**库位*/
    @Excel(name = "库位", width = 15)
    @ApiModelProperty(value = "库位")
    private String location;
    /**备注*/
    @Excel(name = "备注", width = 15)
    @ApiModelProperty(value = "备注")
    private String remark;
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryMaintenanceRecordController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,206 @@
package org.jeecg.modules.dry.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.dry.entity.DryMaintenanceRecord;
import org.jeecg.modules.dry.service.IDryMaintenanceRecordService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.atomic.AtomicInteger;
 /**
 * @Description: dry_maintenance_record
 * @Author: jeecg-boot
 * @Date:   2025-07-21
 * @Version: V1.0
 */
@Api(tags="dry_maintenance_record")
@RestController
@RequestMapping("/dry/dryMaintenanceRecord")
@Slf4j
public class DryMaintenanceRecordController extends JeecgController<DryMaintenanceRecord, IDryMaintenanceRecordService> {
    @Autowired
    private IDryMaintenanceRecordService dryMaintenanceRecordService;
    private static final AtomicInteger dailySequence = new AtomicInteger(0);
    private static volatile LocalDate lastResetDate = LocalDate.now();
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param dryMaintenanceRecord
     * @param pageNo
     * @param pageSize
     * @param req
     * @return
     */
    //@AutoLog(value = "dry_maintenance_record-分页列表查询")
    @ApiOperation(value="dry_maintenance_record-分页列表查询", notes="dry_maintenance_record-分页列表查询")
    @GetMapping(value = "/list")
    public Result<IPage<DryMaintenanceRecord>> queryPageList(DryMaintenanceRecord dryMaintenanceRecord,
                                   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
                                   HttpServletRequest req) {
        QueryWrapper<DryMaintenanceRecord> queryWrapper = QueryGenerator.initQueryWrapper(dryMaintenanceRecord, req.getParameterMap());
        Page<DryMaintenanceRecord> page = new Page<DryMaintenanceRecord>(pageNo, pageSize);
        IPage<DryMaintenanceRecord> pageList = dryMaintenanceRecordService.page(page, queryWrapper);
        return Result.OK(pageList);
    }
    /**
     *   æ·»åŠ 
     *
     * @param dryMaintenanceRecord
     * @return
     */
    @AutoLog(value = "dry_maintenance_record-添加")
    @ApiOperation(value="dry_maintenance_record-添加", notes="dry_maintenance_record-添加")
    @RequiresPermissions("dry:dry_maintenance_record:add")
    @PostMapping(value = "/add")
    public Result<String> add(@RequestBody DryMaintenanceRecord dryMaintenanceRecord) {
        dryMaintenanceRecordService.save(dryMaintenanceRecord);
        return Result.OK("添加成功!");
    }
    /**
     *  ç¼–辑
     *
     * @param dryMaintenanceRecord
     * @return
     */
    @AutoLog(value = "dry_maintenance_record-编辑")
    @ApiOperation(value="dry_maintenance_record-编辑", notes="dry_maintenance_record-编辑")
    @RequiresPermissions("dry:dry_maintenance_record:edit")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
    public Result<String> edit(@RequestBody DryMaintenanceRecord dryMaintenanceRecord) {
        dryMaintenanceRecordService.updateById(dryMaintenanceRecord);
        return Result.OK("编辑成功!");
    }
    /**
     *   é€šè¿‡id删除
     *
     * @param id
     * @return
     */
    @AutoLog(value = "dry_maintenance_record-通过id删除")
    @ApiOperation(value="dry_maintenance_record-通过id删除", notes="dry_maintenance_record-通过id删除")
    @RequiresPermissions("dry:dry_maintenance_record:delete")
    @DeleteMapping(value = "/delete")
    public Result<String> delete(@RequestParam(name="id",required=true) String id) {
        dryMaintenanceRecordService.removeById(id);
        return Result.OK("删除成功!");
    }
    /**
     *  æ‰¹é‡åˆ é™¤
     *
     * @param ids
     * @return
     */
    @AutoLog(value = "dry_maintenance_record-批量删除")
    @ApiOperation(value="dry_maintenance_record-批量删除", notes="dry_maintenance_record-批量删除")
    @RequiresPermissions("dry:dry_maintenance_record:deleteBatch")
    @DeleteMapping(value = "/deleteBatch")
    public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
        this.dryMaintenanceRecordService.removeByIds(Arrays.asList(ids.split(",")));
        return Result.OK("批量删除成功!");
    }
    /**
     * é€šè¿‡id查询
     *
     * @param id
     * @return
     */
    //@AutoLog(value = "dry_maintenance_record-通过id查询")
    @ApiOperation(value="dry_maintenance_record-通过id查询", notes="dry_maintenance_record-通过id查询")
    @GetMapping(value = "/queryById")
    public Result<DryMaintenanceRecord> queryById(@RequestParam(name="id",required=true) String id) {
        DryMaintenanceRecord dryMaintenanceRecord = dryMaintenanceRecordService.getById(id);
        if(dryMaintenanceRecord==null) {
            return Result.error("未找到对应数据");
        }
        return Result.OK(dryMaintenanceRecord);
    }
    /**
    * å¯¼å‡ºexcel
    *
    * @param request
    * @param dryMaintenanceRecord
    */
    @RequiresPermissions("dry:dry_maintenance_record:exportXls")
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, DryMaintenanceRecord dryMaintenanceRecord) {
        return super.exportXls(request, dryMaintenanceRecord, DryMaintenanceRecord.class, "dry_maintenance_record");
    }
    /**
      * é€šè¿‡excel导入数据
    *
    * @param request
    * @param response
    * @return
    */
    @RequiresPermissions("dry:dry_maintenance_record:importExcel")
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        return super.importExcel(request, response, DryMaintenanceRecord.class);
    }
    /**
     * ç”Ÿæˆä¿å…»å•编号
     *
     * @return
     */
    @ApiOperation(value="生成保养单编号", notes="生成保养单编号")
    @GetMapping(value = "/generateMaintenanceNo")
    public Result<String> generateMaintenanceNo() {
        LocalDate today = LocalDate.now();
        synchronized (dailySequence) {
            if (!today.equals(lastResetDate)) {
                dailySequence.set(0);
                lastResetDate = today;
            }
            int sequence = dailySequence.incrementAndGet();
            String datePrefix = today.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
            String maintenanceNo = String.format("%s%03d", datePrefix, sequence);
            return Result.OK(maintenanceNo);
        }
    }
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRepairRecordsController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,206 @@
package org.jeecg.modules.dry.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.dry.entity.DryRepairRecords;
import org.jeecg.modules.dry.service.IDryRepairRecordsService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.atomic.AtomicInteger;
 /**
 * @Description: ç»´ä¿®è®°å½•
 * @Author: jeecg-boot
 * @Date:   2025-07-21
 * @Version: V1.0
 */
@Api(tags="维修记录")
@RestController
@RequestMapping("/dry/dryRepairRecords")
@Slf4j
public class DryRepairRecordsController extends JeecgController<DryRepairRecords, IDryRepairRecordsService> {
    @Autowired
    private IDryRepairRecordsService dryRepairRecordsService;
    private static final AtomicInteger dailySequence = new AtomicInteger(0);
    private static volatile LocalDate lastResetDate = LocalDate.now();
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param dryRepairRecords
     * @param pageNo
     * @param pageSize
     * @param req
     * @return
     */
    //@AutoLog(value = "维修记录-分页列表查询")
    @ApiOperation(value="维修记录-分页列表查询", notes="维修记录-分页列表查询")
    @GetMapping(value = "/list")
    public Result<IPage<DryRepairRecords>> queryPageList(DryRepairRecords dryRepairRecords,
                                   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
                                   HttpServletRequest req) {
        QueryWrapper<DryRepairRecords> queryWrapper = QueryGenerator.initQueryWrapper(dryRepairRecords, req.getParameterMap());
        Page<DryRepairRecords> page = new Page<DryRepairRecords>(pageNo, pageSize);
        IPage<DryRepairRecords> pageList = dryRepairRecordsService.page(page, queryWrapper);
        return Result.OK(pageList);
    }
    /**
     *   æ·»åŠ 
     *
     * @param dryRepairRecords
     * @return
     */
    @AutoLog(value = "维修记录-添加")
    @ApiOperation(value="维修记录-添加", notes="维修记录-添加")
    @RequiresPermissions("dry:dry_repair_records:add")
    @PostMapping(value = "/add")
    public Result<String> add(@RequestBody DryRepairRecords dryRepairRecords) {
        dryRepairRecordsService.save(dryRepairRecords);
        return Result.OK("添加成功!");
    }
    /**
     *  ç¼–辑
     *
     * @param dryRepairRecords
     * @return
     */
    @AutoLog(value = "维修记录-编辑")
    @ApiOperation(value="维修记录-编辑", notes="维修记录-编辑")
    @RequiresPermissions("dry:dry_repair_records:edit")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
    public Result<String> edit(@RequestBody DryRepairRecords dryRepairRecords) {
        dryRepairRecordsService.updateById(dryRepairRecords);
        return Result.OK("编辑成功!");
    }
    /**
     *   é€šè¿‡id删除
     *
     * @param id
     * @return
     */
    @AutoLog(value = "维修记录-通过id删除")
    @ApiOperation(value="维修记录-通过id删除", notes="维修记录-通过id删除")
    @RequiresPermissions("dry:dry_repair_records:delete")
    @DeleteMapping(value = "/delete")
    public Result<String> delete(@RequestParam(name="id",required=true) String id) {
        dryRepairRecordsService.removeById(id);
        return Result.OK("删除成功!");
    }
    /**
     *  æ‰¹é‡åˆ é™¤
     *
     * @param ids
     * @return
     */
    @AutoLog(value = "维修记录-批量删除")
    @ApiOperation(value="维修记录-批量删除", notes="维修记录-批量删除")
    @RequiresPermissions("dry:dry_repair_records:deleteBatch")
    @DeleteMapping(value = "/deleteBatch")
    public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
        this.dryRepairRecordsService.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<DryRepairRecords> queryById(@RequestParam(name="id",required=true) String id) {
        DryRepairRecords dryRepairRecords = dryRepairRecordsService.getById(id);
        if(dryRepairRecords==null) {
            return Result.error("未找到对应数据");
        }
        return Result.OK(dryRepairRecords);
    }
    /**
    * å¯¼å‡ºexcel
    *
    * @param request
    * @param dryRepairRecords
    */
    @RequiresPermissions("dry:dry_repair_records:exportXls")
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, DryRepairRecords dryRepairRecords) {
        return super.exportXls(request, dryRepairRecords, DryRepairRecords.class, "维修记录");
    }
    /**
      * é€šè¿‡excel导入数据
    *
    * @param request
    * @param response
    * @return
    */
    @RequiresPermissions("dry:dry_repair_records:importExcel")
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        return super.importExcel(request, response, DryRepairRecords.class);
    }
    /**
     * ç”Ÿæˆç»´ä¿®å•编号
     *
     * @return
     */
    @ApiOperation(value="生成维修单编号", notes="生成维修单编号")
    @GetMapping(value = "/generateRepairNo")
    public Result<String> generateRepairNo() {
        LocalDate today = LocalDate.now();
        synchronized (dailySequence) {
            if (!today.equals(lastResetDate)) {
                dailySequence.set(0);
                lastResetDate = today;
            }
            int sequence = dailySequence.incrementAndGet();
            String datePrefix = today.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
            String repairNo = String.format("%s%03d", datePrefix, sequence);
            return Result.OK(repairNo);
        }
    }
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DrySparePartsController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,227 @@
package org.jeecg.modules.dry.controller;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.dry.entity.DrySpareParts;
import org.jeecg.modules.dry.service.IDrySparePartsService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.transaction.annotation.Transactional;
 /**
 * @Description: å¤‡å“å¤‡ä»¶
 * @Author: jeecg-boot
 * @Date:   2025-07-23
 * @Version: V1.0
 */
@Api(tags="备品备件")
@RestController
@RequestMapping("/dry/drySpareParts")
@Slf4j
public class DrySparePartsController extends JeecgController<DrySpareParts, IDrySparePartsService> {
    @Autowired
    private IDrySparePartsService drySparePartsService;
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param drySpareParts
     * @param pageNo
     * @param pageSize
     * @param req
     * @return
     */
    //@AutoLog(value = "备品备件-分页列表查询")
    @ApiOperation(value="备品备件-分页列表查询", notes="备品备件-分页列表查询")
    @GetMapping(value = "/list")
    public Result<IPage<DrySpareParts>> queryPageList(DrySpareParts drySpareParts,
                                   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
                                   HttpServletRequest req) {
        QueryWrapper<DrySpareParts> queryWrapper = QueryGenerator.initQueryWrapper(drySpareParts, req.getParameterMap());
        Page<DrySpareParts> page = new Page<DrySpareParts>(pageNo, pageSize);
        IPage<DrySpareParts> pageList = drySparePartsService.page(page, queryWrapper);
        return Result.OK(pageList);
    }
    /**
     *   æ·»åŠ 
     *
     * @param drySpareParts
     * @return
     */
    @AutoLog(value = "备品备件-添加")
    @ApiOperation(value="备品备件-添加", notes="备品备件-添加")
    @RequiresPermissions("dry:dry_spare_parts:add")
    @PostMapping(value = "/add")
    public Result<String> add(@RequestBody DrySpareParts drySpareParts) {
        drySparePartsService.save(drySpareParts);
        return Result.OK("添加成功!");
    }
    /**
     *  ç¼–辑
     *
     * @param drySpareParts
     * @return
     */
    @AutoLog(value = "备品备件-编辑")
    @ApiOperation(value="备品备件-编辑", notes="备品备件-编辑")
    @RequiresPermissions("dry:dry_spare_parts:edit")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
    public Result<String> edit(@RequestBody DrySpareParts drySpareParts) {
        drySparePartsService.updateById(drySpareParts);
        return Result.OK("编辑成功!");
    }
    /**
     *   é€šè¿‡id删除
     *
     * @param id
     * @return
     */
    @AutoLog(value = "备品备件-通过id删除")
    @ApiOperation(value="备品备件-通过id删除", notes="备品备件-通过id删除")
    @RequiresPermissions("dry:dry_spare_parts:delete")
    @DeleteMapping(value = "/delete")
    public Result<String> delete(@RequestParam(name="id",required=true) String id) {
        drySparePartsService.removeById(id);
        return Result.OK("删除成功!");
    }
    /**
     *  æ‰¹é‡åˆ é™¤
     *
     * @param ids
     * @return
     */
    @AutoLog(value = "备品备件-批量删除")
    @ApiOperation(value="备品备件-批量删除", notes="备品备件-批量删除")
    @RequiresPermissions("dry:dry_spare_parts:deleteBatch")
    @DeleteMapping(value = "/deleteBatch")
    public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
        this.drySparePartsService.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<DrySpareParts> queryById(@RequestParam(name="id",required=true) String id) {
        DrySpareParts drySpareParts = drySparePartsService.getById(id);
        if(drySpareParts==null) {
            return Result.error("未找到对应数据");
        }
        return Result.OK(drySpareParts);
    }
    /**
    * å¯¼å‡ºexcel
    *
    * @param request
    * @param drySpareParts
    */
    @RequiresPermissions("dry:dry_spare_parts:exportXls")
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, DrySpareParts drySpareParts) {
        return super.exportXls(request, drySpareParts, DrySpareParts.class, "备品备件");
    }
    /**
     * é€šè¿‡excel导入数据
    * @param request
    * @param response
    * @return
      */
    @RequiresPermissions("dry:dry_spare_parts:importExcel")
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        return super.importExcel(request, response, DrySpareParts.class);
    }
    /**
     * å¢žåŠ å¤‡ä»¶åº“å­˜
     *
     * @param partNumber å¤‡ä»¶ç¼–号
     * @param quantity æ•°é‡
     * @return
     */
    @AutoLog(value = "备品备件-增加库存")
    @ApiOperation(value="备品备件-增加库存", notes="备品备件-增加库存")
    @PostMapping(value = "/addStock")
    @Transactional
    public Result<String> addStock(@RequestParam(name="partNumber",required=true) String partNumber,
                                   @RequestParam(name="quantity",required=true) BigDecimal quantity) {
        QueryWrapper<DrySpareParts> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("part_number", partNumber);
        DrySpareParts drySpareParts = drySparePartsService.getOne(queryWrapper);
        if (drySpareParts == null) {
            return Result.error("未找到对应备件");
        }
        drySpareParts.setCurrentStock(drySpareParts.getCurrentStock().add( quantity));
        drySparePartsService.updateById(drySpareParts);
        return Result.OK("库存增加成功!");
    }
    /**
     * å‡å°‘备件库存
     * @param partNumber å¤‡ä»¶ç¼–号
     * @param quantity æ•°é‡
     * @return
     */
    @AutoLog(value = "备品备件-减少库存")
    @ApiOperation(value="备品备件-减少库存", notes="备品备件-减少库存")
    @PostMapping(value = "/reduceStock")
    @Transactional
    public Result<String> reduceStock(@RequestParam(name="partNumber",required=true) String partNumber,
                                      @RequestParam(name="quantity",required=true) BigDecimal quantity) {
        QueryWrapper<DrySpareParts> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("part_number", partNumber);
        DrySpareParts drySpareParts = drySparePartsService.getOne(queryWrapper);
        if (drySpareParts == null) {
            return Result.error("未找到对应备件");
        }
        if (drySpareParts.getCurrentStock().compareTo( quantity) < 0) {
            return Result.error("库存不足");
        }
        drySpareParts.setCurrentStock(drySpareParts.getCurrentStock());
        drySparePartsService.updateById(drySpareParts);
        return Result.OK("库存减少成功!");
    }
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DrySpareStockLogController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,247 @@
package org.jeecg.modules.dry.controller;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.dry.entity.DrySpareParts;
import org.jeecg.modules.dry.entity.DrySpareStockLog;
import org.jeecg.modules.dry.service.IDrySparePartsService;
import org.jeecg.modules.dry.service.IDrySpareStockLogService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.atomic.AtomicInteger;
 /**
 * @Description: å‡ºå…¥åº“记录表
 * @Author: jeecg-boot
 * @Date:   2025-07-23
 * @Version: V1.0
 */
@Api(tags="出入库记录表")
@RestController
@RequestMapping("/dry/drySpareStockLog")
@Slf4j
public class DrySpareStockLogController extends JeecgController<DrySpareStockLog, IDrySpareStockLogService> {
    @Autowired
    private IDrySpareStockLogService drySpareStockLogService;
    @Autowired
    private IDrySparePartsService drySparePartsService;
    private static final AtomicInteger dailySequence = new AtomicInteger(0);
    private static LocalDate lastResetDate = null;
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param drySpareStockLog
     * @param pageNo
     * @param pageSize
     * @param req
     * @return
     */
    //@AutoLog(value = "出入库记录表-分页列表查询")
    @ApiOperation(value="出入库记录表-分页列表查询", notes="出入库记录表-分页列表查询")
    @GetMapping(value = "/list")
    public Result<IPage<DrySpareStockLog>> queryPageList(DrySpareStockLog drySpareStockLog,
                                   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
                                   HttpServletRequest req) {
        QueryWrapper<DrySpareStockLog> queryWrapper = QueryGenerator.initQueryWrapper(drySpareStockLog, req.getParameterMap());
        Page<DrySpareStockLog> page = new Page<DrySpareStockLog>(pageNo, pageSize);
        IPage<DrySpareStockLog> pageList = drySpareStockLogService.page(page, queryWrapper);
        return Result.OK(pageList);
    }
    /**
     *   æ·»åŠ 
     *
     * @param drySpareStockLog
     * @return
     */
    @AutoLog(value = "出入库记录表-添加")
    @ApiOperation(value="出入库记录表-添加", notes="出入库记录表-添加")
    @RequiresPermissions("dry:dry_spare_stock_log:add")
    @PostMapping(value = "/add")
    @Transactional
    public Result<String> add(@RequestBody DrySpareStockLog drySpareStockLog) {
        String partNumber = drySpareStockLog.getPartNumber();
        BigDecimal quantity = drySpareStockLog.getQuantity();
        String operationType = drySpareStockLog.getOperationType();
        if (partNumber == null || quantity == null || quantity.compareTo(BigDecimal.ZERO) <= 0 || operationType == null) {
            return Result.error("备件编号、数量或操作类型不能为空且数量必须大于0!");
        }
        QueryWrapper<DrySpareParts> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("part_number", partNumber);
        DrySpareParts drySpareParts = drySparePartsService.getOne(queryWrapper);
        if (drySpareParts == null) {
            return Result.error("未找到对应备件!");
        }
        if ("0".equals(operationType)) { // å…¥åº“
            drySpareParts.setCurrentStock(drySpareParts.getCurrentStock().add(quantity));
        } else if ("1".equals(operationType)) { // å‡ºåº“
            if (drySpareParts.getCurrentStock().compareTo(quantity) < 0) {
                return Result.error("库存不足!");
            }
            drySpareParts.setCurrentStock(drySpareParts.getCurrentStock().subtract(quantity));
        } else {
            return Result.error("无效的操作类型!");
        }
        drySparePartsService.updateById(drySpareParts);
        drySpareStockLogService.save(drySpareStockLog);
        return Result.OK("添加成功!");
    }
    /**
     *  ç¼–辑
     *
     * @param drySpareStockLog
     * @return
     */
//    @AutoLog(value = "出入库记录表-编辑")
//    @ApiOperation(value="出入库记录表-编辑", notes="出入库记录表-编辑")
//    @RequiresPermissions("dry:dry_spare_stock_log:edit")
//    @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
//    public Result<String> edit(@RequestBody DrySpareStockLog drySpareStockLog) {
//        drySpareStockLogService.updateById(drySpareStockLog);
//        return Result.OK("编辑成功!");
//    }
    /**
     *   é€šè¿‡id删除
     *
     * @param id
     * @return
     */
    @AutoLog(value = "出入库记录表-通过id删除")
    @ApiOperation(value="出入库记录表-通过id删除", notes="出入库记录表-通过id删除")
    @RequiresPermissions("dry:dry_spare_stock_log:delete")
    @DeleteMapping(value = "/delete")
    public Result<String> delete(@RequestParam(name="id",required=true) String id) {
        drySpareStockLogService.removeById(id);
        return Result.OK("删除成功!");
    }
    /**
     *  æ‰¹é‡åˆ é™¤
     *
     * @param ids
     * @return
     */
    @AutoLog(value = "出入库记录表-批量删除")
    @ApiOperation(value="出入库记录表-批量删除", notes="出入库记录表-批量删除")
    @RequiresPermissions("dry:dry_spare_stock_log:deleteBatch")
    @DeleteMapping(value = "/deleteBatch")
    public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
        this.drySpareStockLogService.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<DrySpareStockLog> queryById(@RequestParam(name="id",required=true) String id) {
        DrySpareStockLog drySpareStockLog = drySpareStockLogService.getById(id);
        if(drySpareStockLog==null) {
            return Result.error("未找到对应数据");
        }
        return Result.OK(drySpareStockLog);
    }
    /**
    * å¯¼å‡ºexcel
    *
    * @param request
    * @param drySpareStockLog
    */
    @RequiresPermissions("dry:dry_spare_stock_log:exportXls")
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, DrySpareStockLog drySpareStockLog) {
        return super.exportXls(request, drySpareStockLog, DrySpareStockLog.class, "出入库记录表");
    }
    /**
      * é€šè¿‡excel导入数据
    *
    * @param request
    * @param response
    * @return
      */
    @RequiresPermissions("dry:dry_spare_stock_log:importExcel")
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        return super.importExcel(request, response, DrySpareStockLog.class);
    }
    /**
     * ç”Ÿæˆå‡ºå…¥åº“单号
     *
     * @param type å•号类型,CK(出库)或 RK(入库)
     * @return
     */
    @AutoLog(value = "出入库记录表-生成出入库单号")
    @ApiOperation(value="出入库记录表-生成出入库单号", notes="出入库记录表-生成出入库单号")
    @GetMapping(value = "/generateStockNo")
    public Result<String> generateStockNo(@RequestParam(name="type",required=true) String type) {
        LocalDate today = LocalDate.now();
        if (lastResetDate == null || !today.equals(lastResetDate)) {
            dailySequence.set(0);
            lastResetDate = today;
        }
        // èŽ·å–å¹¶é€’å¢žåºåˆ—å·
        int sequence = dailySequence.incrementAndGet();
        // æ ¼å¼åŒ–日期
        String dateStr = today.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        // æ ¼å¼åŒ–序列号为三位,不足补零
        String sequenceStr = String.format("%03d", sequence);
        // ç»„合生成维修单号
        String stockNo = type + dateStr + sequenceStr;
        return Result.OK(stockNo);
    }
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryMaintenanceRecordMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package org.jeecg.modules.dry.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.dry.entity.DryMaintenanceRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * @Description: dry_maintenance_record
 * @Author: jeecg-boot
 * @Date:   2025-07-21
 * @Version: V1.0
 */
public interface DryMaintenanceRecordMapper extends BaseMapper<DryMaintenanceRecord> {
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DryRepairRecordsMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package org.jeecg.modules.dry.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.dry.entity.DryRepairRecords;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * @Description: ç»´ä¿®è®°å½•
 * @Author: jeecg-boot
 * @Date:   2025-07-21
 * @Version: V1.0
 */
public interface DryRepairRecordsMapper extends BaseMapper<DryRepairRecords> {
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DrySparePartsMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package org.jeecg.modules.dry.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.dry.entity.DrySpareParts;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * @Description: å¤‡å“å¤‡ä»¶
 * @Author: jeecg-boot
 * @Date:   2025-07-23
 * @Version: V1.0
 */
public interface DrySparePartsMapper extends BaseMapper<DrySpareParts> {
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/DrySpareStockLogMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package org.jeecg.modules.dry.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.dry.entity.DrySpareStockLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * @Description: å‡ºå…¥åº“记录表
 * @Author: jeecg-boot
 * @Date:   2025-07-23
 * @Version: V1.0
 */
public interface DrySpareStockLogMapper extends BaseMapper<DrySpareStockLog> {
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryMaintenanceRecordMapper.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.dry.mapper.DryMaintenanceRecordMapper">
</mapper>
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DryRepairRecordsMapper.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.dry.mapper.DryRepairRecordsMapper">
</mapper>
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DrySparePartsMapper.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.dry.mapper.DrySparePartsMapper">
</mapper>
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/mapper/xml/DrySpareStockLogMapper.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.dry.mapper.DrySpareStockLogMapper">
</mapper>
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryMaintenanceRecordService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package org.jeecg.modules.dry.service;
import org.jeecg.modules.dry.entity.DryMaintenanceRecord;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * @Description: dry_maintenance_record
 * @Author: jeecg-boot
 * @Date:   2025-07-21
 * @Version: V1.0
 */
public interface IDryMaintenanceRecordService extends IService<DryMaintenanceRecord> {
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDryRepairRecordsService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package org.jeecg.modules.dry.service;
import org.jeecg.modules.dry.entity.DryRepairRecords;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * @Description: ç»´ä¿®è®°å½•
 * @Author: jeecg-boot
 * @Date:   2025-07-21
 * @Version: V1.0
 */
public interface IDryRepairRecordsService extends IService<DryRepairRecords> {
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDrySparePartsService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package org.jeecg.modules.dry.service;
import org.jeecg.modules.dry.entity.DrySpareParts;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * @Description: å¤‡å“å¤‡ä»¶
 * @Author: jeecg-boot
 * @Date:   2025-07-23
 * @Version: V1.0
 */
public interface IDrySparePartsService extends IService<DrySpareParts> {
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/IDrySpareStockLogService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package org.jeecg.modules.dry.service;
import org.jeecg.modules.dry.entity.DrySpareStockLog;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * @Description: å‡ºå…¥åº“记录表
 * @Author: jeecg-boot
 * @Date:   2025-07-23
 * @Version: V1.0
 */
public interface IDrySpareStockLogService extends IService<DrySpareStockLog> {
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryMaintenanceRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package org.jeecg.modules.dry.service.impl;
import org.jeecg.modules.dry.entity.DryMaintenanceRecord;
import org.jeecg.modules.dry.mapper.DryMaintenanceRecordMapper;
import org.jeecg.modules.dry.service.IDryMaintenanceRecordService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
 * @Description: dry_maintenance_record
 * @Author: jeecg-boot
 * @Date:   2025-07-21
 * @Version: V1.0
 */
@Service
public class DryMaintenanceRecordServiceImpl extends ServiceImpl<DryMaintenanceRecordMapper, DryMaintenanceRecord> implements IDryMaintenanceRecordService {
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DryRepairRecordsServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package org.jeecg.modules.dry.service.impl;
import org.jeecg.modules.dry.entity.DryRepairRecords;
import org.jeecg.modules.dry.mapper.DryRepairRecordsMapper;
import org.jeecg.modules.dry.service.IDryRepairRecordsService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
 * @Description: ç»´ä¿®è®°å½•
 * @Author: jeecg-boot
 * @Date:   2025-07-21
 * @Version: V1.0
 */
@Service
public class DryRepairRecordsServiceImpl extends ServiceImpl<DryRepairRecordsMapper, DryRepairRecords> implements IDryRepairRecordsService {
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DrySparePartsServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package org.jeecg.modules.dry.service.impl;
import org.jeecg.modules.dry.entity.DrySpareParts;
import org.jeecg.modules.dry.mapper.DrySparePartsMapper;
import org.jeecg.modules.dry.service.IDrySparePartsService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
 * @Description: å¤‡å“å¤‡ä»¶
 * @Author: jeecg-boot
 * @Date:   2025-07-23
 * @Version: V1.0
 */
@Service
public class DrySparePartsServiceImpl extends ServiceImpl<DrySparePartsMapper, DrySpareParts> implements IDrySparePartsService {
}
jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/service/impl/DrySpareStockLogServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package org.jeecg.modules.dry.service.impl;
import org.jeecg.modules.dry.entity.DrySpareStockLog;
import org.jeecg.modules.dry.mapper.DrySpareStockLogMapper;
import org.jeecg.modules.dry.service.IDrySpareStockLogService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
 * @Description: å‡ºå…¥åº“记录表
 * @Author: jeecg-boot
 * @Date:   2025-07-23
 * @Version: V1.0
 */
@Service
public class DrySpareStockLogServiceImpl extends ServiceImpl<DrySpareStockLogMapper, DrySpareStockLog> implements IDrySpareStockLogService {
}