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-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-web/src/main/java/com/xdadan/erp/web/emis/EmisTempCreditSalesmenController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisTempCreditSalesmenController.java new file mode 100644 index 000000000..96aeee90f --- /dev/null +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisTempCreditSalesmenController.java @@ -0,0 +1,104 @@ + +/** + * @Project: emis + * @Title: EmisTempCreditSalesmenController.java + * @author linfso + * @date 2025-03-08 16:17:56 + * @Copyright: ShangHai Duta 2022 All rights reserved. + * @version v1.0 + * @Description:

销售临时额度 控制器

+ */ + +package com.xdadan.erp.web.emis; + +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.EmisTempCreditSalesmen; +import com.xdadan.erp.emis.domain.exception.EmisBizError; +import com.xdadan.erp.emis.service.IEmisTempCreditSalesmenService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 销售临时额度Controller + * + * @author heyu + * @date 2025-04-15 16:17:56 + */ +@RestController +@RequestMapping("/emis/emisTempCreditSalesmen") +public class EmisTempCreditSalesmenController extends BaseController +{ + @Autowired + private IEmisTempCreditSalesmenService emisTempCreditSalesmenService; + + /** + * 查询销售临时额度列表 + */ + @PreAuthorize("@ss.hasPermi('emis:emisTempCreditSalesmen:list')") + @GetMapping("/list") + public TableDataInfo list(EmisTempCreditSalesmen emisTempCreditSalesmen) + { + startPage(); + List list = emisTempCreditSalesmenService.selectEmisTempCreditSalesmenList(emisTempCreditSalesmen); + return getDataTable(list); + } + + /** + * 新增销售临时额度 + */ + @PreAuthorize("@ss.hasPermi('emis:emisTempCreditSalesmen:add')") + @Log(title = "销售临时额度", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody EmisTempCreditSalesmen emisTempCreditSalesmen) + { + try { + return toAjax(emisTempCreditSalesmenService.insertEmisTempCreditSalesmen(emisTempCreditSalesmen)); + }catch (Exception ex){ + ex.printStackTrace(); + // 返回子定义异常 + if(ex instanceof EmisBizError){ + return AjaxResult.error(ex.getMessage(),((EmisBizError)ex).getErrorCode()); + } + return AjaxResult.error("服务器异常,联系客服"); + } + + } + + /** + * 修改销售临时额度 + */ + @PreAuthorize("@ss.hasPermi('emis:emisTempCreditSalesmen:edit')") + @Log(title = "销售临时额度", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody EmisTempCreditSalesmen emisTempCreditSalesmen) + { + try { + return toAjax(emisTempCreditSalesmenService.updateEmisTempCreditSalesmen(emisTempCreditSalesmen)); + }catch (Exception ex){ + ex.printStackTrace(); + // 返回子定义异常 + if(ex instanceof EmisBizError){ + return AjaxResult.error(ex.getMessage(),((EmisBizError)ex).getErrorCode()); + } + return AjaxResult.error("服务器异常,联系客服"); + } + } + + /** + * 删除销售临时额度 + */ + @PreAuthorize("@ss.hasPermi('emis:emisTempCreditSalesmen:remove')") + @Log(title = "销售临时额度", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(emisTempCreditSalesmenService.deleteEmisTempCreditSalesmenByIds(ids)); + } +} 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 4eb5b730d..164a60972 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/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/EmisCreditSalesmen.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisCreditSalesmen.java index 43eac088a..8c9331b91 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 @@ -41,8 +41,14 @@ public class EmisCreditSalesmen extends BaseEntity private String salesmen; /* 信用额度 */ private BigDecimal creditMoney; + /* 临时额度 */ + private BigDecimal tempCreditMoney; /* 使用额度 */ 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/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 new file mode 100644 index 000000000..95440d504 --- /dev/null +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisTempCreditSalesmen.java @@ -0,0 +1,42 @@ +package com.xdadan.erp.emis.domain; + +import java.math.BigDecimal; +import java.util.Date; +import lombok.Data; +import com.xdadan.erp.common.annotation.Excel; +import com.xdadan.erp.common.core.domain.BaseEntity; + +/** + * 销售临时额度对象 emis_temp_credit_salesmen + * + * @author heyu + * @date 2025-04-15 16:17:56 + */ +@Data +public class EmisTempCreditSalesmen extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long id; + + /** 客户编码 */ + private String accCode; + + /** 销售员 */ + private String salesmen; + + /** 临时额度调整金额 */ + private BigDecimal tempCreditMoneyAdjust; + + /** 运输方式 **/ + private String transType; + + /** 开始日期 */ + @Excel(name = "开始日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date startDate; + + /** 结束日期 */ + @Excel(name = "结束日期", width = 30, 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/EmisWaybill.java b/emis-biz/src/main/java/com/xdadan/erp/emis/domain/EmisWaybill.java index b8187a940..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,10 +675,32 @@ 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) 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/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/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/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/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/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/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/mapper/EmisTempCreditSalesmenMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTempCreditSalesmenMapper.java new file mode 100644 index 000000000..6d0d5ea50 --- /dev/null +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisTempCreditSalesmenMapper.java @@ -0,0 +1,46 @@ +package com.xdadan.erp.emis.mapper; + +import com.xdadan.erp.emis.domain.EmisCreditSalesmen; +import com.xdadan.erp.emis.domain.EmisTempCreditSalesmen; +import org.apache.ibatis.annotations.Param; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +/** + * 销售临时额度Mapper接口 + * + * @author heyu + * @date 2025-04-15 + */ +public interface EmisTempCreditSalesmenMapper { + /** + * 新增销售临时额度 + */ + public int insertEmisTempCreditSalesmen(EmisTempCreditSalesmen emisTempCreditSalesmen); + + /** + * 查询销售临时额度列表 + */ + public List selectEmisTempCreditSalesmenList(EmisTempCreditSalesmen emisTempCreditSalesmen); + + /** + * 修改销售临时额度 + */ + public int updateEmisTempCreditSalesmen(EmisTempCreditSalesmen emisTempCreditSalesmen); + + /** + * 删除销售临时额度 + */ + public int deleteEmisTempCreditSalesmenByIds(Long[] ids); + + /** + * 查询销售信用额度信息 + * + * @param query 查询条件 + * @return 销售信用额度信息 + */ + public EmisCreditSalesmen selectCreditSalesmenInfo(EmisCreditSalesmen query); + +} \ 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 b3674d5bf..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 @@ -44,6 +44,7 @@ package com.xdadan.erp.emis.service; import java.math.BigDecimal; import java.util.*; + import java.util.stream.Collectors; /** * 运单列表Service业务层处理 @@ -153,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 { @@ -255,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, "超出信用额度"); @@ -266,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, "超出信用额度"); @@ -281,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, "超出信用额度"); @@ -292,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, "超出信用额度"); @@ -312,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, "超出信用额度"); @@ -323,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, "超出信用额度"); @@ -335,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; + } + /** * * 重新计算使用信用额度 @@ -1503,7 +1588,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 +1622,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/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/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/IEmisTempCreditSalesmenService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisTempCreditSalesmenService.java new file mode 100644 index 000000000..b18973950 --- /dev/null +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisTempCreditSalesmenService.java @@ -0,0 +1,56 @@ +/** +* @Project: emis +* @Title: EmisTempCreditSalesmenService.java +* @author heyu +* @date 2025-04-15 16:17:56 +* @version v1.0 +* @Description:

销售临时额度 服务类接口

+*/ +package com.xdadan.erp.emis.service; + +import com.xdadan.erp.emis.domain.EmisTempCreditSalesmen; +import com.xdadan.erp.emis.domain.exception.EmisBizError; + +import java.util.List; + +/** + * @ClassName EmisTempCreditSalesmenService + * @Description 销售临时额度 + * @author heyu + * @date 2025-04-15 16:17:56 + */ +public interface IEmisTempCreditSalesmenService { + + /** + * 新增销售临时额度 + * + * @param emisTempCreditSalesmen 销售临时额度 + * @return 结果 + */ + int insertEmisTempCreditSalesmen(EmisTempCreditSalesmen emisTempCreditSalesmen) throws EmisBizError; + + /** + * 查询销售临时额度列表 + * + * @param emisTempCreditSalesmen 销售临时额度 + * @return 销售临时额度集合 + */ + List selectEmisTempCreditSalesmenList(EmisTempCreditSalesmen emisTempCreditSalesmen); + + /** + * 修改销售临时额度 + * + * @param emisTempCreditSalesmen 销售临时额度 + * @return 结果 + */ + int updateEmisTempCreditSalesmen(EmisTempCreditSalesmen emisTempCreditSalesmen) throws EmisBizError; + + /** + * 批量删除销售临时额度 + * + * @param ids 需要删除的销售临时额度主键集合 + * @return 结果 + */ + int deleteEmisTempCreditSalesmenByIds(Long[] ids); + +} 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/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 5d766d1a1..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 @@ -1,4 +1,4 @@ - /** +/** * @Project: emis * @Title: EmisCreditSalesmenServiceImpl.java * @author linfso @@ -11,14 +11,17 @@ 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.alibaba.fastjson.JSON; -import com.xdadan.erp.emis.domain.EmisCreditCustomer; +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; @@ -34,11 +37,14 @@ 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; + @Autowired + private EmisTempCreditSalesmenMapper emisTempCreditSalesmenMapper; + /** * 查询销售信用额度 * @param id 销售信用额度主键 @@ -52,13 +58,21 @@ public class EmisCreditSalesmenServiceImpl implements IEmisCreditSalesmenService /** * 查询销售信用额度列表 + * * @param emisCreditSalesmen 销售信用额度 * @return 销售信用额度 */ @Override - public List selectEmisCreditSalesmenList(EmisCreditSalesmen emisCreditSalesmen) - { - return emisCreditSalesmenMapper.selectEmisCreditSalesmenList(emisCreditSalesmen); + public List selectEmisCreditSalesmenList(EmisCreditSalesmen emisCreditSalesmen) { + log.info("开始查询销售信用额度列表"); + List list = emisCreditSalesmenMapper.selectEmisCreditSalesmenList(emisCreditSalesmen); + + // 计算每个记录的临时额度总额 + for (EmisCreditSalesmen item : list) { + item.setTempCreditMoney(calculateSalesmenTempCreditMoney(item)); + } + + return list; } /** 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/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/java/com/xdadan/erp/emis/service/impl/EmisTempCreditSalesmenServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTempCreditSalesmenServiceImpl.java new file mode 100644 index 000000000..281f0d209 --- /dev/null +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTempCreditSalesmenServiceImpl.java @@ -0,0 +1,199 @@ +/** + * @Project: emis + * @Title: EmisTempCreditSalesmenServiceImpl.java + * @author heyu + * @date 2025-04-15 16:17:56 + * @version v1.0 + * @Description:

销售临时额度 实体类

+ */ + +package com.xdadan.erp.emis.service.impl; + +import java.math.BigDecimal; +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.EmisTempCreditSalesmen; +import com.xdadan.erp.emis.domain.EmisCreditSalesmen; +import com.xdadan.erp.emis.domain.enumtype.EmisBizErrorType; +import com.xdadan.erp.emis.domain.exception.EmisBizError; +import com.xdadan.erp.emis.mapper.EmisCreditSalesmenMapper; +import com.xdadan.erp.emis.mapper.EmisTempCreditSalesmenMapper; +import com.xdadan.erp.emis.service.IEmisTempCreditSalesmenService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * 销售临时额度Service业务层处理 + * + * @author heyu + * @date 2025-04-15 16:17:56 + */ +@Slf4j +@Service +public class EmisTempCreditSalesmenServiceImpl implements IEmisTempCreditSalesmenService { + + @Autowired + private EmisTempCreditSalesmenMapper emisTempCreditSalesmenMapper; + + @Override + public int insertEmisTempCreditSalesmen(EmisTempCreditSalesmen emisTempCreditSalesmen) throws EmisBizError { + // 获取销售信用额度信息 + EmisCreditSalesmen query = new EmisCreditSalesmen(); + query.setAccCode(emisTempCreditSalesmen.getAccCode()); + EmisCreditSalesmen creditInfo = emisTempCreditSalesmenMapper.selectCreditSalesmenInfo(query); + if (creditInfo == null) { + log.error("未找到客户[{}]对应的销售信用额度记录", emisTempCreditSalesmen.getAccCode()); + throw new EmisBizError(EmisBizErrorType.NOT_EXISTS, "未找到对应的销售信用额度记录"); + } + + // 校验临时额度日期范围 + validateTempCreditDateRange(emisTempCreditSalesmen, creditInfo); + + // 校验临时额度时间连续性 + validateTempCreditTimeContinuity(emisTempCreditSalesmen); + + int rows = emisTempCreditSalesmenMapper.insertEmisTempCreditSalesmen(emisTempCreditSalesmen); + return rows; + } + + @Override + public List selectEmisTempCreditSalesmenList( + EmisTempCreditSalesmen emisTempCreditSalesmen) { + List list = emisTempCreditSalesmenMapper + .selectEmisTempCreditSalesmenList(emisTempCreditSalesmen); + log.info("查询到{}条临时额度记录", list.size()); + return list; + } + + @Override + public int updateEmisTempCreditSalesmen(EmisTempCreditSalesmen emisTempCreditSalesmen) throws EmisBizError { + // 获取原记录的临时额度 + EmisTempCreditSalesmen oldRecord = new EmisTempCreditSalesmen(); + oldRecord.setId(emisTempCreditSalesmen.getId()); + List list = selectEmisTempCreditSalesmenList(oldRecord); + if (!list.isEmpty()) { + EmisTempCreditSalesmen original = list.get(0); + + // 获取当前信用额度 + EmisCreditSalesmen query = new EmisCreditSalesmen(); + query.setAccCode(original.getAccCode()); + EmisCreditSalesmen creditInfo = emisTempCreditSalesmenMapper.selectCreditSalesmenInfo(query); + if (creditInfo == null) { + log.error("未找到客户[{}]对应的销售信用额度记录", original.getAccCode()); + throw new EmisBizError(EmisBizErrorType.NOT_EXISTS, "未找到对应的销售信用额度记录"); + } + + // 校验临时额度日期范围 + validateTempCreditDateRange(emisTempCreditSalesmen, creditInfo); + + // 校验临时额度时间连续性 + validateTempCreditTimeContinuity(emisTempCreditSalesmen); + + int rows = emisTempCreditSalesmenMapper.updateEmisTempCreditSalesmen(emisTempCreditSalesmen); + + return rows; + } + return 0; + } + + /** + * 校验临时额度日期范围是否在销售信用额度日期范围内 + * + * @param tempCredit 临时额度信息 + * @param creditInfo 销售信用额度信息 + */ + private void validateTempCreditDateRange(EmisTempCreditSalesmen tempCredit, EmisCreditSalesmen 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 validateTempCreditTimeContinuity(EmisTempCreditSalesmen tempCredit) throws EmisBizError { + log.info("开始校验客户[{}]的临时额度时间范围", tempCredit.getAccCode()); + + // 查询该客户的所有临时额度记录 + EmisTempCreditSalesmen query = new EmisTempCreditSalesmen(); + query.setAccCode(tempCredit.getAccCode()); + List existingCredits = selectEmisTempCreditSalesmenList(query); + + // 检查新记录的时间范围是否与现有记录有交叉 + for (EmisTempCreditSalesmen credit : existingCredits) { + if (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)); + } + + @Override + public int deleteEmisTempCreditSalesmenByIds(Long[] ids) { + return emisTempCreditSalesmenMapper.deleteEmisTempCreditSalesmenByIds(ids); + } +} 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/EmisCreditSalesmenMapper.xml b/emis-biz/src/main/resources/mapper/EmisCreditSalesmenMapper.xml index 83c245d86..46de88355 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" @@ -121,6 +123,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, @@ -141,6 +145,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{salesmen}, #{creditMoney}, #{useMoney}, + #{overTermMoney}, + #{inTermMoney}, #{currency}, #{transType}, #{startDate}, @@ -163,6 +169,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/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 diff --git a/emis-biz/src/main/resources/mapper/EmisSettleSubBillMapper.xml b/emis-biz/src/main/resources/mapper/EmisSettleSubBillMapper.xml index 542bf5a27..0b2358c6c 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, @@ -626,8 +627,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where a.del_flag='0' and a.bill_code = #{billCode} - - + + + + and t.acc_code = #{accCode} + and t.start_date = #{startDate} + and t.end_date = #{endDate} + and FIND_IN_SET(#{transType},c.trans_type) + and d.customer_name = #{customerName} + and t.del_flag = '0' + + order by t.create_time desc + + + + + + 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 new file mode 100644 index 000000000..f49b5247a --- /dev/null +++ b/emis-biz/src/main/resources/mapper/EmisTempCreditSalesmenMapper.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + 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, 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' + + + + + + + + + + insert into emis_temp_credit_salesmen + + acc_code, + temp_credit_money_adjust, + start_date, + end_date, + del_flag, + create_by, + create_time, + update_by, + update_time, + remark, + create_site, + update_site, + + + #{accCode}, + #{tempCreditMoneyAdjust}, + #{startDate}, + #{endDate}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{remark}, + #{createSite}, + #{updateSite}, + + + + + update emis_temp_credit_salesmen + + acc_code = #{accCode}, + 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 diff --git a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml index 13334584e..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, @@ -2440,6 +2445,11 @@ update_time, create_site, update_site, + lading_bill_code , + company_code , + departure_port , + destination_port , + box_quantity , #{orderSn}, @@ -2619,6 +2629,11 @@ #{updateTime}, #{createSite}, #{updateSite}, + #{ladingBillCode}, + #{companyCode}, + #{departurePort}, + #{destinationPort}, + #{boxQuantity}, @@ -2800,6 +2815,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}