src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
@@ -7,10 +7,7 @@ import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.procurementrecord.dto.ProcurementAddDto; import com.ruoyi.procurementrecord.dto.ProcurementDto; import com.ruoyi.procurementrecord.dto.ProcurementPageDto; import com.ruoyi.procurementrecord.dto.ProcurementUpdateDto; import com.ruoyi.procurementrecord.dto.*; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import com.ruoyi.purchase.dto.InvoicePurchaseReportDto; import com.ruoyi.quality.pojo.QualityInspect; @@ -56,6 +53,13 @@ return AjaxResult.success(procurementRecordService.updatePro(procurementDto)); } @PostMapping("/updateManagement") @Log(title = "éè´å ¥åº-åºåå°è´¦-ä¿®æ¹", businessType = BusinessType.UPDATE) @Transactional public AjaxResult updateManagement(@RequestBody ProcurementManagementUpdateDto procurementDto) { return AjaxResult.success(procurementRecordService.updateManagement(procurementDto)); } @PostMapping("/del") @Log(title = "éè´å ¥åº-å ¥åºç®¡ç-å é¤å ¥åº", businessType = BusinessType.DELETE) @Transactional @@ -70,6 +74,22 @@ return AjaxResult.success(result); } @GetMapping("/listPageCopy") @Log(title = "éè´å ¥åº-å ¥åºç®¡ç-å ¥åºæ¥è¯¢", businessType = BusinessType.OTHER) public AjaxResult listPageCopy(Page page, ProcurementPageDto procurementDto) { IPage<ProcurementPageDtoCopy> result =procurementRecordService.listPageCopy(page, procurementDto); return AjaxResult.success(result); } /** * å¯¼åº * @param response */ @PostMapping("/exportCopy") public void exportCopy(HttpServletResponse response) { procurementRecordService.exportCopy(response); } /** * å¯¼åº * @param response src/main/java/com/ruoyi/procurementrecord/dto/ProcurementManagementUpdateDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ package com.ruoyi.procurementrecord.dto; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; /** * @author :yys * @date : 2025/7/9 9:41 */ @Data public class ProcurementManagementUpdateDto { private String createBy; private Long createUser; private String createTime; private String entryDate; private Integer id; } src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
@@ -16,6 +16,8 @@ private Integer id; private Long createUser; /** * å ¥åºæ¹æ¬¡ */ @@ -45,11 +47,18 @@ /** * åºå ¥åºæ¶é´ */ @Excel(name = "å ¥åºæ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") // @Excel(name = "å ¥åºæ¶é´") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private LocalDateTime createTime; /** * åºå ¥åºæ¶é´ */ @Excel(name = "å ¥åºæ¶é´") private String time; /** * åºå ¥åºç¨æ· */ @Excel(name = "å ¥åºäºº") src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,128 @@ package com.ruoyi.procurementrecord.dto; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; /** * @author :yys * @date : 2025/7/9 10:34 */ @Data public class ProcurementPageDtoCopy { private Integer id; private Long createUser; /** * å ¥åºæ¹æ¬¡ */ @Excel(name = "å ¥åºæ¹æ¬¡") private String inboundBatches; /** * ååå· */ private String purchaseContractNumber; private String salesLedgerProductId; /** * åºå ¥åºæ°é */ @Excel(name = "å ¥åºæ°é") private BigDecimal inboundNum; /** * å¾ åºåºæ°é */ @Excel(name = "å¾ åºåºæ°é") private BigDecimal inboundNum0; /** * åºå ¥åºæ¶é´ */ // @Excel(name = "å ¥åºæ¶é´") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private LocalDateTime createTime; /** * åºå ¥åºæ¶é´ */ @Excel(name = "å ¥åºæ¶é´") private String cTime; /** * åºå ¥åºæ¶é´ */ // @Excel(name = "åºåæ¶é´") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private LocalDateTime updateTime; /** * åºå ¥åºæ¶é´ */ @Excel(name = "åºåæ¶é´") private String uTime; /** * åºå ¥åºç¨æ· */ @Excel(name = "å ¥åºäºº") private String createBy; /** * ä¾åºååç§° */ @Excel(name = "ä¾åºååç§°") private String supplierName; /** * 产å大类 */ @Excel(name = "产å大类") private String productCategory; /** * è§æ ¼åå· */ @Excel(name = "è§æ ¼åå·") private String specificationModel; /** * åä½ */ @Excel(name = "åä½") private String unit; /** * ç¨ç */ @Excel(name = "ç¨ç(%)") private BigDecimal taxRate; /** * å«ç¨åä»· */ @Excel(name = "å«ç¨åä»·") private BigDecimal taxInclusiveUnitPrice; /** * å«ç¨æ»ä»· */ @Excel(name = "å«ç¨æ»ä»·") private BigDecimal taxInclusiveTotalPrice; /** * ä¸å«ç¨æ»ä»· */ @Excel(name = "ä¸å«ç¨æ»ä»·") private BigDecimal taxExclusiveTotalPrice; } src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java
@@ -25,10 +25,13 @@ /** * åºå ¥åºæ¶é´ */ @Excel(name = "åºåºæ¶é´") // @Excel(name = "åºåºæ¶é´") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime createTime; @Excel(name = "åºåºæ¶é´") private String time; /** * åºå ¥åºç¨æ· */ src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordMapper.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.procurementrecord.dto.ProcurementDto; import com.ruoyi.procurementrecord.dto.ProcurementPageDto; import com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy; import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage; import org.apache.ibatis.annotations.Param; @@ -25,5 +26,9 @@ IPage<ProcurementPageDto> listPage(Page page,@Param("req") ProcurementPageDto procurementDto); IPage<ProcurementPageDtoCopy> listPageCopy(Page page, @Param("req") ProcurementPageDto procurementDto); List<ProcurementPageDtoCopy> listCopy(); List<ProcurementPageDto> list(); } src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
@@ -3,10 +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.procurementrecord.dto.ProcurementAddDto; import com.ruoyi.procurementrecord.dto.ProcurementDto; import com.ruoyi.procurementrecord.dto.ProcurementPageDto; import com.ruoyi.procurementrecord.dto.ProcurementUpdateDto; import com.ruoyi.procurementrecord.dto.*; import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage; import javax.servlet.http.HttpServletResponse; @@ -23,9 +20,15 @@ IPage<ProcurementPageDto> listPage(Page page, ProcurementPageDto procurementDto); IPage<ProcurementPageDtoCopy> listPageCopy(Page page, ProcurementPageDto procurementDto); int updatePro(ProcurementUpdateDto procurementDto); int deletePro(ProcurementUpdateDto procurementDto); void export(HttpServletResponse response); int updateManagement(ProcurementManagementUpdateDto procurementDto); void exportCopy(HttpServletResponse response); } src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.security.LoginUser; @@ -13,7 +14,10 @@ import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage; import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.pojo.SalesLedgerProduct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -22,6 +26,7 @@ import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.stream.Collectors; @@ -120,8 +125,105 @@ @Override public void export(HttpServletResponse response) { List<ProcurementPageDto> list =procurementRecordMapper.list(); // 计ç®å¾ å ¥åºæ°é // æ¥è¯¢éè´è®°å½å·²å ¥åºæ°é List<Integer> collect = list.stream().map(ProcurementPageDto::getId).collect(Collectors.toList()); if(CollectionUtils.isEmpty( collect)){ return; } LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect); List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper); if(CollectionUtils.isEmpty( procurementRecords)){ return; } for (ProcurementPageDto dto : list) { // æ ¹æ®éè´å°è´¦IDçé对åºçåºåºè®°å½ List<ProcurementRecordOut> collect1 = procurementRecords.stream() .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId())) .collect(Collectors.toList()); // å¦ææ²¡æç¸å ³çåºåºè®°å½ï¼è·³è¿è¯¥æ¡æ°æ® if(CollectionUtils.isEmpty(collect1)){ dto.setInboundNum0(dto.getInboundNum()); continue; } // 计ç®å·²åºåºæ°éæ»åï¼å¹¶è®¾ç½®å¾ åºåºæ°é BigDecimal totalInboundNum = collect1.stream() .map(ProcurementRecordOut::getInboundNum) .reduce(BigDecimal.ZERO, BigDecimal::add); // å¾ åºåºæ°é = æ»æ°é - å·²åºåºæ°é dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum)); } ExcelUtil<ProcurementPageDto> util = new ExcelUtil<ProcurementPageDto>(ProcurementPageDto.class); util.exportExcel(response, list, "å ¥åºå°è´¦"); } private final SysUserMapper sysUserMapper; @Override public int updateManagement(ProcurementManagementUpdateDto procurementDto) { LoginUser loginUser = SecurityUtils.getLoginUser(); SysUser sysUser = sysUserMapper.selectUserById(procurementDto.getCreateUser()); if(sysUser == null){ throw new RuntimeException("å ¥åºäººä¸åå¨"); } DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String entryDateStr = procurementDto.getEntryDate() + " 00:00:00"; String createTimeStr = procurementDto.getCreateTime() + " 00:00:00"; ProcurementRecordStorage procurementRecordStorageById = getProcurementRecordById(procurementDto.getId()); procurementRecordStorageById.setCreateBy(sysUser.getNickName()); procurementRecordStorageById.setCreateUser(sysUser.getUserId()); procurementRecordStorageById.setUpdateTime(LocalDateTime.parse(entryDateStr,df)); procurementRecordStorageById.setUpdateUser(loginUser.getUserId()); procurementRecordStorageById.setCreateTime(LocalDateTime.parse(createTimeStr,df)); procurementRecordMapper.updateById(procurementRecordStorageById); return 0; } @Override public void exportCopy(HttpServletResponse response) { List<ProcurementPageDtoCopy> list =procurementRecordMapper.listCopy(); // 计ç®å¾ å ¥åºæ°é // æ¥è¯¢éè´è®°å½å·²å ¥åºæ°é List<Integer> collect = list.stream().map(ProcurementPageDtoCopy::getId).collect(Collectors.toList()); if(CollectionUtils.isEmpty( collect)){ ExcelUtil<ProcurementPageDtoCopy> util = new ExcelUtil<ProcurementPageDtoCopy>(ProcurementPageDtoCopy.class); util.exportExcel(response, list, "åºå管ç"); return; } LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect); List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper); if(CollectionUtils.isEmpty( procurementRecords)){ ExcelUtil<ProcurementPageDtoCopy> util = new ExcelUtil<ProcurementPageDtoCopy>(ProcurementPageDtoCopy.class); util.exportExcel(response, list, "åºå管ç"); return; } for (ProcurementPageDtoCopy dto : list) { // æ ¹æ®éè´å°è´¦IDçé对åºçåºåºè®°å½ List<ProcurementRecordOut> collect1 = procurementRecords.stream() .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId())) .collect(Collectors.toList()); // å¦ææ²¡æç¸å ³çåºåºè®°å½ï¼è·³è¿è¯¥æ¡æ°æ® if(CollectionUtils.isEmpty(collect1)){ dto.setInboundNum0(dto.getInboundNum()); continue; } // 计ç®å·²åºåºæ°éæ»åï¼å¹¶è®¾ç½®å¾ åºåºæ°é BigDecimal totalInboundNum = collect1.stream() .map(ProcurementRecordOut::getInboundNum) .reduce(BigDecimal.ZERO, BigDecimal::add); // å¾ åºåºæ°é = æ»æ°é - å·²åºåºæ°é dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum)); } ExcelUtil<ProcurementPageDtoCopy> util = new ExcelUtil<ProcurementPageDtoCopy>(ProcurementPageDtoCopy.class); util.exportExcel(response, list, "åºå管ç"); } @Override @@ -197,4 +299,43 @@ return procurementPageDtoIPage; } @Override public IPage<ProcurementPageDtoCopy> listPageCopy(Page page, ProcurementPageDto procurementDto) { IPage<ProcurementPageDtoCopy> procurementPageDtoCopyIPage = procurementRecordMapper.listPageCopy(page, procurementDto); List<ProcurementPageDtoCopy> procurementPageDtoCopyList = procurementPageDtoCopyIPage.getRecords(); // 计ç®å¾ å ¥åºæ°é // æ¥è¯¢éè´è®°å½å·²å ¥åºæ°é List<Integer> collect = procurementPageDtoCopyList.stream().map(ProcurementPageDtoCopy::getId).collect(Collectors.toList()); if(CollectionUtils.isEmpty( collect)){ return procurementPageDtoCopyIPage; } LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect); List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper); if(CollectionUtils.isEmpty( procurementRecords)){ return procurementPageDtoCopyIPage; } for (ProcurementPageDtoCopy dto : procurementPageDtoCopyList) { // æ ¹æ®éè´å°è´¦IDçé对åºçåºåºè®°å½ List<ProcurementRecordOut> collect1 = procurementRecords.stream() .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId())) .collect(Collectors.toList()); // å¦ææ²¡æç¸å ³çåºåºè®°å½ï¼è·³è¿è¯¥æ¡æ°æ® if(CollectionUtils.isEmpty(collect1)){ dto.setInboundNum0(dto.getInboundNum()); continue; } // 计ç®å·²åºåºæ°éæ»åï¼å¹¶è®¾ç½®å¾ åºåºæ°é BigDecimal totalInboundNum = collect1.stream() .map(ProcurementRecordOut::getInboundNum) .reduce(BigDecimal.ZERO, BigDecimal::add); // å¾ åºåºæ°é = æ»æ°é - å·²åºåºæ°é dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum)); } return procurementPageDtoCopyIPage; } } src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -33,6 +33,7 @@ t2.product_category, t1.id, t1.sales_ledger_product_id, t1.create_user, t2.specification_model, t2.unit, t2.tax_rate, @@ -43,6 +44,7 @@ t1.inbound_num, t1.inbound_num as inboundNum0, t1.create_time, t1.update_time, t1.create_by from procurement_record_storage t1 left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id @@ -71,6 +73,63 @@ t1.inbound_batches, t1.inbound_num, t1.create_time, t1.create_time as time, t1.create_by from procurement_record_storage t1 left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id left join purchase_ledger t3 on t3.id = t2.sales_ledger_id </select> <select id="listPageCopy" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy"> select t3.supplier_name, t3.purchase_contract_number, t2.product_category, t1.id, t1.sales_ledger_product_id, t1.create_user, t2.specification_model, t2.unit, t2.tax_rate, t2.tax_inclusive_unit_price, t2.tax_inclusive_total_price, t2.tax_exclusive_total_price, t1.inbound_batches, t1.inbound_num, t1.inbound_num as inboundNum0, t1.create_time, t1.update_time, t1.create_by from procurement_record_storage t1 left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id left join purchase_ledger t3 on t3.id = t2.sales_ledger_id <where> 1 = 1 <if test="req.supplierName != null and req.supplierName != ''"> and t3.supplier_name like concat('%',#{req.supplierName},'%') </if> </where> </select> <select id="listCopy" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy"> select t3.supplier_name, t3.purchase_contract_number, t2.product_category, t1.id, t1.sales_ledger_product_id, t1.create_user, t2.specification_model, t2.unit, t2.tax_rate, t2.tax_inclusive_unit_price, t2.tax_inclusive_total_price, t2.tax_exclusive_total_price, t1.inbound_batches, t1.inbound_num, t1.inbound_num as inboundNum0, t1.create_time, t1.update_time, t1.create_time as cTime, t1.update_time as uTime, t1.create_by from procurement_record_storage t1 left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
@@ -39,6 +39,7 @@ t2.tax_exclusive_total_price, t1.inbound_num, t1.create_time, t1.create_time as time, t1.create_by from procurement_record_out t1 left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id