src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java
@@ -9,13 +9,10 @@ import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.purchase.dto.InvoicePurchaseDto; import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.dto.ReceiptPaymentDto; import com.ruoyi.sales.dto.ReceiptPaymentRecordDto; import com.ruoyi.sales.dto.SalesLedgerDto; import com.ruoyi.sales.pojo.ReceiptPayment; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.service.ReceiptPaymentService; import io.swagger.annotations.ApiModelProperty; import org.springframework.beans.factory.annotation.Autowired; @@ -80,6 +77,17 @@ } /** * 客æ·éå®è®°å½æ¥è¯¢ * @param receiptPaymentDto * @return */ @GetMapping("/customerSalesInteractions") public AjaxResult customerSalesInteractions (InvoiceLedgerDto receiptPaymentDto) { return AjaxResult.success(receiptPaymentService.customerSalesInteractions(receiptPaymentDto)); } /** * 忬¾ç»è®°è¯¦æ * @param id * @return src/main/java/com/ruoyi/sales/controller/WeighingRecordController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,120 @@ package com.ruoyi.sales.controller; import com.alibaba.excel.EasyExcel; 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.bean.BeanUtils; 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.R; import com.ruoyi.sales.dto.WeighingRecordExcelDto; import com.ruoyi.sales.pojo.WeighingRecord; import com.ruoyi.sales.service.IWeighingRecordService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; import java.util.List; /** * è¿ç£ è®°å½ï¼ç£ åå°è´¦ï¼Controller * * @author ruoyi * @date 2026-04-07 */ @Api(tags = "ç£ åå°è´¦ç®¡ç") @RestController @RequestMapping("/sales/weighbridgeLedger") public class WeighingRecordController extends BaseController { @Autowired private IWeighingRecordService weighingRecordService; /** * å页æ¥è¯¢ç£ åå°è´¦å表 */ @ApiOperation("å页æ¥è¯¢ç£ åå°è´¦å表") @GetMapping("/listPage") public R<IPage<WeighingRecord>> listPage(Page<WeighingRecord> page, WeighingRecord weighingRecord) { IPage<WeighingRecord> list = weighingRecordService.listPage(page, weighingRecord); return R.ok(list); } /** * å¯¼å ¥ Excelï¼æ°ç£ åå°è´¦ï¼ */ @ApiOperation("å¯¼å ¥Excel") @Log(title = "ç£ åå°è´¦", businessType = BusinessType.IMPORT) @PostMapping("/import") public R importWeighbridgeLedgerExcel(@RequestParam("file") MultipartFile file) throws Exception { try { List<WeighingRecordExcelDto> excelDataList = EasyExcel.read(file.getInputStream()) .head(WeighingRecordExcelDto.class) .sheet() .doReadSync(); if (CollectionUtils.isEmpty(excelDataList)) { return R.fail("模æ¿é误æå¯¼å ¥æ°æ®ä¸ºç©º"); } // 转æ¢ä¸ºå®ä½å¯¹è±¡ List<WeighingRecord> weighingRecordList = new ArrayList<>(); for (WeighingRecordExcelDto dto : excelDataList) { WeighingRecord record = new WeighingRecord(); BeanUtils.copyProperties(dto, record); weighingRecordList.add(record); } // å»éæ£æ¥ List<WeighingRecord> newRecordList = new ArrayList<>(); int duplicateCount = 0; for (WeighingRecord record : weighingRecordList) { LambdaQueryWrapper<WeighingRecord> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(WeighingRecord::getSerialNo, record.getSerialNo()); long count = weighingRecordService.count(wrapper); if (count == 0) { newRecordList.add(record); } else { duplicateCount++; } } if (newRecordList.isEmpty()) { return R.fail("æææ°æ®é½å·²åå¨ï¼å ±" + duplicateCount + "æ¡é夿°æ®"); } // æ¹éæå ¥æ°æ°æ® weighingRecordService.saveBatch(newRecordList); String message = String.format("å¯¼å ¥æåï¼%dæ¡ï¼è·³è¿éå¤ï¼%dæ¡", newRecordList.size(), duplicateCount); return R.ok(message); } catch (Exception e) { return R.fail("å¯¼å ¥å¤±è´¥ï¼" + e.getMessage()); } } /** * å é¤ï¼æ°ç£ åå°è´¦ï¼ */ @ApiOperation("å é¤ç£ åå°è´¦") @Log(title = "ç£ åå°è´¦", businessType = BusinessType.DELETE) @DeleteMapping("/delete") public R delWeighbridgeLedger(@RequestBody List<Long> ids) { boolean success = weighingRecordService.removeByIds(ids); if (success) { return R.ok("å 餿å"); } else { return R.fail("å é¤å¤±è´¥"); } } } src/main/java/com/ruoyi/sales/dto/InvoiceLedgerDto.java
@@ -7,7 +7,6 @@ import lombok.Data; import java.math.BigDecimal; import java.time.LocalDate; import java.util.Date; import java.util.List; @@ -54,4 +53,16 @@ private Integer salesLedgerId; private String paymentMethod; @ApiModelProperty(value = "è´§å") private String goodsName; @ApiModelProperty(value = "è§æ ¼") private String specificationModel; @ApiModelProperty(value = "å·²åè´§") private String shippedQuantity; @ApiModelProperty(value = "æªåè´§") private String unshippedQuantity; } src/main/java/com/ruoyi/sales/dto/WeighingRecordExcelDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,58 @@ package com.ruoyi.sales.dto; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.format.DateTimeFormat; import io.swagger.annotations.ApiModel; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; /** * è¿ç£ è®°å½Excelå¯¼å ¥å¯¼åºDTO */ @Data @ApiModel(value = "WeighingRecordExcelDto", description = "è¿ç£ è®°å½Excelå¯¼å ¥å¯¼åº") public class WeighingRecordExcelDto { @ExcelProperty(value = "æµæ°´å·") private String serialNo; @ExcelProperty(value = "车å·") private String carNo; @ExcelProperty(value = "åè´§åä½") private String shipUnit; @ExcelProperty(value = "æ¶è´§åä½") private String receiveUnit; @ExcelProperty(value = "è´§å") private String goodsName; @ExcelProperty(value = "è§æ ¼") private String specification; @ExcelProperty(value = "æ¯é") private BigDecimal grossWeight; @ExcelProperty(value = "ç®é") private BigDecimal tareWeight; @ExcelProperty(value = "åé") private BigDecimal netWeight; @ExcelProperty(value = "䏿¬¡è¿ç£ æ¶é´") @DateTimeFormat("yyyy-MM-dd HH:mm:ss") private LocalDateTime firstWeighTime; @ExcelProperty(value = "äºæ¬¡è¿ç£ æ¶é´") @DateTimeFormat("yyyy-MM-dd HH:mm:ss") private LocalDateTime secondWeighTime; @ExcelProperty(value = "åå") private String originalSender; @ExcelProperty(value = "æ´æ°äºº") private String updateBy; } src/main/java/com/ruoyi/sales/mapper/ReceiptPaymentMapper.java
@@ -11,7 +11,6 @@ import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; public interface ReceiptPaymentMapper extends BaseMapper<ReceiptPayment> { @@ -84,4 +83,5 @@ List<ReceiptPaymentExeclDto> bindInvoiceNoRegListByIds(List<Long> ids,Long tenantId); List<InvoiceLedgerDto> customerSalesInteractions(InvoiceLedgerDto receiptPaymentDto); } src/main/java/com/ruoyi/sales/mapper/WeighingRecordMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,9 @@ package com.ruoyi.sales.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.sales.pojo.WeighingRecord; import org.apache.ibatis.annotations.Mapper; @Mapper public interface WeighingRecordMapper extends BaseMapper<WeighingRecord> { } src/main/java/com/ruoyi/sales/pojo/WeighingRecord.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,90 @@ package com.ruoyi.sales.pojo; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; /** * è¿ç£ è®°å½å®ä½ç±» */ @Data @TableName("weighing_record") @ApiModel(value = "WeighingRecord", description = "è¿ç£ è®°å½") public class WeighingRecord implements Serializable { private static final long serialVersionUID = 1L; @TableId(type = IdType.AUTO) @ApiModelProperty(value = "主é®ID") private Long id; @ApiModelProperty(value = "æµæ°´å·") private String serialNo; @ApiModelProperty(value = "车å·") private String carNo; @ApiModelProperty(value = "åè´§åä½") private String shipUnit; @ApiModelProperty(value = "æ¶è´§åä½") private String receiveUnit; @ApiModelProperty(value = "è´§å") private String goodsName; @ApiModelProperty(value = "è§æ ¼") private String specification; @ApiModelProperty(value = "æ¯é") private BigDecimal grossWeight; @ApiModelProperty(value = "ç®é") private BigDecimal tareWeight; @ApiModelProperty(value = "åé") private BigDecimal netWeight; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "䏿¬¡è¿ç£ æ¶é´") private LocalDateTime firstWeighTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "äºæ¬¡è¿ç£ æ¶é´") private LocalDateTime secondWeighTime; @ApiModelProperty(value = "åå") private String originalSender; @ApiModelProperty(value = "æ´æ°äºº") private String updateBy; @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty(value = "åå»ºç¨æ·") @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Integer createUser; @ApiModelProperty(value = "ä¿®æ¹ç¨æ·") @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateUser; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; } src/main/java/com/ruoyi/sales/service/IWeighingRecordService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,10 @@ package com.ruoyi.sales.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.sales.pojo.WeighingRecord; public interface IWeighingRecordService extends IService<WeighingRecord> { IPage<WeighingRecord> listPage(Page<WeighingRecord> page, WeighingRecord weighingRecord); } src/main/java/com/ruoyi/sales/service/ReceiptPaymentService.java
@@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.sales.dto.CustomerInteractionDto; import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.dto.ReceiptPaymentDto; import com.ruoyi.sales.pojo.ReceiptPayment; @@ -16,6 +15,7 @@ /** * 忬¾ç»è®°æ°å¢ * * @param receiptPayment * @return */ @@ -23,6 +23,7 @@ /** * 忬¾ç»è®°ä¿®æ¹ * * @param receiptPayment * @return */ @@ -30,6 +31,7 @@ /** * 忬¾ç»è®°å é¤ * * @param ids * @return */ @@ -37,14 +39,16 @@ /** * 忬¾ç»è®°å页æ¥è¯¢ * * @param page * @param receiptPaymentDto * @return */ IPage<ReceiptPaymentDto> receiptPaymentListPage (Page page, ReceiptPaymentDto receiptPaymentDto); IPage<ReceiptPaymentDto> receiptPaymentListPage(Page page, ReceiptPaymentDto receiptPaymentDto); /** * 忬¾ç»è®°è¯¦æ * * @param id * @return */ @@ -54,6 +58,7 @@ /** * æ¥è¯¢å·²ç»ç»å®å票çå¼ç¥¨å°è´¦ * * @param page * @param receiptPaymentDto * @return @@ -62,12 +67,13 @@ /** * å¼ç¥¨å°è´¦è¯¦æ * * @param id * @return */ InvoiceLedgerDto invoiceInfo(Integer id); Map<String,BigDecimal> getAmountMouth(); Map<String, BigDecimal> getAmountMouth(); /** * æ¥è¯¢åæ¬¾è®°å½ @@ -81,10 +87,11 @@ /** * 客æ·å¾æ¥è®°å½æ¥è¯¢ * * @param receiptPaymentDto * @return */ List<InvoiceLedgerDto> customerInteractions (InvoiceLedgerDto receiptPaymentDto); List<InvoiceLedgerDto> customerInteractions(InvoiceLedgerDto receiptPaymentDto); /** * æ¥è¯¢å款记å½å页 @@ -100,4 +107,12 @@ * é¨å导åºå款å表 */ void exportPaymentList(HttpServletResponse response, List<Long> ids); /** * 客æ·éå®è®°å½æ¥è¯¢ * * @param receiptPaymentDto * @return */ List<InvoiceLedgerDto> customerSalesInteractions(InvoiceLedgerDto receiptPaymentDto); } src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java
@@ -8,7 +8,6 @@ import com.ruoyi.account.service.AccountIncomeService; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.sales.dto.CustomerInteractionDto; import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.dto.ReceiptPaymentDto; import com.ruoyi.sales.dto.ReceiptPaymentExeclDto; @@ -16,7 +15,6 @@ import com.ruoyi.sales.mapper.ReceiptPaymentMapper; import com.ruoyi.sales.mapper.SalesLedgerMapper; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.pojo.InvoiceLedger; import com.ruoyi.sales.pojo.ReceiptPayment; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.pojo.SalesLedgerProduct; @@ -32,7 +30,6 @@ import java.time.LocalDate; import java.time.YearMonth; import java.util.*; import java.util.stream.Collectors; @Service public class ReceiptPaymentServiceImpl extends ServiceImpl<ReceiptPaymentMapper,ReceiptPayment> implements ReceiptPaymentService { @@ -357,4 +354,10 @@ } } @Override public List<InvoiceLedgerDto> customerSalesInteractions(InvoiceLedgerDto receiptPaymentDto) { receiptPaymentDto.getCustomerId(); return receiptPaymentMapper.customerSalesInteractions(receiptPaymentDto); } } src/main/java/com/ruoyi/sales/service/impl/WeighingRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,46 @@ package com.ruoyi.sales.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.utils.StringUtils; import com.ruoyi.sales.mapper.WeighingRecordMapper; import com.ruoyi.sales.pojo.WeighingRecord; import com.ruoyi.sales.service.IWeighingRecordService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @Service @Slf4j @RequiredArgsConstructor public class WeighingRecordServiceImpl extends ServiceImpl<WeighingRecordMapper, WeighingRecord> implements IWeighingRecordService { private final WeighingRecordMapper weighingRecordMapper; @Override public IPage<WeighingRecord> listPage(Page<WeighingRecord> page, WeighingRecord weighingRecord) { LambdaQueryWrapper<WeighingRecord> queryWrapper = new LambdaQueryWrapper<>(); // æµæ°´å·ï¼æ¨¡ç³æ¥è¯¢ï¼ queryWrapper.like(StringUtils.isNotBlank(weighingRecord.getSerialNo()), WeighingRecord::getSerialNo, weighingRecord.getSerialNo()); // 车å·ï¼æ¨¡ç³æ¥è¯¢ï¼ queryWrapper.like(StringUtils.isNotBlank(weighingRecord.getCarNo()), WeighingRecord::getCarNo, weighingRecord.getCarNo()); // è´§åï¼æ¨¡ç³æ¥è¯¢ï¼ queryWrapper.like(StringUtils.isNotBlank(weighingRecord.getGoodsName()), WeighingRecord::getGoodsName, weighingRecord.getGoodsName()); // æ¶è´§åä½ï¼æ¨¡ç³æ¥è¯¢ï¼ queryWrapper.like(StringUtils.isNotBlank(weighingRecord.getReceiveUnit()), WeighingRecord::getReceiveUnit, weighingRecord.getReceiveUnit()); // åè´§åä½ï¼ç²¾ç¡®æ¥è¯¢ï¼å¯éï¼ queryWrapper.eq(StringUtils.isNotBlank(weighingRecord.getShipUnit()), WeighingRecord::getShipUnit, weighingRecord.getShipUnit()); return weighingRecordMapper.selectPage(page, queryWrapper); } } src/main/resources/mapper/sales/InvoiceLedgerMapper.xml
@@ -111,11 +111,11 @@ <select id="invoiceLedgerSalesAccount" resultType="com.ruoyi.sales.dto.InvoiceLedgerDto"> SELECT T1.customer_id as id, T1.customer_name, SUM(contract_amount) AS invoice_total, IFNULL( SUM(T2.receipt_payment_amount) , 0 ) AS receipt_payment_amount, IFNULL((IFNULL(SUM(contract_amount),0) - IFNULL(SUM(T2.receipt_payment_amount),0)),0) AS unReceipt_payment_amount T1.customer_id AS id, T1.customer_name, SUM(contract_amount) AS invoice_total, IFNULL(SUM(T2.receipt_payment_amount), 0) AS receipt_payment_amount, IFNULL(SUM(contract_amount), 0) - IFNULL(SUM(T2.receipt_payment_amount), 0) AS unReceipt_payment_amount FROM sales_ledger T1 LEFT JOIN receipt_payment T2 ON T1.id = T2.sales_ledger_id <where> @@ -123,7 +123,7 @@ T1.customer_name LIKE CONCAT ('%',#{invoiceLedgerDto.searchText},'%') </if> </where> GROUP BY T1.customer_name GROUP BY T1.customer_id, T1.customer_name </select> <select id="invoiceLedgerProductInfo" resultType="com.ruoyi.sales.dto.InvoiceRegistrationProductDto">