doc/create_table_product_process.sql
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,12 @@ # å·¥åº create table production_process ( id bigint auto_increment primary key, create_time datetime null comment 'å½å ¥æ¶é´', update_time datetime null comment 'æ´æ°æ¶é´', name varchar(255) not null default '' comment 'å·¥èºåç§°', no varchar(255) not null default '' comment 'å·¥èºç¼å·', remark varchar(255) not null default '' comment '夿³¨', tenant_id bigint not null default 0 comment 'ç§æ·id' ); doc/create_table_product_structure.sql
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ # 产åç»æ drop table if exists production_product_structure; create table product_structure ( id bigint auto_increment primary key, product_id bigint not null comment '产åid', process_id bigint not null comment 'å·¥åºid', unit_quantity numeric(16, 4) not null comment 'åä½äº§åºéè¦æ°é', demanded_quantity numeric(16, 4) not null comment 'éæ±æ°é', unit varchar(255) not null comment 'åä½', disk_quantity numeric(16, 4) not null comment 'çæ°é', tenant_id bigint not null comment 'ç§æ·id' ); src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
@@ -65,7 +65,6 @@ @PostMapping ("maintenance") @ApiModelProperty("ä¿®æ¹è®¾å¤ä¿å »") public AjaxResult maintenance(@RequestBody DeviceMaintenance deviceMaintenance) { deviceMaintenance.setStatus(1); return deviceMaintenanceService.updateDeviceDeviceMaintenance(deviceMaintenance); } src/main/java/com/ruoyi/device/controller/DeviceRepairController.java
@@ -56,7 +56,6 @@ @PostMapping ("repair") @ApiModelProperty("设å¤ç»´ä¿®") public AjaxResult repair( @RequestBody DeviceRepair deviceRepair) { deviceRepair.setStatus(1); return deviceRepairService.updateDeviceRepair(deviceRepair); } src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java
@@ -42,7 +42,7 @@ @ApiModelProperty("ä¿å »ç»æ 0 ç»´ä¿® 1 å®å¥½") private String maintenanceResult; @ApiModelProperty("ç¶æ 0 å¾ ä¿å » 1 å®ç»") @ApiModelProperty("ç¶æ 0 å¾ ä¿å » 1 å®ç» 2 失败") private Integer status; @ApiModelProperty("å建æ¶é´") src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java
@@ -37,7 +37,7 @@ @Excel(name = "ä¿å »ç»æ") private String maintenanceResult; @ApiModelProperty("ç¶æ 0 å¾ ä¿å » 1 å®ç»") @ApiModelProperty("ç¶æ 0 å¾ ä¿å » 1 å®ç» 2 失败") @Excel(name = "ç¶æ") private String status; src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
@@ -43,7 +43,7 @@ @ApiModelProperty("ä¿å »ç»æ 0 ç»´ä¿® 1 å®å¥½") private String maintenanceResult; @ApiModelProperty("ç¶æ 0 å¾ ä¿å » 1 å®ç»") @ApiModelProperty("ç¶æ 0 å¾ ä¿å » 1 å®ç» 2 失败") private Integer status; @ApiModelProperty("å建æ¶é´") src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
@@ -49,7 +49,7 @@ @ApiModelProperty("ç»´ä¿®ç»æ") private String maintenanceResult; @ApiModelProperty("ç¶æ 0 å¾ ç»´ä¿® 1å®ç»") @ApiModelProperty("ç¶æ 0 å¾ ç»´ä¿® 1å®ç» 2 失败") private Integer status; @ApiModelProperty("å建æ¶é´") src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
@@ -59,7 +59,7 @@ supplierManageList.forEach(deviceMaintenance -> { DeviceMaintenanceExeclDto deviceRepairExeclDto = new DeviceMaintenanceExeclDto(); BeanUtils.copyProperties(deviceMaintenance,deviceRepairExeclDto); deviceRepairExeclDto.setStatus(deviceMaintenance.getStatus() == 0 ? "å¾ ç»´ä¿®" : "å®ç»"); deviceRepairExeclDto.setStatus(deviceMaintenance.getStatus() == 0 ? "å¾ ç»´ä¿®" : deviceMaintenance.getStatus() == 1 ? "å®ç»" : "失败"); // deviceRepairExeclDto.setMaintenanceResult(deviceMaintenance.getMaintenanceResult() != null && deviceMaintenance.getMaintenanceResult() == 0 ? "ç»´ä¿®" : "å®å¥½"); deviceLedgerExeclDtos.add(deviceRepairExeclDto); }); src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
@@ -84,7 +84,7 @@ supplierManageList.stream().forEach(deviceRepair -> { DeviceRepairExeclDto deviceRepairExeclDto = new DeviceRepairExeclDto(); BeanUtils.copyProperties(deviceRepair,deviceRepairExeclDto); deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "å¾ ç»´ä¿®" : "å®ç»"); deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "å¾ ç»´ä¿®" : deviceRepair.getStatus() == 1 ? "å®ç»" : "失败"); deviceLedgerExeclDtos.add(deviceRepairExeclDto); }); @@ -100,7 +100,7 @@ supplierManageList.stream().forEach(deviceRepair -> { DeviceRepairExeclDto deviceRepairExeclDto = new DeviceRepairExeclDto(); BeanUtils.copyProperties(deviceRepair,deviceRepairExeclDto); deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "å¾ ç»´ä¿®" : "å®ç»"); deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "å¾ ç»´ä¿®" : deviceRepair.getStatus() == 1 ? "å®ç»" : "失败"); deviceLedgerExeclDtos.add(deviceRepairExeclDto); }); src/main/java/com/ruoyi/home/controller/HomeController.java
@@ -85,5 +85,10 @@ return AjaxResult.success(map); } @GetMapping("/noticesCount") @ApiOperation("æªè¿æçå ¬åæ°é") public AjaxResult noticesCount(){ Long count = homeService.noticesCount(); return AjaxResult.success(count); } } src/main/java/com/ruoyi/home/service/HomeService.java
@@ -29,4 +29,6 @@ StatisticsReceivablePayableDto statisticsReceivablePayable(Integer type); Map<String, Object> approveAndDeviceTodos(); Long noticesCount(); } src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.approve.mapper.ApproveProcessMapper; import com.ruoyi.approve.pojo.ApproveProcess; import com.ruoyi.collaborativeApproval.mapper.NoticeMapper; import com.ruoyi.collaborativeApproval.pojo.Notice; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.device.mapper.DeviceMaintenanceMapper; import com.ruoyi.device.mapper.DeviceRepairMapper; @@ -93,6 +95,9 @@ @Autowired private SysDeptMapper sysDeptMapper; @Autowired private NoticeMapper noticeMapper; @Override public HomeBusinessDto business() { @@ -467,4 +472,12 @@ put("deviceRepairTodo", aLong1); }}; } @Override public Long noticesCount() { // æ¥è¯¢æªè¿æçéç¥æ°éï¼ç¶æä¸ºåå¸ä¸è¿ææ¶é´å¤§äºçäºå½åæ¥æ return noticeMapper.selectCount(new LambdaQueryWrapper<Notice>() .eq(Notice::getStatus, 1) // 1表示åå¸ç¶æ .ge(Notice::getExpirationDate, new Date())); // è¿ææ¶é´å¤§äºçäºå½åæ¥æ } } src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
@@ -35,6 +35,18 @@ private ProcurementRecordService procurementRecordService; /** * éè¿éå®äº§åidè·åå ¥åºæ°é * @param salesProductId * @return */ @GetMapping("/getProcurementAmount") @ApiOperation(value = "éè¿éå®äº§åidè·åå ¥åºæ°é") public AjaxResult getProcurementAmount(@RequestParam("salesProductId") Long salesProductId) { return AjaxResult.success(procurementRecordService.getProcurementAmount(salesProductId)); } @GetMapping("/productlist") @Log(title = "éè´å ¥åº-å ¥åºç®¡ç-æ°å¢å ¥åºæ¥è¯¢", businessType = BusinessType.OTHER) public AjaxResult list(ProcurementDto procurementDto) { src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java
@@ -6,6 +6,7 @@ import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Date; /** * @author :yys src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java
@@ -29,6 +29,12 @@ @Excel(name = "å ¥åºæ¶é´", width = 30, dateFormat = "yyyy-MM-dd") private Date inboundDate; /** * ç¼å· */ @Excel(name = "ç¼å·") private String code; @TableField(exist = false) private String timeStr; src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
@@ -9,6 +9,7 @@ import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.List; import java.util.Map; @@ -54,4 +55,6 @@ AjaxResult deleteCustom(List<Long> ids); int updateManagementByCustom(ProcurementManagementUpdateDto procurementDto); BigDecimal getProcurementAmount(Long salesProductId); } src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -4,6 +4,7 @@ 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.common.utils.OrderUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.security.LoginUser; @@ -467,6 +468,7 @@ Long aLong = customStorageMapper.selectCount(null); item.setInboundBatches(aLong.equals(0L) ? "第1æ¹æ¬¡(èªå®ä¹å ¥åº)" : "第"+ (aLong + 1) + "æ¹æ¬¡(èªå®ä¹å ¥åº)" ); item.setCreateBy(loginUser.getNickName()); item.setCode(OrderUtils.countTodayByCreateTime(customStorageMapper, "")); customStorageMapper.insert(item); }); return AjaxResult.success("èªå®ä¹å ¥åºæå"); @@ -662,6 +664,20 @@ } @Override public BigDecimal getProcurementAmount(Long salesProductId) { LambdaQueryWrapper<ProcurementRecordStorage> procurementRecordStorageLambdaQueryWrapper = new LambdaQueryWrapper<>(); procurementRecordStorageLambdaQueryWrapper.eq(ProcurementRecordStorage::getSalesLedgerProductId, salesProductId) .eq(ProcurementRecordStorage::getType, 2); List<ProcurementRecordStorage> procurementRecordStorages = procurementRecordMapper.selectList(procurementRecordStorageLambdaQueryWrapper); if(CollectionUtils.isEmpty( procurementRecordStorages)){ return BigDecimal.ZERO; } return procurementRecordStorages.stream() .map(ProcurementRecordStorage::getInboundNum) .reduce(BigDecimal.ZERO, BigDecimal::add); } @Override public int add(ProcurementAddDto procurementDto) { LoginUser loginUser = SecurityUtils.getLoginUser(); // æ¹éæ°å¢ src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingDto.java
@@ -125,6 +125,9 @@ @Excel(name = "ç¶æ") private String status; @Excel(name = "è¿åº¦") private BigDecimal progress; @ApiModelProperty(value = "ç§æ·ID") private Long tenantId; src/main/java/com/ruoyi/production/pojo/ProductStructure.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,54 @@ package com.ruoyi.production.pojo; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import java.math.BigDecimal; @TableName("product_structure") @Data public class ProductStructure { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 产ååç§° */ private Long productId; /** * å·¥åºid */ private Long processId; /** * åä½äº§åºéè¦æ°é */ private BigDecimal unitQuantity; /** * éæ±æ°é */ private BigDecimal demandedQuantity; /** * åä½ */ private String unit; /** * çæ°é */ private BigDecimal diskQuantity; /** * ç§æ·ID */ @TableField(fill = FieldFill.INSERT) private Long tenantId; } src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java
@@ -85,12 +85,14 @@ // ç¶æ = æ°éåå®å·¥æ°éæ¯è¾ if(i.getSchedulingNum().compareTo(new BigDecimal(0)) == 0){ i.setStatus("æªå®æ"); i.setStatus("æªå¼å§"); } else if(i.getQuantity().compareTo(i.getSchedulingNum()) <= 0){ i.setStatus("已宿"); }else{ i.setStatus("ç产ä¸"); } // è¿åº¦ä¿ç两ä½å°æ° i.setProgress(i.getSchedulingNum().divide(i.getQuantity(),4,RoundingMode.CEILING).multiply(new BigDecimal(100))); }); return list; src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
@@ -48,6 +48,14 @@ private String shippingCarNumber; /** * åè´§æ¥æ */ @Excel(name = "åè´§æ¥æ", width = 30, dateFormat = "yyyy-MM-dd") @TableField(exist = false) @JsonFormat(pattern = "yyyy-MM-dd") private Date shippingDate; /** * 项ç®åç§° */ @Excel(name = "项ç®åç§°") src/main/resources/application-jtwy.yml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,244 @@ # 项ç®ç¸å ³é ç½® 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: 9090 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: jxc # ç¨æ·é ç½® 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://172.17.0.1:3306/product-inventory-management-jtwy?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: 12 # å¯ç # password: root2022! password: # è¿æ¥è¶ æ¶æ¶é´ timeout: 10s lettuce: pool: # è¿æ¥æ± ä¸çæå°ç©ºé²è¿æ¥ min-idle: 0 # è¿æ¥æ± ä¸çæå¤§ç©ºé²è¿æ¥ max-idle: 8 # è¿æ¥æ± çæå¤§æ°æ®åºè¿æ¥æ° max-active: 8 # #è¿æ¥æ± æå¤§é»å¡çå¾ æ¶é´ï¼ä½¿ç¨è´å¼è¡¨ç¤ºæ²¡æéå¶ï¼ max-wait: -1ms # Quartz宿¶ä»»å¡é ç½®ï¼æ°å¢é¨åï¼ quartz: job-store-type: jdbc # ä½¿ç¨æ°æ®åºåå¨ jdbc: initialize-schema: never # 馿¬¡è¿è¡æ¶èªå¨åå»ºè¡¨ç»æï¼æååæ¹ä¸ºnever schema: classpath:org/quartz/impl/jdbcjobstore/tables_mysql_innodb.sql # MySQLè¡¨ç»æèæ¬ properties: org: quartz: scheduler: instanceName: RuoYiScheduler instanceId: AUTO jobStore: class: org.quartz.impl.jdbcjobstore.JobStoreTX driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate # MySQLéé tablePrefix: qrtz_ # 表ååç¼ï¼ä¸èæ¬ä¸è´ isClustered: false # åèç¹æ¨¡å¼ï¼éç¾¤éæ¹ä¸ºtrueï¼ clusterCheckinInterval: 10000 txIsolationLevelSerializable: true threadPool: class: org.quartz.simpl.SimpleThreadPool threadCount: 10 # çº¿ç¨æ± å¤§å° threadPriority: 5 makeThreadsDaemons: true updateCheck: false # å ³éçæ¬æ£æ¥ # 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/procurementrecord/ProcurementRecordOutMapper.xml
@@ -142,7 +142,6 @@ t2.supplier_name, t2.product_category, t1.id, t1.code, t2.specification_model, t2.unit, t2.tax_rate, @@ -152,7 +151,8 @@ t1.inbound_num, t1.create_time, t1.create_by, t2.item_type t2.item_type, t2.code from procurement_record_out t1 left join custom_storage t2 on t2.id = t1.procurement_record_storage_id <where> src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -59,7 +59,8 @@ T1.execution_date, T2.nick_name AS entry_person_name, T1.payment_method, t3.shipping_car_number t3.shipping_car_number, t3.shipping_date FROM sales_ledger T1 LEFT JOIN sys_user T2 ON T1.entry_person = T2.user_id