From a6f3454a486d3d4275cc31fba1b50d689466f927 Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Wed, 2 Apr 2025 17:21:19 +0800 Subject: [PATCH 1/7] =?UTF-8?q?demand:=20=E6=96=B0=E5=A2=9E=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=9A=E6=8F=90=E5=8D=95=E5=8F=B7=EF=BC=88=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E6=B5=B7=E8=BF=90=E6=8F=90=E5=8D=95=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=EF=BC=89=E3=80=81=E8=B4=B5=E5=8F=B8=E7=BC=96=E5=8F=B7=EF=BC=88?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E7=9B=B8=E5=85=B3=E4=B8=9A=E5=8A=A1=E7=9A=84?= =?UTF-8?q?=E8=B4=B5=E5=8F=B8=E7=BC=96=E5=8F=B7=EF=BC=89=E3=80=81=E8=B5=B7?= =?UTF-8?q?=E8=BF=90=E6=B8=AF=EF=BC=88=E5=85=B3=E8=81=94=E7=BD=91=E7=82=B9?= =?UTF-8?q?=E8=A1=A8=EF=BC=89=E3=80=81=E7=9B=AE=E7=9A=84=E6=B8=AF=EF=BC=88?= =?UTF-8?q?=E5=85=B3=E8=81=94=E7=BD=91=E7=82=B9=E8=A1=A8=EF=BC=89=E3=80=81?= =?UTF-8?q?=E7=AE=B1=E9=87=8F=E3=80=82=E5=8A=A0=E5=9C=A8=E8=BF=90=E5=8D=95?= =?UTF-8?q?=E5=BD=95=E5=85=A5=E7=95=8C=E9=9D=A2=E3=80=82=20committer:=20he?= =?UTF-8?q?yu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xdadan/erp/emis/domain/EmisWaybill.java | 19 +++++++++++++ .../erp/emis/domain/vo/WaybillOrder.java | 27 +++++++++++++++++++ .../resources/mapper/EmisWaybillMapper.xml | 15 +++++++++++ 3 files changed, 61 insertions(+) diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybill.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybill.java index b8187a940..9197fad63 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybill.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybill.java @@ -680,5 +680,24 @@ public class EmisWaybill extends BaseEntity @TableField(exist = false) private String transType; + @TableField + @DataAuditField(fieldComment = "提单号(记录海运提单信息)") + private String ladingBillCode ; + + @TableField + @DataAuditField(fieldComment = "贵司编号(记录相关业务的贵司编号)") + private String companyCode ; + + @TableField + @DataAuditField(fieldComment = "起运港") + private String departurePort ; + + @TableField + @DataAuditField(fieldComment = "目的港") + private String destinationPort; + + @TableField + @DataAuditField(fieldComment = "箱量") + private String boxQuantity; } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/WaybillOrder.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/WaybillOrder.java index c25184891..671095a0f 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/WaybillOrder.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/vo/WaybillOrder.java @@ -367,6 +367,21 @@ public class WaybillOrder implements Serializable { /* 录单人 */ private String registerManName; + /* 提单号(记录海运提单信息) */ + private String ladingBillCode ; + + /* 贵司编号(记录相关业务的贵司编号) */ + private String companyCode ; + + /* 起运港 */ + private String departurePort ; + + /* 目的港 */ + private String destinationPort; + + /* 箱量 */ + private String boxQuantity; + // 销售,回款 // private String salesmenName; // private String payeeName; @@ -661,6 +676,12 @@ public class WaybillOrder implements Serializable { voItem.setOrderRemark(dbWaybill.getOrderRemark()); + voItem.setLadingBillCode(dbWaybill.getLadingBillCode()); + voItem.setCompanyCode(dbWaybill.getCompanyCode()); + voItem.setDeparturePort(dbWaybill.getDeparturePort()); + voItem.setDestinationPort(dbWaybill.getDestinationPort()); + voItem.setBoxQuantity(dbWaybill.getBoxQuantity()); + return voItem; } @@ -880,6 +901,12 @@ public class WaybillOrder implements Serializable { dbWaybill.setOrderRemark(this.getOrderRemark()); dbWaybill.setExtInfo(this.getExtInfo()); + dbWaybill.setLadingBillCode(this.getLadingBillCode()); + dbWaybill.setCompanyCode(this.getCompanyCode()); + dbWaybill.setDeparturePort(this.getDeparturePort()); + dbWaybill.setDestinationPort(this.getDestinationPort()); + dbWaybill.setBoxQuantity(this.getBoxQuantity()); + return dbWaybill; } diff --git a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml index 13334584e..aa585f057 100644 --- a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml @@ -2440,6 +2440,11 @@ update_time, create_site, update_site, + lading_bill_code , + company_code , + departure_port , + destination_port , + box_quantity , #{orderSn}, @@ -2619,6 +2624,11 @@ #{updateTime}, #{createSite}, #{updateSite}, + #{ladingBillCode}, + #{companyCode}, + #{departurePort}, + #{destinationPort}, + #{boxQuantity}, @@ -2800,6 +2810,11 @@ update_time = #{updateTime}, create_site = #{createSite}, update_site = #{updateSite}, + lading_bill_code = #{ladingBillCode}, + company_code = #{companyCode}, + departure_port = #{departurePort}, + destination_port = #{destinationPort}, + box_quantity = #{boxQuantity}, where id = #{id} From 6a9780369c4b0ea102c28070b5c6981e2df08c5e Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Wed, 9 Apr 2025 13:46:15 +0800 Subject: [PATCH 2/7] =?UTF-8?q?demand:=20=E8=B4=A6=E5=8D=95=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=EF=BC=9A=E5=9C=A8=E5=AE=A2=E6=88=B7=E8=B4=A6=E5=8D=95?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E6=A8=A1=E5=9D=97=E4=B8=AD=EF=BC=8C=E5=BD=93?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=B5=B7=E8=BF=90=E7=9B=B8=E5=85=B3=E8=BF=90?= =?UTF-8?q?=E5=8D=95=E6=97=B6=EF=BC=8C=E7=B3=BB=E7=BB=9F=E8=A6=81=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E4=B8=8A=E8=BF=B0=E6=A8=A1=E7=89=88=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=EF=BC=8C=E5=AF=BC=E5=87=BA=E7=9A=84=E8=B4=A6=E5=8D=95=E8=A1=A8?= =?UTF-8?q?=E6=A0=BC=E8=A6=81=E5=8C=85=E5=90=AB=E6=8F=90=E5=8D=95=E5=8F=B7?= =?UTF-8?q?=E3=80=81=E9=9D=A2=E5=8D=95=E5=8F=B7=E3=80=81=E8=B4=B5=E5=8F=B8?= =?UTF-8?q?=E7=BC=96=E5=8F=B7=EF=BC=88=E5=A6=82=E6=B2=A1=E6=9C=89=E5=A1=AB?= =?UTF-8?q?=EF=BC=8C=E8=BE=93=E5=87=BA=E4=B8=BA=E7=A9=BA=EF=BC=89=E3=80=81?= =?UTF-8?q?=E8=B5=B7=E8=BF=90=E6=B8=AF=E3=80=81=E7=9B=AE=E7=9A=84=E6=B8=AF?= =?UTF-8?q?=E3=80=81=E7=AE=B1=E9=87=8F=E3=80=81=E4=BB=B6=E6=95=B0=E3=80=81?= =?UTF-8?q?=E6=AF=9B=E9=87=8D=E3=80=81=E4=BD=93=E7=A7=AF=E3=80=81=E8=B4=B9?= =?UTF-8?q?=E7=94=A8=E5=90=8D=E7=A7=B0=E3=80=81=E5=B8=81=E7=A7=8D=E3=80=81?= =?UTF-8?q?=E9=87=91=E9=A2=9D=20committer:=20heyu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/emis/EmisSettleBillController.java | 34 +-- .../emis/domain/EmisWaybillAndFeeitem.java | 85 ++++++ .../EmisSettleSubBillFeeitemMapper.java | 6 + .../emis/service/IEmisSettleBillService.java | 4 + .../excelCellStrategy/CellStyleStrategy.java | 94 +++++++ .../impl/EmisSettleBillServiceImpl.java | 247 +++++++++++++++++- .../mapper/EmisSettleSubBillFeeitemMapper.xml | 51 ++++ 7 files changed, 505 insertions(+), 16 deletions(-) create mode 100644 emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybillAndFeeitem.java create mode 100644 emis-biz/src/main/java/com/xdadan/erp/emis/service/excelCellStrategy/CellStyleStrategy.java diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleBillController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleBillController.java index dbd26a76d..b97ab5fdb 100644 --- a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleBillController.java +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleBillController.java @@ -17,9 +17,11 @@ import java.math.BigDecimal; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.*; +import java.util.stream.Collectors; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.map.MapUtil; import com.alibaba.excel.EasyExcel; @@ -27,29 +29,26 @@ import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.support.ExcelTypeEnum; import com.alibaba.excel.util.MapUtils; import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.WriteTable; import com.alibaba.excel.write.metadata.fill.FillConfig; +import com.alibaba.excel.write.metadata.style.WriteCellStyle; +import com.alibaba.excel.write.metadata.style.WriteFont; +import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; +import com.beust.jcommander.internal.Lists; import com.xdadan.erp.common.utils.DateUtils; import com.xdadan.erp.common.utils.DictUtils; -import com.xdadan.erp.emis.domain.EmisExchangeRate; -import com.xdadan.erp.emis.domain.EmisSettleSubBill; -import com.xdadan.erp.emis.domain.EmisSettleSubBillFeeitem; +import com.xdadan.erp.emis.domain.*; import com.xdadan.erp.emis.domain.exception.EmisBizError; import com.xdadan.erp.emis.domain.stat.BillPayStatInfo; import com.xdadan.erp.emis.domain.stat.OpenBillStatInfo; -import com.xdadan.erp.emis.domain.vo.scan.ScanResult; -import com.xdadan.erp.emis.service.EmisBaseService; -import com.xdadan.erp.emis.service.IEmisExchangeRateService; -import com.xdadan.erp.emis.service.IEmisSettleBillPayLogService; -import com.xdadan.erp.emis.service.billexport.ExcelUtils; -import com.xdadan.erp.emis.service.billexport.MapObjectUtil; +import com.xdadan.erp.emis.mapper.EmisSettleSubBillFeeitemMapper; +import com.xdadan.erp.emis.service.*; +import com.xdadan.erp.emis.service.test.CustomCellWriteHandler; import com.xdadan.erp.emis.utils.WaybillHelper; -import org.apache.commons.io.Charsets; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.ClassPathResource; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.GetMapping; @@ -67,9 +66,7 @@ import com.xdadan.erp.common.core.domain.AjaxResult; import com.xdadan.erp.common.core.page.TableDataInfo; import com.xdadan.erp.common.enums.BusinessType; import com.xdadan.erp.common.utils.poi.ExcelUtil; - -import com.xdadan.erp.emis.domain.EmisSettleBill; -import com.xdadan.erp.emis.service.IEmisSettleBillService; +import org.apache.poi.ss.usermodel.*; /** * 结算总账单Controller @@ -511,6 +508,13 @@ public class EmisSettleBillController extends BaseController return AjaxResult.success("确认成功"); } + @Log(title = "导出海运账单", businessType = BusinessType.EXPORT) + @PostMapping("/exportSeaWayBill") + public void exportSeaWayBill(HttpServletResponse response, EmisSettleBill emisSettleBill) { + + emisSettleBillService.exportSeaWayBill(response, emisSettleBill); + } + @Log(title = "导出账单", businessType = BusinessType.EXPORT) @PostMapping("/exportBill") public void exportBill(HttpServletResponse response, EmisSettleBill emisSettleBill) diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybillAndFeeitem.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybillAndFeeitem.java new file mode 100644 index 000000000..7a6132aaf --- /dev/null +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybillAndFeeitem.java @@ -0,0 +1,85 @@ +/** + * @Project: emis + * @Title: EmisWaybill.java + * @author linfso + * @date 2024-04-11 05:48:01 + * @Copyright: ShangHai Duta 2022 All rights reserved. + * @version v1.0 + * @Description:

运单列表 实体类

+ */ + +package com.xdadan.erp.emis.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.xdadan.erp.common.annotation.audit.DataAuditField; +import com.xdadan.erp.common.annotation.audit.DataAuditTable; +import com.xdadan.erp.common.core.domain.BaseEntity; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + + +/** + * @ClassName EmisWaybillAndFeeitem + * @Description 运单列表 + * @author heyu + * @date 2025-04-03 11:48:01 + */ +@Data +@TableName("emis_waybill") +@DataAuditTable(tableName = "emis_waybill",tableComment = "运单列表") +public class EmisWaybillAndFeeitem extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + @TableId(value = "id",type = IdType.AUTO) + private Long id; + + private String uuid; + + @TableField + @DataAuditField(fieldComment = "探路者面单号") + private String billCode ; + + @TableField + @DataAuditField(fieldComment = "提单号(记录海运提单信息)") + private String ladingBillCode ; + + @TableField + @DataAuditField(fieldComment = "贵司编号(记录相关业务的贵司编号)") + private String companyCode ; + + @TableField + @DataAuditField(fieldComment = "起运港") + private String departurePort ; + + @TableField + @DataAuditField(fieldComment = "目的港") + private String destinationPort; + + @TableField + @DataAuditField(fieldComment = "箱量") + private String boxQuantity; + + @TableField + @DataAuditField(fieldComment = "件数") + private Integer parcelQty; + + @TableField + @DataAuditField(fieldComment = "毛重") + private BigDecimal billWeight; + + @TableField + @DataAuditField(fieldComment = "体积") + private BigDecimal totalVolume; + + // 子账单费用明细信息 + @TableField(exist = false) + private List settleSubBillFeeitemList; +} diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleSubBillFeeitemMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleSubBillFeeitemMapper.java index 594369447..5c97dac16 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleSubBillFeeitemMapper.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleSubBillFeeitemMapper.java @@ -13,6 +13,10 @@ package com.xdadan.erp.emis.mapper; import java.util.List; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xdadan.erp.emis.domain.EmisSettleSubBillFeeitem; +import com.xdadan.erp.emis.domain.EmisWaybill; +import com.xdadan.erp.emis.domain.EmisWaybillAndFeeitem; +import org.apache.ibatis.annotations.Param; + /** * @ClassName EmisSettleSubBillFeeitemMapper * @Description

子账单费用明细 Mapper 接口

@@ -80,4 +84,6 @@ public interface EmisSettleSubBillFeeitemMapper extends BaseMapper selectEmisWaybillListByBillCodeList(@Param("billCodeList") List billCodeList); } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettleBillService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettleBillService.java index be1f117b4..6ad7e1af4 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettleBillService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisSettleBillService.java @@ -17,6 +17,8 @@ import com.xdadan.erp.emis.domain.exception.EmisBizError; import com.xdadan.erp.emis.domain.stat.BillPayStatInfo; import com.xdadan.erp.emis.domain.stat.OpenBillStatInfo; +import javax.servlet.http.HttpServletResponse; + /** * @ClassName EmisSettleBillService * @Description 结算总账单 @@ -123,4 +125,6 @@ public interface IEmisSettleBillService extends IDataAuditService * @return */ public int reCalcSettleBillPayStatus(String settleBillNo); + + void exportSeaWayBill(HttpServletResponse response, EmisSettleBill emisSettleBill); } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/excelCellStrategy/CellStyleStrategy.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/excelCellStrategy/CellStyleStrategy.java new file mode 100644 index 000000000..4155bcab4 --- /dev/null +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/excelCellStrategy/CellStyleStrategy.java @@ -0,0 +1,94 @@ +package com.xdadan.erp.emis.service.excelCellStrategy; + +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.write.handler.context.CellWriteHandlerContext; +import com.alibaba.excel.write.metadata.style.WriteCellStyle; +import com.alibaba.excel.write.metadata.style.WriteFont; +import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; +import org.apache.poi.ss.usermodel.*; + +/** + * @author heyu + * @ClassName CellStyleStrategy.java + * @Description CellStyleStrategy + * @createTime 2025年04月09日 + */ +public class CellStyleStrategy extends HorizontalCellStyleStrategy { + + + private final WriteCellStyle headWriteCellStyle; + + public CellStyleStrategy(WriteCellStyle headWriteCellStyle) { + this.headWriteCellStyle = headWriteCellStyle; + } + + @Override + protected void setHeadCellStyle(CellWriteHandlerContext context) { + + context.getWriteSheetHolder().getSheet().setColumnWidth(0, (int) (15.88 * 256)); + context.getWriteSheetHolder().getSheet().setColumnWidth(1, (int) (20.5 * 256)); + context.getWriteSheetHolder().getSheet().setColumnWidth(2, (int) (10 * 256)); + context.getWriteSheetHolder().getSheet().setColumnWidth(3, (int) (12.5 * 256)); + context.getWriteSheetHolder().getSheet().setColumnWidth(4, (int) (18.75 * 256)); +// context.getWriteSheetHolder().getSheet().addMergedRegion(new CellRangeAddress(2,2,0,8)); +// context.getWriteSheetHolder().getSheet().addMergedRegion(new CellRangeAddress(2,2,9,11)); + // 根据行索引为不同级别的表头应用不同样式 + if (context.getRowIndex() == 0) { + setRowStyle(context, (short) (27.75 * 20), (short) 14, IndexedColors.BLACK.getIndex(), false,IndexedColors.WHITE.getIndex()); + } else if (context.getRowIndex() > 0 && context.getRowIndex() < 3) { + setRowStyle(context, (short) (27.75 * 20), (short) 12, IndexedColors.RED.getIndex(), true,IndexedColors.WHITE.getIndex()); + if (context.getCell().getStringCellValue().contains("出账日期")) { + context.getRow().setHeight((short) (32 * 20)); + } + } else if (context.getRow().getCell(0).getStringCellValue().contains("总计")) { + headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.RIGHT); + setRowStyle(context, (short) (23 * 20), (short) 8, IndexedColors.RED.getIndex(), true,IndexedColors.WHITE.getIndex()); + } else if (context.getRow().getCell(0).getStringCellValue().contains("小计")) { + headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.RIGHT); + setRowStyle(context, (short) (23 * 20), (short) 8, IndexedColors.BLACK.getIndex(), false,IndexedColors.WHITE.getIndex()); + } else { + headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); + setRowStyle(context, (short) (23 * 20), (short) 10, IndexedColors.BLACK.getIndex(), true,IndexedColors.YELLOW.getIndex()); +// Workbook workbook = context.getWriteContext().getWorkbook(); +// CellStyle cellStyle = workbook.createCellStyle(); +// Font cellFont = workbook.createFont(); +// cellFont.setBold(false); +// cellStyle.setFont(cellFont); +// Cell cell = context.getCell(); +// if("贵司编号".equals(cell.getStringCellValue())){ +// cellStyle.setFillForegroundColor(IndexedColors.BLUE.getIndex()); +// cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); +// cell.setCellStyle(cellStyle); +// }else { +// cellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex()); +// cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); +// cell.setCellStyle(cellStyle); +// } + + } + + if (stopProcessing(context)) { + return; + } + WriteCellData cellData = context.getFirstCellData(); + WriteCellStyle.merge(this.headWriteCellStyle, cellData.getOrCreateStyle()); + } + + protected void setContentCellStyle(CellWriteHandlerContext context) { + context.getRow().setHeight((short) (23 * 20)); + } + + private void setRowStyle(CellWriteHandlerContext context, short height, short fontSize, short fontColor, boolean isBold, short backgroundColor) { + context.getRow().setHeight(height); + // 背景色 + headWriteCellStyle.setFillForegroundColor(backgroundColor); + // 创建字体实例 + WriteFont cellWriteFont = new WriteFont(); + // 设置字体大小 + cellWriteFont.setFontName("微软雅黑"); + cellWriteFont.setFontHeightInPoints(fontSize); + cellWriteFont.setColor(fontColor); + cellWriteFont.setBold(isBold); + headWriteCellStyle.setWriteFont(cellWriteFont); + } +} diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java index 11f5f606a..ccecb7339 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java @@ -11,10 +11,22 @@ package com.xdadan.erp.emis.service.impl; import java.math.BigDecimal; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.*; +import java.util.stream.Collectors; import cn.hutool.core.collection.CollectionUtil; -import com.xdadan.erp.common.core.domain.AjaxResult; +import cn.hutool.core.map.MapUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.support.ExcelTypeEnum; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.WriteTable; +import com.alibaba.excel.write.metadata.style.WriteCellStyle; +import com.alibaba.excel.write.metadata.style.WriteFont; +import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; +import com.beust.jcommander.internal.Lists; import com.xdadan.erp.common.utils.DateUtils; import com.xdadan.erp.common.utils.StringUtils; import com.xdadan.erp.emis.domain.*; @@ -25,15 +37,24 @@ import com.xdadan.erp.emis.domain.stat.BillPayStatInfo; import com.xdadan.erp.emis.domain.stat.OpenBillStatInfo; import com.xdadan.erp.emis.mapper.*; import com.xdadan.erp.emis.service.EmisBaseService; +import com.xdadan.erp.emis.service.excelCellStrategy.CellStyleStrategy; +import com.xdadan.erp.emis.service.test.CustomCellWriteHandler; import com.xdadan.erp.emis.utils.WaybillHelper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; +import org.apache.commons.io.IOUtils; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.ss.usermodel.VerticalAlignment; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.xdadan.erp.emis.service.IEmisSettleBillService; import org.springframework.transaction.annotation.Transactional; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; + /** * 结算总账单Service业务层处理 * @@ -60,6 +81,12 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS @Autowired private EmisSettlePayRelMapper emisSettlePayRelMapper; + @Autowired + private EmisBaseService emisBaseService; + + @Autowired + private EmisSettleSubBillFeeitemMapper emisSettleSubBillFeeitemMapper; + /** * 获取稽核数据 * @param id @@ -807,6 +834,224 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS return 1; } + @Override + public void exportSeaWayBill(HttpServletResponse response, EmisSettleBill emisSettleBill) { + try { + log.info("cd exportSeaWayBill , emisSettleBill,{}", emisSettleBill); + + Map textMap = new HashMap<>(); + + // 总账单 + EmisSettleBill bill = emisBaseService.getSettleBillBySettleBillNo(emisSettleBill.getSettleBillNo()); + + // 子账单 + List list = emisBaseService.selectSubBillListBySettleBillNo(emisSettleBill.getSettleBillNo()); + + // 运单号 + List billCodeList = list.stream() + .map(EmisSettleSubBill::getBillCode) + .collect(Collectors.toList()); + if (org.springframework.util.CollectionUtils.isEmpty(list) || org.springframework.util.CollectionUtils.isEmpty(billCodeList)) { + return; + } + + // 根据运单号查询运单详情 + List emisWaybills = emisSettleSubBillFeeitemMapper.selectEmisWaybillListByBillCodeList(billCodeList); + Map emisWaybillMap = emisWaybills.stream().collect(Collectors.toMap(EmisWaybillAndFeeitem::getBillCode, i -> i)); + if (MapUtil.isEmpty(emisWaybillMap) || org.springframework.util.CollectionUtils.isEmpty(emisWaybills)) { + return; + } + log.info("select emisWaybills is success, emisWaybills,{}", emisWaybills); + + // 运单费用条目 + List emisWaybillFeeitemList = new ArrayList<>(); + emisWaybills.forEach(emisWaybill -> { + if (Objects.nonNull(emisWaybill) && CollectionUtil.isNotEmpty(emisWaybill.getSettleSubBillFeeitemList())) { + emisWaybillFeeitemList.addAll(emisWaybill.getSettleSubBillFeeitemList()); + } + }); + calculateTotal(emisWaybillFeeitemList, textMap); + log.info("get textMap is success, textMap,{}", textMap); + + // 出账日期 + String date = DateUtils.parseDateToStr("yyyy.M.dd", list.get(0).getBillDate()); + String year = DateUtils.parseDateToStr("yyyy", list.get(0).getBillDate()); + String month = DateUtils.parseDateToStr("M", list.get(0).getBillDate()); + +// String filePath = "D:\\log\\stduent_01.xlsx"; + ServletOutputStream outputStream = response.getOutputStream(); + + //内容的策略 + WriteCellStyle contentWriteCellStyle = new WriteCellStyle(); + contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex()); + contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); + WriteFont contentWriteFont = new WriteFont(); + contentWriteFont.setFontName("微软雅黑"); + contentWriteFont.setFontHeightInPoints((short) 8); + contentWriteCellStyle.setWriteFont(contentWriteFont); + + ExcelWriter excelWriter = EasyExcel.write(outputStream).excelType(ExcelTypeEnum.XLSX).build(); + List> contentHeader = this.buildHeader(); + HorizontalCellStyleStrategy horizontalCellStyleStrategy = + new HorizontalCellStyleStrategy(null, contentWriteCellStyle); + // 构建大表头 + WriteSheet writeSheet1 = EasyExcel.writerSheet("sheet").needHead(Boolean.FALSE) + .registerWriteHandler(horizontalCellStyleStrategy) + .registerWriteHandler(new CellStyleStrategy(new WriteCellStyle())).build(); + List> header1 = contentHeader.stream().map(item -> Collections.singletonList("探路供应链(上海)")).collect(Collectors.toList()); + WriteTable t1 = EasyExcel.writerTable(0).needHead(Boolean.TRUE).head(header1).build(); + excelWriter.write((Collection) null, writeSheet1, t1); + + List> header2 = contentHeader.stream().map(item -> Collections.singletonList(year + "年" + month + "月海运费确认书")).collect(Collectors.toList()); + WriteTable t2 = EasyExcel.writerTable(1).needHead(Boolean.TRUE).head(header2).build(); + excelWriter.write((Collection) null, writeSheet1, t2); + + List> header3 = contentHeader.stream().map(item -> Collections.singletonList("结算对象:探路供应链公司")).collect(Collectors.toList()); + header3.set(9, Collections.singletonList("出账日期:" + date)); + header3.set(10, Collections.singletonList("出账日期:" + date)); + header3.set(11, Collections.singletonList("出账日期:" + date)); + WriteTable t3 = EasyExcel.writerTable(2).needHead(Boolean.TRUE).head(header3).build(); + excelWriter.write((Collection) null, writeSheet1, t3); + + log.info("Building a large header is success"); + + List excelKey = emisWaybillMap.keySet().stream().collect(Collectors.toList()); + int num = 3; + for (int i = 0; i < excelKey.size(); i++) { + List> result = new ArrayList<>(); + Map subtotalMap = new HashMap<>(); + + EmisWaybillAndFeeitem emisWaybill = emisWaybillMap.get(excelKey.get(i)); + List settleSubBillFeeitemList = emisWaybill.getSettleSubBillFeeitemList(); + calculateSubtotal(settleSubBillFeeitemList, subtotalMap); + settleSubBillFeeitemList.forEach(item -> { + result.add(Lists.newArrayList(emisWaybill.getLadingBillCode(), emisWaybill.getBillCode(), emisWaybill.getCompanyCode(), emisWaybill.getDeparturePort(), + emisWaybill.getDestinationPort(), emisWaybill.getBoxQuantity(), String.valueOf(emisWaybill.getParcelQty()), + emisWaybill.getBillWeight().stripTrailingZeros().toPlainString(), + emisWaybill.getTotalVolume().stripTrailingZeros().toPlainString(), + item.getFeeName(), item.getCurrency(), item.getBillFee().stripTrailingZeros().toPlainString() + )); + }); + // 小表头 + WriteSheet sheet = EasyExcel.writerSheet("sheet") + .needHead(Boolean.FALSE) + .registerWriteHandler(new CustomCellWriteHandler()).build(); + WriteTable writeTable0 = EasyExcel.writerTable(num).head(contentHeader).build(); + excelWriter.write((Collection) null, sheet, writeTable0); + + // 行数据 + WriteTable writeTable1 = EasyExcel.writerTable(num + 1).needHead(Boolean.TRUE).head(contentHeader).build(); + excelWriter.write(result, writeSheet1, writeTable1); + + log.info("Building the first row is success"); + + // 小计 + List> nameHeader2 = contentHeader.stream().map(item -> Collections.singletonList("小计: USD金额:" + subtotalMap.get("usdSubtotal") + " CNY金额:" + subtotalMap.get("cnySubtotal"))).collect(Collectors.toList()); + WriteTable writeTable2 = EasyExcel.writerTable(num + 2).needHead(Boolean.TRUE).head(nameHeader2).build(); + excelWriter.write((Collection) null, writeSheet1, writeTable2); + num = num + 2; + } + // 总计 + List> nameHeader3 = contentHeader.stream().map(item -> Collections.singletonList("总计: USD金额:" + textMap.get("usdTotal") + " CNY金额:" + textMap.get("cnyTotal"))).collect(Collectors.toList()); + WriteTable writeTable3 = EasyExcel.writerTable(num + 1).needHead(Boolean.TRUE).head(nameHeader3).build(); + excelWriter.write((Collection) null, writeSheet1, writeTable3); + + log.info("exportSeaWayBill is success"); + + // 设置响应头信息 + String fileName = bill.getSettleBillName() + "_海运账单.xlsx"; + response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + URLEncoder.encode(fileName, StandardCharsets.UTF_8.name())); + response.setContentType("application/octet-stream"); + //关流 + excelWriter.finish(); + IOUtils.closeQuietly(outputStream); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public List> buildHeader() { + List> header = new ArrayList<>(); + header.add(Collections.singletonList("提单号")); + header.add(Collections.singletonList("探路者面单号")); + header.add(Collections.singletonList("贵司编号")); + header.add(Collections.singletonList("起运港")); + header.add(Collections.singletonList("目的港")); + header.add(Collections.singletonList("箱量")); + header.add(Collections.singletonList("件数")); + header.add(Collections.singletonList("毛重")); + header.add(Collections.singletonList("体积")); + header.add(Collections.singletonList("费用名称")); + header.add(Collections.singletonList("币种")); + header.add(Collections.singletonList("金额")); + return header; + } + + + + private static void calculateTotal(List emisWaybillFeeitemList, Map textMap) { + Map> emisWaybillFeeitemMap = emisWaybillFeeitemList.stream() + .collect(Collectors.groupingBy(EmisSettleSubBillFeeitem::getCurrency)); + + if (MapUtil.isNotEmpty(emisWaybillFeeitemMap)) { + Set keySet = emisWaybillFeeitemMap.keySet(); + keySet.forEach(key -> { + // 计算每种金额总计 + String count = emisWaybillFeeitemMap.get(key).stream() + .map(EmisSettleSubBillFeeitem::getBillFee) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .stripTrailingZeros() + .toPlainString(); + if (keySet.size() > 1) { + countA(key, textMap, "usdTotal", count, "cnyTotal"); + } else { + countB(key, textMap, "usdTotal", count, "cnyTotal"); + } + }); + } + } + + private static void calculateSubtotal(List emisWaybillFeeitemList, Map textMap) { + Map> emisWaybillFeeitemMap = emisWaybillFeeitemList.stream() + .collect(Collectors.groupingBy(EmisSettleSubBillFeeitem::getCurrency)); + + if (MapUtil.isNotEmpty(emisWaybillFeeitemMap)) { + Set keySet = emisWaybillFeeitemMap.keySet(); + keySet.forEach(key -> { + // 计算每种金额总计 + String count = emisWaybillFeeitemMap.get(key).stream() + .map(EmisSettleSubBillFeeitem::getBillFee) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .stripTrailingZeros() + .toPlainString(); + if (keySet.size() > 1) { + countA(key, textMap, "usdSubtotal", count, "cnySubtotal"); + } else { + countB(key, textMap, "usdSubtotal", count, "cnySubtotal"); + } + }); + } + } + + private static void countA(String key, Map textMap, String usdSubtotal, String count, String cnySubtotal) { + if ("USD".equals(key)) { + textMap.put(usdSubtotal, count); + } else { + textMap.put(cnySubtotal, count); + } + } + + private static void countB(String key, Map textMap, String usdSubtotal, String count, String cnySubtotal) { + if ("USD".equals(key)) { + textMap.put(usdSubtotal, count); + textMap.put(cnySubtotal, "0"); + } else { + textMap.put(cnySubtotal, count); + textMap.put(usdSubtotal, "0"); + } + } + /** * 修改结算总账单 diff --git a/emis-biz/src/main/resources/mapper/EmisSettleSubBillFeeitemMapper.xml b/emis-biz/src/main/resources/mapper/EmisSettleSubBillFeeitemMapper.xml index 12881077d..7e5988a6b 100644 --- a/emis-biz/src/main/resources/mapper/EmisSettleSubBillFeeitemMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisSettleSubBillFeeitemMapper.xml @@ -16,10 +16,50 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + + + + + + + + + + + + + + + + + + + + select id, sub_bill_no, bill_code, fee_code, fee_name, bill_fee, orig_fee, currency, order_num, del_flag, create_by, create_time, update_by, update_time, remark from emis_settle_sub_bill_feeitem + + select a.bill_code, + a.lading_bill_code, + a.company_code, + a.departure_port, + a.destination_port, + a.box_quantity, + a.parcel_qty, + a.bill_weight, + a.total_volume, + b.* + from emis_waybill a + left join emis_settle_sub_bill_feeitem b on a.bill_code = b.bill_code and b.del_flag = '0' + + + + + insert into emis_settle_sub_bill_feeitem From 519cfbaf9666b1ac4191f620c75f935dc20d0a18 Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Wed, 9 Apr 2025 17:33:03 +0800 Subject: [PATCH 3/7] =?UTF-8?q?demand:=20=E6=96=B0=E5=A2=9E=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E9=9C=80=E8=A6=81=E5=B1=95=E7=8E=B0=E5=9C=A8=E5=AF=84?= =?UTF-8?q?=E4=BB=B6=E8=BF=90=E5=8D=95=E6=9F=A5=E8=AF=A2=E3=80=81=E6=B4=BE?= =?UTF-8?q?=E4=BB=B6=E8=BF=90=E5=8D=95=E6=9F=A5=E8=AF=A2=E3=80=81=E8=BF=90?= =?UTF-8?q?=E5=8D=95=E4=BF=AE=E6=94=B9=E3=80=81=E5=BF=AB=E4=BB=B6=E8=B7=9F?= =?UTF-8?q?=E8=B8=AA=EF=BC=88=E8=BF=90=E5=8D=95=E4=BF=A1=E6=81=AF=EF=BC=89?= =?UTF-8?q?=E3=80=81=E7=BD=91=E7=82=B9=E8=B4=B9=E7=94=A8=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E3=80=81=E8=B4=A2=E5=8A=A1=E4=B8=AD=E5=BF=83=E8=B4=B9=E7=94=A8?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E3=80=81=E4=B8=9A=E5=8A=A1=E5=87=BA=E8=B4=A6?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E3=80=81=E4=B8=9A=E5=8A=A1=E8=B4=A6=E5=8D=95?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E3=80=81=E5=AE=A2=E6=88=B7=E8=B4=A6=E5=8D=95?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E3=80=82=20committer:=20heyu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/mapper/EmisSettleSubBillMapper.xml | 1 + emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/emis-biz/src/main/resources/mapper/EmisSettleSubBillMapper.xml b/emis-biz/src/main/resources/mapper/EmisSettleSubBillMapper.xml index 542bf5a27..0d6260a94 100644 --- a/emis-biz/src/main/resources/mapper/EmisSettleSubBillMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisSettleSubBillMapper.xml @@ -117,6 +117,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" a.send_name,a.parcel_qty,a.bill_weight,a.total_volume,a.volume_weight,a.settlement_weight, a.freight,real_fee,a.fee_remark,a.payment_type,a.remark, a.payee,a.salesmen,a.bl_is_question,a.problem_cause, + a.lading_bill_code, a.company_code, a.departure_port, a.destination_port, a.box_quantity, j.prod_name as product_type_name, k.line_name as trans_line_type_name, diff --git a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml index aa585f057..9f0cba0ea 100644 --- a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml @@ -171,6 +171,11 @@ + + + + + @@ -300,7 +305,7 @@ a.payment_status, a.payment_date, a.payment_remark, a.order_remark, a.data_from, a.bl_special_goods,a.ext_info, a.remark, a.del_flag, a.create_by, a.create_time, a.update_by, a.update_time, a.create_site, a.update_site, - a.cod_fee_desc, + a.cod_fee_desc, a.lading_bill_code, a.company_code, a.departure_port, a.destination_port, a.box_quantity, b.name as receive_country_name,c.name as send_country_name, d.region_name as receive_province_name,e.region_name as receive_city_name,f.region_name as receive_county_name, @@ -396,7 +401,7 @@ a.payment_status, a.payment_date, a.payment_remark, a.order_remark, a.data_from, a.bl_special_goods,a.ext_info, a.remark, a.del_flag, a.create_by, a.create_time, a.update_by, a.update_time, a.create_site, a.update_site, - a.cod_fee_desc, + a.cod_fee_desc, a.lading_bill_code, a.company_code, a.departure_port, a.destination_port, a.box_quantity, b.name as receive_country_name,c.name as send_country_name, d.region_name as receive_province_name,e.region_name as receive_city_name,f.region_name as receive_county_name, From 92438e9d16d143c1609abf64b7f69dda4c2213af Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Fri, 11 Apr 2025 17:17:19 +0800 Subject: [PATCH 4/7] =?UTF-8?q?demand:=20=E5=B7=B2=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E9=A2=9D=E5=BA=A6=E7=BB=86=E5=88=86=E4=B8=A4=E4=B8=AA=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=8C=E4=B8=80=E4=B8=AA=E6=98=AF=E8=B6=85=E6=9C=9F?= =?UTF-8?q?=E9=A2=9D=E5=BA=A6=EF=BC=8C=E4=B8=80=E4=B8=AA=E8=B4=A6=E6=9C=9F?= =?UTF-8?q?=E5=86=85=E9=A2=9D=E5=BA=A6=E3=80=82=E5=8F=8C=E5=87=BB=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E6=98=BE=E7=A4=BA=E5=85=B7=E4=BD=93=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E3=80=82=20committer:=20heyu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erp/web/emis/EmisWaybillController.java | 8 ++ .../erp/emis/domain/EmisCreditSalesmen.java | 4 + .../xdadan/erp/emis/domain/EmisWaybill.java | 3 + .../emis/mapper/EmisSettleSubBillMapper.java | 1 + .../erp/emis/service/EmisBaseService.java | 82 ++++++++++++++++++- .../mapper/EmisCreditSalesmenMapper.xml | 12 ++- .../mapper/EmisSettleSubBillMapper.xml | 10 ++- 7 files changed, 115 insertions(+), 5 deletions(-) diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWaybillController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWaybillController.java index 10ffacc4e..47be17417 100644 --- a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWaybillController.java +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisWaybillController.java @@ -537,6 +537,14 @@ public class EmisWaybillController extends EmisBaseController list = emisWaybillService.selectEmisWaybillList(emisWaybill); } + if("1".equals(emisWaybill.getQueryQuotaType())){ + // 查询超期的运单列表 + list = emisBaseService.filterOverTermEmisWaybillList(list); + } + if("2".equals(emisWaybill.getQueryQuotaType())){ + // 查询未超期的账单列表 + list = emisBaseService.filterInTermEmisWaybillList(list); + } return getDataTable(list); } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisCreditSalesmen.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisCreditSalesmen.java index 43eac088a..237f5ede2 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisCreditSalesmen.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisCreditSalesmen.java @@ -43,6 +43,10 @@ public class EmisCreditSalesmen extends BaseEntity private BigDecimal creditMoney; /* 使用额度 */ private BigDecimal useMoney; + /* 超期额度 */ + private BigDecimal overTermMoney; + /* 账期内额度 */ + private BigDecimal inTermMoney; /* 币种 */ private String currency; /* 运输方式 */ diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybill.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybill.java index 9197fad63..1f26d2625 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybill.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybill.java @@ -675,6 +675,9 @@ public class EmisWaybill extends BaseEntity private String customerNickName; @TableField(exist = false) private String customerAvatar; + // 查询现金客户额度属性; 1:查询超期额度,2:查询账期内额度 + @TableField(exist = false) + private String queryQuotaType; // transType - 运输类型 @TableField(exist = false) diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleSubBillMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleSubBillMapper.java index ddf15d742..1a8a41202 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleSubBillMapper.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleSubBillMapper.java @@ -156,4 +156,5 @@ public interface EmisSettleSubBillMapper extends BaseMapper public int deleteEmisSettleSubBillByBillCode(String billCode); + List querysSettleSubBillByBillCodeList(@Param("billCodeList") List billCodeList); } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java index b3674d5bf..909da88f6 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java @@ -44,6 +44,7 @@ package com.xdadan.erp.emis.service; import java.math.BigDecimal; import java.util.*; + import java.util.stream.Collectors; /** * 运单列表Service业务层处理 @@ -1503,7 +1504,18 @@ public class EmisBaseService { try { Map useMoneyMap=emisCreditSalesmenMapper.getUseMoneyMap(item); BigDecimal useMoney = (BigDecimal)useMoneyMap.get("useMoney"); - emisCreditSalesmenMapper.updateUseMoney(item.getId(),useMoney); + List emisWaybillList = getEmisWaybills(item); + // 账期内金额 + BigDecimal inTermMoney = getInTermMoney(emisWaybillList); + // 超期金额 + BigDecimal overTermMoney = BigDecimal.valueOf(useMoney.subtract(inTermMoney).stripTrailingZeros().longValue()); + EmisCreditSalesmen emisCreditSalesmen = new EmisCreditSalesmen(); + emisCreditSalesmen.setId(item.getId()); + emisCreditSalesmen.setUseMoney(useMoney); + emisCreditSalesmen.setOverTermMoney(overTermMoney); + emisCreditSalesmen.setInTermMoney(inTermMoney); + emisCreditSalesmenMapper.updateEmisCreditSalesmen(emisCreditSalesmen); + log.info("success.autoDoCredit , emisCreditSalesmen,{}", JSON.toJSONString(emisCreditSalesmen)); }catch (Exception ex){ ex.printStackTrace(); } @@ -1526,6 +1538,74 @@ public class EmisBaseService { } } + private BigDecimal getInTermMoney(List emisWaybillList) { + List inTermList = filterInTermEmisWaybillList(emisWaybillList); + List billCodeList = inTermList.stream().map(EmisWaybill::getBillCode).collect(Collectors.toList()); + log.info("cd getInTermMoney , billCodeList,{}", billCodeList); + if (CollectionUtil.isEmpty(billCodeList)) { + return BigDecimal.ZERO; + } + List emisSettleSubBillList = emisSettleSubBillMapper.querysSettleSubBillByBillCodeList(billCodeList); + if (CollectionUtil.isEmpty(emisSettleSubBillList)) { + return BigDecimal.ZERO; + } + log.info("query emisSettleSubBillList , emisSettleSubBillList,{}", emisSettleSubBillList); + BigDecimal inTermMoney = BigDecimal.valueOf(emisSettleSubBillList.stream() + .map(EmisSettleSubBill::getBillFee) + .filter(i -> i != null) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .stripTrailingZeros().longValue()); + log.info("success.getInTermMoney , inTermMoney,{}", inTermMoney); + return inTermMoney; + } + + public List filterOverTermEmisWaybillList(List list) { + log.info("cd filterOverTermEmisWaybillList , emisWaybillList,{}", list); + if (CollectionUtil.isEmpty(list)) { + return Collections.emptyList(); + } + List overTermList = list.stream() + .filter(item -> item.getOrderDate() != null) + .filter(item -> (System.currentTimeMillis() - item.getOrderDate().getTime()) > (10 * 1000 * 60 * 60 * 24)) + .collect(Collectors.toList()); + log.info("success.filterOverTermEmisWaybillList , overTermList,{}", overTermList); + return overTermList; + } + + public List filterInTermEmisWaybillList(List list) { + log.info("cd filterInTermEmisWaybillList , emisWaybillList,{}", list); + if (CollectionUtil.isEmpty(list)) { + return Collections.emptyList(); + } + List overTermList = filterOverTermEmisWaybillList(list); + if (CollectionUtil.isEmpty(overTermList)) { + return list; + } + List inTermList = list.stream() + .filter(item -> !overTermList.contains(item)) + .collect(Collectors.toList()); + log.info("success.filterInTermEmisWaybillList , inTermList,{}", inTermList); + return inTermList; + } + + private List getEmisWaybills(EmisCreditSalesmen item) { + EmisWaybill emisWaybill = new EmisWaybill(); + emisWaybill.setPaymentType("1,3"); + emisWaybill.setPayee(item.getSalesmen()); + emisWaybill.setPaymentStatus("0,2"); + emisWaybill.getParams().put("problemQueryType", "2"); + emisWaybill.getParams().put("problemQueryIds", "173,170,151"); + emisWaybill.getParams().put("queryTabType", "1"); + emisWaybill.getParams().put("querySendType", "1"); + emisWaybill.getParams().put("beginSendDate", + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", item.getStartDate())); + emisWaybill.getParams().put("endSendDate", + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", item.getEndDate())); + emisWaybill.setCarryType(item.getTransType()); + List emisWaybillList = emisWaybillMapper.selectEmisWaybillList(emisWaybill); + return emisWaybillList; + } + @Transactional public void redoGenerateBill(String billCode) throws EmisBizError{ diff --git a/emis-biz/src/main/resources/mapper/EmisCreditSalesmenMapper.xml b/emis-biz/src/main/resources/mapper/EmisCreditSalesmenMapper.xml index b8a542438..6dfa6dd9e 100644 --- a/emis-biz/src/main/resources/mapper/EmisCreditSalesmenMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisCreditSalesmenMapper.xml @@ -10,6 +10,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + @@ -22,7 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" @@ -120,6 +122,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" salesmen, credit_money, use_money, + over_term_money, + in_term_Money, currency, trans_type, start_date, @@ -140,6 +144,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{salesmen}, #{creditMoney}, #{useMoney}, + #{overTermMoney}, + #{inTermMoney}, #{currency}, #{transType}, #{startDate}, @@ -162,6 +168,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" credit_money = #{creditMoney}, use_money = #{useMoney}, + over_term_money = #{overTermMoney}, + in_term_Money = #{inTermMoney}, currency = #{currency}, trans_type = #{transType}, start_date = #{startDate}, diff --git a/emis-biz/src/main/resources/mapper/EmisSettleSubBillMapper.xml b/emis-biz/src/main/resources/mapper/EmisSettleSubBillMapper.xml index 0d6260a94..0b2358c6c 100644 --- a/emis-biz/src/main/resources/mapper/EmisSettleSubBillMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisSettleSubBillMapper.xml @@ -627,8 +627,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where a.del_flag='0' and a.bill_code = #{billCode} - - + + select id, acc_code, salesmen, credit_money, use_money, over_term_money, + in_term_money, currency, trans_type, start_date, end_date, bl_open, + remark, tenant_id, del_flag, create_by, create_time, update_by, + update_time, create_site, update_site + from emis_credit_salesmen + where acc_code = #{accCode} + and del_flag = '0' + order by create_time desc + limit 1 + + + + + + + + insert into emis_temp_credit_salesmen + + acc_code, + salesmen, + temp_credit_money_adjust, + start_date, + end_date, + del_flag, + create_by, + create_time, + update_by, + update_time, + remark, + create_site, + update_site, + + + #{accCode}, + #{salesmen}, + #{tempCreditMoneyAdjust}, + #{startDate}, + #{endDate}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{remark}, + #{createSite}, + #{updateSite}, + + + + + update emis_temp_credit_salesmen + + acc_code = #{accCode}, + salesmen = #{salesmen}, + temp_credit_money_adjust = #{tempCreditMoneyAdjust}, + start_date = #{startDate}, + end_date = #{endDate}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + remark = #{remark}, + create_site = #{createSite}, + update_site = #{updateSite}, + + where id = #{id} + + + + update emis_temp_credit_salesmen set del_flag = '1' where id in + + #{id} + + + + \ No newline at end of file From 7bb93abc4789a038b1c1e1e7d18b484ddc7097fd Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Thu, 17 Apr 2025 14:07:52 +0800 Subject: [PATCH 6/7] =?UTF-8?q?demand:=201.=E6=96=B0=E5=A2=9E=E6=9C=88?= =?UTF-8?q?=E7=BB=93=E5=AE=A2=E6=88=B7=E4=B8=B4=E6=97=B6=E9=A2=9D=E5=BA=A6?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E7=95=8C=E9=9D=A2=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=A2=9E=E5=88=A0=E6=94=B9=E6=9F=A5=E6=93=8D=20=20=20=20=20=20?= =?UTF-8?q?=20=20=E4=BD=9C=EF=BC=8C=E6=9C=88=E7=BB=93=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E9=A2=9D=E5=BA=A6=E6=93=8D=E4=BD=9C=E7=95=8C=E9=9D=A2=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E8=BF=94=E5=9B=9E=E5=A2=9E=E5=8A=A0=E4=B8=B4=E6=97=B6?= =?UTF-8?q?=E9=A2=9D=E5=BA=A6=20=20=20=20=20=20=20=20=202.=E8=BF=90?= =?UTF-8?q?=E5=8D=95=E5=BD=95=E5=85=A5=E3=80=81=E8=BF=90=E5=8D=95=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E7=AD=89=E7=95=8C=E9=9D=A2=E9=94=80=E5=94=AE=E9=A2=9D?= =?UTF-8?q?=E5=BA=A6=E8=AE=A1=E7=AE=97=E9=80=BB=E8=BE=91=E9=80=82=E5=BA=94?= =?UTF-8?q?=E4=B8=B4=E6=97=B6=E9=A2=9D=E5=BA=A6=E8=B0=83=E6=95=B4=20commit?= =?UTF-8?q?ter:=20heyu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EmisTempCreditCustomerController.java | 77 ++++++ .../erp/emis/domain/EmisCreditCustomer.java | 2 + .../emis/domain/EmisTempCreditCustomer.java | 44 ++++ .../emis/domain/EmisTempCreditSalesmen.java | 3 - .../emis/mapper/EmisCreditCustomerMapper.java | 8 + .../mapper/EmisTempCreditCustomerMapper.java | 59 +++++ .../erp/emis/service/EmisBaseService.java | 96 +++++++- .../IEmisTempCreditCustomerService.java | 47 ++++ .../impl/EmisCreditCustomerServiceImpl.java | 27 ++- .../impl/EmisCreditSalesmenServiceImpl.java | 43 +--- .../EmisTempCreditCustomerServiceImpl.java | 220 ++++++++++++++++++ .../mapper/EmisCreditCustomerMapper.xml | 17 ++ .../mapper/EmisTempCreditCustomerMapper.xml | 108 +++++++++ .../mapper/EmisTempCreditSalesmenMapper.xml | 1 - 14 files changed, 695 insertions(+), 57 deletions(-) create mode 100644 emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisTempCreditCustomerController.java create mode 100644 emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTempCreditCustomer.java create mode 100644 emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTempCreditCustomerMapper.java create mode 100644 emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisTempCreditCustomerService.java create mode 100644 emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTempCreditCustomerServiceImpl.java create mode 100644 emis-biz/src/main/resources/mapper/EmisTempCreditCustomerMapper.xml diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisTempCreditCustomerController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisTempCreditCustomerController.java new file mode 100644 index 000000000..79f2e128b --- /dev/null +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisTempCreditCustomerController.java @@ -0,0 +1,77 @@ +package com.xdadan.erp.web.emis; + +import java.util.List; + +import com.xdadan.erp.common.annotation.Log; +import com.xdadan.erp.common.core.controller.BaseController; +import com.xdadan.erp.common.core.domain.AjaxResult; +import com.xdadan.erp.common.core.page.TableDataInfo; +import com.xdadan.erp.common.enums.BusinessType; +import com.xdadan.erp.emis.domain.EmisTempCreditCustomer; +import com.xdadan.erp.emis.service.IEmisTempCreditCustomerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +/** + * 客户临时额度Controller + * + * @author heyu + */ +@RestController +@RequestMapping("/emis/emisTempCreditCustomer") +public class EmisTempCreditCustomerController extends BaseController { + + @Autowired + private IEmisTempCreditCustomerService emisTempCreditCustomerService; + + /** + * 查询客户临时额度列表 + */ + @PreAuthorize("@ss.hasPermi('emis:emisTempCreditCustomer:list')") + @GetMapping("/list") + public TableDataInfo list(EmisTempCreditCustomer emisTempCreditCustomer) { + startPage(); + List list = emisTempCreditCustomerService + .selectEmisTempCreditCustomerList(emisTempCreditCustomer); + return getDataTable(list); + } + + /** + * 新增客户临时额度 + */ + @PreAuthorize("@ss.hasPermi('emis:emisTempCreditCustomer:add')") + @Log(title = "客户临时额度", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody EmisTempCreditCustomer emisTempCreditCustomer) { + try { + return toAjax(emisTempCreditCustomerService.insertEmisTempCreditCustomer(emisTempCreditCustomer)); + } catch (Exception e) { + return error(e.getMessage()); + } + } + + /** + * 修改客户临时额度 + */ + @PreAuthorize("@ss.hasPermi('emis:emisTempCreditCustomer:edit')") + @Log(title = "客户临时额度", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody EmisTempCreditCustomer emisTempCreditCustomer) { + try { + return toAjax(emisTempCreditCustomerService.updateEmisTempCreditCustomer(emisTempCreditCustomer)); + } catch (Exception e) { + return error(e.getMessage()); + } + } + + /** + * 删除客户临时额度 + */ + @PreAuthorize("@ss.hasPermi('emis:emisTempCreditCustomer:remove')") + @Log(title = "客户临时额度", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(emisTempCreditCustomerService.deleteEmisTempCreditCustomerByIds(ids)); + } +} \ No newline at end of file diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisCreditCustomer.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisCreditCustomer.java index 5f10afb66..48ed37506 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisCreditCustomer.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisCreditCustomer.java @@ -65,4 +65,6 @@ public class EmisCreditCustomer extends BaseEntity private String payee; private String salesmen; + /** 临时额度总额 */ + private BigDecimal tempCreditMoney; } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTempCreditCustomer.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTempCreditCustomer.java new file mode 100644 index 000000000..6c57107d1 --- /dev/null +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTempCreditCustomer.java @@ -0,0 +1,44 @@ +package com.xdadan.erp.emis.domain; + +import com.xdadan.erp.common.annotation.Excel; +import com.xdadan.erp.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 客户临时额度对象 + * + * @author heyu + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class EmisTempCreditCustomer extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** ID */ + private Long id; + + /** 客户编码 */ + private String accCode; + + /** 月结客户名称 */ + private String customerName; + + /** 临时额度调整 */ + private BigDecimal tempCreditMoneyAdjust; + + /** 运输方式 **/ + private String transType; + + /** 开始日期 */ + @Excel(name = "开始日期", dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date startDate; + + /** 结束日期 */ + @Excel(name = "结束日期", dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date endDate; + +} \ No newline at end of file diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTempCreditSalesmen.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTempCreditSalesmen.java index d36c1b7e5..95440d504 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTempCreditSalesmen.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTempCreditSalesmen.java @@ -31,9 +31,6 @@ public class EmisTempCreditSalesmen extends BaseEntity { /** 运输方式 **/ private String transType; - /** 临时额度总额 */ - private BigDecimal tempCreditMoney; - /** 开始日期 */ @Excel(name = "开始日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date startDate; diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisCreditCustomerMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisCreditCustomerMapper.java index 957dbbb40..c6b58d92f 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisCreditCustomerMapper.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisCreditCustomerMapper.java @@ -99,4 +99,12 @@ public interface EmisCreditCustomerMapper extends BaseMapper * @return 结果 */ public int deleteEmisCreditCustomerByIds(Long[] ids); + + /** + * 根据条件查询客户信用额度信息 + * + * @param emisCreditCustomer 客户信用额度 + * @return 客户信用额度 + */ + EmisCreditCustomer selectCreditCustomerInfo(EmisCreditCustomer emisCreditCustomer); } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTempCreditCustomerMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTempCreditCustomerMapper.java new file mode 100644 index 000000000..bfa27f141 --- /dev/null +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTempCreditCustomerMapper.java @@ -0,0 +1,59 @@ +package com.xdadan.erp.emis.mapper; + +import com.xdadan.erp.emis.domain.EmisTempCreditCustomer; +import java.util.List; + +/** + * 客户临时额度Mapper接口 + * + * @author heyu + */ +public interface EmisTempCreditCustomerMapper { + /** + * 查询客户临时额度 + * + * @param id 客户临时额度主键 + * @return 客户临时额度 + */ + EmisTempCreditCustomer selectEmisTempCreditCustomerById(Long id); + + /** + * 查询客户临时额度列表 + * + * @param emisTempCreditCustomer 客户临时额度 + * @return 客户临时额度集合 + */ + List selectEmisTempCreditCustomerList(EmisTempCreditCustomer emisTempCreditCustomer); + + /** + * 新增客户临时额度 + * + * @param emisTempCreditCustomer 客户临时额度 + * @return 结果 + */ + int insertEmisTempCreditCustomer(EmisTempCreditCustomer emisTempCreditCustomer); + + /** + * 修改客户临时额度 + * + * @param emisTempCreditCustomer 客户临时额度 + * @return 结果 + */ + int updateEmisTempCreditCustomer(EmisTempCreditCustomer emisTempCreditCustomer); + + /** + * 删除客户临时额度 + * + * @param id 客户临时额度主键 + * @return 结果 + */ + int deleteEmisTempCreditCustomerById(Long id); + + /** + * 批量删除客户临时额度 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + int deleteEmisTempCreditCustomerByIds(Long[] ids); +} \ No newline at end of file diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java index 909da88f6..445c5684e 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java @@ -154,6 +154,12 @@ public class EmisBaseService { @Autowired private EmisTmsCostFeeMapper emisTmsCostFeeMapper; + @Autowired + private EmisTempCreditSalesmenMapper emisTempCreditSalesmenMapper; + + @Autowired + private EmisTempCreditCustomerMapper emisTempCreditCustomerMapper; + private static SysUser emptySysUser = new SysUser(); static { @@ -256,7 +262,7 @@ public class EmisBaseService { if("2".equals(newSettleType)){ EmisCreditCustomer creditCustomer = getEmisCreditCustomerByCond(newBill.getCustNo(),newBill.getSendDate(),newBill.getCarryType()); if(creditCustomer!=null) { - BigDecimal preBalance = creditCustomer.getCreditMoney().subtract(creditCustomer.getUseMoney()); + BigDecimal preBalance = calculateCustomerTempCreditMoney(creditCustomer).subtract(creditCustomer.getUseMoney()); if (changeMoney.compareTo(preBalance) > 0) { // 提示异常 throw new EmisBizError(EmisBizErrorType.FAIL, "超出信用额度"); @@ -267,7 +273,7 @@ public class EmisBaseService { // bug:1415 统计数据由销售联系人更改为回款联系人 EmisCreditSalesmen creditSalesmen = getEmisCreditSalesmenByCond(newBill.getPayee(),newBill.getSendDate(),newBill.getCarryType()); if(creditSalesmen!=null) { - BigDecimal preBalance = creditSalesmen.getCreditMoney().subtract(creditSalesmen.getUseMoney()); + BigDecimal preBalance = calculateSalesmenTempCreditMoney(creditSalesmen).subtract(creditSalesmen.getUseMoney()); if (changeMoney.compareTo(preBalance) > 0) { // 提示异常 throw new EmisBizError(EmisBizErrorType.FAIL, "超出信用额度"); @@ -282,7 +288,7 @@ public class EmisBaseService { if("2".equals(newSettleType)){ EmisCreditCustomer creditCustomer = getEmisCreditCustomerByCond(newBill.getCustNo(),newBill.getSendDate(),newBill.getCarryType()); if(creditCustomer!=null) { - BigDecimal preBalance = creditCustomer.getCreditMoney().subtract(creditCustomer.getUseMoney()); + BigDecimal preBalance = calculateCustomerTempCreditMoney(creditCustomer).subtract(creditCustomer.getUseMoney()); if (changeMoney.compareTo(preBalance) > 0) { // 提示异常 throw new EmisBizError(EmisBizErrorType.FAIL, "超出信用额度"); @@ -293,7 +299,7 @@ public class EmisBaseService { // bug:1415 统计数据由销售联系人更改为回款联系人 EmisCreditSalesmen creditSalesmen = getEmisCreditSalesmenByCond(newBill.getPayee(),newBill.getSendDate(),newBill.getCarryType()); if(creditSalesmen!=null) { - BigDecimal preBalance = creditSalesmen.getCreditMoney().subtract(creditSalesmen.getUseMoney()); + BigDecimal preBalance = calculateSalesmenTempCreditMoney(creditSalesmen).subtract(creditSalesmen.getUseMoney()); if (changeMoney.compareTo(preBalance) > 0) { // 提示异常 throw new EmisBizError(EmisBizErrorType.FAIL, "超出信用额度"); @@ -313,7 +319,7 @@ public class EmisBaseService { if("2".equals(newSettleType)){ EmisCreditCustomer creditCustomer = getEmisCreditCustomerByCond(newBill.getCustNo(),newBill.getSendDate(),newBill.getCarryType()); if(creditCustomer!=null) { - BigDecimal preBalance = creditCustomer.getCreditMoney().subtract(creditCustomer.getUseMoney()); + BigDecimal preBalance = calculateCustomerTempCreditMoney(creditCustomer).subtract(creditCustomer.getUseMoney()); if (changeMoney.compareTo(preBalance) > 0) { // 提示异常 throw new EmisBizError(EmisBizErrorType.FAIL, "超出信用额度"); @@ -324,7 +330,7 @@ public class EmisBaseService { // bug:1415 统计数据由销售联系人更改为回款联系人 EmisCreditSalesmen creditSalesmen = getEmisCreditSalesmenByCond(newBill.getPayee(),newBill.getSendDate(),newBill.getCarryType()); if(creditSalesmen!=null) { - BigDecimal preBalance = creditSalesmen.getCreditMoney().subtract(creditSalesmen.getUseMoney()); + BigDecimal preBalance = calculateSalesmenTempCreditMoney(creditSalesmen).subtract(creditSalesmen.getUseMoney()); if (changeMoney.compareTo(preBalance) > 0) { // 提示异常 throw new EmisBizError(EmisBizErrorType.FAIL, "超出信用额度"); @@ -336,6 +342,84 @@ public class EmisBaseService { } } + /** + * 计算并返回销售临时额度总额 + * tempCreditMoney = creditMoney + tempCreditMoneyAdjust + * tempCreditMoneyAdjust取自emis_temp_credit_salesmen,有多条时取当前时间在范围内的一条,没有则为0 + * + * @param creditSalesmen 销售信用额度记录 + * @return 临时额度总额 + */ + public BigDecimal calculateSalesmenTempCreditMoney(EmisCreditSalesmen creditSalesmen) { + log.debug("开始计算客户[{}]的临时额度总额", creditSalesmen.getAccCode()); + + // 获取基础信用额度 + BigDecimal baseCreditMoney = creditSalesmen.getCreditMoney() != null ? creditSalesmen.getCreditMoney() + : BigDecimal.ZERO; + + // 查询当前有效的临时额度调整 + EmisTempCreditSalesmen tempQuery = new EmisTempCreditSalesmen(); + tempQuery.setAccCode(creditSalesmen.getAccCode()); + List tempList = emisTempCreditSalesmenMapper + .selectEmisTempCreditSalesmenList(tempQuery); + + BigDecimal tempAdjust = BigDecimal.ZERO; + Date now = new Date(); + + for (EmisTempCreditSalesmen temp : tempList) { + if (temp.getStartDate() != null && temp.getEndDate() != null + && now.after(temp.getStartDate()) && now.before(temp.getEndDate())) { + tempAdjust = temp.getTempCreditMoneyAdjust() != null ? temp.getTempCreditMoneyAdjust() + : BigDecimal.ZERO; + break; + } + } + + BigDecimal totalCreditMoney = baseCreditMoney.add(tempAdjust); + log.debug("客户[{}]的临时额度总额计算完成: 基础额度[{}] + 临时调整[{}] = 总额[{}]", + creditSalesmen.getAccCode(), baseCreditMoney, tempAdjust, totalCreditMoney); + return totalCreditMoney; + } + + /** + * 计算并返回客户临时额度总额 + * + * tempCreditMoney = creditMoney + tempCreditMoneyAdjust + * tempCreditMoneyAdjust取自emis_temp_credit_customer,有多条时取当前时间在范围内的一条,没有则为0 + * + * @param creditCustomer 客户信用额度记录 + */ + public BigDecimal calculateCustomerTempCreditMoney(EmisCreditCustomer creditCustomer) { + log.debug("开始计算客户[{}]的临时额度总额", creditCustomer.getAccCode()); + + // 获取基础信用额度 + BigDecimal baseCreditMoney = creditCustomer.getCreditMoney() != null ? creditCustomer.getCreditMoney() + : BigDecimal.ZERO; + + // 查询当前有效的临时额度调整 + EmisTempCreditCustomer tempQuery = new EmisTempCreditCustomer(); + tempQuery.setAccCode(creditCustomer.getAccCode()); + List tempList = emisTempCreditCustomerMapper + .selectEmisTempCreditCustomerList(tempQuery); + + BigDecimal tempAdjust = BigDecimal.ZERO; + Date now = new Date(); + + for (EmisTempCreditCustomer temp : tempList) { + if (temp.getStartDate() != null && temp.getEndDate() != null + && !now.before(temp.getStartDate()) && now.before(temp.getEndDate())) { + tempAdjust = temp.getTempCreditMoneyAdjust() != null ? temp.getTempCreditMoneyAdjust() + : BigDecimal.ZERO; + break; + } + } + + BigDecimal totalCreditMoney = baseCreditMoney.add(tempAdjust); + log.debug("客户[{}]的临时额度总额计算完成: 基础额度[{}] + 临时调整[{}] = 总额[{}]", + creditCustomer.getAccCode(), baseCreditMoney, tempAdjust, totalCreditMoney); + return totalCreditMoney; + } + /** * * 重新计算使用信用额度 diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisTempCreditCustomerService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisTempCreditCustomerService.java new file mode 100644 index 000000000..e76edbe9f --- /dev/null +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisTempCreditCustomerService.java @@ -0,0 +1,47 @@ +package com.xdadan.erp.emis.service; + +import com.xdadan.erp.emis.domain.EmisTempCreditCustomer; +import com.xdadan.erp.emis.domain.exception.EmisBizError; + +import java.util.List; + +/** + * 客户临时额度Service接口 + * + * @author heyu + */ +public interface IEmisTempCreditCustomerService { + + /** + * 查询客户临时额度列表 + * + * @param emisTempCreditCustomer 客户临时额度 + * @return 客户临时额度集合 + */ + List selectEmisTempCreditCustomerList(EmisTempCreditCustomer emisTempCreditCustomer); + + /** + * 新增客户临时额度 + * + * @param emisTempCreditCustomer 客户临时额度 + * @return 结果 + */ + int insertEmisTempCreditCustomer(EmisTempCreditCustomer emisTempCreditCustomer) throws EmisBizError; + + /** + * 修改客户临时额度 + * + * @param emisTempCreditCustomer 客户临时额度 + * @return 结果 + */ + int updateEmisTempCreditCustomer(EmisTempCreditCustomer emisTempCreditCustomer) throws EmisBizError; + + /** + * 批量删除客户临时额度 + * + * @param ids 需要删除的客户临时额度主键集合 + * @return 结果 + */ + int deleteEmisTempCreditCustomerByIds(Long[] ids); + +} \ No newline at end of file diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCreditCustomerServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCreditCustomerServiceImpl.java index d9addfe85..471b5ec22 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCreditCustomerServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCreditCustomerServiceImpl.java @@ -1,4 +1,4 @@ - /** +/** * @Project: emis * @Title: EmisCreditCustomerServiceImpl.java * @author linfso @@ -11,13 +11,18 @@ package com.xdadan.erp.emis.service.impl; import java.math.BigDecimal; +import java.util.Date; import java.util.List; import java.util.Map; import cn.hutool.core.collection.CollectionUtil; -import com.xdadan.erp.emis.domain.EmisQuotePrice; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xdadan.erp.emis.domain.EmisTempCreditCustomer; import com.xdadan.erp.emis.domain.enumtype.EmisBizErrorType; import com.xdadan.erp.emis.domain.exception.EmisBizError; +import com.xdadan.erp.emis.mapper.EmisTempCreditCustomerMapper; +import com.xdadan.erp.emis.service.EmisBaseService; import com.xdadan.erp.emis.utils.WaybillHelper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -34,8 +39,8 @@ import com.xdadan.erp.emis.service.IEmisCreditCustomerService; */ @Slf4j @Service -public class EmisCreditCustomerServiceImpl implements IEmisCreditCustomerService -{ +public class EmisCreditCustomerServiceImpl extends EmisBaseService + implements IEmisCreditCustomerService { @Autowired private EmisCreditCustomerMapper emisCreditCustomerMapper; @@ -59,9 +64,17 @@ public class EmisCreditCustomerServiceImpl implements IEmisCreditCustomerService * @return 客户信用额度表 */ @Override - public List selectEmisCreditCustomerList(EmisCreditCustomer emisCreditCustomer) - { - return emisCreditCustomerMapper.selectEmisCreditCustomerList(emisCreditCustomer); + public List selectEmisCreditCustomerList(EmisCreditCustomer emisCreditCustomer) { + log.info("开始查询客户信用额度列表, 查询条件: {}", emisCreditCustomer); + List list = emisCreditCustomerMapper.selectEmisCreditCustomerList(emisCreditCustomer); + + // 计算每个记录的临时额度总额 + for (EmisCreditCustomer item : list) { + item.setTempCreditMoney(calculateCustomerTempCreditMoney(item)); + } + + log.info("查询到{}条客户信用额度记录", list.size()); + return list; } /** diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCreditSalesmenServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCreditSalesmenServiceImpl.java index ee9be4899..405c25850 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCreditSalesmenServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCreditSalesmenServiceImpl.java @@ -21,6 +21,7 @@ import com.xdadan.erp.emis.domain.EmisTempCreditSalesmen; import com.xdadan.erp.emis.domain.enumtype.EmisBizErrorType; import com.xdadan.erp.emis.domain.exception.EmisBizError; import com.xdadan.erp.emis.mapper.EmisTempCreditSalesmenMapper; +import com.xdadan.erp.emis.service.EmisBaseService; import com.xdadan.erp.emis.utils.WaybillHelper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -36,7 +37,7 @@ import com.xdadan.erp.emis.service.IEmisCreditSalesmenService; */ @Slf4j @Service -public class EmisCreditSalesmenServiceImpl implements IEmisCreditSalesmenService +public class EmisCreditSalesmenServiceImpl extends EmisBaseService implements IEmisCreditSalesmenService { @Autowired private EmisCreditSalesmenMapper emisCreditSalesmenMapper; @@ -68,50 +69,12 @@ public class EmisCreditSalesmenServiceImpl implements IEmisCreditSalesmenService // 计算每个记录的临时额度总额 for (EmisCreditSalesmen item : list) { - calculateAndSetTempCreditMoney(item); + item.setTempCreditMoney(calculateSalesmenTempCreditMoney(item)); } return list; } - /** - * 计算并设置临时额度总额 - * tempCreditMoney = creditMoney + tempCreditMoneyAdjust - * tempCreditMoneyAdjust取自emis_temp_credit_salesmen,有多条时取当前时间在范围内的一条,没有则为0 - * - * @param creditSalesmen 销售信用额度记录 - */ - private void calculateAndSetTempCreditMoney(EmisCreditSalesmen creditSalesmen) { - log.info("开始计算客户[{}]的临时额度总额", creditSalesmen.getAccCode()); - - // 获取基础信用额度 - BigDecimal baseCreditMoney = creditSalesmen.getCreditMoney() != null ? creditSalesmen.getCreditMoney() - : BigDecimal.ZERO; - - // 查询当前有效的临时额度调整 - EmisTempCreditSalesmen tempQuery = new EmisTempCreditSalesmen(); - tempQuery.setAccCode(creditSalesmen.getAccCode()); - List tempList = emisTempCreditSalesmenMapper - .selectEmisTempCreditSalesmenList(tempQuery); - - BigDecimal tempAdjust = BigDecimal.ZERO; - Date now = new Date(); - - for (EmisTempCreditSalesmen temp : tempList) { - if (temp.getStartDate() != null && temp.getEndDate() != null - && now.after(temp.getStartDate()) && now.before(temp.getEndDate())) { - tempAdjust = temp.getTempCreditMoneyAdjust() != null ? temp.getTempCreditMoneyAdjust() - : BigDecimal.ZERO; - break; - } - } - - BigDecimal totalCreditMoney = baseCreditMoney.add(tempAdjust); - creditSalesmen.setTempCreditMoney(totalCreditMoney); - log.info("客户[{}]的临时额度总额计算完成: 基础额度[{}] + 临时调整[{}] = 总额[{}]", - creditSalesmen.getAccCode(), baseCreditMoney, tempAdjust, totalCreditMoney); - } - /** * 检查是否重复 * @param emisCreditSalesmen diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTempCreditCustomerServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTempCreditCustomerServiceImpl.java new file mode 100644 index 000000000..4872416ae --- /dev/null +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTempCreditCustomerServiceImpl.java @@ -0,0 +1,220 @@ +package com.xdadan.erp.emis.service.impl; + +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import com.xdadan.erp.common.utils.DateUtils; +import com.xdadan.erp.emis.domain.EmisCreditCustomer; +import com.xdadan.erp.emis.domain.enumtype.EmisBizErrorType; +import com.xdadan.erp.emis.domain.exception.EmisBizError; +import com.xdadan.erp.emis.mapper.EmisCreditCustomerMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.xdadan.erp.emis.mapper.EmisTempCreditCustomerMapper; +import com.xdadan.erp.emis.domain.EmisTempCreditCustomer; +import com.xdadan.erp.emis.service.IEmisTempCreditCustomerService; + +/** + * 客户临时额度Service业务层处理 + * + * @author heyu + */ +@Slf4j +@Service +public class EmisTempCreditCustomerServiceImpl implements IEmisTempCreditCustomerService { + @Autowired + private EmisTempCreditCustomerMapper emisTempCreditCustomerMapper; + + @Autowired + private EmisCreditCustomerMapper emisCreditCustomerMapper; + + /** + * 查询客户临时额度列表 + * + * @param emisTempCreditCustomer 客户临时额度 + * @return 客户临时额度 + */ + @Override + public List selectEmisTempCreditCustomerList( + EmisTempCreditCustomer emisTempCreditCustomer) { + log.info("开始查询客户临时额度列表, 查询条件: {}", emisTempCreditCustomer); + List list = emisTempCreditCustomerMapper + .selectEmisTempCreditCustomerList(emisTempCreditCustomer); + log.info("查询到{}条客户临时额度记录", list.size()); + return list; + } + + /** + * 新增客户临时额度 + * + * @param emisTempCreditCustomer 客户临时额度 + * @return 结果 + */ + @Override + public int insertEmisTempCreditCustomer(EmisTempCreditCustomer emisTempCreditCustomer) throws EmisBizError { + log.info("开始新增客户临时额度记录: {}", emisTempCreditCustomer); + + // 获取客户信用额度信息 + EmisCreditCustomer query = new EmisCreditCustomer(); + query.setAccCode(emisTempCreditCustomer.getAccCode()); + EmisCreditCustomer creditInfo = emisCreditCustomerMapper.selectCreditCustomerInfo(query); + if (creditInfo == null) { + log.error("未找到客户[{}]对应的信用额度记录", emisTempCreditCustomer.getAccCode()); + throw new EmisBizError(EmisBizErrorType.NOT_EXISTS, "未找到对应的客户信用额度记录"); + } + + // 校验临时额度日期范围 + validateTempCreditDateRange(emisTempCreditCustomer, creditInfo); + + // 校验临时额度时间是否有交叉 + validateTempCreditTimeOverlap(emisTempCreditCustomer); + + int rows = emisTempCreditCustomerMapper.insertEmisTempCreditCustomer(emisTempCreditCustomer); + log.info("新增客户临时额度记录成功"); + return rows; + } + + /** + * 修改客户临时额度 + * + * @param emisTempCreditCustomer 客户临时额度 + * @return 结果 + */ + @Override + public int updateEmisTempCreditCustomer(EmisTempCreditCustomer emisTempCreditCustomer) throws EmisBizError { + log.info("开始修改客户临时额度记录: {}", emisTempCreditCustomer); + + // 获取原记录 + EmisTempCreditCustomer oldRecord = emisTempCreditCustomerMapper.selectEmisTempCreditCustomerById(emisTempCreditCustomer.getId()); + if (oldRecord == null) { + log.error("未找到ID为[{}]的客户临时额度记录", emisTempCreditCustomer.getId()); + throw new EmisBizError(EmisBizErrorType.NOT_EXISTS, "未找到对应的客户临时额度记录"); + } + + // 获取客户信用额度信息 + EmisCreditCustomer query = new EmisCreditCustomer(); + query.setAccCode(oldRecord.getAccCode()); + EmisCreditCustomer creditInfo = emisCreditCustomerMapper.selectCreditCustomerInfo(query); + if (creditInfo == null) { + log.error("未找到客户[{}]对应的信用额度记录", oldRecord.getAccCode()); + throw new EmisBizError(EmisBizErrorType.NOT_EXISTS, "未找到对应的客户信用额度记录"); + } + + // 校验临时额度日期范围 + validateTempCreditDateRange(emisTempCreditCustomer, creditInfo); + + // 校验临时额度时间是否有交叉 + validateTempCreditTimeOverlap(emisTempCreditCustomer); + + int rows = emisTempCreditCustomerMapper.updateEmisTempCreditCustomer(emisTempCreditCustomer); + log.info("修改客户临时额度记录成功"); + return rows; + } + + /** + * 批量删除客户临时额度 + * + * @param ids 需要删除的客户临时额度主键 + * @return 结果 + */ + @Override + public int deleteEmisTempCreditCustomerByIds(Long[] ids) { + log.info("开始批量删除客户临时额度记录, ids: {}", ids); + int rows = emisTempCreditCustomerMapper.deleteEmisTempCreditCustomerByIds(ids); + log.info("批量删除客户临时额度记录成功, 删除{}条记录", rows); + return rows; + } + + /** + * 校验临时额度日期范围是否在客户信用额度日期范围内 + * + * @param tempCredit 临时额度信息 + * @param creditInfo 客户信用额度信息 + */ + private void validateTempCreditDateRange(EmisTempCreditCustomer tempCredit, EmisCreditCustomer creditInfo) + throws EmisBizError { + if (tempCredit.getStartDate() == null || tempCredit.getEndDate() == null) { + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR1, "临时额度的开始日期和结束日期不能为空"); + } + + // 获取当前日期(年月日) + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + Date currentDate = calendar.getTime(); + + // 校验开始日期不能早于当前日期 + if (tempCredit.getStartDate().before(currentDate)) { + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR1, "临时额度的开始日期不能早于当前日期"); + } + + if (tempCredit.getStartDate().after(tempCredit.getEndDate())) { + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR1, "临时额度的开始日期不能晚于结束日期"); + } + + if (creditInfo.getStartDate() != null && tempCredit.getStartDate().before(creditInfo.getStartDate())) { + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR1, "临时额度的开始日期不能早于客户信用额度的开始日期"); + } + + if (creditInfo.getEndDate() != null && tempCredit.getEndDate().after(creditInfo.getEndDate())) { + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR1, "临时额度的结束日期不能晚于客户信用额度的结束日期"); + } + } + + /** + * 校验临时额度时间是否有交叉 + * 同一个acc_code对应的多个start_date、end_date不能有交叉 + * + * @param tempCredit 临时额度信息 + */ + private void validateTempCreditTimeOverlap(EmisTempCreditCustomer tempCredit) throws EmisBizError { + log.info("开始校验客户[{}]的临时额度时间范围", tempCredit.getAccCode()); + + // 查询该客户的所有临时额度记录 + EmisTempCreditCustomer query = new EmisTempCreditCustomer(); + query.setAccCode(tempCredit.getAccCode()); + List existingCredits = selectEmisTempCreditCustomerList(query); + + // 检查新记录的时间范围是否与现有记录有交叉 + for (EmisTempCreditCustomer credit : existingCredits) { + if (credit.getId() != null && credit.getId().equals(tempCredit.getId())) { + continue; // 跳过当前正在修改的记录 + } + + // 检查时间范围是否有交叉 + if (isDateRangeOverlap(tempCredit.getStartDate(), tempCredit.getEndDate(), + credit.getStartDate(), credit.getEndDate())) { + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR1, + String.format("临时额度时间范围与现有记录交叉: 新记录[%s-%s], 现有记录[%s-%s]", + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", tempCredit.getStartDate()), + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", tempCredit.getEndDate()), + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", credit.getStartDate()), + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", credit.getEndDate()))); + } + } + + log.info("客户[{}]的临时额度时间范围校验通过", tempCredit.getAccCode()); + } + + /** + * 检查两个时间范围是否有交叉 + * + * @param start1 第一个时间范围的开始时间 + * @param end1 第一个时间范围的结束时间 + * @param start2 第二个时间范围的开始时间 + * @param end2 第二个时间范围的结束时间 + * @return true表示有交叉,false表示无交叉 + */ + private boolean isDateRangeOverlap(Date start1, Date end1, Date start2, Date end2) { + if (start1 == null || end1 == null || start2 == null || end2 == null) { + return false; + } + + // 检查是否有交叉 + return !(end1.before(start2) || start1.after(end2)); + } +} \ No newline at end of file diff --git a/emis-biz/src/main/resources/mapper/EmisCreditCustomerMapper.xml b/emis-biz/src/main/resources/mapper/EmisCreditCustomerMapper.xml index bb5616076..db067a87d 100644 --- a/emis-biz/src/main/resources/mapper/EmisCreditCustomerMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisCreditCustomerMapper.xml @@ -229,4 +229,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{id} + + \ No newline at end of file diff --git a/emis-biz/src/main/resources/mapper/EmisTempCreditCustomerMapper.xml b/emis-biz/src/main/resources/mapper/EmisTempCreditCustomerMapper.xml new file mode 100644 index 000000000..e6db327e7 --- /dev/null +++ b/emis-biz/src/main/resources/mapper/EmisTempCreditCustomerMapper.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + select t.id, t.acc_code, t.temp_credit_money_adjust, t.start_date, t.end_date, + t.remark, t.del_flag, t.create_by, t.create_time, t.update_by, t.update_time, + t.create_site, t.update_site, c.trans_type, d.customer_name + from emis_temp_credit_customer t + left join emis_credit_customer c on t.acc_code = c.acc_code and c.del_flag = '0' + left join emis_customer_user d on c.customer_code = d.customer_code and d.del_flag = '0' + + + + + + + + insert into emis_temp_credit_customer + + id, + acc_code, + temp_credit_money_adjust, + start_date, + end_date, + remark, + del_flag, + create_by, + create_time, + update_by, + update_time, + create_site, + update_site, + + + #{id}, + #{accCode}, + #{tempCreditMoneyAdjust}, + #{startDate}, + #{endDate}, + #{remark}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{createSite}, + #{updateSite}, + + + + + update emis_temp_credit_customer + + acc_code = #{accCode}, + temp_credit_money_adjust = #{tempCreditMoneyAdjust}, + start_date = #{startDate}, + end_date = #{endDate}, + remark = #{remark}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + create_site = #{createSite}, + update_site = #{updateSite}, + + where id = #{id} + + + + update emis_temp_credit_customer set del_flag = '1' where id = #{id} + + + + update emis_temp_credit_customer set del_flag = '1' where id in + + #{id} + + + \ No newline at end of file diff --git a/emis-biz/src/main/resources/mapper/EmisTempCreditSalesmenMapper.xml b/emis-biz/src/main/resources/mapper/EmisTempCreditSalesmenMapper.xml index 11e84f58f..e6a3a8c02 100644 --- a/emis-biz/src/main/resources/mapper/EmisTempCreditSalesmenMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisTempCreditSalesmenMapper.xml @@ -10,7 +10,6 @@ - From 86d3d5d74c13af08954ac495376d4bb97180057f Mon Sep 17 00:00:00 2001 From: aike <17730485278@139.com> Date: Thu, 17 Apr 2025 17:19:16 +0800 Subject: [PATCH 7/7] =?UTF-8?q?demand:=20=E4=B8=B4=E6=97=B6=E9=A2=9D?= =?UTF-8?q?=E5=BA=A6=E7=95=8C=E9=9D=A2=E8=87=AA=E6=B5=8B=E5=BE=AE=E8=B0=83?= =?UTF-8?q?=20committer:=20heyu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/EmisTempCreditSalesmenServiceImpl.java | 3 --- .../mapper/EmisTempCreditCustomerMapper.xml | 2 +- .../mapper/EmisTempCreditSalesmenMapper.xml | 17 +++++++---------- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTempCreditSalesmenServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTempCreditSalesmenServiceImpl.java index 7689ad7f5..281f0d209 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTempCreditSalesmenServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTempCreditSalesmenServiceImpl.java @@ -57,9 +57,6 @@ public class EmisTempCreditSalesmenServiceImpl implements IEmisTempCreditSalesme // 校验临时额度时间连续性 validateTempCreditTimeContinuity(emisTempCreditSalesmen); - // 设置销售员 - emisTempCreditSalesmen.setSalesmen(creditInfo.getSalesmen()); - int rows = emisTempCreditSalesmenMapper.insertEmisTempCreditSalesmen(emisTempCreditSalesmen); return rows; } diff --git a/emis-biz/src/main/resources/mapper/EmisTempCreditCustomerMapper.xml b/emis-biz/src/main/resources/mapper/EmisTempCreditCustomerMapper.xml index e6db327e7..95d77c885 100644 --- a/emis-biz/src/main/resources/mapper/EmisTempCreditCustomerMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisTempCreditCustomerMapper.xml @@ -30,7 +30,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and t.start_date = #{startDate} and t.end_date = #{endDate} and FIND_IN_SET(#{transType},c.trans_type) - and d.customer_name like concat('%', #{customerName}, '%') + and d.customer_name = #{customerName} and t.del_flag = '0' order by t.create_time desc diff --git a/emis-biz/src/main/resources/mapper/EmisTempCreditSalesmenMapper.xml b/emis-biz/src/main/resources/mapper/EmisTempCreditSalesmenMapper.xml index e6a3a8c02..f49b5247a 100644 --- a/emis-biz/src/main/resources/mapper/EmisTempCreditSalesmenMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisTempCreditSalesmenMapper.xml @@ -5,7 +5,6 @@ - @@ -13,15 +12,15 @@ - select t.id, t.acc_code, t.salesmen, t.temp_credit_money_adjust, + select t.id, t.acc_code, t.temp_credit_money_adjust, t.start_date, t.end_date, t.del_flag, t.create_by, t.create_time, - t.update_by, t.update_time, t.remark, t.create_site, t.update_site,c.trans_type + t.update_by, t.update_time, t.remark, t.create_site, t.update_site, c.trans_type, c.salesmen from emis_temp_credit_salesmen t left join emis_credit_salesmen c on t.acc_code = c.acc_code and c.del_flag = '0'