| src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/sales/dto/LossProductModelDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/sales/SalesLedgerProductMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -9,6 +9,7 @@ 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.framework.web.domain.R; import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.dto.SalesLedgerDto; @@ -284,4 +285,10 @@ return iPage; } @ApiOperation("æ¥è¯¢éå®å°è´¦æ¶èç©æä¿¡æ¯") @GetMapping("/getSalesLedgerWithProducts") public R getSalesLedgerWithProductsLoss(Long salesLedgerId) { return R.ok(salesLedgerService.getSalesLedgerWithProductsLoss(salesLedgerId)); } } src/main/java/com/ruoyi/sales/dto/LossProductModelDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.ruoyi.sales.dto; import lombok.Data; import java.math.BigDecimal; @Data public class LossProductModelDto { private String productName; private String model; private String unit; //æ¶èæ»é private BigDecimal lossNum; //åä½ç¨é private BigDecimal unitQuantity; //å个ç¨é private BigDecimal singleQuantity; } src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java
@@ -3,11 +3,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.config.MyBaseMapper; import com.ruoyi.production.dto.ProductStructureDto; import com.ruoyi.purchase.dto.ProcurementBusinessSummaryDto; import com.ruoyi.sales.dto.LossProductModelDto; import com.ruoyi.sales.dto.SalesLedgerProductDto; import com.ruoyi.sales.pojo.SalesLedgerProduct; import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; import java.util.List; /** @@ -26,4 +29,6 @@ IPage<SalesLedgerProductDto> listPagePurchaseLedger(Page page,@Param("req") SalesLedgerProductDto salesLedgerProduct); IPage<ProcurementBusinessSummaryDto> procurementBusinessSummaryListPage(Page page,@Param("req") ProcurementBusinessSummaryDto procurementBusinessSummaryDto); List<LossProductModelDto> selectProductBomStructure(@Param("salesLedegerId") Long salesLedegerId); } src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.sales.dto.LossProductModelDto; import com.ruoyi.sales.dto.MonthlyAmountDto; import com.ruoyi.sales.dto.SalesLedgerDto; import com.ruoyi.sales.pojo.SalesLedger; @@ -39,4 +40,7 @@ IPage<SalesLedger> selectSalesLedgerListPage(Page page, SalesLedgerDto salesLedgerDto); AjaxResult importData(MultipartFile file); List<LossProductModelDto> getSalesLedgerWithProductsLoss(Long salesLedgerId); } src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -35,10 +35,7 @@ import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.sales.dto.MonthlyAmountDto; import com.ruoyi.sales.dto.SalesLedgerDto; import com.ruoyi.sales.dto.SalesLedgerImportDto; import com.ruoyi.sales.dto.SalesLedgerProductImportDto; import com.ruoyi.sales.dto.*; import com.ruoyi.sales.mapper.*; import com.ruoyi.sales.pojo.*; import com.ruoyi.sales.service.ISalesLedgerProductService; @@ -234,8 +231,8 @@ // æ¥è¯¢åå§æ°æ® LambdaQueryWrapper<SalesLedger> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.select(SalesLedger::getCustomerId, SalesLedger::getCustomerName, SalesLedger::getContractAmount) SalesLedger::getCustomerName, SalesLedger::getContractAmount) .orderByDesc(SalesLedger::getContractAmount); List<SalesLedger> records = salesLedgerMapper.selectList(queryWrapper); @@ -243,7 +240,7 @@ Map<Long, GroupedCustomer> groupedMap = new LinkedHashMap<>(); // 使ç¨LinkedHashMapä¿ææåº for (SalesLedger record : records) { groupedMap.computeIfAbsent(record.getCustomerId(), k -> new GroupedCustomer(record.getCustomerId(), record.getCustomerName())) k -> new GroupedCustomer(record.getCustomerId(), record.getCustomerName())) .addAmount(record.getContractAmount()); } @@ -350,13 +347,13 @@ try { InputStream inputStream = file.getInputStream(); ExcelUtil<SalesLedgerImportDto> salesLedgerImportDtoExcelUtil = new ExcelUtil<>(SalesLedgerImportDto.class); Map<String, List<SalesLedgerImportDto>> stringListMap = salesLedgerImportDtoExcelUtil.importExcelMultiSheet(Arrays.asList("éå®å°è´¦æ°æ®","éå®äº§åæ°æ®"), inputStream, 0); if(CollectionUtils.isEmpty(stringListMap)) return AjaxResult.error("éå®è¡¨æ ¼ä¸ºç©ºï¼"); Map<String, List<SalesLedgerImportDto>> stringListMap = salesLedgerImportDtoExcelUtil.importExcelMultiSheet(Arrays.asList("éå®å°è´¦æ°æ®", "éå®äº§åæ°æ®"), inputStream, 0); if (CollectionUtils.isEmpty(stringListMap)) return AjaxResult.error("éå®è¡¨æ ¼ä¸ºç©ºï¼"); // ä¸å¡å±åå¹¶ List<SalesLedgerImportDto> salesLedgerImportDtoList = stringListMap.get("éå®å°è´¦æ°æ®"); if(CollectionUtils.isEmpty(salesLedgerImportDtoList)) return AjaxResult.error("éå®å°è´¦æ°æ®ä¸ºç©ºï¼"); if (CollectionUtils.isEmpty(salesLedgerImportDtoList)) return AjaxResult.error("éå®å°è´¦æ°æ®ä¸ºç©ºï¼"); List<SalesLedgerImportDto> salesLedgerProductImportDtoList = stringListMap.get("éå®äº§åæ°æ®"); if(CollectionUtils.isEmpty(salesLedgerProductImportDtoList)) return AjaxResult.error("éå®äº§åæ°æ®ä¸ºç©ºï¼"); if (CollectionUtils.isEmpty(salesLedgerProductImportDtoList)) return AjaxResult.error("éå®äº§åæ°æ®ä¸ºç©ºï¼"); // å®¢æ·æ°æ® List<Customer> customers = customerMapper.selectList(new LambdaQueryWrapper<Customer>().in(Customer::getCustomerName, salesLedgerImportDtoList.stream().map(SalesLedgerImportDto::getCustomerName).toArray(String[]::new))); @@ -388,14 +385,16 @@ .findFirst() .map(SysUser::getUserId) .orElse(null); if(aLong == null) throw new RuntimeException("å½å ¥äºº:"+salesLedger.getEntryPerson()+",æ 对åºç¨æ·ï¼"); if (aLong == null) throw new RuntimeException("å½å ¥äºº:" + salesLedger.getEntryPerson() + ",æ 对åºç¨æ·ï¼"); salesLedger.setEntryPerson(aLong.toString()); salesLedgerMapper.insert(salesLedger); // éå®äº§åæ°æ®ç»å®ï¼éè¿éå®åå·è·å对åºéå®äº§åæ°æ® List<SalesLedgerProductImportDto> salesLedgerProductImportDtos = salesLedgerProductImportDtoList.stream() .filter(salesLedgerProductImportDto -> salesLedgerProductImportDto.getSalesContractNo().equals(salesLedger.getSalesContractNo())) .collect(Collectors.toList()); if(CollectionUtils.isEmpty(salesLedgerProductImportDtos)) throw new RuntimeException("éå®åå·:"+salesLedgerImportDto.getSalesContractNo()+",æ 对åºäº§åæ°æ®ï¼"); if (CollectionUtils.isEmpty(salesLedgerProductImportDtos)) throw new RuntimeException("éå®åå·:" + salesLedgerImportDto.getSalesContractNo() + ",æ 对åºäº§åæ°æ®ï¼"); for (SalesLedgerProductImportDto salesLedgerProductImportDto : salesLedgerProductImportDtos) { SalesLedgerProduct salesLedgerProduct = new SalesLedgerProduct(); BeanUtils.copyProperties(salesLedgerProductImportDto, salesLedgerProduct); @@ -427,12 +426,23 @@ } return AjaxResult.success("å¯¼å ¥æå"); }catch (Exception e) { } catch (Exception e) { e.printStackTrace(); } return AjaxResult.success("å¯¼å ¥å¤±è´¥"); } @Override public List<LossProductModelDto> getSalesLedgerWithProductsLoss(Long salesLedgerId) { List<LossProductModelDto> lossProductModelDtos = salesLedgerProductMapper.selectProductBomStructure(salesLedgerId); return lossProductModelDtos; } // å é¨ç±»ç¨äºåå¨èåç»æ private static class GroupedCustomer { private final Long customerId; src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -15,10 +15,10 @@ <where> 1=1 <if test="salesLedgerProduct.salesLedgerId != null and salesLedgerProduct.salesLedgerId != '' "> AND T1.sales_ledger_id = #{salesLedgerProduct.salesLedgerId} AND T1.sales_ledger_id = #{salesLedgerProduct.salesLedgerId} </if> <if test="salesLedgerProduct.type != null and salesLedgerProduct.type != '' "> AND T1.type = #{salesLedgerProduct.type} AND T1.type = #{salesLedgerProduct.type} </if> </where> </select> @@ -27,7 +27,7 @@ from quality_inspect qi left join production_product_main ppm on qi.product_main_id = ppm.id left join product_work_order pwo on ppm.work_order_id = pwo.id left join product_order po on pwo.product_order_id = po.id left join product_order po on pwo.product_order_id = po.id left join sales_ledger_product slp on po.product_model_id = slp.id where qi.product_main_id = #{productMainId} @@ -44,22 +44,22 @@ <where> slp.type = 1 <if test="req.salesContractNo != null and req.salesContractNo != '' "> AND sl.sales_contract_no like concat('%',#{req.salesContractNo},'%') AND sl.sales_contract_no like concat('%',#{req.salesContractNo},'%') </if> <if test="req.customerContractNo != null and req.customerContractNo != '' "> AND sl.customer_contract_no like concat('%',#{req.customerContractNo},'%') AND sl.customer_contract_no like concat('%',#{req.customerContractNo},'%') </if> <if test="req.projectName != null and req.projectName != '' "> AND sl.project_name like concat('%',#{req.projectName},'%') AND sl.project_name like concat('%',#{req.projectName},'%') </if> <if test="req.customerName != null and req.customerName != '' "> AND sl.customer_name like concat('%',#{req.customerName},'%') AND sl.customer_name like concat('%',#{req.customerName},'%') </if> <if test="req.productCategory != null and req.productCategory != '' "> AND slp.product_category like concat('%',#{req.productCategory},'%') AND slp.product_category like concat('%',#{req.productCategory},'%') </if> <if test="req.status != null and req.status "> AND slp.pending_invoice_total > 0 AND slp.pending_invoice_total > 0 </if> </where> order by slp.register_date desc @@ -76,22 +76,22 @@ <where> slp.type = 2 <if test="req.purchaseContractNumber != null and req.purchaseContractNumber != '' "> AND sl.purchase_contract_number like concat('%',#{req.purchaseContractNumber},'%') AND sl.purchase_contract_number like concat('%',#{req.purchaseContractNumber},'%') </if> <if test="req.customerContractNo != null and req.customerContractNo != '' "> AND sl.customer_contract_no like concat('%',#{req.customerContractNo},'%') AND sl.customer_contract_no like concat('%',#{req.customerContractNo},'%') </if> <if test="req.projectName != null and req.projectName != '' "> AND sl.project_name like concat('%',#{req.projectName},'%') AND sl.project_name like concat('%',#{req.projectName},'%') </if> <if test="req.customerName != null and req.customerName != '' "> AND sl.customer_name like concat('%',#{req.customerName},'%') AND sl.customer_name like concat('%',#{req.customerName},'%') </if> <if test="req.productCategory != null and req.productCategory != '' "> AND slp.product_category like concat('%',#{req.productCategory},'%') AND slp.product_category like concat('%',#{req.productCategory},'%') </if> <if test="req.status != null and req.status "> AND slp.pending_invoice_total > 0 AND slp.pending_invoice_total > 0 </if> </where> order by slp.register_date desc @@ -126,4 +126,25 @@ <!-- æäº§å大类æåº --> ORDER BY slp.product_category </select> <select id="selectProductBomStructure" resultType="com.ruoyi.sales.dto.LossProductModelDto"> select a.model, a.product_name, a.unit, sum(a.single_quantity) AS loss_num from (SELECT ps.unit, ps.unit_quantity, pm1.model, p.product_name, ps.unit_quantity * slp.quantity AS single_quantity FROM sales_ledger sl LEFT JOIN sales_ledger_product slp ON slp.sales_ledger_id = sl.id LEFT JOIN product_model pm ON pm.id = slp.product_model_id LEFT JOIN product_bom pb ON pb.product_model_id = pm.id LEFT JOIN product_structure ps ON pb.id = ps.bom_id LEFT JOIN product_model pm1 ON pm1.id = ps.product_model_id LEFT JOIN product p ON p.id = pm1.product_id WHERE sl.id = #{salesLedegerId}) A group by a.model, a.product_name, a.unit </select> </mapper>