From 60838d9bc1043bcc6cb171f9a30519e649b118b6 Mon Sep 17 00:00:00 2001 From: maven <2163098428@qq.com> Date: 星期二, 05 八月 2025 17:43:31 +0800 Subject: [PATCH] yys 新增计量器具台账,记录,修改分页插件,size=-1不分页 --- src/main/java/com/ruoyi/measuringinstrumentledger/mapper/MeasuringInstrumentLedgerRecordMapper.java | 22 src/main/resources/mapper/measuringinstrumentledger/MeasuringInstrumentLedgerMapper.xml | 55 ++ src/main/resources/mapper/measuringinstrumentledger/MeasuringInstrumentLedgerRecordMapper.xml | 68 ++ src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java | 215 ++++++++ src/main/java/com/ruoyi/common/enums/FileNameType.java | 4 src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java | 129 +++++ src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerRecordController.java | 63 ++ src/main/java/com/ruoyi/measuringinstrumentledger/pojo/MeasuringInstrumentLedger.java | 140 +++++ src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerRecordService.java | 29 + src/main/resources/application-demo.yml | 219 +++++++++ src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerService.java | 44 + src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java | 175 +++++++ src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java | 46 + src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java | 42 + src/main/java/com/ruoyi/measuringinstrumentledger/mapper/MeasuringInstrumentLedgerMapper.java | 27 + src/main/java/com/ruoyi/measuringinstrumentledger/pojo/MeasuringInstrumentLedgerRecord.java | 122 +++++ 16 files changed, 1,391 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/ruoyi/common/enums/FileNameType.java b/src/main/java/com/ruoyi/common/enums/FileNameType.java index 36b7735..4ee2bb6 100644 --- a/src/main/java/com/ruoyi/common/enums/FileNameType.java +++ b/src/main/java/com/ruoyi/common/enums/FileNameType.java @@ -5,7 +5,9 @@ SALE(1), // 閿�鍞� PURCHASE(2), // 閲囪喘 INVOICE(3), //鍙戠エ - PURCHASELEDGER(4); // + PURCHASELEDGER(4), + MEASURING(5), //璁¢噺鍣ㄥ叿鍙拌处 + MEASURINGRecord(6); //璁¢噺鍣ㄥ叿鍙拌处璁板綍 private final int value; diff --git a/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java b/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java index 90ad0f5..1df5374 100644 --- a/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java +++ b/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java @@ -1,15 +1,24 @@ package com.ruoyi.framework.config; import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.ParameterUtils; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; import com.ruoyi.common.handler.CustomTenantLineHandler; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.session.ResultHandler; +import org.apache.ibatis.session.RowBounds; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; + +import java.sql.SQLException; /** * Mybatis Plus 閰嶇疆 @@ -39,14 +48,31 @@ /** * 鍒嗛〉鎻掍欢锛岃嚜鍔ㄨ瘑鍒暟鎹簱绫诲瀷 https://baomidou.com/guide/interceptor-pagination.html */ - public PaginationInnerInterceptor paginationInnerInterceptor() - { - PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(); - // 璁剧疆鏁版嵁搴撶被鍨嬩负mysql - paginationInnerInterceptor.setDbType(DbType.MYSQL); - // 璁剧疆鏈�澶у崟椤甸檺鍒舵暟閲忥紝榛樿 500 鏉★紝-1 涓嶅彈闄愬埗 - paginationInnerInterceptor.setMaxLimit(-1L); - return paginationInnerInterceptor; +// public PaginationInnerInterceptor paginationInnerInterceptor() +// { +// PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(); +// // 璁剧疆鏁版嵁搴撶被鍨嬩负mysql +// paginationInnerInterceptor.setDbType(DbType.MYSQL); +// // 璁剧疆鏈�澶у崟椤甸檺鍒舵暟閲忥紝榛樿 500 鏉★紝-1 涓嶅彈闄愬埗 +// paginationInnerInterceptor.setMaxLimit(-1L); +// return paginationInnerInterceptor; +// } + + public PaginationInnerInterceptor paginationInnerInterceptor() { + PaginationInnerInterceptor interceptor = new PaginationInnerInterceptor(DbType.MYSQL) { + @Override + public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, + RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException { + IPage<?> page = ParameterUtils.findPage(parameter).orElse(null); + if (page != null && page.getSize() <= 0) { + // 褰搒ize<=0鏃讹紝涓嶈繘琛屽垎椤� + return; + } + super.beforeQuery(executor, ms, parameter, rowBounds, resultHandler, boundSql); + } + }; + interceptor.setMaxLimit(1000L); // 寤鸿璁剧疆鍚堢悊鐨勬渶澶у�� + return interceptor; } /** diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java new file mode 100644 index 0000000..4e7b8f8 --- /dev/null +++ b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java @@ -0,0 +1,129 @@ +package com.ruoyi.measuringinstrumentledger.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +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.measuringinstrumentledger.dto.MeasuringInstrumentLedgerDto; +import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerRecordMapper; +import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedger; +import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord; +import com.ruoyi.measuringinstrumentledger.service.MeasuringInstrumentLedgerService; +import com.ruoyi.measuringinstrumentledger.service.impl.MeasuringInstrumentLedgerServiceImpl; +import com.ruoyi.project.system.domain.SysUser; +import com.ruoyi.project.system.mapper.SysUserMapper; +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.io.IOException; +import java.util.List; + +/** + * @author :yys + * @date : 2025/8/5 9:27 + */ +@RestController +@Api(tags = "璁¢噺鍣ㄥ叿鍙拌处") +@RequestMapping("/measuringInstrumentLedger") +public class MeasuringInstrumentLedgerController extends BaseController { + + @Autowired + private MeasuringInstrumentLedgerService measuringInstrumentLedgerService; + + @Autowired + private SysUserMapper sysUserMapper; + + @Autowired + private MeasuringInstrumentLedgerRecordMapper measuringInstrumentLedgerRecordMapper; + + + @GetMapping("/listPage") + @ApiOperation("璁¢噺鍣ㄥ叿鍙拌处-鍒嗛〉鏌ヨ") + @Log(title = "璁¢噺鍣ㄥ叿鍙拌处-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER) + public AjaxResult listPage(Page page, MeasuringInstrumentLedger measuringInstrumentLedger) { + IPage<MeasuringInstrumentLedger> listPage = measuringInstrumentLedgerService.listPage(page, measuringInstrumentLedger); + return AjaxResult.success(listPage); + } + + + @PostMapping("/add") + @ApiOperation("璁¢噺鍣ㄥ叿鍙拌处-鏂板") + @Log(title = "璁¢噺鍣ㄥ叿鍙拌处-鏂板", businessType = BusinessType.INSERT) + @Transactional(rollbackFor = Exception.class) + public AjaxResult add(@RequestBody MeasuringInstrumentLedger measuringInstrumentLedger) throws IOException { + boolean save = measuringInstrumentLedgerService.add(measuringInstrumentLedger); + if (save) { + return AjaxResult.success(); + } + return AjaxResult.error(); + } + + @PostMapping("/update") + @ApiOperation("璁¢噺鍣ㄥ叿鍙拌处-淇敼") + @Log(title = "璁¢噺鍣ㄥ叿鍙拌处-淇敼", businessType = BusinessType.UPDATE) + @Transactional(rollbackFor = Exception.class) + public AjaxResult update(@RequestBody MeasuringInstrumentLedger measuringInstrumentLedger) { + SysUser sysUser = sysUserMapper.selectUserById(measuringInstrumentLedger.getUserId()); + if (sysUser == null) { + return AjaxResult.error("鐢ㄦ埛涓嶅瓨鍦�"); + } + measuringInstrumentLedger.setUserName(sysUser.getUserName()); + boolean update = measuringInstrumentLedgerService.updateById(measuringInstrumentLedger); + if (update) { + return AjaxResult.success(); + } + return AjaxResult.error(); + } + + @DeleteMapping("/delete") + @ApiOperation("璁¢噺鍣ㄥ叿鍙拌处-鍒犻櫎") + @Log(title = "璁¢噺鍣ㄥ叿鍙拌处-鍒犻櫎", businessType = BusinessType.DELETE) + @Transactional(rollbackFor = Exception.class) + public AjaxResult delete(@RequestBody List<Long> ids) { + if(CollectionUtils.isEmpty(ids)) return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�"); + for (Long id : ids) { + LambdaQueryWrapper<MeasuringInstrumentLedgerRecord> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(MeasuringInstrumentLedgerRecord::getMeasuringInstrumentLedgerId,id); + List<MeasuringInstrumentLedgerRecord> measuringInstrumentLedgerRecords = measuringInstrumentLedgerRecordMapper.selectList(queryWrapper); + if(!CollectionUtils.isEmpty(measuringInstrumentLedgerRecords)){ + return AjaxResult.error("璇峰厛鍒犻櫎閫変腑璁¢噺鍣ㄥ叿鍙拌处涓嬬殑鎵�鏈夋瀹氳褰�"); + } + } + boolean delete = measuringInstrumentLedgerService.removeBatchByIds(ids); + if (delete) { + return AjaxResult.success(); + } + return AjaxResult.error(); + } + + @PostMapping("/verifying") + @ApiOperation("璁¢噺鍣ㄥ叿鍙拌处-妫�瀹�") + @Log(title = "璁¢噺鍣ㄥ叿鍙拌处-妫�瀹�", businessType = BusinessType.UPDATE) + @Transactional(rollbackFor = Exception.class) + public AjaxResult verifying(@RequestBody MeasuringInstrumentLedgerDto measuringInstrumentLedger) throws IOException { + boolean update = measuringInstrumentLedgerService.verifying(measuringInstrumentLedger); + return update ? AjaxResult.success("妫�瀹氭垚鍔�") : AjaxResult.error("妫�瀹氬け璐�"); + } + + /** + * 瀵煎嚭璁¢噺鍣ㄥ叿鍙拌处 + */ + @Log(title = "瀵煎嚭璁¢噺鍣ㄥ叿鍙拌处", businessType = BusinessType.EXPORT) + @PostMapping("/export") + @ApiOperation("瀵煎嚭璁¢噺鍣ㄥ叿鍙拌处") + public void export(HttpServletResponse response) { + measuringInstrumentLedgerService.export( response); + } + + +} diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerRecordController.java b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerRecordController.java new file mode 100644 index 0000000..09237a5 --- /dev/null +++ b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerRecordController.java @@ -0,0 +1,63 @@ +package com.ruoyi.measuringinstrumentledger.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +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.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord; +import com.ruoyi.measuringinstrumentledger.service.MeasuringInstrumentLedgerRecordService; +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.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @author :yys + * @date : 2025/8/5 9:28 + */ +@RestController +@Api(tags = "璁¢噺鍣ㄥ叿鍙拌处璁板綍") +@RequestMapping("/measuringInstrumentLedgerRecord") +public class MeasuringInstrumentLedgerRecordController extends BaseController { + + @Autowired + private MeasuringInstrumentLedgerRecordService measuringInstrumentLedgerRecordService; + + + @GetMapping("/listPage") + @ApiOperation("璁¢噺鍣ㄥ叿鍙拌处璁板綍-鍒嗛〉鏌ヨ") + @Log(title = "璁¢噺鍣ㄥ叿鍙拌处璁板綍-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER) + public AjaxResult listPage(Page page, MeasuringInstrumentLedgerRecord measuringInstrumentLedgerRecord){ + IPage<MeasuringInstrumentLedgerRecord> listPage = measuringInstrumentLedgerRecordService.listPage(page, measuringInstrumentLedgerRecord); + return AjaxResult.success(listPage); + } + + @PostMapping("/update") + @ApiOperation("璁¢噺鍣ㄥ叿鍙拌处璁板綍-淇敼") + @Log(title = "璁¢噺鍣ㄥ叿鍙拌处璁板綍-淇敼", businessType = BusinessType.UPDATE) + @Transactional(rollbackFor = Exception.class) + public AjaxResult update(@RequestBody MeasuringInstrumentLedgerRecord measuringInstrumentLedgerRecord) throws IOException { + boolean update = measuringInstrumentLedgerRecordService.updateMeasuringInstrumentLedgerRecord(measuringInstrumentLedgerRecord); + if (update) { + return AjaxResult.success(); + } + return AjaxResult.error(); + } + + /** + * 瀵煎嚭璁¢噺鍣ㄥ叿鍙拌处 + */ + @ApiOperation("璁¢噺鍣ㄥ叿鍙拌处璁板綍-瀵煎嚭") + @Log(title = "璁¢噺鍣ㄥ叿鍙拌处璁板綍-瀵煎嚭", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response) { + measuringInstrumentLedgerRecordService.export( response); + } + +} diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java b/src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java new file mode 100644 index 0000000..8ecfdcb --- /dev/null +++ b/src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java @@ -0,0 +1,46 @@ +package com.ruoyi.measuringinstrumentledger.dto; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.framework.aspectj.lang.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; +import java.util.List; + +/** + * @author :yys + * @date : 2025/8/5 9:50 + */ +@Data +@ApiModel +public class MeasuringInstrumentLedgerDto { + + @ApiModelProperty("ID") + private Long id; + + @ApiModelProperty("闄勪欢id") + private List<String> tempFileIds; + + @ApiModelProperty("妫�瀹氭棩鏈�") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE) + private Date recordDate; + + @ApiModelProperty("褰曞叆鏃ユ湡") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE) + private Date entryDate; + + + @ApiModelProperty("鏈夋晥鏈�") + private Integer valid; + + @ApiModelProperty("妫�瀹氫汉") + private Long userId; + + +} diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/mapper/MeasuringInstrumentLedgerMapper.java b/src/main/java/com/ruoyi/measuringinstrumentledger/mapper/MeasuringInstrumentLedgerMapper.java new file mode 100644 index 0000000..961a2f1 --- /dev/null +++ b/src/main/java/com/ruoyi/measuringinstrumentledger/mapper/MeasuringInstrumentLedgerMapper.java @@ -0,0 +1,27 @@ +package com.ruoyi.measuringinstrumentledger.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.measuringinstrumentledger.pojo.MeasuringInstrumentLedger; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author :yys + * @date : 2025/8/5 9:20 + */ +public interface MeasuringInstrumentLedgerMapper extends BaseMapper<MeasuringInstrumentLedger> { + + /** + * 鍒嗛〉鏌ヨ + * + * @param page + * @param measuringInstrumentLedger + * @return + */ + IPage<MeasuringInstrumentLedger> listPage(Page page,@Param("req") MeasuringInstrumentLedger measuringInstrumentLedger); + + List<MeasuringInstrumentLedger> listPage(@Param("req") MeasuringInstrumentLedger measuringInstrumentLedger); +} diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/mapper/MeasuringInstrumentLedgerRecordMapper.java b/src/main/java/com/ruoyi/measuringinstrumentledger/mapper/MeasuringInstrumentLedgerRecordMapper.java new file mode 100644 index 0000000..ffc50f7 --- /dev/null +++ b/src/main/java/com/ruoyi/measuringinstrumentledger/mapper/MeasuringInstrumentLedgerRecordMapper.java @@ -0,0 +1,22 @@ +package com.ruoyi.measuringinstrumentledger.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.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author :yys + * @date : 2025/8/5 9:19 + */ +public interface MeasuringInstrumentLedgerRecordMapper extends BaseMapper<MeasuringInstrumentLedgerRecord> { + + + IPage<MeasuringInstrumentLedgerRecord> listPage(Page page,@Param("req") MeasuringInstrumentLedgerRecord measuringInstrumentLedgerRecord); + + List<MeasuringInstrumentLedgerRecord> list(@Param("req") MeasuringInstrumentLedgerRecord measuringInstrumentLedgerRecord); + +} diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/MeasuringInstrumentLedger.java b/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/MeasuringInstrumentLedger.java new file mode 100644 index 0000000..51c0360 --- /dev/null +++ b/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/MeasuringInstrumentLedger.java @@ -0,0 +1,140 @@ +package com.ruoyi.measuringinstrumentledger.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/8/5 9:12 + */ +@Data +@TableName("measuring_instrument_ledger") +@ApiModel +public class MeasuringInstrumentLedger { + + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("闄勪欢id") + @TableField(exist = false) + private List<String> tempFileIds; + + @TableField(exist = false) + @ApiModelProperty("闄勪欢鍒楄〃") + private List<CommonFile> commonFiles; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("褰曞叆浜篿d") + private Long userId; + + @ApiModelProperty("褰曞叆浜哄悕绉�") + @Excel(name = "褰曞叆浜哄悕绉�") + private String userName; + + /** + * 璁¢噺鍣ㄥ叿缂栧彿 + */ + @ApiModelProperty("璁¢噺鍣ㄥ叿缂栧彿") + @Excel(name = "璁¢噺鍣ㄥ叿缂栧彿") + private String code; + + /** + * 璁¢噺鍣ㄥ叿鍚嶇О + */ + @ApiModelProperty("璁¢噺鍣ㄥ叿鍚嶇О") + @Excel(name = "璁¢噺鍣ㄥ叿鍚嶇О") + private String name; + + /** + * 瑙勬牸鍨嬪彿 + */ + @ApiModelProperty("瑙勬牸鍨嬪彿") + @Excel(name = "瑙勬牸鍨嬪彿") + private String model; + + /** + * 鏈�杩戜竴娆℃瀹氭棩鏈� + */ + @ApiModelProperty("鏈�杩戜竴娆℃瀹氭棩鏈�") + @Excel(name = "鏈�杩戜竴娆℃瀹氭棩鏈�", width = 30, dateFormat = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date mostDate; + + + /** + * 妫�瀹氭湁鏁堟湡 + */ + @ApiModelProperty("妫�瀹氭湁鏁堟湡") + @Excel(name = "妫�瀹氭湁鏁堟湡") + private Integer valid; + + /** + * 棰勮涓嬫妫�瀹氭棩鏈� + */ + @ApiModelProperty("棰勮涓嬫妫�瀹氭棩鏈�") + @Excel(name = "棰勮涓嬫妫�瀹氭棩鏈�" , width = 30, dateFormat = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date nextDate; + + /** + * 褰曞叆鏃ユ湡 + */ + @ApiModelProperty("褰曞叆鏃ユ湡") + @Excel(name = "褰曞叆鏃ユ湡" , width = 30, dateFormat = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date recordDate; + + + /** + * 鐘舵�侊紙1-鏈夋晥 2-閫炬湡锛� + */ + @ApiModelProperty("鐘舵�侊紙1-鏈夋晥 2-閫炬湡锛�") + @Excel(name = "鐘舵��", readConverterExp = "1=鏈夋晥,2=閫炬湡") + private Integer status; + + /** + * 鍒涘缓鑰� + */ + @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; + +} diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/MeasuringInstrumentLedgerRecord.java b/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/MeasuringInstrumentLedgerRecord.java new file mode 100644 index 0000000..75eed76 --- /dev/null +++ b/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/MeasuringInstrumentLedgerRecord.java @@ -0,0 +1,122 @@ +package com.ruoyi.measuringinstrumentledger.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/8/5 9:12 + */ +@Data +@TableName("measuring_instrument_ledger_record") +@ApiModel +public class MeasuringInstrumentLedgerRecord { + + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("璁¢噺鍣ㄥ叿缂栧彿") + @TableField(exist = false) + @Excel(name = "璁¢噺鍣ㄥ叿缂栧彿") + private String code; + + @ApiModelProperty("鍚嶇О") + @TableField(exist = false) + @Excel(name = "鍚嶇О") + private String name; + + @ApiModelProperty("璁¢噺鍣ㄥ叿鍚嶇О") + @TableField(exist = false) + @Excel(name = "璁¢噺鍣ㄥ叿鍚嶇О") + private String model; + + @ApiModelProperty("闄勪欢id") + @TableField(exist = false) + private List<String> tempFileIds; + + @TableField(exist = false) + @ApiModelProperty("闄勪欢鍒楄〃") + private List<CommonFile> commonFiles; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("璁¢噺鍣ㄥ叿鍙拌处id") + private Long measuringInstrumentLedgerId; + + @ApiModelProperty("妫�瀹氫汉id") + private Long userId; + + @ApiModelProperty("妫�瀹氫汉鍚嶇О") + @Excel(name = "妫�瀹氫汉鍚嶇О") + private String userName; + + /** + * 妫�瀹氭棩鏈� + */ + @ApiModelProperty("妫�瀹氭棩鏈�") + @Excel(name = "妫�瀹氭棩鏈�" , width = 30, dateFormat = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date recordDate; + + @ApiModelProperty("褰曞叆鏃ユ湡") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @Excel(name = "褰曞叆鏃ユ湡" , width = 30, dateFormat = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE) + private Date entryDate; + + /** + * 鏈夋晥鏈燂紙鍗曚綅澶╋級 + */ + @ApiModelProperty("鏈夋晥鏈燂紙鍗曚綅澶╋級") + private Integer valid; + + + /** + * 鐘舵�侊紙1-鏈夋晥 2-閫炬湡锛� + */ + @ApiModelProperty("鐘舵�侊紙1-鏈夋晥 2-閫炬湡锛�") + private Integer status; + + /** + * 鍒涘缓鑰� + */ + @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; + +} diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerRecordService.java b/src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerRecordService.java new file mode 100644 index 0000000..e8038da --- /dev/null +++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerRecordService.java @@ -0,0 +1,29 @@ +package com.ruoyi.measuringinstrumentledger.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @author :yys + * @date : 2025/8/5 9:22 + */ +public interface MeasuringInstrumentLedgerRecordService extends IService<MeasuringInstrumentLedgerRecord> { + + /** + * 鍒嗛〉鏌ヨ + * + * @param page + * @param measuringInstrumentLedgerRecord + * @return + */ + IPage<MeasuringInstrumentLedgerRecord> listPage(Page page, MeasuringInstrumentLedgerRecord measuringInstrumentLedgerRecord); + + void export(HttpServletResponse response); + + boolean updateMeasuringInstrumentLedgerRecord(MeasuringInstrumentLedgerRecord measuringInstrumentLedgerRecord) throws IOException; +} diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerService.java b/src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerService.java new file mode 100644 index 0000000..7ca300d --- /dev/null +++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerService.java @@ -0,0 +1,44 @@ +package com.ruoyi.measuringinstrumentledger.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.measuringinstrumentledger.dto.MeasuringInstrumentLedgerDto; +import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedger; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @author :yys + * @date : 2025/8/5 9:23 + */ +public interface MeasuringInstrumentLedgerService extends IService<MeasuringInstrumentLedger> { + + /** + * 鍒嗛〉鏌ヨ + * + * @param page + * @param measuringInstrumentLedger + * @return + */ + IPage<MeasuringInstrumentLedger> listPage(Page page, MeasuringInstrumentLedger measuringInstrumentLedger); + + /** + * 妫�瀹� + * + * @param measuringInstrumentLedger + * @return + */ + boolean verifying(MeasuringInstrumentLedgerDto measuringInstrumentLedger) throws IOException; + + void export(HttpServletResponse response); + + /** + * 鏂板 + * + * @param measuringInstrumentLedger + * @return + */ + boolean add(MeasuringInstrumentLedger measuringInstrumentLedger) throws IOException; +} diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java new file mode 100644 index 0000000..0dbdc71 --- /dev/null +++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java @@ -0,0 +1,175 @@ +package com.ruoyi.measuringinstrumentledger.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +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.enums.FileNameType; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerMapper; +import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerRecordMapper; +import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedger; +import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord; +import com.ruoyi.measuringinstrumentledger.service.MeasuringInstrumentLedgerRecordService; +import com.ruoyi.other.mapper.TempFileMapper; +import com.ruoyi.other.pojo.TempFile; +import com.ruoyi.sales.mapper.CommonFileMapper; +import com.ruoyi.sales.pojo.CommonFile; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FilenameUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Date; +import java.util.List; +import java.util.UUID; + +/** + * @author :yys + * @date : 2025/8/5 9:24 + */ +@Service +@Slf4j +public class MeasuringInstrumentLedgerRecordServiceImpl extends ServiceImpl<MeasuringInstrumentLedgerRecordMapper, MeasuringInstrumentLedgerRecord> implements MeasuringInstrumentLedgerRecordService { + + @Autowired + private MeasuringInstrumentLedgerRecordMapper measuringInstrumentLedgerRecordMapper; + + @Autowired + private MeasuringInstrumentLedgerMapper measuringInstrumentLedgerMapper; + + @Autowired + private CommonFileMapper commonFileMapper; + + @Autowired + private TempFileMapper tempFileMapper; + + @Value("${file.upload-dir}") + private String uploadDir; + + @Override + public IPage<MeasuringInstrumentLedgerRecord> listPage(Page page, MeasuringInstrumentLedgerRecord measuringInstrumentLedgerRecord) { + IPage<MeasuringInstrumentLedgerRecord> measuringInstrumentLedgerRecordIPage = measuringInstrumentLedgerRecordMapper.listPage(page, measuringInstrumentLedgerRecord); + measuringInstrumentLedgerRecordIPage.getRecords().forEach(item -> { + LambdaQueryWrapper<CommonFile> salesLedgerFileWrapper = new LambdaQueryWrapper<>(); + salesLedgerFileWrapper.eq(CommonFile::getCommonId, item.getId()); + List<CommonFile> commonFiles = commonFileMapper.selectList(salesLedgerFileWrapper); + item.setCommonFiles(commonFiles); + }); + return measuringInstrumentLedgerRecordIPage; + } + + @Override + public void export(HttpServletResponse response) { + List<MeasuringInstrumentLedgerRecord> list = measuringInstrumentLedgerRecordMapper.list( new MeasuringInstrumentLedgerRecord()); + ExcelUtil<MeasuringInstrumentLedgerRecord> util = new ExcelUtil<MeasuringInstrumentLedgerRecord>(MeasuringInstrumentLedgerRecord.class); + util.exportExcel(response, list , "璁¢噺鍣ㄥ叿鍙拌处璁板綍鏁版嵁"); + } + + @Override + public boolean updateMeasuringInstrumentLedgerRecord(MeasuringInstrumentLedgerRecord measuringInstrumentLedgerRecord) throws IOException { + MeasuringInstrumentLedgerRecord measuringInstrumentLedgerRecord1 = measuringInstrumentLedgerRecordMapper.selectById(measuringInstrumentLedgerRecord.getId()); + if (measuringInstrumentLedgerRecord1 == null) { + return false; + } + // 鏈夋晥鏈熷彉鏇达紝閲嶆柊璁$畻棰勮涓嬫妫�瀹氭棩鏈� + if(!measuringInstrumentLedgerRecord1.getValid().equals(measuringInstrumentLedgerRecord.getValid())){ + MeasuringInstrumentLedger measuringInstrumentLedger = measuringInstrumentLedgerMapper.selectById(measuringInstrumentLedgerRecord1.getMeasuringInstrumentLedgerId()); + if(measuringInstrumentLedger != null){ + measuringInstrumentLedger.setNextDate(new Date(measuringInstrumentLedger.getMostDate().getTime() + measuringInstrumentLedgerRecord.getValid() * 24 * 60 * 60 * 1000L)); + } + measuringInstrumentLedgerMapper.updateById(measuringInstrumentLedger); + } + // 鍒犻櫎闄勪欢 + LambdaQueryWrapper<CommonFile> delWrapper = new LambdaQueryWrapper<>(); + delWrapper.eq(CommonFile::getCommonId, measuringInstrumentLedgerRecord.getId()); + commonFileMapper.delete(delWrapper); + // 璁板綍闄勪欢缁戝畾 + migrateTempFilesToFormal(measuringInstrumentLedgerRecord.getId(), measuringInstrumentLedgerRecord.getTempFileIds(), FileNameType.MEASURINGRecord.getValue()); + return true; + } + + + /** + * 灏嗕复鏃舵枃浠惰縼绉诲埌姝e紡鐩綍 + * + * @param businessId 涓氬姟ID锛堥攢鍞彴璐D锛� + * @param tempFileIds 涓存椂鏂囦欢ID鍒楄〃 + * @throws IOException 鏂囦欢鎿嶄綔寮傚父 + */ + private void migrateTempFilesToFormal(Long businessId, List<String> tempFileIds,Integer fileType) throws IOException { + if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(tempFileIds)) { + return; + } + + // 鏋勫缓姝e紡鐩綍璺緞锛堟寜涓氬姟绫诲瀷鍜屾棩鏈熷垎缁勶級 + String formalDir = uploadDir + LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE); + + Path formalDirPath = Paths.get(formalDir); + + // 纭繚姝e紡鐩綍瀛樺湪锛堥�掑綊鍒涘缓锛� + if (!Files.exists(formalDirPath)) { + Files.createDirectories(formalDirPath); + } + + for (String tempFileId : tempFileIds) { + // 鏌ヨ涓存椂鏂囦欢璁板綍 + TempFile tempFile = tempFileMapper.selectById(tempFileId); + if (tempFile == null) { + log.warn("涓存椂鏂囦欢涓嶅瓨鍦紝璺宠繃澶勭悊: {}", tempFileId); + continue; + } + + // 鏋勫缓姝e紡鏂囦欢鍚嶏紙鍖呭惈涓氬姟ID鍜屾椂闂存埑锛岄伩鍏嶅啿绐侊級 + String originalFilename = tempFile.getOriginalName(); + String fileExtension = FilenameUtils.getExtension(originalFilename); + String formalFilename = businessId + "_" + + System.currentTimeMillis() + "_" + + UUID.randomUUID().toString().substring(0, 8) + + (StringUtils.hasText(fileExtension) ? "." + fileExtension : ""); + + Path formalFilePath = formalDirPath.resolve(formalFilename); + + try { + // 鎵ц鏂囦欢杩佺Щ锛堜娇鐢ㄥ師瀛愭搷浣滅‘淇濆畨鍏ㄦ�э級 + Files.move( + Paths.get(tempFile.getTempPath()), + formalFilePath, + StandardCopyOption.REPLACE_EXISTING, + StandardCopyOption.ATOMIC_MOVE + ); + log.info("鏂囦欢杩佺Щ鎴愬姛: {} -> {}", tempFile.getTempPath(), formalFilePath); + + // 鏇存柊鏂囦欢璁板綍锛堝叧鑱斿埌涓氬姟ID锛� + CommonFile fileRecord = new CommonFile(); + fileRecord.setCommonId(businessId); + fileRecord.setName(originalFilename); + fileRecord.setUrl(formalFilePath.toString()); + fileRecord.setCreateTime(LocalDateTime.now()); + fileRecord.setType(fileType); + commonFileMapper.insert(fileRecord); + + // 鍒犻櫎涓存椂鏂囦欢璁板綍 + tempFileMapper.deleteById(tempFile); + + log.info("鏂囦欢杩佺Щ鎴愬姛: {} -> {}", tempFile.getTempPath(), formalFilePath); + } catch (IOException e) { + log.error("鏂囦欢杩佺Щ澶辫触: {}", tempFile.getTempPath(), e); + // 鍙�夋嫨鍥炴粴浜嬪姟鎴栬褰曞け璐ユ枃浠� + throw new IOException("鏂囦欢杩佺Щ寮傚父", e); + } + } + } +} diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java new file mode 100644 index 0000000..80cba1e --- /dev/null +++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java @@ -0,0 +1,215 @@ +package com.ruoyi.measuringinstrumentledger.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.enums.FileNameType; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.framework.web.domain.AjaxResult; +import com.ruoyi.measuringinstrumentledger.dto.MeasuringInstrumentLedgerDto; +import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerMapper; +import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerRecordMapper; +import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedger; +import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord; +import com.ruoyi.measuringinstrumentledger.service.MeasuringInstrumentLedgerService; +import com.ruoyi.other.mapper.TempFileMapper; +import com.ruoyi.other.pojo.TempFile; +import com.ruoyi.project.system.domain.SysUser; +import com.ruoyi.project.system.mapper.SysUserMapper; +import com.ruoyi.sales.mapper.CommonFileMapper; +import com.ruoyi.sales.pojo.CommonFile; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FilenameUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; + +/** + * @author :yys + * @date : 2025/8/5 9:23 + */ +@Service +@Slf4j +public class MeasuringInstrumentLedgerServiceImpl extends ServiceImpl<MeasuringInstrumentLedgerMapper, MeasuringInstrumentLedger> implements MeasuringInstrumentLedgerService { + + @Autowired + private MeasuringInstrumentLedgerMapper measuringInstrumentLedgerMapper; + + @Autowired + private MeasuringInstrumentLedgerRecordMapper measuringInstrumentLedgerRecordMapper; + + @Autowired + private TempFileMapper tempFileMapper; + + @Autowired + private CommonFileMapper commonFileMapper; + + @Autowired + private SysUserMapper sysUserMapper; + + @Value("${file.upload-dir}") + private String uploadDir; + + @Override + public IPage<MeasuringInstrumentLedger> listPage(Page page, MeasuringInstrumentLedger measuringInstrumentLedger) { + IPage<MeasuringInstrumentLedger> measuringInstrumentLedgerIPage = measuringInstrumentLedgerMapper.listPage(page, measuringInstrumentLedger); + measuringInstrumentLedgerIPage.getRecords().forEach(item -> { + LambdaQueryWrapper<MeasuringInstrumentLedgerRecord> measuringInstrumentLedgerRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); + measuringInstrumentLedgerRecordLambdaQueryWrapper.eq(MeasuringInstrumentLedgerRecord::getMeasuringInstrumentLedgerId, item.getId()); + List<MeasuringInstrumentLedgerRecord> measuringInstrumentLedgerRecords = measuringInstrumentLedgerRecordMapper.selectList(measuringInstrumentLedgerRecordLambdaQueryWrapper); + if(!CollectionUtils.isEmpty(measuringInstrumentLedgerRecords)){ + List<Long> collect = measuringInstrumentLedgerRecords.stream().map(MeasuringInstrumentLedgerRecord::getId).collect(Collectors.toList()); + collect.add(item.getId()); + LambdaQueryWrapper<CommonFile> salesLedgerFileWrapper = new LambdaQueryWrapper<>(); + salesLedgerFileWrapper.in(CommonFile::getCommonId, collect); + List<CommonFile> commonFiles = commonFileMapper.selectList(salesLedgerFileWrapper); + item.setCommonFiles(commonFiles); + } + + }); + return measuringInstrumentLedgerIPage; + } + + @Override + public boolean verifying(MeasuringInstrumentLedgerDto req) throws IOException { + MeasuringInstrumentLedger measuringInstrumentLedger = measuringInstrumentLedgerMapper.selectById(req.getId()); + if(measuringInstrumentLedger == null) { + return false; + } + SysUser sysUser = sysUserMapper.selectUserById(measuringInstrumentLedger.getUserId()); + measuringInstrumentLedger.setValid(req.getValid()); + measuringInstrumentLedger.setMostDate(req.getRecordDate()); + measuringInstrumentLedger.setNextDate(new Date(req.getRecordDate().getTime() + 1000L * 60 * 60 * 24 * req.getValid())); + MeasuringInstrumentLedgerRecord measuringInstrumentLedgerRecord = new MeasuringInstrumentLedgerRecord(); + if(measuringInstrumentLedgerMapper.updateById(measuringInstrumentLedger) > 0) { + measuringInstrumentLedgerRecord.setMeasuringInstrumentLedgerId(req.getId()); + measuringInstrumentLedgerRecord.setRecordDate(req.getRecordDate()); + measuringInstrumentLedgerRecord.setEntryDate(req.getEntryDate()); + measuringInstrumentLedgerRecord.setValid(req.getValid()); + measuringInstrumentLedgerRecord.setUserId(req.getUserId()); + measuringInstrumentLedgerRecord.setUserName(sysUser.getUserName()); + measuringInstrumentLedgerRecordMapper.insert(measuringInstrumentLedgerRecord); + // 鍙拌处缁戝畾涓�娆� +// if(!CollectionUtils.isEmpty(req.getTempFileIds())){ +// migrateTempFilesToFormal(measuringInstrumentLedger.getId(), req.getTempFileIds(), FileNameType.MEASURING.getValue()); +// } + // 鍙拌处璁板綍缁戝畾涓�娆� + if(!CollectionUtils.isEmpty(req.getTempFileIds())){ + migrateTempFilesToFormal(measuringInstrumentLedgerRecord.getId(), req.getTempFileIds(), FileNameType.MEASURINGRecord.getValue()); + } + return true; + } + return false; + } + + @Override + public void export(HttpServletResponse response) { + List<MeasuringInstrumentLedger> list = measuringInstrumentLedgerMapper.listPage(new MeasuringInstrumentLedger()); + ExcelUtil<MeasuringInstrumentLedger> util = new ExcelUtil<MeasuringInstrumentLedger>(MeasuringInstrumentLedger.class); + util.exportExcel(response, list , "瀹㈡埛妗f鏁版嵁"); + } + + @Override + public boolean add(MeasuringInstrumentLedger measuringInstrumentLedger) throws IOException { + SysUser sysUser = sysUserMapper.selectUserById(measuringInstrumentLedger.getUserId()); + if (sysUser == null) { + return false; + } + measuringInstrumentLedger.setUserName(sysUser.getUserName()); + measuringInstrumentLedgerMapper.insert(measuringInstrumentLedger); + if(!CollectionUtils.isEmpty(measuringInstrumentLedger.getTempFileIds())){ + migrateTempFilesToFormal(measuringInstrumentLedger.getId(), measuringInstrumentLedger.getTempFileIds(), FileNameType.MEASURING.getValue()); + } + return true; + } + + + /** + * 灏嗕复鏃舵枃浠惰縼绉诲埌姝e紡鐩綍 + * + * @param businessId 涓氬姟ID锛堥攢鍞彴璐D锛� + * @param tempFileIds 涓存椂鏂囦欢ID鍒楄〃 + * @throws IOException 鏂囦欢鎿嶄綔寮傚父 + */ + private void migrateTempFilesToFormal(Long businessId, List<String> tempFileIds,Integer fileType) throws IOException { + if (CollectionUtils.isEmpty(tempFileIds)) { + return; + } + + // 鏋勫缓姝e紡鐩綍璺緞锛堟寜涓氬姟绫诲瀷鍜屾棩鏈熷垎缁勶級 + String formalDir = uploadDir + LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE); + + Path formalDirPath = Paths.get(formalDir); + + // 纭繚姝e紡鐩綍瀛樺湪锛堥�掑綊鍒涘缓锛� + if (!Files.exists(formalDirPath)) { + Files.createDirectories(formalDirPath); + } + + for (String tempFileId : tempFileIds) { + // 鏌ヨ涓存椂鏂囦欢璁板綍 + TempFile tempFile = tempFileMapper.selectById(tempFileId); + if (tempFile == null) { + log.warn("涓存椂鏂囦欢涓嶅瓨鍦紝璺宠繃澶勭悊: {}", tempFileId); + continue; + } + + // 鏋勫缓姝e紡鏂囦欢鍚嶏紙鍖呭惈涓氬姟ID鍜屾椂闂存埑锛岄伩鍏嶅啿绐侊級 + String originalFilename = tempFile.getOriginalName(); + String fileExtension = FilenameUtils.getExtension(originalFilename); + String formalFilename = businessId + "_" + + System.currentTimeMillis() + "_" + + UUID.randomUUID().toString().substring(0, 8) + + (StringUtils.hasText(fileExtension) ? "." + fileExtension : ""); + + Path formalFilePath = formalDirPath.resolve(formalFilename); + + try { + // 鎵ц鏂囦欢杩佺Щ锛堜娇鐢ㄥ師瀛愭搷浣滅‘淇濆畨鍏ㄦ�э級 + Files.move( + Paths.get(tempFile.getTempPath()), + formalFilePath, + StandardCopyOption.REPLACE_EXISTING, + StandardCopyOption.ATOMIC_MOVE + ); + log.info("鏂囦欢杩佺Щ鎴愬姛: {} -> {}", tempFile.getTempPath(), formalFilePath); + + // 鏇存柊鏂囦欢璁板綍锛堝叧鑱斿埌涓氬姟ID锛� + CommonFile fileRecord = new CommonFile(); + fileRecord.setCommonId(businessId); + fileRecord.setName(originalFilename); + fileRecord.setUrl(formalFilePath.toString()); + fileRecord.setCreateTime(LocalDateTime.now()); + fileRecord.setType(fileType); + commonFileMapper.insert(fileRecord); + + // 鍒犻櫎涓存椂鏂囦欢璁板綍 + tempFileMapper.deleteById(tempFile); + + log.info("鏂囦欢杩佺Щ鎴愬姛: {} -> {}", tempFile.getTempPath(), formalFilePath); + } catch (IOException e) { + log.error("鏂囦欢杩佺Щ澶辫触: {}", tempFile.getTempPath(), e); + // 鍙�夋嫨鍥炴粴浜嬪姟鎴栬褰曞け璐ユ枃浠� + throw new IOException("鏂囦欢杩佺Щ寮傚父", e); + } + } + } +} diff --git a/src/main/resources/application-demo.yml b/src/main/resources/application-demo.yml new file mode 100644 index 0000000..1b1ddab --- /dev/null +++ b/src/main/resources/application-demo.yml @@ -0,0 +1,219 @@ +# 椤圭洰鐩稿叧閰嶇疆 +ruoyi: + # 鍚嶇О + name: RuoYi + # 鐗堟湰 + version: 3.8.9 + # 鐗堟潈骞翠唤 + copyrightYear: 2025 + # 鏂囦欢璺緞 绀轰緥锛� Windows閰嶇疆D:/ruoyi/uploadPath锛孡inux閰嶇疆 /home/ruoyi/uploadPath锛� + profile: /javaWork/product-inventory-management/file + + # 鑾峰彇ip鍦板潃寮�鍏� + addressEnabled: false + # 楠岃瘉鐮佺被鍨� math 鏁板瓧璁$畻 char 瀛楃楠岃瘉 + captchaType: math + +# 寮�鍙戠幆澧冮厤缃� +server: + # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080 + port: 8089 + servlet: + # 搴旂敤鐨勮闂矾寰� + context-path: / + tomcat: + # tomcat鐨刄RI缂栫爜 + 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://114.132.189.42:9004/product-inventory-management-demo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: root + password: 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 + # 鎱QL璁板綍 + 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: 0 + # 瀵嗙爜 + 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: + # 鏄惁寮�鍚痵wagger + enabled: false + # 璇锋眰鍓嶇紑 + pathMapping: /dev-api + +# 闃叉XSS鏀诲嚮 +xss: + # 杩囨护寮�鍏� + enabled: true + # 鎺掗櫎閾炬帴锛堝涓敤閫楀彿鍒嗛殧锛� + excludes: /system/notice + # 鍖归厤閾炬帴 + urlPatterns: /system/*,/monitor/*,/tool/* + +# 浠g爜鐢熸垚 +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 \ No newline at end of file diff --git a/src/main/resources/mapper/measuringinstrumentledger/MeasuringInstrumentLedgerMapper.xml b/src/main/resources/mapper/measuringinstrumentledger/MeasuringInstrumentLedgerMapper.xml new file mode 100644 index 0000000..fc680d0 --- /dev/null +++ b/src/main/resources/mapper/measuringinstrumentledger/MeasuringInstrumentLedgerMapper.xml @@ -0,0 +1,55 @@ +<?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.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerMapper"> + + <select id="listPage" resultType="com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedger"> + SELECT + id, + user_id, + user_name, + code, + name, + model, + most_date, + valid, + next_date, + record_date, + CASE + WHEN next_date >= DATE_FORMAT(now(),'%Y-%m-%d') THEN 1 + ELSE 2 + END AS status, + create_user, + create_time, + update_user, + update_time, + tenant_id + FROM + measuring_instrument_ledger + <where> + <!-- 鏌ヨ鏉′欢鍚屼笂 --> + <if test="req.code != null and req.code != ''"> + AND code LIKE CONCAT('%', #{req.code}, '%') + </if> + <if test="req.name != null and req.name != ''"> + AND name LIKE CONCAT('%', #{req.name}, '%') + </if> + <if test="req.status != null"> + <choose> + <when test="req.status == 1"> + AND next_date >= DATE_FORMAT(now(),'%Y-%m-%d') + </when> + <when test="req.status == 2"> + AND next_date < DATE_FORMAT(now(),'%Y-%m-%d') + </when> + </choose> + </if> + <if test="req.tenantId != null"> + AND tenant_id = #{req.tenantId} + </if> + <if test="req.recordDate != null"> + AND record_date = DATE_FORMAT(#{req.recordDate},'%Y-%m-%d') + </if> + </where> + ORDER BY update_time DESC + </select> +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/measuringinstrumentledger/MeasuringInstrumentLedgerRecordMapper.xml b/src/main/resources/mapper/measuringinstrumentledger/MeasuringInstrumentLedgerRecordMapper.xml new file mode 100644 index 0000000..69446e0 --- /dev/null +++ b/src/main/resources/mapper/measuringinstrumentledger/MeasuringInstrumentLedgerRecordMapper.xml @@ -0,0 +1,68 @@ +<?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.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerRecordMapper"> + + <select id="listPage" + resultType="com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord"> + SELECT + t1.id, + t1.user_id, + t1.user_name, + t2.code, + t2.name, + t2.model, + t1.valid, + t1.record_date, + t1.entry_date + FROM + measuring_instrument_ledger_record t1 + left join measuring_instrument_ledger t2 on t1.measuring_instrument_ledger_id = t2.id + <where> + <!-- 鏌ヨ鏉′欢鍚屼笂 --> + <if test="req.code != null and req.code != ''"> + AND t2.code LIKE CONCAT('%', #{req.code}, '%') + </if> + <if test="req.name != null and req.name != ''"> + AND t2.name LIKE CONCAT('%', #{req.name}, '%') + </if> + <if test="req.entryDate != null"> + AND t1.entry_date = DATE_FORMAT(#{req.entryDate},'%Y-%m-%d') + </if> + <if test="req.recordDate != null"> + AND t1.record_date = DATE_FORMAT(#{req.recordDate},'%Y-%m-%d') + </if> + </where> + ORDER BY t1.update_time DESC + </select> + <select id="list" resultType="com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord"> + SELECT + t1.id, + t1.user_id, + t1.user_name, + t2.code, + t2.name, + t2.model, + t1.valid, + t1.record_date, + t1.entry_date + FROM + measuring_instrument_ledger_record t1 + left join measuring_instrument_ledger t2 on t1.measuring_instrument_ledger_id = t2.id + <where> + <!-- 鏌ヨ鏉′欢鍚屼笂 --> + <if test="req.code != null and req.code != ''"> + AND t2.code LIKE CONCAT('%', #{req.code}, '%') + </if> + <if test="req.name != null and req.name != ''"> + AND t2.name LIKE CONCAT('%', #{req.name}, '%') + </if> + <if test="req.entryDate != null"> + AND t1.entry_date = DATE_FORMAT(#{req.entryDate},'%Y-%m-%d') + </if> + <if test="req.recordDate != null"> + AND t1.record_date = DATE_FORMAT(#{req.recordDate},'%Y-%m-%d') + </if> + </where> + ORDER BY t1.update_time DESC + </select> +</mapper> \ No newline at end of file -- Gitblit v1.9.3