From 1b5604f8a88000e2f51d4c989fd179989468ee67 Mon Sep 17 00:00:00 2001 From: yaowanxin <3588231647@qq.com> Date: 星期一, 11 八月 2025 09:48:08 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/pim_yys' into pim_ywx --- src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java | 148 ++ src/main/resources/mapper/account/AccountExpenseMapper.xml | 14 src/main/java/com/ruoyi/project/system/controller/SysLoginController.java | 2 src/main/java/com/ruoyi/compensationperformance/pojo/CompensationPerformance.java | 230 +++++ src/main/resources/application-demo.yml | 219 +++++ src/main/java/com/ruoyi/account/mapper/AccountIncomeMapper.java | 1 src/main/java/com/ruoyi/measuringinstrumentledger/mapper/MeasuringInstrumentLedgerMapper.java | 27 src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java | 220 +++++ src/main/java/com/ruoyi/quality/controller/QualityTestStandardController.java | 11 src/main/java/com/ruoyi/quality/service/IQualityInspectService.java | 11 src/main/resources/mapper/account/AccountIncomeMapper.xml | 13 src/main/java/com/ruoyi/common/enums/FileNameType.java | 5 src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java | 129 +++ src/main/java/com/ruoyi/quality/pojo/QualityInspect.java | 5 src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java | 28 src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java | 10 src/main/java/com/ruoyi/account/controller/AccountExpenseController.java | 24 src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java | 46 + src/main/java/com/ruoyi/quality/pojo/QualityInspectParam.java | 4 src/main/java/com/ruoyi/account/service/AccountIncomeService.java | 6 src/main/java/com/ruoyi/account/service/impl/AccountIncomeServiceImpl.java | 44 src/main/java/com/ruoyi/compensationperformance/mapper/CompensationPerformanceMapper.java | 23 src/main/java/com/ruoyi/compensationperformance/controller/CompensationPerformanceController.java | 69 + src/main/java/com/ruoyi/measuringinstrumentledger/pojo/MeasuringInstrumentLedgerRecord.java | 122 ++ src/main/java/com/ruoyi/measuringinstrumentledger/mapper/MeasuringInstrumentLedgerRecordMapper.java | 22 src/main/resources/static/report-template.docx | 0 src/main/java/com/ruoyi/account/service/AccountExpenseService.java | 6 src/main/resources/mapper/measuringinstrumentledger/MeasuringInstrumentLedgerMapper.xml | 55 + src/main/resources/mapper/measuringinstrumentledger/MeasuringInstrumentLedgerRecordMapper.xml | 68 + src/main/java/com/ruoyi/compensationperformance/service/impl/CompensationPerformanceServiceImpl.java | 30 src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java | 3 pom.xml | 9 src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerRecordController.java | 63 + src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerRecordService.java | 29 src/main/java/com/ruoyi/account/dto/AccountDto2.java | 6 src/main/java/com/ruoyi/approve/pojo/ApproveNode.java | 15 src/main/java/com/ruoyi/quality/dto/QualityInspectDto.java | 26 src/main/resources/mapper/compensationperformance/CompensationPerformanceMapper.xml | 16 src/main/java/com/ruoyi/account/mapper/AccountExpenseMapper.java | 1 src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java | 48 + src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java | 84 + src/main/resources/mapper/approve/ApproveProcessMapper.xml | 2 src/main/java/com/ruoyi/common/utils/HackLoopTableRenderPolicy.java | 154 +++ src/main/java/com/ruoyi/measuringinstrumentledger/pojo/MeasuringInstrumentLedger.java | 140 +++ src/main/java/com/ruoyi/quality/controller/QualityInspectController.java | 33 src/main/java/com/ruoyi/account/dto/AccountDto3.java | 39 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/framework/config/MybatisPlusConfig.java | 42 src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java | 11 src/main/java/com/ruoyi/compensationperformance/service/CompensationPerformanceService.java | 22 src/main/java/com/ruoyi/approve/service/IApproveNodeService.java | 3 52 files changed, 2,485 insertions(+), 72 deletions(-) diff --git a/pom.xml b/pom.xml index 5518a5e..c802315 100644 --- a/pom.xml +++ b/pom.xml @@ -224,6 +224,7 @@ <version>${poi.version}</version> </dependency> + <!-- velocity浠g爜鐢熸垚浣跨敤妯℃澘 --> <dependency> <groupId>org.apache.velocity</groupId> @@ -282,6 +283,12 @@ <version>${okhttp.version}</version> </dependency> + <dependency> + <groupId>com.deepoove</groupId> + <artifactId>poi-tl</artifactId> + <version>1.12.2</version> + </dependency> + </dependencies> <build> @@ -322,4 +329,4 @@ </pluginRepository> </pluginRepositories> -</project> \ No newline at end of file +</project> diff --git a/src/main/java/com/ruoyi/account/controller/AccountExpenseController.java b/src/main/java/com/ruoyi/account/controller/AccountExpenseController.java index ebaa40f..44d1dbd 100644 --- a/src/main/java/com/ruoyi/account/controller/AccountExpenseController.java +++ b/src/main/java/com/ruoyi/account/controller/AccountExpenseController.java @@ -1,6 +1,7 @@ package com.ruoyi.account.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.account.mapper.AccountIncomeMapper; import com.ruoyi.account.pojo.AccountExpense; import com.ruoyi.account.pojo.AccountIncome; import com.ruoyi.account.service.AccountExpenseService; @@ -27,6 +28,9 @@ @Resource private AccountExpenseService accountExpenseService; + + @Resource + private AccountIncomeService accountIncomeService; /** @@ -107,5 +111,25 @@ return AjaxResult.success(accountExpenseService.report(dateQueryDto)); } + /** + * 璐㈠姟鎶ヨ〃鍥捐〃鏀跺叆骞村害鏌ヨ + * @param + * @return + */ + @GetMapping("/report/income") + public AjaxResult reportIncome() { + return AjaxResult.success(accountIncomeService.reportIncome()); + } + + /** + * 璐㈠姟鎶ヨ〃鍥捐〃鏀嚭骞村害鏌ヨ + * @param + * @return + */ + @GetMapping("/report/expense") + public AjaxResult reportExpense() { + return AjaxResult.success(accountExpenseService.reportExpense()); + } + } diff --git a/src/main/java/com/ruoyi/account/dto/AccountDto2.java b/src/main/java/com/ruoyi/account/dto/AccountDto2.java index 169ff81..235278b 100644 --- a/src/main/java/com/ruoyi/account/dto/AccountDto2.java +++ b/src/main/java/com/ruoyi/account/dto/AccountDto2.java @@ -22,6 +22,12 @@ private String typeName; + /** + * 鐧惧垎鍗犳瘮 + */ + private BigDecimal proportion; + + /** * 閲戦 diff --git a/src/main/java/com/ruoyi/account/dto/AccountDto3.java b/src/main/java/com/ruoyi/account/dto/AccountDto3.java new file mode 100644 index 0000000..33b4b8e --- /dev/null +++ b/src/main/java/com/ruoyi/account/dto/AccountDto3.java @@ -0,0 +1,39 @@ +package com.ruoyi.account.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +/** + * 璐㈠姟绠$悊--璐㈠姟鎶ヨ〃(绫诲瀷) + */ + +@Data +public class AccountDto3 implements Serializable { + + + /** + * 绫诲瀷 + */ + private String typeName; + + + /** + * 鐧惧垎鍗犳瘮 + */ + private BigDecimal proportion; + + + + /** + * 閲戦 + */ + private List<BigDecimal> account; + + + + + +} diff --git a/src/main/java/com/ruoyi/account/mapper/AccountExpenseMapper.java b/src/main/java/com/ruoyi/account/mapper/AccountExpenseMapper.java index b534736..8b6a644 100644 --- a/src/main/java/com/ruoyi/account/mapper/AccountExpenseMapper.java +++ b/src/main/java/com/ruoyi/account/mapper/AccountExpenseMapper.java @@ -23,4 +23,5 @@ List<AccountDto2> report(@Param("dateQueryDto") DateQueryDto dateQueryDto); + BigDecimal report1(@Param("dateQueryDto") DateQueryDto dateQueryDto, @Param("dictValue") String dictValue); } diff --git a/src/main/java/com/ruoyi/account/mapper/AccountIncomeMapper.java b/src/main/java/com/ruoyi/account/mapper/AccountIncomeMapper.java index 1d4db3d..76a3c55 100644 --- a/src/main/java/com/ruoyi/account/mapper/AccountIncomeMapper.java +++ b/src/main/java/com/ruoyi/account/mapper/AccountIncomeMapper.java @@ -22,4 +22,5 @@ List<AccountIncome> accountIncomeExport(@Param("accountIncome") AccountIncome accountIncome); List<AccountDto2> report(@Param("dateQueryDto") DateQueryDto dateQueryDto); + BigDecimal report1(@Param("dateQueryDto") DateQueryDto dateQueryDto, @Param("dictValue") String dictValue); } diff --git a/src/main/java/com/ruoyi/account/service/AccountExpenseService.java b/src/main/java/com/ruoyi/account/service/AccountExpenseService.java index a1f2677..71fd214 100644 --- a/src/main/java/com/ruoyi/account/service/AccountExpenseService.java +++ b/src/main/java/com/ruoyi/account/service/AccountExpenseService.java @@ -4,11 +4,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.account.dto.AccountDto; +import com.ruoyi.account.dto.AccountDto2; +import com.ruoyi.account.dto.AccountDto3; import com.ruoyi.account.pojo.AccountExpense; -import com.ruoyi.account.pojo.AccountIncome; import com.ruoyi.dto.DateQueryDto; import javax.servlet.http.HttpServletResponse; +import java.util.List; public interface AccountExpenseService extends IService<AccountExpense> { @@ -17,4 +19,6 @@ void accountExpenseExport(HttpServletResponse response, AccountExpense accountExpense); AccountDto report(DateQueryDto dateQueryDto); + + List<AccountDto3> reportExpense(); } diff --git a/src/main/java/com/ruoyi/account/service/AccountIncomeService.java b/src/main/java/com/ruoyi/account/service/AccountIncomeService.java index a92a51a..fc30cda 100644 --- a/src/main/java/com/ruoyi/account/service/AccountIncomeService.java +++ b/src/main/java/com/ruoyi/account/service/AccountIncomeService.java @@ -3,10 +3,12 @@ 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.account.pojo.AccountFile; +import com.ruoyi.account.dto.AccountDto2; +import com.ruoyi.account.dto.AccountDto3; import com.ruoyi.account.pojo.AccountIncome; import javax.servlet.http.HttpServletResponse; +import java.util.List; public interface AccountIncomeService extends IService<AccountIncome> { @@ -14,4 +16,6 @@ IPage<AccountIncome> accountIncomeListPage(Page page, AccountIncome accountIncome); void accountIncomeExport(HttpServletResponse response, AccountIncome accountIncome); + + List<AccountDto3> reportIncome(); } diff --git a/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java b/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java index f80804d..37c2f7c 100644 --- a/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java +++ b/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java @@ -7,20 +7,25 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.dto.AccountDto; import com.ruoyi.account.dto.AccountDto2; +import com.ruoyi.account.dto.AccountDto3; import com.ruoyi.account.mapper.AccountExpenseMapper; -import com.ruoyi.account.mapper.AccountFileMapper; import com.ruoyi.account.mapper.AccountIncomeMapper; import com.ruoyi.account.pojo.AccountExpense; import com.ruoyi.account.pojo.AccountIncome; import com.ruoyi.account.service.AccountExpenseService; -import com.ruoyi.account.service.AccountIncomeService; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.dto.DateQueryDto; +import com.ruoyi.project.system.domain.SysDictData; +import com.ruoyi.project.system.mapper.SysDictDataMapper; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -31,6 +36,8 @@ private AccountExpenseMapper accountExpenseMapper; private AccountIncomeMapper accountIncomeMapper; + + private SysDictDataMapper sysDictDataMapper; //鍒嗛〉鏌ヨ @@ -53,12 +60,16 @@ AccountDto accountDto = new AccountDto(); //鑾峰彇璇ユ鏃堕棿鍐呯殑鎵�鏈夋敹鍏� List<AccountDto2> accountIncomes =accountIncomeMapper.report(dateQueryDto); - accountDto.setIncomeType(accountIncomes); + Long incomeNumber = accountIncomeMapper.selectCount(Wrappers.<AccountIncome>lambdaQuery() .between(AccountIncome::getIncomeDate, dateQueryDto.getEntryDateStart(), dateQueryDto.getEntryDateEnd())); accountDto.setIncomeNumber(incomeNumber); BigDecimal totalIncome = accountIncomes.stream().map(AccountDto2::getAccount).reduce(BigDecimal.ZERO, BigDecimal::add); accountDto.setTotalIncome(totalIncome); + accountIncomes.stream().forEach(accountDto2 -> { + accountDto2.setProportion(accountDto2.getAccount().divide(totalIncome,2,BigDecimal.ROUND_HALF_UP)); + }); + accountDto.setIncomeType(accountIncomes); //鑾峰彇璇ユ鏃堕棿鍐呯殑鎵�鏈夋敮鍑� List<AccountDto2> accountExpenses =accountExpenseMapper.report(dateQueryDto); accountDto.setExpenseType(accountExpenses); @@ -67,11 +78,42 @@ accountDto.setExpenseNumber(expenseNumber); BigDecimal totalExpense = accountExpenses.stream().map(AccountDto2::getAccount).reduce(BigDecimal.ZERO, BigDecimal::add); accountDto.setTotalExpense(totalExpense); + accountExpenses.stream().forEach(accountDto2 -> { + accountDto2.setProportion(accountDto2.getAccount().divide(totalExpense,2,BigDecimal.ROUND_HALF_UP)); + }); + accountDto.setExpenseType(accountExpenses); //鍑�鏀跺叆 BigDecimal netRevenue = totalIncome.subtract(totalExpense); accountDto.setNetRevenue(netRevenue); return accountDto; } + //璐㈠姟鎶ヨ〃骞存煡璇� + @Override + public List<AccountDto3> reportExpense() { + List<AccountDto3> accountDto3s = new ArrayList<>(); + //鍏堟煡璇㈡敹鍏ョ被鍨嬫湁鍝簺 + List<SysDictData> incomeTypes = sysDictDataMapper.selectDictDataByType("expense_types"); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + int currentYear = LocalDate.now().getYear(); // 鑾峰彇褰撳墠骞翠唤锛堝2025锛� + for (SysDictData incomeType : incomeTypes) { + AccountDto3 accountDto3 = new AccountDto3(); + accountDto3.setTypeName(incomeType.getDictLabel());//绫诲瀷 + List<BigDecimal> account=new ArrayList<>(); + for (int i = 1; i <= 12; i++) { + // 褰撴湀绗竴澶╋細骞翠唤涓哄綋鍓嶅勾锛屾湀浠戒负i锛屾棩鏈熶负1 + LocalDate firstDay = LocalDate.of(currentYear, i, 1); + DateQueryDto dateQueryDto = new DateQueryDto(); + dateQueryDto.setEntryDateStart(firstDay.format(formatter)); + // 褰撴湀鏈�鍚庝竴澶╋細绗竴澶╃殑鏈堜唤鐨勬渶鍚庝竴澶� + dateQueryDto.setEntryDateEnd(firstDay.plusMonths(1).minusDays(1).format(formatter)); + account.add(accountExpenseMapper.report1(dateQueryDto,incomeType.getDictValue())); + } + accountDto3.setAccount(account);//绫诲瀷 + accountDto3s.add(accountDto3); + } + return accountDto3s; + } + } diff --git a/src/main/java/com/ruoyi/account/service/impl/AccountIncomeServiceImpl.java b/src/main/java/com/ruoyi/account/service/impl/AccountIncomeServiceImpl.java index b43888c..66fb6e4 100644 --- a/src/main/java/com/ruoyi/account/service/impl/AccountIncomeServiceImpl.java +++ b/src/main/java/com/ruoyi/account/service/impl/AccountIncomeServiceImpl.java @@ -4,25 +4,34 @@ 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.account.mapper.AccountFileMapper; +import com.ruoyi.account.dto.AccountDto2; +import com.ruoyi.account.dto.AccountDto3; import com.ruoyi.account.mapper.AccountIncomeMapper; -import com.ruoyi.account.pojo.AccountFile; import com.ruoyi.account.pojo.AccountIncome; -import com.ruoyi.account.service.AccountFileService; import com.ruoyi.account.service.AccountIncomeService; import com.ruoyi.common.utils.poi.ExcelUtil; -import com.ruoyi.quality.pojo.QualityInspect; +import com.ruoyi.dto.DateQueryDto; +import com.ruoyi.project.system.domain.SysDictData; +import com.ruoyi.project.system.mapper.SysDictDataMapper; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; @AllArgsConstructor @Service public class AccountIncomeServiceImpl extends ServiceImpl<AccountIncomeMapper, AccountIncome> implements AccountIncomeService { private AccountIncomeMapper accountIncomeMapper; + + private SysDictDataMapper sysDictDataMapper; //鍒嗛〉鏌ヨ @@ -38,4 +47,31 @@ ExcelUtil<AccountIncome> util = new ExcelUtil<AccountIncome>(AccountIncome.class); util.exportExcel(response, accountIncomes, "鏀跺叆绠$悊瀵煎嚭"); } + + //璐㈠姟鎶ヨ〃骞存煡璇� + @Override + public List<AccountDto3> reportIncome() { + List<AccountDto3> accountDto3s = new ArrayList<>(); + //鍏堟煡璇㈡敹鍏ョ被鍨嬫湁鍝簺 + List<SysDictData> incomeTypes = sysDictDataMapper.selectDictDataByType("income_types"); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + int currentYear = LocalDate.now().getYear(); // 鑾峰彇褰撳墠骞翠唤锛堝2025锛� + for (SysDictData incomeType : incomeTypes) { + AccountDto3 accountDto3 = new AccountDto3(); + accountDto3.setTypeName(incomeType.getDictLabel());//绫诲瀷 + List<BigDecimal> account=new ArrayList<>(); + for (int i = 1; i <= 12; i++) { + // 褰撴湀绗竴澶╋細骞翠唤涓哄綋鍓嶅勾锛屾湀浠戒负i锛屾棩鏈熶负1 + LocalDate firstDay = LocalDate.of(currentYear, i, 1); + DateQueryDto dateQueryDto = new DateQueryDto(); + dateQueryDto.setEntryDateStart(firstDay.format(formatter)); + // 褰撴湀鏈�鍚庝竴澶╋細绗竴澶╃殑鏈堜唤鐨勬渶鍚庝竴澶� + dateQueryDto.setEntryDateEnd(firstDay.plusMonths(1).minusDays(1).format(formatter)); + account.add(accountIncomeMapper.report1(dateQueryDto,incomeType.getDictValue())); + } + accountDto3.setAccount(account);//绫诲瀷 + accountDto3s.add(accountDto3); + } + return accountDto3s; + } } diff --git a/src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java b/src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java index 369a65e..5cda3a3 100644 --- a/src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java +++ b/src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java @@ -3,9 +3,15 @@ import com.ruoyi.approve.pojo.ApproveNode; import com.ruoyi.approve.service.IApproveNodeService; import com.ruoyi.framework.web.domain.AjaxResult; +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 java.io.IOException; + +@Api(tags = "瀹℃壒璁板綍") @RestController @RequestMapping("/approveNode") public class ApproveNodeController { @@ -18,6 +24,7 @@ * @return */ @GetMapping("/details/{id}") + @ApiOperation(value = "娴佺▼鐘舵�佽鎯�") public AjaxResult details(@PathVariable String id) { return AjaxResult.success(approveNodeService.details(id)); } @@ -28,7 +35,9 @@ * @return */ @PostMapping("/updateApproveNode") - public AjaxResult updateApproveNode(@RequestBody ApproveNode approveNode) { + @Transactional(rollbackFor = Exception.class) + @ApiOperation(value = "瀹℃壒鑺傜偣") + public AjaxResult updateApproveNode(@RequestBody ApproveNode approveNode) throws IOException { approveNodeService.updateApproveNode(approveNode); return AjaxResult.success(); } diff --git a/src/main/java/com/ruoyi/approve/pojo/ApproveNode.java b/src/main/java/com/ruoyi/approve/pojo/ApproveNode.java index 300cc32..2ea7dd5 100644 --- a/src/main/java/com/ruoyi/approve/pojo/ApproveNode.java +++ b/src/main/java/com/ruoyi/approve/pojo/ApproveNode.java @@ -3,11 +3,15 @@ import java.io.Serializable; import java.time.LocalDateTime; import java.util.Date; +import java.util.List; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.sales.pojo.CommonFile; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -16,7 +20,18 @@ */ @Data @TableName("approve_node") +@ApiModel public class ApproveNode{ + + + @ApiModelProperty("闄勪欢id") + @TableField(exist = false) + private List<String> tempFileIds; + + @TableField(exist = false) + @ApiModelProperty("闄勪欢鍒楄〃") + private String url; + /** * */ diff --git a/src/main/java/com/ruoyi/approve/service/IApproveNodeService.java b/src/main/java/com/ruoyi/approve/service/IApproveNodeService.java index 71813da..41c84ec 100644 --- a/src/main/java/com/ruoyi/approve/service/IApproveNodeService.java +++ b/src/main/java/com/ruoyi/approve/service/IApproveNodeService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.approve.pojo.ApproveNode; +import java.io.IOException; import java.util.List; public interface IApproveNodeService extends IService<ApproveNode> { @@ -14,7 +15,7 @@ */ List<ApproveNode> details(String id); - void updateApproveNode(ApproveNode approveNode); + void updateApproveNode(ApproveNode approveNode) throws IOException; void delApproveNodeByApproveId(Long id); } diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java index 201ccb5..f7c98aa 100644 --- a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java +++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java @@ -8,13 +8,20 @@ import com.ruoyi.approve.pojo.ApproveNode; import com.ruoyi.approve.pojo.ApproveProcess; import com.ruoyi.approve.service.IApproveNodeService; +import com.ruoyi.common.enums.FileNameType; import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.other.service.impl.TempFileServiceImpl; 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 com.ruoyi.sales.service.impl.CommonFileServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import java.io.IOException; import java.time.LocalDateTime; import java.util.Comparator; import java.util.Date; @@ -30,6 +37,12 @@ private ApproveProcessMapper approveProcessMapper; @Autowired private SysUserMapper sysUserMapper; + + @Autowired + private TempFileServiceImpl tempFileService; + + @Autowired + private CommonFileMapper fileMapper; public ApproveProcess getApproveById(String id) { @@ -87,6 +100,12 @@ return list; } for (ApproveNode approveNode : list) { + List<CommonFile> commonFiles = fileMapper.selectList(new LambdaQueryWrapper<CommonFile>() + .eq(CommonFile::getCommonId, approveNode.getId()) + .eq(CommonFile::getType, FileNameType.ApproveNode.getValue())); + if(!CollectionUtils.isEmpty(commonFiles)){ + approveNode.setUrl(commonFiles.get(0).getUrl()); + } if(approveNode.getApproveNodeStatus() == 1){ continue; } @@ -96,7 +115,7 @@ return list; } - public void updateApproveProcessStatus(ApproveNode approveNode,Integer status) { + public void updateApproveProcessStatus(ApproveNode approveNode,Integer status) throws IOException { LambdaQueryWrapper<ApproveProcess> approveProcessLambdaQueryWrapper = new LambdaQueryWrapper<>(); approveProcessLambdaQueryWrapper.eq(ApproveProcess::getApproveId, approveNode.getApproveProcessId()) .eq(ApproveProcess::getApproveDelete, 0) @@ -117,10 +136,15 @@ approveProcess.setApproveUserCurrentName(approveNode1.getApproveNodeUser()); } approveProcessMapper.updateById(approveProcess); + + // 缁戝畾闄勪欢 + if(!CollectionUtils.isEmpty(approveNode.getTempFileIds()) && approveNode.getApproveNodeStatus() == 1){ + tempFileService.migrateTempFilesToFormal(approveNode.getId(), approveNode.getTempFileIds(), FileNameType.ApproveNode.getValue()); + } } @Override - public void updateApproveNode(ApproveNode approveNode) { + public void updateApproveNode(ApproveNode approveNode) throws IOException { // 瀹℃壒鑺傜偣鐘舵��:1鍚屾剰锛�2鎷掔粷锛�0灏氭湭瀹℃牳 switch (approveNode.getApproveNodeStatus()){ case 1: diff --git a/src/main/java/com/ruoyi/common/enums/FileNameType.java b/src/main/java/com/ruoyi/common/enums/FileNameType.java index 36b7735..ded6e9f 100644 --- a/src/main/java/com/ruoyi/common/enums/FileNameType.java +++ b/src/main/java/com/ruoyi/common/enums/FileNameType.java @@ -5,7 +5,10 @@ SALE(1), // 閿�鍞� PURCHASE(2), // 閲囪喘 INVOICE(3), //鍙戠エ - PURCHASELEDGER(4); // + PURCHASELEDGER(4), + MEASURING(5), //璁¢噺鍣ㄥ叿鍙拌处 + MEASURINGRecord(6),//璁¢噺鍣ㄥ叿鍙拌处璁板綍 + ApproveNode(7); //鍗忓悓瀹℃壒瀹℃牳 private final int value; diff --git a/src/main/java/com/ruoyi/common/utils/HackLoopTableRenderPolicy.java b/src/main/java/com/ruoyi/common/utils/HackLoopTableRenderPolicy.java new file mode 100644 index 0000000..4bb0daa --- /dev/null +++ b/src/main/java/com/ruoyi/common/utils/HackLoopTableRenderPolicy.java @@ -0,0 +1,154 @@ +/* + * Copyright 2014-2020 Sayi + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.ruoyi.common.utils; + +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.exception.RenderException; +import com.deepoove.poi.policy.RenderPolicy; +import com.deepoove.poi.render.compute.RenderDataCompute; +import com.deepoove.poi.render.processor.DocumentProcessor; +import com.deepoove.poi.resolver.TemplateResolver; +import com.deepoove.poi.template.ElementTemplate; +import com.deepoove.poi.template.MetaTemplate; +import com.deepoove.poi.template.run.RunTemplate; +import com.deepoove.poi.util.ReflectionUtils; +import com.deepoove.poi.util.TableTools; +import org.apache.poi.xwpf.usermodel.*; +import org.apache.xmlbeans.XmlCursor; +import org.apache.xmlbeans.XmlObject; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVMerge; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge; + +import java.util.Iterator; +import java.util.List; + +/** + * Hack for loop table row + * + * @author + * + */ +public class HackLoopTableRenderPolicy implements RenderPolicy { + + private String prefix; + private String suffix; + private boolean onSameLine; + + public HackLoopTableRenderPolicy() { + this(false); + } + + public HackLoopTableRenderPolicy(boolean onSameLine) { + this("[", "]", onSameLine); + } + + public HackLoopTableRenderPolicy(String prefix, String suffix) { + this(prefix, suffix, false); + } + + public HackLoopTableRenderPolicy(String prefix, String suffix, boolean onSameLine) { + this.prefix = prefix; + this.suffix = suffix; + this.onSameLine = onSameLine; + } + + @Override + public void render(ElementTemplate eleTemplate, Object data, XWPFTemplate template) { + RunTemplate runTemplate = (RunTemplate) eleTemplate; + XWPFRun run = runTemplate.getRun(); + try { + if (!TableTools.isInsideTable(run)) { + throw new IllegalStateException( + "The template tag " + runTemplate.getSource() + " must be inside a table"); + } + XWPFTableCell tagCell = (XWPFTableCell) ((XWPFParagraph) run.getParent()).getBody(); + XWPFTable table = tagCell.getTableRow().getTable(); + run.setText("", 0); + + int templateRowIndex = getTemplateRowIndex(tagCell); + if (null != data && data instanceof Iterable) { + Iterator<?> iterator = ((Iterable<?>) data).iterator(); + XWPFTableRow templateRow = table.getRow(templateRowIndex); + int insertPosition = templateRowIndex; + + TemplateResolver resolver = new TemplateResolver(template.getConfig().copy(prefix, suffix)); + boolean firstFlag = true; + while (iterator.hasNext()) { + insertPosition = templateRowIndex++; + XWPFTableRow nextRow = table.insertNewTableRow(insertPosition); + setTableRow(table, templateRow, insertPosition); + + // double set row + XmlCursor newCursor = templateRow.getCtRow().newCursor(); + newCursor.toPrevSibling(); + XmlObject object = newCursor.getObject(); + nextRow = new XWPFTableRow((CTRow) object, table); + if (!firstFlag) { + // update VMerge cells for non-first row + List<XWPFTableCell> tableCells = nextRow.getTableCells(); + for (XWPFTableCell cell : tableCells) { + CTTcPr tcPr = TableTools.getTcPr(cell); + CTVMerge vMerge = tcPr.getVMerge(); + if (null == vMerge) continue; + if (STMerge.RESTART == vMerge.getVal()) { + vMerge.setVal(STMerge.CONTINUE); + } + } + } else { + firstFlag = false; + } + setTableRow(table, nextRow, insertPosition); + + RenderDataCompute dataCompute = template.getConfig().getRenderDataComputeFactory() + .newCompute(iterator.next()); + List<XWPFTableCell> cells = nextRow.getTableCells(); + cells.forEach(cell -> { + List<MetaTemplate> templates = resolver.resolveBodyElements(cell.getBodyElements()); + new DocumentProcessor(template, resolver, dataCompute).process(templates); + }); + } + } + + table.removeRow(templateRowIndex); + afterloop(table, data); + } catch (Exception e) { + throw new RenderException("HackLoopTable for " + eleTemplate + "error: " + e.getMessage(), e); + } + } + + private int getTemplateRowIndex(XWPFTableCell tagCell) { + XWPFTableRow tagRow = tagCell.getTableRow(); + return onSameLine ? getRowIndex(tagRow) : (getRowIndex(tagRow) + 1); + } + + protected void afterloop(XWPFTable table, Object data) { + } + + @SuppressWarnings("unchecked") + private void setTableRow(XWPFTable table, XWPFTableRow templateRow, int pos) { + List<XWPFTableRow> rows = (List<XWPFTableRow>) ReflectionUtils.getValue("tableRows", table); + rows.set(pos, templateRow); + table.getCTTbl().setTrArray(pos, templateRow.getCtRow()); + } + + private int getRowIndex(XWPFTableRow row) { + List<XWPFTableRow> rows = row.getTable().getRows(); + return rows.indexOf(row); + } + +} diff --git a/src/main/java/com/ruoyi/compensationperformance/controller/CompensationPerformanceController.java b/src/main/java/com/ruoyi/compensationperformance/controller/CompensationPerformanceController.java new file mode 100644 index 0000000..1844b3e --- /dev/null +++ b/src/main/java/com/ruoyi/compensationperformance/controller/CompensationPerformanceController.java @@ -0,0 +1,69 @@ +package com.ruoyi.compensationperformance.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.compensationperformance.pojo.CompensationPerformance; +import com.ruoyi.compensationperformance.service.CompensationPerformanceService; +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 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 java.util.List; + +/** + * @author :yys + * @date : 2025/8/8 9:56 + */ +@RestController +@Api(tags = "钖叕缁╂晥") +@RequestMapping("/compensationPerformance") +public class CompensationPerformanceController extends BaseController { + + @Autowired + private CompensationPerformanceService compensationPerformanceService; + + @GetMapping("/listPage") + @Log(title = "钖叕缁╂晥-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER) + @ApiOperation("钖叕缁╂晥-鍒嗛〉鏌ヨ") + public AjaxResult listPage(Page page, CompensationPerformance compensationPerformance){ + IPage<CompensationPerformance> listPage = compensationPerformanceService.listPage(page, compensationPerformance); + return AjaxResult.success(listPage); + } + + @PostMapping("/add") + @Log(title = "钖叕缁╂晥-娣诲姞", businessType = BusinessType.INSERT) + @ApiOperation("钖叕缁╂晥-娣诲姞") + @Transactional(rollbackFor = Exception.class) + public AjaxResult add(@RequestBody CompensationPerformance compensationPerformance){ + boolean save = compensationPerformanceService.save(compensationPerformance); + return save ? AjaxResult.success("娣诲姞鎴愬姛") : AjaxResult.error("娣诲姞澶辫触"); + } + + @PostMapping("/update") + @Log(title = "钖叕缁╂晥-淇敼", businessType = BusinessType.UPDATE) + @ApiOperation("钖叕缁╂晥-淇敼") + @Transactional(rollbackFor = Exception.class) + public AjaxResult update(@RequestBody CompensationPerformance compensationPerformance){ + boolean update = compensationPerformanceService.updateById(compensationPerformance); + return update ? AjaxResult.success("淇敼鎴愬姛") : AjaxResult.error("淇敼澶辫触"); + } + + @DeleteMapping("/delete") + @Log(title = "钖叕缁╂晥-鍒犻櫎", businessType = BusinessType.DELETE) + @ApiOperation("钖叕缁╂晥-鍒犻櫎") + @Transactional(rollbackFor = Exception.class) + public AjaxResult delete(@RequestBody List<Long> ids){ + if(CollectionUtils.isEmpty(ids)) return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D"); + boolean delete = compensationPerformanceService.removeBatchByIds(ids); + return delete ? AjaxResult.success("鍒犻櫎鎴愬姛") : AjaxResult.error("鍒犻櫎澶辫触"); + } + + +} diff --git a/src/main/java/com/ruoyi/compensationperformance/mapper/CompensationPerformanceMapper.java b/src/main/java/com/ruoyi/compensationperformance/mapper/CompensationPerformanceMapper.java new file mode 100644 index 0000000..2526df0 --- /dev/null +++ b/src/main/java/com/ruoyi/compensationperformance/mapper/CompensationPerformanceMapper.java @@ -0,0 +1,23 @@ +package com.ruoyi.compensationperformance.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.compensationperformance.pojo.CompensationPerformance; +import org.apache.ibatis.annotations.Param; + +/** + * @author :yys + * @date : 2025/8/8 9:54 + */ +public interface CompensationPerformanceMapper extends BaseMapper<CompensationPerformance> { + + /** + * 鍒嗛〉鏌ヨ + * + * @param page + * @param compensationPerformance + * @return + */ + IPage<CompensationPerformance> listPage(Page page,@Param("req") CompensationPerformance compensationPerformance); +} diff --git a/src/main/java/com/ruoyi/compensationperformance/pojo/CompensationPerformance.java b/src/main/java/com/ruoyi/compensationperformance/pojo/CompensationPerformance.java new file mode 100644 index 0000000..5fb2c7a --- /dev/null +++ b/src/main/java/com/ruoyi/compensationperformance/pojo/CompensationPerformance.java @@ -0,0 +1,230 @@ +package com.ruoyi.compensationperformance.pojo; + +import com.baomidou.mybatisplus.annotation.*; +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.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * @author :yys + * @date : 2025/8/8 9:40 + */ +@Data +@TableName("compensation_performance") +@ApiModel +public class CompensationPerformance { + + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 鍛樺伐id + */ + @ApiModelProperty("鍛樺伐id") + @Excel(name = "鍛樺伐id") + private Long staffId; + + /** + * 濮撳悕 + */ + @ApiModelProperty("濮撳悕") + @Excel(name = "濮撳悕") + private String name; + + /** + * 钖祫鏈堜唤(鏌ヨ) + */ + @ApiModelProperty("钖祫鏈堜唤(鏌ヨ)") + @TableField(exist = false) + private String payDateStr; + + /** + * 钖祫鏈堜唤 + */ + @ApiModelProperty("钖祫鏈堜唤") + @Excel(name = "钖祫鏈堜唤", dateFormat = "yyyy-MM", width = 30) + @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM") + private Date payDate; + + + /** + * 搴斿嚭鍕ゅぉ鏁� + */ + @ApiModelProperty("搴斿嚭鍕ゅぉ鏁�") + @Excel(name = "搴斿嚭鍕ゅぉ鏁�") + private BigDecimal shouldAttendedNum; + + /** + * 瀹為檯鍑哄嫟澶╂暟 + */ + @ApiModelProperty("瀹為檯鍑哄嫟澶╂暟") + @Excel(name = "瀹為檯鍑哄嫟澶╂暟") + private BigDecimal actualAttendedNum; + + + /** + * 鍩烘湰宸ヨ祫 + */ + @ApiModelProperty("鍩烘湰宸ヨ祫") + @Excel(name = "鍩烘湰宸ヨ祫") + private BigDecimal basicSalary; + + /** + * 宀椾綅宸ヨ祫 + */ + @ApiModelProperty("宀椾綅宸ヨ祫") + @Excel(name = "宀椾綅宸ヨ祫") + private BigDecimal postSalary; + + /** + * 鍏ョ鑱岀己鍕ゆ墸娆� + */ + @ApiModelProperty("鍏ョ鑱岀己鍕ゆ墸娆�") + @Excel(name = "鍏ョ鑱岀己鍕ゆ墸娆�") + private BigDecimal deductionAbsenteeism; + + + /** + * 鐥呭亣鎵f + */ + @ApiModelProperty("鐥呭亣鎵f") + @Excel(name = "鐥呭亣鎵f") + private BigDecimal sickLeaveDeductions; + + /** + * 浜嬪亣鎵f + */ + @ApiModelProperty("浜嬪亣鎵f") + @Excel(name = "浜嬪亣鎵f") + private BigDecimal deductionPersonalLeave; + /** + * 蹇樿鎵撳崱鎵f + */ + @ApiModelProperty("蹇樿鎵撳崱鎵f") + @Excel(name = "蹇樿鎵撳崱鎵f") + private BigDecimal forgetClockDeduct; + + /** + * 缁╂晥寰楀垎 + */ + @ApiModelProperty("缁╂晥寰楀垎") + @Excel(name = "缁╂晥寰楀垎") + private BigDecimal performanceScore; + + /** + * 缁╂晥宸ヨ祫 + */ + @ApiModelProperty("缁╂晥宸ヨ祫") + @Excel(name = "缁╂晥宸ヨ祫") + private BigDecimal performancePay; + + + /** + * 搴斿彂鍚堣 + */ + @ApiModelProperty("搴斿彂鍚堣") + @Excel(name = "搴斿彂鍚堣") + private BigDecimal payableWages; + + /** + * 绀句繚涓汉 + */ + @ApiModelProperty("绀句繚涓汉") + @Excel(name = "绀句繚涓汉") + private BigDecimal socialSecurityIndividuals; + /** + * 绀句繚鍏徃 + */ + @ApiModelProperty("绀句繚鍏徃") + @Excel(name = "绀句繚鍏徃") + private BigDecimal socialSecurityCompanies; + + /** + * 绀句繚鍚堣 + */ + @ApiModelProperty("绀句繚鍚堣") + @Excel(name = "绀句繚鍚堣") + private BigDecimal socialSecurityTotal; + + /** + * 鍏Н閲戝悎璁� + */ + @ApiModelProperty("鍏Н閲戝悎璁�") + @Excel(name = "鍏Н閲戝悎璁�") + private BigDecimal providentFundTotal; + /** + * 鍏Н閲戝叕鍙� + */ + @ApiModelProperty("鍏Н閲戝叕鍙�") + @Excel(name = "鍏Н閲戝叕鍙�") + private BigDecimal providentFundCompany; + + /** + * 鍏Н閲戜釜浜� + */ + @ApiModelProperty("鍏Н閲戜釜浜�") + @Excel(name = "鍏Н閲戜釜浜�") + private BigDecimal providentFundIndividuals; + + /** + * 搴旂◣宸ヨ祫 + */ + @ApiModelProperty("搴旂◣宸ヨ祫") + @Excel(name = "搴旂◣宸ヨ祫") + private BigDecimal taxableWaget; + /** + * 涓汉鎵�寰楃◣ + */ + @ApiModelProperty("涓汉鎵�寰楃◣") + @Excel(name = "涓汉鎵�寰楃◣") + private BigDecimal personalIncomeTax; + + /** + * 瀹炲彂宸ヨ祫 + */ + @ApiModelProperty("瀹炲彂宸ヨ祫") + @Excel(name = "瀹炲彂宸ヨ祫") + private BigDecimal actualWages; + + /** + * 鍒涘缓鑰� + */ + @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/compensationperformance/service/CompensationPerformanceService.java b/src/main/java/com/ruoyi/compensationperformance/service/CompensationPerformanceService.java new file mode 100644 index 0000000..547fbf8 --- /dev/null +++ b/src/main/java/com/ruoyi/compensationperformance/service/CompensationPerformanceService.java @@ -0,0 +1,22 @@ +package com.ruoyi.compensationperformance.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.compensationperformance.pojo.CompensationPerformance; + +/** + * @author :yys + * @date : 2025/8/8 9:55 + */ +public interface CompensationPerformanceService extends IService<CompensationPerformance> { + + /** + * 鍒嗛〉鏌ヨ + * + * @param page + * @param compensationPerformance + * @return + */ + IPage<CompensationPerformance> listPage(Page page, CompensationPerformance compensationPerformance); +} diff --git a/src/main/java/com/ruoyi/compensationperformance/service/impl/CompensationPerformanceServiceImpl.java b/src/main/java/com/ruoyi/compensationperformance/service/impl/CompensationPerformanceServiceImpl.java new file mode 100644 index 0000000..2e0d744 --- /dev/null +++ b/src/main/java/com/ruoyi/compensationperformance/service/impl/CompensationPerformanceServiceImpl.java @@ -0,0 +1,30 @@ +package com.ruoyi.compensationperformance.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.compensationperformance.mapper.CompensationPerformanceMapper; +import com.ruoyi.compensationperformance.pojo.CompensationPerformance; +import com.ruoyi.compensationperformance.service.CompensationPerformanceService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @author :yys + * @date : 2025/8/8 9:55 + */ +@Service +@Slf4j +public class CompensationPerformanceServiceImpl extends ServiceImpl<CompensationPerformanceMapper, CompensationPerformance> implements CompensationPerformanceService { + + @Autowired + private CompensationPerformanceMapper compensationPerformanceMapper; + + + @Override + public IPage<CompensationPerformance> listPage(Page page, CompensationPerformance compensationPerformance) { + IPage<CompensationPerformance> compensationPerformanceIPage = compensationPerformanceMapper.listPage(page, compensationPerformance); + return compensationPerformanceIPage; + } +} 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..e9b191c --- /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; +import java.util.stream.Collectors; + +/** + * @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()) + .eq(CommonFile::getType, FileNameType.MEASURINGRecord.getValue()); + 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.setValid(measuringInstrumentLedgerRecord.getValid()); + measuringInstrumentLedger.setNextDate(new Date(measuringInstrumentLedger.getMostDate().getTime() + measuringInstrumentLedgerRecord.getValid() * 24 * 60 * 60 * 1000L)); + } + measuringInstrumentLedgerMapper.updateById(measuringInstrumentLedger); + } + measuringInstrumentLedgerRecordMapper.updateById(measuringInstrumentLedgerRecord); + // 璁板綍闄勪欢缁戝畾 + 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..c59f3c1 --- /dev/null +++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java @@ -0,0 +1,220 @@ +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); + List<Integer> types = new ArrayList<>(); + types.add(FileNameType.MEASURING.getValue()); + types.add(FileNameType.MEASURINGRecord.getValue()); + measuringInstrumentLedgerIPage.getRecords().forEach(item -> { + LambdaQueryWrapper<MeasuringInstrumentLedgerRecord> measuringInstrumentLedgerRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); + measuringInstrumentLedgerRecordLambdaQueryWrapper.eq(MeasuringInstrumentLedgerRecord::getMeasuringInstrumentLedgerId, item.getId()); + List<MeasuringInstrumentLedgerRecord> measuringInstrumentLedgerRecords = measuringInstrumentLedgerRecordMapper.selectList(measuringInstrumentLedgerRecordLambdaQueryWrapper); + List<Long> collect = new ArrayList<>(); + if(!CollectionUtils.isEmpty(measuringInstrumentLedgerRecords)){ + collect = measuringInstrumentLedgerRecords.stream().map(MeasuringInstrumentLedgerRecord::getId).collect(Collectors.toList()); + } + collect.add(item.getId()); + LambdaQueryWrapper<CommonFile> salesLedgerFileWrapper = new LambdaQueryWrapper<>(); + salesLedgerFileWrapper.in(CommonFile::getCommonId, collect) + .in(CommonFile::getType,types); + 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/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java b/src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java index f52330d..d43adf0 100644 --- a/src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java +++ b/src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java @@ -2,11 +2,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.other.mapper.TempFileMapper; import com.ruoyi.other.pojo.TempFile; import com.ruoyi.other.service.TempFileService; +import com.ruoyi.sales.mapper.CommonFileMapper; +import com.ruoyi.sales.pojo.CommonFile; import lombok.extern.slf4j.Slf4j; import org.apache.catalina.util.URLEncoder; +import org.apache.commons.io.FilenameUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; @@ -18,7 +22,10 @@ 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.List; import java.util.UUID; @@ -28,6 +35,12 @@ @Autowired private TempFileMapper tempFileMapper; + + @Autowired + private CommonFileMapper commonFileMapper; + + @Value("${file.upload-dir}") + private String uploadDir; @Value("${file.temp-dir}") private String tempDir; @@ -67,6 +80,77 @@ return tempFileRecord; } + /** + * 灏嗕复鏃舵枃浠惰縼绉诲埌姝e紡鐩綍 + * + * @param businessId 涓氬姟ID锛堥攢鍞彴璐D锛� + * @param tempFileIds 涓存椂鏂囦欢ID鍒楄〃 + * @throws IOException 鏂囦欢鎿嶄綔寮傚父 + */ + public 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); + } + } + } + @Scheduled(cron = "0 0 3 * * ?") // 姣忓ぉ鍑屾櫒3鐐规墽琛� public void cleanupExpiredTempFiles() { LambdaQueryWrapper<TempFile> wrapper = new LambdaQueryWrapper<>(); diff --git a/src/main/java/com/ruoyi/project/system/controller/SysLoginController.java b/src/main/java/com/ruoyi/project/system/controller/SysLoginController.java index c9f0e1e..b165f3e 100644 --- a/src/main/java/com/ruoyi/project/system/controller/SysLoginController.java +++ b/src/main/java/com/ruoyi/project/system/controller/SysLoginController.java @@ -73,7 +73,7 @@ * * @return 鐢ㄦ埛淇℃伅 */ - @GetMapping("getInfo") + @GetMapping("/getInfo") public AjaxResult getInfo() { LoginUser loginUser = SecurityUtils.getLoginUser(); diff --git a/src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java b/src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java index 6d09179..47bb1f9 100644 --- a/src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java +++ b/src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java @@ -149,6 +149,9 @@ @TableField(exist = false) private String issueDateEnd; + @TableField(exist = false) + private String supplierNameOrContractNo; + @ApiModelProperty(value = "褰曞叆鏃堕棿") private LocalDate enterDate; } diff --git a/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java index 7e76aa9..a6e152e 100644 --- a/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java +++ b/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java @@ -329,9 +329,13 @@ @Override public IPage<TicketRegistration> selectTicketRegistrationListPage(Page page, TicketRegistration ticketRegistration) { LambdaQueryWrapper<TicketRegistration> queryWrapper = new LambdaQueryWrapper<>(); - if (StringUtils.isNotBlank(ticketRegistration.getPurchaseContractNumber())) { - queryWrapper.like(TicketRegistration::getPurchaseContractNumber, ticketRegistration.getPurchaseContractNumber()) - .like(TicketRegistration::getSupplierName, ticketRegistration.getSupplierName()); + if (StringUtils.isNotBlank(ticketRegistration.getSupplierNameOrContractNo())) { + queryWrapper.and(wrapper -> wrapper + .like(TicketRegistration::getPurchaseContractNumber, ticketRegistration.getSupplierNameOrContractNo()) + .or() + .like(TicketRegistration::getSupplierName, ticketRegistration.getSupplierNameOrContractNo()) + .or() + .like(TicketRegistration::getSalesContractNo, ticketRegistration.getSupplierNameOrContractNo())); } if (!ObjectUtils.isEmpty(ticketRegistration.getIssueDateStart()) && !ObjectUtils.isEmpty(ticketRegistration.getIssueDateEnd())) { queryWrapper.between(TicketRegistration::getIssueDate, LocalDate.parse(ticketRegistration.getIssueDateStart(), DateTimeFormatter.ofPattern("yyyy-MM-dd")), LocalDate.parse(ticketRegistration.getIssueDateEnd(), DateTimeFormatter.ofPattern("yyyy-MM-dd"))); diff --git a/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java b/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java index 717044e..0daeba8 100644 --- a/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java +++ b/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.AjaxResult; +import com.ruoyi.quality.dto.QualityInspectDto; import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.quality.pojo.QualityInspectFile; import com.ruoyi.quality.pojo.QualityInspectParam; @@ -37,12 +38,12 @@ /** * 鏂板 - * @param qualityInspect + * @param qualityInspectDto * @return */ @PostMapping("/add") - public AjaxResult add(@RequestBody QualityInspect qualityInspect) { - return AjaxResult.success(qualityInspectService.add(qualityInspect)); + public AjaxResult add(@RequestBody QualityInspectDto qualityInspectDto) { + return AjaxResult.success(qualityInspectService.add(qualityInspectDto)); } /** @@ -72,17 +73,17 @@ */ @GetMapping("/{id}") public AjaxResult QualityInspectDetail(@PathVariable("id") Integer id) { - return AjaxResult.success(qualityInspectService.getById(id)); + return AjaxResult.success(qualityInspectService.getDetailById(id)); } /** * 淇敼 - * @param qualityInspect + * @param qualityInspectDto * @return */ @PostMapping("/update") - public AjaxResult update(@RequestBody QualityInspect qualityInspect) { - return AjaxResult.success(qualityInspectService.updateQualityInspect(qualityInspect)); + public AjaxResult update(@RequestBody QualityInspectDto qualityInspectDto) { + return AjaxResult.success(qualityInspectService.updateQualityInspect(qualityInspectDto)); } /** @@ -106,5 +107,23 @@ qualityInspectService.qualityInspectExport(response, qualityInspect); } + /** + * 鎻愪氦 + * @param id + * @return + */ + @PostMapping("/submit") + public AjaxResult submit(Integer id) { + return AjaxResult.success(qualityInspectService.submit(id)); + } + /** + * 涓嬭浇 + * @param response + * @param id + */ + @PostMapping("/down") + public void down(HttpServletResponse response,Integer id) { + qualityInspectService.down(response, id); + } } diff --git a/src/main/java/com/ruoyi/quality/controller/QualityTestStandardController.java b/src/main/java/com/ruoyi/quality/controller/QualityTestStandardController.java index 47701e2..04095f5 100644 --- a/src/main/java/com/ruoyi/quality/controller/QualityTestStandardController.java +++ b/src/main/java/com/ruoyi/quality/controller/QualityTestStandardController.java @@ -1,5 +1,6 @@ package com.ruoyi.quality.controller; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.quality.pojo.QualityTestStandard; @@ -89,5 +90,15 @@ qualityTestStandardService.qualityTestStandardListPageExport(response, qualityTestStandard); } + /** + * 璇︽儏 + * @param productId + * @return + */ + @GetMapping("/product/{productId}") + public AjaxResult QualityInspectDetail(@PathVariable("productId") Long productId) { + return AjaxResult.success(qualityTestStandardService.list(Wrappers.<QualityTestStandard>lambdaQuery().eq(QualityTestStandard::getProductId,productId))); + } + } diff --git a/src/main/java/com/ruoyi/quality/dto/QualityInspectDto.java b/src/main/java/com/ruoyi/quality/dto/QualityInspectDto.java new file mode 100644 index 0000000..9bd4ca9 --- /dev/null +++ b/src/main/java/com/ruoyi/quality/dto/QualityInspectDto.java @@ -0,0 +1,26 @@ +package com.ruoyi.quality.dto; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.dto.DateQueryDto; +import com.ruoyi.framework.aspectj.lang.annotation.Excel; +import com.ruoyi.quality.pojo.QualityInspect; +import com.ruoyi.quality.pojo.QualityInspectParam; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +//璐ㄩ噺妫�楠屾柊澧炵紪杈戝弬鏁� +@Data +public class QualityInspectDto extends QualityInspect implements Serializable { + + //妫�楠岄」鐩� + private List<QualityInspectParam> qualityInspectParams; + +} diff --git a/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java b/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java index 5aa0219..e1b2e6a 100644 --- a/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java +++ b/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java @@ -133,5 +133,10 @@ @TableField(fill = FieldFill.INSERT) private Long tenantId; + /** + * 绫诲埆(0:鏈彁浜�;1:宸叉彁浜�) + */ + private Integer inspectState; + } diff --git a/src/main/java/com/ruoyi/quality/pojo/QualityInspectParam.java b/src/main/java/com/ruoyi/quality/pojo/QualityInspectParam.java index 6d7bc97..91092d2 100644 --- a/src/main/java/com/ruoyi/quality/pojo/QualityInspectParam.java +++ b/src/main/java/com/ruoyi/quality/pojo/QualityInspectParam.java @@ -84,5 +84,9 @@ @TableField(fill = FieldFill.INSERT) private Long tenantId; + // 瀵煎嚭浣跨敤 + @TableField(select = false, exist = false) + private Integer index; + } diff --git a/src/main/java/com/ruoyi/quality/service/IQualityInspectService.java b/src/main/java/com/ruoyi/quality/service/IQualityInspectService.java index 73396a4..1dcba08 100644 --- a/src/main/java/com/ruoyi/quality/service/IQualityInspectService.java +++ b/src/main/java/com/ruoyi/quality/service/IQualityInspectService.java @@ -3,6 +3,7 @@ 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.quality.dto.QualityInspectDto; import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.staff.pojo.StaffJoinLeaveRecord; import com.ruoyi.staff.pojo.StaffOnJob; @@ -13,11 +14,17 @@ public interface IQualityInspectService extends IService<QualityInspect> { - int add(QualityInspect qualityInspect); + int add(QualityInspectDto qualityInspectDto); - int updateQualityInspect(QualityInspect qualityInspect); + int updateQualityInspect(QualityInspectDto qualityInspectDto); IPage<QualityInspect> qualityInspectListPage(Page page, QualityInspect qualityInspect); void qualityInspectExport(HttpServletResponse response, QualityInspect qualityInspect); + + QualityInspectDto getDetailById(Integer id); + + int submit(Integer id); + + void down(HttpServletResponse response, Integer id); } diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java index 22055fc..4bb8185 100644 --- a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java +++ b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java @@ -2,17 +2,25 @@ import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; import com.ruoyi.common.exception.base.BaseException; +import com.ruoyi.common.utils.HackLoopTableRenderPolicy; import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.quality.dto.QualityInspectDto; import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.quality.mapper.QualityInspectParamMapper; import com.ruoyi.quality.mapper.QualityTestStandardMapper; +import com.ruoyi.quality.mapper.QualityUnqualifiedMapper; import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.quality.pojo.QualityInspectParam; import com.ruoyi.quality.pojo.QualityTestStandard; +import com.ruoyi.quality.pojo.QualityUnqualified; import com.ruoyi.quality.service.IQualityInspectParamService; import com.ruoyi.quality.service.IQualityInspectService; import com.ruoyi.staff.mapper.StaffJoinLeaveRecordMapper; @@ -26,6 +34,10 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URLEncoder; +import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; @@ -40,48 +52,112 @@ private QualityTestStandardMapper qualityTestStandardMapper; + private QualityUnqualifiedMapper qualityUnqualifiedMapper; + @Override - public int add(QualityInspect qualityInspect) { - String[] ignoreProperties = {"id"};//鎺掗櫎id灞炴�� - //鏍规嵁浜у搧id鏌ヨ鎸囨爣缁存姢瀵瑰簲鏂板妫�楠屽弬鏁� - List<QualityTestStandard> qualityTestStandards = qualityTestStandardMapper.selectList(Wrappers.<QualityTestStandard>lambdaQuery() - .eq(QualityTestStandard::getProductId, qualityInspect.getProductId())); - if (qualityTestStandards.size()>0){ - qualityInspectMapper.insert(qualityInspect); - List<QualityInspectParam> qualityInspectParams = qualityTestStandards.stream().map(qualityTestStandard -> { - QualityInspectParam qualityInspectParam = new QualityInspectParam(); - BeanUtils.copyProperties(qualityTestStandard, qualityInspectParam,ignoreProperties); - qualityInspectParam.setInspectId(qualityInspect.getId()); - return qualityInspectParam; - }).collect(Collectors.toList()); - qualityInspectParamService.saveBatch(qualityInspectParams); - }else{ - throw new BaseException("璇ヤ骇鍝佹病鏈夌淮鎶ゆ楠屾寚鏍�,璇锋鏌�!!!!!!!!"); + public int add(QualityInspectDto qualityInspectDto) { + QualityInspect qualityInspect = new QualityInspect(); + BeanUtils.copyProperties(qualityInspectDto,qualityInspect); + qualityInspect.setInspectState(0);//榛樿鏈彁浜� + qualityInspectMapper.insert(qualityInspect); + for (QualityInspectParam qualityInspectParam : qualityInspectDto.getQualityInspectParams()) { + qualityInspectParam.setInspectId(qualityInspect.getId()); } + qualityInspectParamService.saveBatch(qualityInspectDto.getQualityInspectParams()); return 0; } @Override - public int updateQualityInspect(QualityInspect qualityInspect) { - String[] ignoreProperties = {"id"};//鎺掗櫎id灞炴�� - //鍏堝垹闄ゆ墍鏈夋楠屽弬鏁板啀鏂板 - qualityInspectParamService.remove(Wrappers.<QualityInspectParam>lambdaQuery() - .eq(QualityInspectParam::getInspectId,qualityInspect.getId())); - //鏍规嵁浜у搧id鏌ヨ鎸囨爣缁存姢瀵瑰簲鏂板妫�楠屽弬鏁� - List<QualityTestStandard> qualityTestStandards = qualityTestStandardMapper.selectList(Wrappers.<QualityTestStandard>lambdaQuery() - .eq(QualityTestStandard::getProductId, qualityInspect.getProductId())); - if (qualityTestStandards.size()>0){ - List<QualityInspectParam> qualityInspectParams = qualityTestStandards.stream().map(qualityTestStandard -> { - QualityInspectParam qualityInspectParam = new QualityInspectParam(); - BeanUtils.copyProperties(qualityTestStandard, qualityInspectParam,ignoreProperties); - qualityInspectParam.setInspectId(qualityInspect.getId()); - return qualityInspectParam; - }).collect(Collectors.toList()); - qualityInspectParamService.saveBatch(qualityInspectParams); - }else{ - throw new BaseException("璇ヤ骇鍝佹病鏈夌淮鎶ゆ楠屾寚鏍�,璇锋鏌�!!!!!!!!"); + public QualityInspectDto getDetailById(Integer id) { + QualityInspect qualityInspect = qualityInspectMapper.selectById(id); + List<QualityInspectParam> qualityInspectParams = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, id)); + QualityInspectDto qualityInspectDto = new QualityInspectDto(); + BeanUtils.copyProperties(qualityInspect,qualityInspectDto); + qualityInspectDto.setQualityInspectParams(qualityInspectParams); + return qualityInspectDto; + } + + //鎻愪氦 + @Override + public int submit(Integer id) { + QualityInspect qualityInspect = qualityInspectMapper.selectById(id); + /*鍒ゆ柇涓嶅悎鏍�*/ + if (ObjectUtils.isNotNull(qualityInspect.getCheckResult()) && qualityInspect.getCheckResult().equals("涓嶅悎鏍�")){ + QualityUnqualified qualityUnqualified = new QualityUnqualified(); + BeanUtils.copyProperties(qualityInspect,qualityUnqualified); + qualityUnqualified.setInspectState(0);//寰呭鐞� + List<QualityInspectParam> inspectParams = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, id)); + String text = inspectParams.stream().map(QualityInspectParam::getParameterItem).collect(Collectors.joining(",")); + qualityUnqualified.setDefectivePhenomena(text+"杩欎簺鎸囨爣涓瓨鍦ㄤ笉鍚堟牸");//涓嶅悎鏍肩幇璞� + qualityUnqualifiedMapper.insert(qualityUnqualified); } - return qualityInspectMapper.updateById(qualityInspect); + qualityInspect.setInspectState(1);//宸叉彁浜� + return qualityInspectMapper.updateById(qualityInspect); + } + + /*鐢熸垚妫�楠屾姤鍛�*/ + @Override + public void down(HttpServletResponse response, Integer id) { + QualityInspect inspect = qualityInspectMapper.selectById(id); + String inspectType=""; + switch (inspect.getInspectType()){ + case 0: + inspectType="鍘熸潗鏂欐楠�"; + break; + case 1: + inspectType="杩囩▼妫�楠�"; + break; + case 2: + inspectType="鍑哄巶妫�楠�"; + break; + } + List<QualityInspectParam> paramList = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, id)); + int index = 1; + for (QualityInspectParam detail : paramList) { + detail.setIndex(index); + index++; + } + InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx"); + Configure configure = Configure.builder() + .bind("paramList", new HackLoopTableRenderPolicy()) + .build(); + String finalInspectType = inspectType; + XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( + new HashMap<String, Object>() {{ + put("inspect", inspect); + put("inspectType", finalInspectType); + put("paramList", paramList); + }}); + + try { + response.setContentType("application/msword"); + String fileName = URLEncoder.encode( + "妫�楠屾姤鍛�", "UTF-8"); + response.setHeader("Content-disposition", + "attachment;filename=" + fileName + ".docx"); + OutputStream os = response.getOutputStream(); + template.write(os); + os.flush(); + os.close(); + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("瀵煎嚭澶辫触"); + } + } + + @Override + public int updateQualityInspect(QualityInspectDto qualityInspectDto) { + if (qualityInspectDto.getQualityInspectParams().size()>0) { + qualityInspectParamService.remove(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId,qualityInspectDto.getId())); + for (QualityInspectParam qualityInspectParam : qualityInspectDto.getQualityInspectParams()) { + qualityInspectParam.setInspectId(qualityInspectDto.getId()); + } + qualityInspectParamService.saveBatch(qualityInspectDto.getQualityInspectParams()); + } + QualityInspect qualityInspect = new QualityInspect(); + BeanUtils.copyProperties(qualityInspectDto,qualityInspect); + return qualityInspectMapper.updateById(qualityInspect); } @Override @@ -106,4 +182,6 @@ } } + + } 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/account/AccountExpenseMapper.xml b/src/main/resources/mapper/account/AccountExpenseMapper.xml index 909f372..fff6020 100644 --- a/src/main/resources/mapper/account/AccountExpenseMapper.xml +++ b/src/main/resources/mapper/account/AccountExpenseMapper.xml @@ -56,4 +56,18 @@ group by expense_type </select> + <select id="report1" resultType="java.math.BigDecimal"> + SELECT + sum(expense_money) account + FROM account_expense ai + where + expense_type=#{dictValue} + <if test="dateQueryDto.entryDateStart != null and dateQueryDto.entryDateStart != '' "> + AND expense_date >= DATE_FORMAT(#{dateQueryDto.entryDateStart},'%Y-%m-%d') + </if> + <if test="dateQueryDto.entryDateEnd != null and dateQueryDto.entryDateEnd != '' "> + AND expense_date <= DATE_FORMAT(#{dateQueryDto.entryDateEnd},'%Y-%m-%d') + </if> + </select> + </mapper> diff --git a/src/main/resources/mapper/account/AccountIncomeMapper.xml b/src/main/resources/mapper/account/AccountIncomeMapper.xml index bfb6d73..1cb49b9 100644 --- a/src/main/resources/mapper/account/AccountIncomeMapper.xml +++ b/src/main/resources/mapper/account/AccountIncomeMapper.xml @@ -56,4 +56,17 @@ </if> group by income_type </select> + <select id="report1" resultType="java.math.BigDecimal"> + SELECT + sum(income_money) account + FROM account_income ai + where + income_type=#{dictValue} + <if test="dateQueryDto.entryDateStart != null and dateQueryDto.entryDateStart != '' "> + AND income_date >= DATE_FORMAT(#{dateQueryDto.entryDateStart},'%Y-%m-%d') + </if> + <if test="dateQueryDto.entryDateEnd != null and dateQueryDto.entryDateEnd != '' "> + AND income_date <= DATE_FORMAT(#{dateQueryDto.entryDateEnd},'%Y-%m-%d') + </if> + </select> </mapper> diff --git a/src/main/resources/mapper/approve/ApproveProcessMapper.xml b/src/main/resources/mapper/approve/ApproveProcessMapper.xml index 995ae0c..0ab3d21 100644 --- a/src/main/resources/mapper/approve/ApproveProcessMapper.xml +++ b/src/main/resources/mapper/approve/ApproveProcessMapper.xml @@ -32,7 +32,7 @@ <if test="req.approveId != null and req.approveId != ''"> and approve_id like concat('%',#{req.approveId},'%') </if> - <if test="req.approveStatus != null and req.approveStatus != ''"> + <if test="req.approveStatus != null or req.approveStatus == 0"> and approve_status = #{req.approveStatus} </if> </select> diff --git a/src/main/resources/mapper/compensationperformance/CompensationPerformanceMapper.xml b/src/main/resources/mapper/compensationperformance/CompensationPerformanceMapper.xml new file mode 100644 index 0000000..f15dd8c --- /dev/null +++ b/src/main/resources/mapper/compensationperformance/CompensationPerformanceMapper.xml @@ -0,0 +1,16 @@ +<?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.compensationperformance.mapper.CompensationPerformanceMapper"> + + <select id="listPage" resultType="com.ruoyi.compensationperformance.pojo.CompensationPerformance"> + select * from compensation_performance + <where> + <if test="req.name != null and req.name != ''"> + and `name` like concat('%',#{req.name},'%') + </if> + <if test="req.payDateStr != null and req.payDateStr != ''"> + and pay_date like concat('%',#{req.payDateStr},'%') + </if> + </where> + </select> +</mapper> \ 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 diff --git a/src/main/resources/static/report-template.docx b/src/main/resources/static/report-template.docx new file mode 100644 index 0000000..0bc9746 --- /dev/null +++ b/src/main/resources/static/report-template.docx Binary files differ -- Gitblit v1.9.3