maven
16 小时以前 ec50e978f09d5ecf6fc2d3a8649df4fe9649d9f1
Merge remote-tracking branch 'origin/pim_yys'
已添加7个文件
560 ■■■■■ 文件已修改
src/main/java/com/ruoyi/officesupplies/controller/OfficeSuppliesController.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/officesupplies/mapper/OfficeSuppliesMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/officesupplies/pojo/OfficeSupplies.java 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/officesupplies/service/OfficeSuppliesService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/officesupplies/service/impl/OfficeSuppliesServiceImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-cjny.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/officesupplies/OfficeSuppliesMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/officesupplies/controller/OfficeSuppliesController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
package com.ruoyi.officesupplies.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.equipmentenergyconsumption.pojo.EquipmentEnergyConsumption;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.officesupplies.pojo.OfficeSupplies;
import com.ruoyi.officesupplies.service.OfficeSuppliesService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
/**
 * @author :yys
 * @date : 2025/9/4 14:16
 */
@RestController
@Api(tags = "办公物资")
@RequestMapping("/officeSupplies")
public class OfficeSuppliesController extends BaseController {
    @Autowired
    private OfficeSuppliesService officeSuppliesService;
    @GetMapping("/listPage")
    @ApiOperation("办公物资-分页查询")
    public AjaxResult listPage(Page page, OfficeSupplies officeSupplies) {
        return officeSuppliesService.listPage(page, officeSupplies);
    }
    @PostMapping("/add")
    @ApiOperation("办公物资-添加")
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult add(@RequestBody OfficeSupplies officeSupplies) {
        // æŒ‰ç…§å½“前时间yyyyMMdd + å½“天新增数量 + 1生成编号
        // èŽ·å–å½“å¤©æ–°å¢žæ•°é‡
        long count = officeSuppliesService.count(new LambdaQueryWrapper<OfficeSupplies>()
                .gt(OfficeSupplies::getCreateTime, LocalDate.now())
                .lt(OfficeSupplies::getCreateTime, LocalDate.now().plusDays(1)));
        String code = "WS" + LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")) +  String.format("%03d", count + 1);
        officeSupplies.setCode(code);
        officeSupplies.setStatus(1);
        officeSupplies.setApplyTime(new Date());
        return officeSuppliesService.save(officeSupplies) ? success() : error();
    }
    @PostMapping("/update")
    @ApiOperation("办公物资-修改")
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult update(@RequestBody OfficeSupplies officeSupplies) {
        return officeSuppliesService.updateById(officeSupplies) ? success() : error();
    }
    @DeleteMapping("/delete")
    @ApiOperation("办公物资-删除")
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult delete(@RequestBody List<Long> ids) {
        if(CollectionUtils.isEmpty(ids)) return AjaxResult.error("请传入要删除的ID");
        return officeSuppliesService.removeBatchByIds(ids) ? success() : error();
    }
    /**
     * å¯¼å‡ºåŠžå…¬ç‰©èµ„
     */
    @Log(title = "导出办公物资", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    @ApiOperation("导出办公物资")
    public void export(HttpServletResponse response) {
        ExcelUtil<OfficeSupplies> util = new ExcelUtil<OfficeSupplies>(OfficeSupplies.class);
        List<OfficeSupplies> list = officeSuppliesService.list();
        util.exportExcel(response, list , "办公物资");
    }
}
src/main/java/com/ruoyi/officesupplies/mapper/OfficeSuppliesMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.ruoyi.officesupplies.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.officesupplies.pojo.OfficeSupplies;
import org.apache.ibatis.annotations.Param;
/**
 * @author :yys
 * @date : 2025/9/4 14:13
 */
public interface OfficeSuppliesMapper extends BaseMapper<OfficeSupplies> {
    /**
     * åˆ—表分页查询
     *
     * @param page
     * @param officeSupplies
     * @return
     */
    IPage<OfficeSupplies> listPage(Page page,@Param("req") OfficeSupplies officeSupplies);
}
src/main/java/com/ruoyi/officesupplies/pojo/OfficeSupplies.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,160 @@
package com.ruoyi.officesupplies.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import com.ruoyi.sales.pojo.CommonFile;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
/**
 * @author :yys
 * @date : 2025/9/4 14:02
 */
@Data
@ApiModel
@TableName("office_supplies")
public class OfficeSupplies {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @ApiModelProperty("编号")
    @Excel(name = "编号")
    private String code;
    @ApiModelProperty("物品名称")
    private String itemName;
    @ApiModelProperty("申请人")
    @Excel(name = "申请人")
    private String applicant;
    /**
     * éƒ¨é—¨
     */
    @ApiModelProperty("部门")
    @Excel(name = "部门")
    private String dept;
    /**
     * ç‰©èµ„类型(1-其他 2-清洁用品 3-电子用品 4-电子设备)
     */
    @ApiModelProperty("物资类型(1-其他 2-清洁用品 3-电子用品 4-电子设备)")
    @Excel(name = "物资类型", readConverterExp = "1=其他,2=清洁用品,3=电子用品,4=电子设备")
    private Integer materialType;
    /**
     * ç”³è¯·æ•°é‡
     */
    @ApiModelProperty("申请数量")
    @Excel(name = "申请数量")
    private Integer applyNum;
    /**
     * å®¡æ‰¹æ„è§
     */
    @ApiModelProperty("审批意见")
//    @Excel(name = "审批意见")
    private String approvalOpinions;
    /**
     * ç”³è¯·åŽŸå› 
     */
    @ApiModelProperty("申请原因")
    @Excel(name = "申请原因")
    private String reason;
    /**
     * ç´§æ€¥ç¨‹åº¦ï¼ˆ1-普通 2-紧急 3-非常紧急)
     */
    @ApiModelProperty("紧急程度(1-普通 2-紧急 3-非常紧急)")
//    @Excel(name = "紧急程度", readConverterExp = "1=普通,2=紧急,3=非常紧急")
    private Integer urgency;
    /**
     * çŠ¶æ€ï¼ˆ1-待审批 2-已拒绝 3-已通过 4-已发放)
     */
    @ApiModelProperty("状态(1-待审批 2-已拒绝 3-已通过 4-已发放)")
    @Excel(name = "状态", readConverterExp = "1=待审批,2=已拒绝,3=已通过,4=已发放")
    private Integer status;
    /**
     * ç”³è¯·æ—¶é—´
     */
    @ApiModelProperty("申请时间")
    @Excel(name = "申请时间" , width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date applyTime;
    /**
     * å®¡æ‰¹äºº
     */
    @ApiModelProperty("审批人")
    @Excel(name = "审批人")
    private String approval;
    /**
     * å®¡æ‰¹æ—¶é—´
     */
    @ApiModelProperty("审批时间")
    @Excel(name = "审批时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date approvalTime;
    /**
     * å‘放时间
     */
    @ApiModelProperty("发放时间")
    @Excel(name = "发放时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date issueTime;
    @ApiModelProperty("发放人")
//    @Excel(name = "发放人")
    private String issueUser;
    /**
     * åˆ›å»ºè€…
     */
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    /**
     * ä¿®æ”¹è€…
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    /**
     * ä¿®æ”¹æ—¶é—´
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    /**
     * ç§Ÿæˆ·ID
     */
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/officesupplies/service/OfficeSuppliesService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.officesupplies.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.officesupplies.pojo.OfficeSupplies;
/**
 * @author :yys
 * @date : 2025/9/4 14:14
 */
public interface OfficeSuppliesService extends IService<OfficeSupplies> {
    /**
     * åˆ†é¡µæŸ¥è¯¢
     *
     * @param page
     * @param officeSupplies
     * @return
     */
    AjaxResult listPage(Page page, OfficeSupplies officeSupplies);
}
src/main/java/com/ruoyi/officesupplies/service/impl/OfficeSuppliesServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.ruoyi.officesupplies.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.officesupplies.mapper.OfficeSuppliesMapper;
import com.ruoyi.officesupplies.pojo.OfficeSupplies;
import com.ruoyi.officesupplies.service.OfficeSuppliesService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * @author :yys
 * @date : 2025/9/4 14:15
 */
@Service
@Slf4j
public class OfficeSuppliesServiceImpl extends ServiceImpl<OfficeSuppliesMapper, OfficeSupplies> implements OfficeSuppliesService {
    @Autowired
    private OfficeSuppliesMapper officeSuppliesMapper;
    @Override
    public AjaxResult listPage(Page page, OfficeSupplies officeSupplies) {
        IPage<OfficeSupplies> list = officeSuppliesMapper.listPage(page, officeSupplies);
        return AjaxResult.success(list);
    }
}
src/main/resources/application-cjny.yml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,219 @@
# é¡¹ç›®ç›¸å…³é…ç½®
ruoyi:
  # åç§°
  name: RuoYi
  # ç‰ˆæœ¬
  version: 3.8.9
  # ç‰ˆæƒå¹´ä»½
  copyrightYear: 2025
  # æ–‡ä»¶è·¯å¾„ ç¤ºä¾‹ï¼ˆ Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
  profile: /javaWork/product-inventory-management/file
  # èŽ·å–ip地址开关
  addressEnabled: false
  # éªŒè¯ç ç±»åž‹ math æ•°å­—计算 char å­—符验证
  captchaType: math
# å¼€å‘环境配置
server:
  # æœåŠ¡å™¨çš„HTTP端口,默认为8080
  port: 9036
  servlet:
    # åº”用的访问路径
    context-path: /
  tomcat:
    # tomcat的URI编码
    uri-encoding: UTF-8
    # è¿žæŽ¥æ•°æ»¡åŽçš„æŽ’队数,默认为100
    accept-count: 1000
    threads:
      # tomcat最大线程数,默认为200
      max: 800
      # Tomcat启动初始化的线程数,默认值10
      min-spare: 100
# æ—¥å¿—配置
logging:
  level:
    com.ruoyi: warn
    org.springframework: warn
minio:
  endpoint: http://114.132.189.42/
  port: 7019
  secure: false
  accessKey: admin
  secretKey: 12345678
  preview-expiry: 24 # é¢„览地址默认24小时
  default-bucket: uploadPath
# ç”¨æˆ·é…ç½®
user:
  password:
    # å¯†ç æœ€å¤§é”™è¯¯æ¬¡æ•°
    maxRetryCount: 5
    # å¯†ç é”å®šæ—¶é—´ï¼ˆé»˜è®¤10分钟)
    lockTime: 10
# Spring配置
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    druid:
      # ä¸»åº“数据源
      master:
        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-cjny?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: xd@123456..
      # ä»Žåº“数据源
      slave:
        # ä»Žæ•°æ®æºå¼€å…³/默认关闭
        enabled: false
        url:
        username:
        password:
      # åˆå§‹è¿žæŽ¥æ•°
      initialSize: 5
      # æœ€å°è¿žæŽ¥æ± æ•°é‡
      minIdle: 10
      # æœ€å¤§è¿žæŽ¥æ± æ•°é‡
      maxActive: 20
      # é…ç½®èŽ·å–è¿žæŽ¥ç­‰å¾…è¶…æ—¶çš„æ—¶é—´
      maxWait: 60000
      # é…ç½®è¿žæŽ¥è¶…æ—¶æ—¶é—´
      connectTimeout: 30000
      # é…ç½®ç½‘络超时时间
      socketTimeout: 60000
      # é…ç½®é—´éš”多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # é…ç½®ä¸€ä¸ªè¿žæŽ¥åœ¨æ± ä¸­æœ€å°ç”Ÿå­˜çš„æ—¶é—´ï¼Œå•位是毫秒
      minEvictableIdleTimeMillis: 300000
      # é…ç½®ä¸€ä¸ªè¿žæŽ¥åœ¨æ± ä¸­æœ€å¤§ç”Ÿå­˜çš„æ—¶é—´ï¼Œå•位是毫秒
      maxEvictableIdleTimeMillis: 900000
      # é…ç½®æ£€æµ‹è¿žæŽ¥æ˜¯å¦æœ‰æ•ˆ
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      webStatFilter:
        enabled: true
      statViewServlet:
        enabled: true
        # è®¾ç½®ç™½åå•,不填则允许所有访问
        allow:
        url-pattern: /druid/*
        # æŽ§åˆ¶å°ç®¡ç†ç”¨æˆ·åå’Œå¯†ç 
        login-username: ruoyi
        login-password: 123456
      filter:
        stat:
          enabled: true
          # æ…¢SQL记录
          log-slow-sql: true
          slow-sql-millis: 1000
          merge-sql: true
        wall:
          config:
            multi-statement-allow: true
  # èµ„源信息
  messages:
    # å›½é™…化资源文件路径
    basename: i18n/messages
  # æ–‡ä»¶ä¸Šä¼ 
  servlet:
    multipart:
      # å•个文件大小
      max-file-size: 1GB
      # è®¾ç½®æ€»ä¸Šä¼ çš„æ–‡ä»¶å¤§å°
      max-request-size: 2GB
  # æœåŠ¡æ¨¡å—
  devtools:
    restart:
      # çƒ­éƒ¨ç½²å¼€å…³
      enabled: false
  # redis é…ç½®
  redis:
    # åœ°å€
#    host: 127.0.0.1
    host: 172.17.0.1
    # ç«¯å£ï¼Œé»˜è®¤ä¸º6379
    port: 6379
    # æ•°æ®åº“索引
    database: 4
    # å¯†ç 
#    password: root2022!
    password:
    # è¿žæŽ¥è¶…æ—¶æ—¶é—´
    timeout: 10s
    lettuce:
      pool:
        # è¿žæŽ¥æ± ä¸­çš„æœ€å°ç©ºé—²è¿žæŽ¥
        min-idle: 0
        # è¿žæŽ¥æ± ä¸­çš„æœ€å¤§ç©ºé—²è¿žæŽ¥
        max-idle: 8
        # è¿žæŽ¥æ± çš„æœ€å¤§æ•°æ®åº“连接数
        max-active: 8
        # #连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1ms
# token配置
token:
  # ä»¤ç‰Œè‡ªå®šä¹‰æ ‡è¯†
  header: Authorization
  # ä»¤ç‰Œå¯†é’¥
  secret: abcdefghijklmnopqrstuvwxyz
  # ä»¤ç‰Œæœ‰æ•ˆæœŸï¼ˆé»˜è®¤30分钟)
  expireTime: 450
# MyBatis Plus配置
mybatis-plus:
  # æœç´¢æŒ‡å®šåŒ…别名   æ ¹æ®è‡ªå·±çš„项目来
  typeAliasesPackage: com.ruoyi.**.pojo
  # é…ç½®mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # åŠ è½½å…¨å±€çš„é…ç½®æ–‡ä»¶
  configLocation: classpath:mybatis/mybatis-config.xml
  global-config:
    enable-sql-runner: true
    db-config:
      id-type: auto
# PageHelper分页插件
pagehelper:
  helperDialect: mysql
  supportMethodsArguments: true
  params: count=countSql
# Swagger配置
swagger:
  # æ˜¯å¦å¼€å¯swagger
  enabled: true
  # è¯·æ±‚前缀
  pathMapping: /dev-api
# é˜²æ­¢XSS攻击
xss:
  # è¿‡æ»¤å¼€å…³
  enabled: true
  # æŽ’除链接(多个用逗号分隔)
  excludes: /system/notice
  # åŒ¹é…é“¾æŽ¥
  urlPatterns: /system/*,/monitor/*,/tool/*
# ä»£ç ç”Ÿæˆ
gen:
  # ä½œè€…
  author: ruoyi
  # é»˜è®¤ç”ŸæˆåŒ…路径 system éœ€æ”¹æˆè‡ªå·±çš„æ¨¡å—名称 å¦‚ system monitor tool
  packageName: com.ruoyi.project.system
  # è‡ªåŠ¨åŽ»é™¤è¡¨å‰ç¼€ï¼Œé»˜è®¤æ˜¯true
  autoRemovePre: false
  # è¡¨å‰ç¼€ï¼ˆç”Ÿæˆç±»åä¸ä¼šåŒ…含表前缀,多个用逗号分隔)
  tablePrefix: sys_
  # æ˜¯å¦å…è®¸ç”Ÿæˆæ–‡ä»¶è¦†ç›–到本地(自定义路径),默认不允许
  allowOverwrite: false
file:
  temp-dir: /javaWork/product-inventory-management/file/temp/uploads
  upload-dir: /javaWork/product-inventory-management/file/prod/uploads
src/main/resources/mapper/officesupplies/OfficeSuppliesMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
<?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="com.ruoyi.officesupplies.mapper.OfficeSuppliesMapper">
    <select id="listPage" resultType="com.ruoyi.officesupplies.pojo.OfficeSupplies">
        select * from office_supplies
        <where>
            <if test="req.code != null and req.code != ''">
                and code like concat('%',#{req.code},'%')
            </if>
            <if test="req.applicant != null and req.applicant != ''">
                and applicant like concat('%',#{req.applicant},'%')
            </if>
            <if test="req.status != null and req.status != ''">
                and status = #{req.status}
            </if>
        </where>
    </select>
</mapper>