Merge pull request 'develop' (#1) from develop into master
Reviewed-on: http://git.xdadan.loc/tanex/emis-service/pulls/1
This commit is contained in:
commit
b6873d718a
@ -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)
|
||||
|
||||
@ -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<EmisTempCreditCustomer> 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));
|
||||
}
|
||||
}
|
||||
@ -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: <p> 销售临时额度 控制器 </p>
|
||||
*/
|
||||
|
||||
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<EmisTempCreditSalesmen> 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));
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -65,4 +65,6 @@ public class EmisCreditCustomer extends BaseEntity
|
||||
private String payee;
|
||||
private String salesmen;
|
||||
|
||||
/** 临时额度总额 */
|
||||
private BigDecimal tempCreditMoney;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
/* 运输方式 */
|
||||
|
||||
@ -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;
|
||||
|
||||
}
|
||||
@ -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;
|
||||
|
||||
}
|
||||
@ -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;
|
||||
|
||||
}
|
||||
|
||||
@ -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: <p> 运单列表 实体类 </p>
|
||||
*/
|
||||
|
||||
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<EmisSettleSubBillFeeitem> settleSubBillFeeitemList;
|
||||
}
|
||||
@ -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;
|
||||
|
||||
}
|
||||
|
||||
@ -99,4 +99,12 @@ public interface EmisCreditCustomerMapper extends BaseMapper<EmisCreditCustomer>
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteEmisCreditCustomerByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 根据条件查询客户信用额度信息
|
||||
*
|
||||
* @param emisCreditCustomer 客户信用额度
|
||||
* @return 客户信用额度
|
||||
*/
|
||||
EmisCreditCustomer selectCreditCustomerInfo(EmisCreditCustomer emisCreditCustomer);
|
||||
}
|
||||
|
||||
@ -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 <p> 子账单费用明细 Mapper 接口 </p>
|
||||
@ -80,4 +84,6 @@ public interface EmisSettleSubBillFeeitemMapper extends BaseMapper<EmisSettleSub
|
||||
|
||||
|
||||
public int deleteEmisSettleSubBillFeeitemByBillCode(String billCode);
|
||||
|
||||
List<EmisWaybillAndFeeitem> selectEmisWaybillListByBillCodeList(@Param("billCodeList") List<String> billCodeList);
|
||||
}
|
||||
|
||||
@ -156,4 +156,5 @@ public interface EmisSettleSubBillMapper extends BaseMapper<EmisSettleSubBill>
|
||||
|
||||
public int deleteEmisSettleSubBillByBillCode(String billCode);
|
||||
|
||||
List<EmisSettleSubBill> querysSettleSubBillByBillCodeList(@Param("billCodeList") List<String> billCodeList);
|
||||
}
|
||||
|
||||
@ -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<EmisTempCreditCustomer> 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);
|
||||
}
|
||||
@ -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<EmisTempCreditSalesmen> selectEmisTempCreditSalesmenList(EmisTempCreditSalesmen emisTempCreditSalesmen);
|
||||
|
||||
/**
|
||||
* 修改销售临时额度
|
||||
*/
|
||||
public int updateEmisTempCreditSalesmen(EmisTempCreditSalesmen emisTempCreditSalesmen);
|
||||
|
||||
/**
|
||||
* 删除销售临时额度
|
||||
*/
|
||||
public int deleteEmisTempCreditSalesmenByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 查询销售信用额度信息
|
||||
*
|
||||
* @param query 查询条件
|
||||
* @return 销售信用额度信息
|
||||
*/
|
||||
public EmisCreditSalesmen selectCreditSalesmenInfo(EmisCreditSalesmen query);
|
||||
|
||||
}
|
||||
@ -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<EmisTempCreditSalesmen> 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<EmisTempCreditCustomer> 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<EmisWaybill> 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<EmisWaybill> emisWaybillList) {
|
||||
List<EmisWaybill> inTermList = filterInTermEmisWaybillList(emisWaybillList);
|
||||
List<String> billCodeList = inTermList.stream().map(EmisWaybill::getBillCode).collect(Collectors.toList());
|
||||
log.info("cd getInTermMoney , billCodeList,{}", billCodeList);
|
||||
if (CollectionUtil.isEmpty(billCodeList)) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
List<EmisSettleSubBill> 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<EmisWaybill> filterOverTermEmisWaybillList(List<EmisWaybill> list) {
|
||||
log.info("cd filterOverTermEmisWaybillList , emisWaybillList,{}", list);
|
||||
if (CollectionUtil.isEmpty(list)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
List<EmisWaybill> 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<EmisWaybill> filterInTermEmisWaybillList(List<EmisWaybill> list) {
|
||||
log.info("cd filterInTermEmisWaybillList , emisWaybillList,{}", list);
|
||||
if (CollectionUtil.isEmpty(list)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
List<EmisWaybill> overTermList = filterOverTermEmisWaybillList(list);
|
||||
if (CollectionUtil.isEmpty(overTermList)) {
|
||||
return list;
|
||||
}
|
||||
List<EmisWaybill> inTermList = list.stream()
|
||||
.filter(item -> !overTermList.contains(item))
|
||||
.collect(Collectors.toList());
|
||||
log.info("success.filterInTermEmisWaybillList , inTermList,{}", inTermList);
|
||||
return inTermList;
|
||||
}
|
||||
|
||||
private List<EmisWaybill> 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<EmisWaybill> emisWaybillList = emisWaybillMapper.selectEmisWaybillList(emisWaybill);
|
||||
return emisWaybillList;
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
public void redoGenerateBill(String billCode) throws EmisBizError{
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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<EmisTempCreditCustomer> 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);
|
||||
|
||||
}
|
||||
@ -0,0 +1,56 @@
|
||||
/**
|
||||
* @Project: emis
|
||||
* @Title: EmisTempCreditSalesmenService.java
|
||||
* @author heyu
|
||||
* @date 2025-04-15 16:17:56
|
||||
* @version v1.0
|
||||
* @Description: <p> 销售临时额度 服务类接口 </p>
|
||||
*/
|
||||
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<EmisTempCreditSalesmen> selectEmisTempCreditSalesmenList(EmisTempCreditSalesmen emisTempCreditSalesmen);
|
||||
|
||||
/**
|
||||
* 修改销售临时额度
|
||||
*
|
||||
* @param emisTempCreditSalesmen 销售临时额度
|
||||
* @return 结果
|
||||
*/
|
||||
int updateEmisTempCreditSalesmen(EmisTempCreditSalesmen emisTempCreditSalesmen) throws EmisBizError;
|
||||
|
||||
/**
|
||||
* 批量删除销售临时额度
|
||||
*
|
||||
* @param ids 需要删除的销售临时额度主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
int deleteEmisTempCreditSalesmenByIds(Long[] ids);
|
||||
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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<EmisCreditCustomer> selectEmisCreditCustomerList(EmisCreditCustomer emisCreditCustomer)
|
||||
{
|
||||
return emisCreditCustomerMapper.selectEmisCreditCustomerList(emisCreditCustomer);
|
||||
public List<EmisCreditCustomer> selectEmisCreditCustomerList(EmisCreditCustomer emisCreditCustomer) {
|
||||
log.info("开始查询客户信用额度列表, 查询条件: {}", emisCreditCustomer);
|
||||
List<EmisCreditCustomer> list = emisCreditCustomerMapper.selectEmisCreditCustomerList(emisCreditCustomer);
|
||||
|
||||
// 计算每个记录的临时额度总额
|
||||
for (EmisCreditCustomer item : list) {
|
||||
item.setTempCreditMoney(calculateCustomerTempCreditMoney(item));
|
||||
}
|
||||
|
||||
log.info("查询到{}条客户信用额度记录", list.size());
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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<EmisCreditSalesmen> selectEmisCreditSalesmenList(EmisCreditSalesmen emisCreditSalesmen)
|
||||
{
|
||||
return emisCreditSalesmenMapper.selectEmisCreditSalesmenList(emisCreditSalesmen);
|
||||
public List<EmisCreditSalesmen> selectEmisCreditSalesmenList(EmisCreditSalesmen emisCreditSalesmen) {
|
||||
log.info("开始查询销售信用额度列表");
|
||||
List<EmisCreditSalesmen> list = emisCreditSalesmenMapper.selectEmisCreditSalesmenList(emisCreditSalesmen);
|
||||
|
||||
// 计算每个记录的临时额度总额
|
||||
for (EmisCreditSalesmen item : list) {
|
||||
item.setTempCreditMoney(calculateSalesmenTempCreditMoney(item));
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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<String, Object> textMap = new HashMap<>();
|
||||
|
||||
// 总账单
|
||||
EmisSettleBill bill = emisBaseService.getSettleBillBySettleBillNo(emisSettleBill.getSettleBillNo());
|
||||
|
||||
// 子账单
|
||||
List<EmisSettleSubBill> list = emisBaseService.selectSubBillListBySettleBillNo(emisSettleBill.getSettleBillNo());
|
||||
|
||||
// 运单号
|
||||
List<String> billCodeList = list.stream()
|
||||
.map(EmisSettleSubBill::getBillCode)
|
||||
.collect(Collectors.toList());
|
||||
if (org.springframework.util.CollectionUtils.isEmpty(list) || org.springframework.util.CollectionUtils.isEmpty(billCodeList)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 根据运单号查询运单详情
|
||||
List<EmisWaybillAndFeeitem> emisWaybills = emisSettleSubBillFeeitemMapper.selectEmisWaybillListByBillCodeList(billCodeList);
|
||||
Map<String, EmisWaybillAndFeeitem> 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<EmisSettleSubBillFeeitem> 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<List<String>> 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<List<String>> 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<List<String>> 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<List<String>> 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<String> excelKey = emisWaybillMap.keySet().stream().collect(Collectors.toList());
|
||||
int num = 3;
|
||||
for (int i = 0; i < excelKey.size(); i++) {
|
||||
List<List<String>> result = new ArrayList<>();
|
||||
Map<String, Object> subtotalMap = new HashMap<>();
|
||||
|
||||
EmisWaybillAndFeeitem emisWaybill = emisWaybillMap.get(excelKey.get(i));
|
||||
List<EmisSettleSubBillFeeitem> 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<List<String>> 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<List<String>> 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<List<String>> buildHeader() {
|
||||
List<List<String>> 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<EmisSettleSubBillFeeitem> emisWaybillFeeitemList, Map<String, Object> textMap) {
|
||||
Map<String, List<EmisSettleSubBillFeeitem>> emisWaybillFeeitemMap = emisWaybillFeeitemList.stream()
|
||||
.collect(Collectors.groupingBy(EmisSettleSubBillFeeitem::getCurrency));
|
||||
|
||||
if (MapUtil.isNotEmpty(emisWaybillFeeitemMap)) {
|
||||
Set<String> 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<EmisSettleSubBillFeeitem> emisWaybillFeeitemList, Map<String, Object> textMap) {
|
||||
Map<String, List<EmisSettleSubBillFeeitem>> emisWaybillFeeitemMap = emisWaybillFeeitemList.stream()
|
||||
.collect(Collectors.groupingBy(EmisSettleSubBillFeeitem::getCurrency));
|
||||
|
||||
if (MapUtil.isNotEmpty(emisWaybillFeeitemMap)) {
|
||||
Set<String> 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<String, Object> 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<String, Object> 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");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 修改结算总账单
|
||||
|
||||
@ -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<EmisTempCreditCustomer> selectEmisTempCreditCustomerList(
|
||||
EmisTempCreditCustomer emisTempCreditCustomer) {
|
||||
log.info("开始查询客户临时额度列表, 查询条件: {}", emisTempCreditCustomer);
|
||||
List<EmisTempCreditCustomer> 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<EmisTempCreditCustomer> 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));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,199 @@
|
||||
/**
|
||||
* @Project: emis
|
||||
* @Title: EmisTempCreditSalesmenServiceImpl.java
|
||||
* @author heyu
|
||||
* @date 2025-04-15 16:17:56
|
||||
* @version v1.0
|
||||
* @Description: <p> 销售临时额度 实体类 </p>
|
||||
*/
|
||||
|
||||
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<EmisTempCreditSalesmen> selectEmisTempCreditSalesmenList(
|
||||
EmisTempCreditSalesmen emisTempCreditSalesmen) {
|
||||
List<EmisTempCreditSalesmen> 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<EmisTempCreditSalesmen> 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<EmisTempCreditSalesmen> 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);
|
||||
}
|
||||
}
|
||||
@ -229,4 +229,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
<select id="selectCreditCustomerInfo" parameterType="EmisCreditCustomer" resultMap="EmisCreditCustomerResult">
|
||||
select
|
||||
a.id, a.acc_code, a.customer_code, a.monthly_pay_code, a.credit_money,
|
||||
a.use_money, a.currency, a.trans_type, a.start_date, a.end_date, a.bl_open,
|
||||
b.customer_name
|
||||
from emis_credit_customer a
|
||||
inner join emis_customer_user b on a.customer_code = b.customer_code and b.del_flag = '0'
|
||||
<where>
|
||||
a.del_flag = '0'
|
||||
<if test="accCode != null and accCode != ''"> and a.acc_code = #{accCode}</if>
|
||||
<if test="customerCode != null and customerCode != ''"> and a.customer_code = #{customerCode}</if>
|
||||
<if test="monthlyPayCode != null and monthlyPayCode != ''"> and a.monthly_pay_code = #{monthlyPayCode}</if>
|
||||
<if test="transType != null and transType != ''"> and FIND_IN_SET(#{transType}, a.trans_type)</if>
|
||||
<if test="customerName != null and customerName != ''"> and b.customer_name like concat('%', #{customerName}, '%')</if>
|
||||
</where>
|
||||
</select>
|
||||
</mapper>
|
||||
@ -10,6 +10,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="salesmen" column="salesmen" />
|
||||
<result property="creditMoney" column="credit_money" />
|
||||
<result property="useMoney" column="use_money" />
|
||||
<result property="overTermMoney" column="over_term_money" />
|
||||
<result property="inTermMoney" column="in_term_money" />
|
||||
<result property="currency" column="currency" />
|
||||
<result property="transType" column="trans_type" />
|
||||
<result property="startDate" column="start_date" />
|
||||
@ -22,7 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</sql>
|
||||
|
||||
<select id="selectEmisCreditSalesmenList" parameterType="EmisCreditSalesmen" resultMap="EmisCreditSalesmenResult">
|
||||
select id, acc_code, salesmen, credit_money, use_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
|
||||
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 a
|
||||
<where>
|
||||
del_flag='0'
|
||||
@ -82,7 +84,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</select>
|
||||
|
||||
<select id="selectEmisCreditSalesmenById" parameterType="Long" resultMap="EmisCreditSalesmenResult">
|
||||
select id, acc_code, salesmen, credit_money, use_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
|
||||
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 a
|
||||
where a.id = #{id}
|
||||
</select>
|
||||
@ -121,6 +123,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="salesmen != null and salesmen != ''">salesmen,</if>
|
||||
<if test="creditMoney != null">credit_money,</if>
|
||||
<if test="useMoney != null">use_money,</if>
|
||||
<if test="overTermMoney != null">over_term_money,</if>
|
||||
<if test="inTermMoney != null">in_term_Money,</if>
|
||||
<if test="currency != null and currency != ''">currency,</if>
|
||||
<if test="transType != null and transType != ''">trans_type,</if>
|
||||
<if test="startDate != null">start_date,</if>
|
||||
@ -141,6 +145,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="salesmen != null and salesmen != ''">#{salesmen},</if>
|
||||
<if test="creditMoney != null">#{creditMoney},</if>
|
||||
<if test="useMoney != null">#{useMoney},</if>
|
||||
<if test="overTermMoney != null">#{overTermMoney},</if>
|
||||
<if test="inTermMoney != null">#{inTermMoney},</if>
|
||||
<if test="currency != null and currency != ''">#{currency},</if>
|
||||
<if test="transType != null and transType != ''">#{transType},</if>
|
||||
<if test="startDate != null">#{startDate},</if>
|
||||
@ -163,6 +169,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="creditMoney != null">credit_money = #{creditMoney},</if>
|
||||
<if test="useMoney != null">use_money = #{useMoney},</if>
|
||||
<if test="overTermMoney != null">over_term_money = #{overTermMoney},</if>
|
||||
<if test="inTermMoney != null">in_term_Money = #{inTermMoney},</if>
|
||||
<if test="currency != null and currency != ''">currency = #{currency},</if>
|
||||
<if test="transType != null and transType != ''">trans_type = #{transType},</if>
|
||||
<if test="startDate != null">start_date = #{startDate},</if>
|
||||
|
||||
@ -16,10 +16,50 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="orderNum" column="order_num" />
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="EmisWaybillAndFeeitemResult" type="com.xdadan.erp.emis.domain.EmisWaybillAndFeeitem">
|
||||
<!-- <id property="uuid" column="uuid"/>-->
|
||||
<result property="billCode" column="bill_code"/>
|
||||
<result property="ladingBillCode" column="lading_bill_code"/>
|
||||
<result property="companyCode" column="company_code"/>
|
||||
<result property="departurePort" column="departure_port"/>
|
||||
<result property="destinationPort" column="destination_port"/>
|
||||
<result property="boxQuantity" column="box_quantity"/>
|
||||
<result property="parcelQty" column="parcel_qty"/>
|
||||
<result property="billWeight" column="bill_weight"/>
|
||||
<result property="totalVolume" column="total_volume"/>
|
||||
<collection property="settleSubBillFeeitemList" javaType="java.util.List" resultMap="SettleSubBillFeeitemResult"/>
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="SettleSubBillFeeitemResult" type="com.xdadan.erp.emis.domain.EmisSettleSubBillFeeitem">
|
||||
<result property="subBillNo" column="sub_bill_no"/>
|
||||
<result property="billCode" column="bill_code"/>
|
||||
<result property="feeCode" column="fee_code"/>
|
||||
<result property="feeName" column="fee_name"/>
|
||||
<result property="billFee" column="bill_fee"/>
|
||||
<result property="origFee" column="orig_fee"/>
|
||||
<result property="currency" column="currency"/>
|
||||
<result property="orderNum" column="order_num"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectEmisSettleSubBillFeeitemVo">
|
||||
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
|
||||
</sql>
|
||||
|
||||
<sql id="selectEmisWaybillAndFeeitemVo">
|
||||
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'
|
||||
</sql>
|
||||
|
||||
<select id="selectFeeitemListBySubBillNo" parameterType="String" resultMap="EmisSettleSubBillFeeitemResult">
|
||||
select id, sub_bill_no, bill_code, fee_code, fee_name, bill_fee, orig_fee, currency, order_num,remark
|
||||
from emis_settle_sub_bill_feeitem a
|
||||
@ -78,6 +118,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
from emis_settle_sub_bill_feeitem a
|
||||
where a.id = #{id}
|
||||
</select>
|
||||
|
||||
<!--根据运单号列表获取运单信息-->
|
||||
<select id="selectEmisWaybillListByBillCodeList" parameterType="list" resultMap="EmisWaybillAndFeeitemResult">
|
||||
<include refid="selectEmisWaybillAndFeeitemVo"/>
|
||||
<where>
|
||||
a.bill_code in
|
||||
<foreach collection="billCodeList" item="billCode" open="(" separator="," close=")">
|
||||
#{billCode}
|
||||
</foreach>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<insert id="insertEmisSettleSubBillFeeitem" parameterType="EmisSettleSubBillFeeitem" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into emis_settle_sub_bill_feeitem
|
||||
|
||||
@ -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}
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
<select id="querysSettleSubBillByBillCodeList" parameterType="String" resultMap="EmisSettleSubBillResult">
|
||||
select id, bill_no, parent_bill_no, settle_bill_no, bill_code, bill_date, bill_fee, currency, settle_type, bl_split, bl_merge, bill_month, cust_no, cust_name, customer_code, customer_name, invoiced_money, reced_money, satisfy_money, allowance_money, deduction_money, other_money, satisfy_reason, allowance_reason, deduction_reason, other_reason, open_bill_status, payment_status, charge_status, payee, salesmen, bl_special_quote, bl_sensitive, bl_confirm_center, confirm_center_date, confirm_center_note, confirm_center_man_code, confirm_center_code, bl_confirm_site, confirm_site_date, confirm_site_man_code, confirm_site_note, confirm_site_code, del_flag, create_by, create_time, update_by, update_time, create_site, update_site
|
||||
from emis_settle_sub_bill a
|
||||
where a.del_flag='0' and a.bill_code in
|
||||
<foreach item="billCode" collection="billCodeList" open="(" separator="," close=")">
|
||||
#{billCode}
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
<select id="selectSubBillListBySettleBillNo" parameterType="String" resultMap="EmisSettleSubBillResult">
|
||||
select id, bill_no, parent_bill_no, settle_bill_no, bill_code, bill_date, bill_fee, currency, settle_type, bl_split, bl_merge, bill_month, cust_no, cust_name, customer_code, customer_name, invoiced_money, reced_money, satisfy_money, allowance_money, deduction_money, other_money, satisfy_reason, allowance_reason, deduction_reason, other_reason, open_bill_status, payment_status, charge_status, payee, salesmen, bl_special_quote, bl_sensitive, bl_confirm_center, confirm_center_date, confirm_center_note, confirm_center_man_code, confirm_center_code, bl_confirm_site, confirm_site_date, confirm_site_man_code, confirm_site_note, confirm_site_code, del_flag, create_by, create_time, update_by, update_time, create_site, update_site
|
||||
|
||||
@ -0,0 +1,108 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.xdadan.erp.emis.mapper.EmisTempCreditCustomerMapper">
|
||||
|
||||
<resultMap type="EmisTempCreditCustomer" id="EmisTempCreditCustomerResult"
|
||||
extends="com.xdadan.erp.emis.mapper.EmisBaseMapper.EmisBaseResult">
|
||||
<result property="id" column="id"/>
|
||||
<result property="accCode" column="acc_code"/>
|
||||
<result property="tempCreditMoneyAdjust" column="temp_credit_money_adjust"/>
|
||||
<result property="startDate" column="start_date"/>
|
||||
<result property="endDate" column="end_date"/>
|
||||
<result property="transType" column="trans_type"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectEmisTempCreditCustomerVo">
|
||||
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'
|
||||
</sql>
|
||||
|
||||
<select id="selectEmisTempCreditCustomerList" parameterType="EmisTempCreditCustomer" resultMap="EmisTempCreditCustomerResult">
|
||||
<include refid="selectEmisTempCreditCustomerVo"/>
|
||||
<where>
|
||||
<if test="accCode != null and accCode != ''"> and t.acc_code = #{accCode}</if>
|
||||
<if test="startDate != null "> and t.start_date = #{startDate}</if>
|
||||
<if test="endDate != null "> and t.end_date = #{endDate}</if>
|
||||
<if test="transType != null and transType != ''"> and FIND_IN_SET(#{transType},c.trans_type)</if>
|
||||
<if test="customerName != null and customerName != ''"> and d.customer_name = #{customerName}</if>
|
||||
and t.del_flag = '0'
|
||||
</where>
|
||||
order by t.create_time desc
|
||||
</select>
|
||||
|
||||
<select id="selectEmisTempCreditCustomerById" parameterType="Long" resultMap="EmisTempCreditCustomerResult">
|
||||
select 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
|
||||
from emis_temp_credit_customer
|
||||
where id = #{id} and del_flag = '0'
|
||||
</select>
|
||||
|
||||
<insert id="insertEmisTempCreditCustomer" parameterType="EmisTempCreditCustomer">
|
||||
insert into emis_temp_credit_customer
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null">id,</if>
|
||||
<if test="accCode != null">acc_code,</if>
|
||||
<if test="tempCreditMoneyAdjust != null">temp_credit_money_adjust,</if>
|
||||
<if test="startDate != null">start_date,</if>
|
||||
<if test="endDate != null">end_date,</if>
|
||||
<if test="remark != null">remark,</if>
|
||||
<if test="delFlag != null">del_flag,</if>
|
||||
<if test="createBy != null">create_by,</if>
|
||||
<if test="createTime != null">create_time,</if>
|
||||
<if test="updateBy != null">update_by,</if>
|
||||
<if test="updateTime != null">update_time,</if>
|
||||
<if test="createSite != null">create_site,</if>
|
||||
<if test="updateSite != null">update_site,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null">#{id},</if>
|
||||
<if test="accCode != null">#{accCode},</if>
|
||||
<if test="tempCreditMoneyAdjust != null">#{tempCreditMoneyAdjust},</if>
|
||||
<if test="startDate != null">#{startDate},</if>
|
||||
<if test="endDate != null">#{endDate},</if>
|
||||
<if test="remark != null">#{remark},</if>
|
||||
<if test="delFlag != null">#{delFlag},</if>
|
||||
<if test="createBy != null">#{createBy},</if>
|
||||
<if test="createTime != null">#{createTime},</if>
|
||||
<if test="updateBy != null">#{updateBy},</if>
|
||||
<if test="updateTime != null">#{updateTime},</if>
|
||||
<if test="createSite != null">#{createSite},</if>
|
||||
<if test="updateSite != null">#{updateSite},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<update id="updateEmisTempCreditCustomer" parameterType="EmisTempCreditCustomer">
|
||||
update emis_temp_credit_customer
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="accCode != null">acc_code = #{accCode},</if>
|
||||
<if test="tempCreditMoneyAdjust != null">temp_credit_money_adjust = #{tempCreditMoneyAdjust},</if>
|
||||
<if test="startDate != null">start_date = #{startDate},</if>
|
||||
<if test="endDate != null">end_date = #{endDate},</if>
|
||||
<if test="remark != null">remark = #{remark},</if>
|
||||
<if test="delFlag != null">del_flag = #{delFlag},</if>
|
||||
<if test="createBy != null">create_by = #{createBy},</if>
|
||||
<if test="createTime != null">create_time = #{createTime},</if>
|
||||
<if test="updateBy != null">update_by = #{updateBy},</if>
|
||||
<if test="updateTime != null">update_time = #{updateTime},</if>
|
||||
<if test="createSite != null">create_site = #{createSite},</if>
|
||||
<if test="updateSite != null">update_site = #{updateSite},</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
<delete id="deleteEmisTempCreditCustomerById" parameterType="Long">
|
||||
update emis_temp_credit_customer set del_flag = '1' where id = #{id}
|
||||
</delete>
|
||||
|
||||
<delete id="deleteEmisTempCreditCustomerByIds" parameterType="String">
|
||||
update emis_temp_credit_customer set del_flag = '1' where id in
|
||||
<foreach item="id" collection="array" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
</mapper>
|
||||
@ -0,0 +1,123 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.xdadan.erp.emis.mapper.EmisTempCreditSalesmenMapper">
|
||||
|
||||
<resultMap type="com.xdadan.erp.emis.domain.EmisTempCreditSalesmen" id="EmisTempCreditSalesmenResult" extends="com.xdadan.erp.emis.mapper.EmisBaseMapper.EmisBaseResult">
|
||||
<result property="id" column="id"/>
|
||||
<result property="accCode" column="acc_code"/>
|
||||
<result property="tempCreditMoneyAdjust" column="temp_credit_money_adjust"/>
|
||||
<result property="startDate" column="start_date"/>
|
||||
<result property="endDate" column="end_date"/>
|
||||
<result property="transType" column="trans_type"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectEmisTempCreditSalesmenVo">
|
||||
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'
|
||||
</sql>
|
||||
|
||||
<select id="selectCreditSalesmenInfo" parameterType="com.xdadan.erp.emis.domain.EmisCreditSalesmen" resultType="com.xdadan.erp.emis.domain.EmisCreditSalesmen">
|
||||
select id, acc_code, 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
|
||||
</select>
|
||||
|
||||
<select id="selectEmisTempCreditSalesmenList" parameterType="com.xdadan.erp.emis.domain.EmisTempCreditSalesmen"
|
||||
resultMap="EmisTempCreditSalesmenResult">
|
||||
<include refid="selectEmisTempCreditSalesmenVo"/>
|
||||
<where>
|
||||
<if test="accCode != null and accCode != ''">
|
||||
AND t.acc_code = #{accCode}
|
||||
</if>
|
||||
|
||||
<if test="tempCreditMoneyAdjust != null ">
|
||||
AND t.temp_credit_money_adjust = #{tempCreditMoneyAdjust}
|
||||
</if>
|
||||
<if test="salesmen != null and salesmen != ''">
|
||||
AND c.salesmen = #{salesmen}
|
||||
</if>
|
||||
<if test="transType != null and transType != ''">
|
||||
AND FIND_IN_SET(#{transType},c.trans_type)</if>
|
||||
<if test="startDate != null">
|
||||
AND t.start_date = #{startDate}
|
||||
</if>
|
||||
<if test="endDate != null">
|
||||
AND t.end_date = #{endDate}
|
||||
</if>
|
||||
AND t.del_flag = '0'
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<select id="selectEmisTempCreditSalesmenById" parameterType="Long" resultMap="EmisTempCreditSalesmenResult">
|
||||
<include refid="selectEmisTempCreditSalesmenVo"/>
|
||||
where id = #{id} and del_flag = '0'
|
||||
</select>
|
||||
|
||||
<insert id="insertEmisTempCreditSalesmen" parameterType="com.xdadan.erp.emis.domain.EmisTempCreditSalesmen" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into emis_temp_credit_salesmen
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="accCode != null">acc_code,</if>
|
||||
<if test="tempCreditMoneyAdjust != null">temp_credit_money_adjust,</if>
|
||||
<if test="startDate != null">start_date,</if>
|
||||
<if test="endDate != null">end_date,</if>
|
||||
<if test="delFlag != null">del_flag,</if>
|
||||
<if test="createBy != null">create_by,</if>
|
||||
<if test="createTime != null">create_time,</if>
|
||||
<if test="updateBy != null">update_by,</if>
|
||||
<if test="updateTime != null">update_time,</if>
|
||||
<if test="remark != null">remark,</if>
|
||||
<if test="createSite != null and createSite != ''">create_site,</if>
|
||||
<if test="updateSite != null and updateSite != ''">update_site,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="accCode != null">#{accCode},</if>
|
||||
<if test="tempCreditMoneyAdjust != null">#{tempCreditMoneyAdjust},</if>
|
||||
<if test="startDate != null">#{startDate},</if>
|
||||
<if test="endDate != null">#{endDate},</if>
|
||||
<if test="delFlag != null">#{delFlag},</if>
|
||||
<if test="createBy != null">#{createBy},</if>
|
||||
<if test="createTime != null">#{createTime},</if>
|
||||
<if test="updateBy != null">#{updateBy},</if>
|
||||
<if test="updateTime != null">#{updateTime},</if>
|
||||
<if test="remark != null">#{remark},</if>
|
||||
<if test="createSite != null and createSite != ''">#{createSite},</if>
|
||||
<if test="updateSite != null and updateSite != ''">#{updateSite},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<update id="updateEmisTempCreditSalesmen" parameterType="com.xdadan.erp.emis.domain.EmisTempCreditSalesmen">
|
||||
update emis_temp_credit_salesmen
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="accCode != null">acc_code = #{accCode},</if>
|
||||
<if test="tempCreditMoneyAdjust != null">temp_credit_money_adjust = #{tempCreditMoneyAdjust},</if>
|
||||
<if test="startDate != null">start_date = #{startDate},</if>
|
||||
<if test="endDate != null">end_date = #{endDate},</if>
|
||||
<if test="delFlag != null">del_flag = #{delFlag},</if>
|
||||
<if test="createBy != null">create_by = #{createBy},</if>
|
||||
<if test="createTime != null">create_time = #{createTime},</if>
|
||||
<if test="updateBy != null">update_by = #{updateBy},</if>
|
||||
<if test="updateTime != null">update_time = #{updateTime},</if>
|
||||
<if test="remark != null">remark = #{remark},</if>
|
||||
<if test="createSite != null and createSite != ''">create_site = #{createSite},</if>
|
||||
<if test="updateSite != null and updateSite != ''">update_site = #{updateSite},</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
<update id="deleteEmisTempCreditSalesmenByIds" parameterType="String">
|
||||
update emis_temp_credit_salesmen set del_flag = '1' where id in
|
||||
<foreach item="id" collection="array" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
@ -171,6 +171,11 @@
|
||||
<result property="dataFrom" column="data_from" />
|
||||
<result property="blSpecialGoods" column="bl_special_goods" />
|
||||
<result property="extInfo" column="ext_info" />
|
||||
<result property="ladingBillCode" column="lading_bill_code" />
|
||||
<result property="companyCode" column="company_code" />
|
||||
<result property="departurePort" column="departure_port" />
|
||||
<result property="destinationPort" column="destination_port" />
|
||||
<result property="boxQuantity" column="box_quantity" />
|
||||
|
||||
<!-- 扩展属性 -->
|
||||
<result property="receiveCountryName" column="receive_country_name" />
|
||||
@ -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 @@
|
||||
<if test="updateTime != null">update_time,</if>
|
||||
<if test="createSite != null and createSite != ''">create_site,</if>
|
||||
<if test="updateSite != null and updateSite != ''">update_site,</if>
|
||||
<if test="ladingBillCode != null and ladingBillCode != ''">lading_bill_code ,</if>
|
||||
<if test="companyCode != null and companyCode != ''">company_code ,</if>
|
||||
<if test="departurePort != null and departurePort != ''">departure_port ,</if>
|
||||
<if test="destinationPort != null and destinationPort != ''">destination_port ,</if>
|
||||
<if test="boxQuantity != null and boxQuantity != ''">box_quantity ,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="orderSn != null and orderSn != ''">#{orderSn},</if>
|
||||
@ -2619,6 +2629,11 @@
|
||||
<if test="updateTime != null">#{updateTime},</if>
|
||||
<if test="createSite != null and createSite != ''">#{createSite},</if>
|
||||
<if test="updateSite != null and updateSite != ''">#{updateSite},</if>
|
||||
<if test="ladingBillCode != null and ladingBillCode != ''">#{ladingBillCode},</if>
|
||||
<if test="companyCode != null and companyCode != ''">#{companyCode},</if>
|
||||
<if test="departurePort != null and departurePort != ''">#{departurePort},</if>
|
||||
<if test="destinationPort != null and destinationPort != ''">#{destinationPort},</if>
|
||||
<if test="boxQuantity != null and boxQuantity != ''">#{boxQuantity},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
@ -2800,6 +2815,11 @@
|
||||
<if test="updateTime != null">update_time = #{updateTime},</if>
|
||||
<if test="createSite != null and createSite != ''">create_site = #{createSite},</if>
|
||||
<if test="updateSite != null and updateSite != ''">update_site = #{updateSite},</if>
|
||||
<if test="ladingBillCode != null and ladingBillCode != ''">lading_bill_code = #{ladingBillCode},</if>
|
||||
<if test="companyCode != null and companyCode != ''">company_code = #{companyCode},</if>
|
||||
<if test="departurePort != null and departurePort != ''">departure_port = #{departurePort},</if>
|
||||
<if test="destinationPort != null and destinationPort != ''">destination_port = #{destinationPort},</if>
|
||||
<if test="boxQuantity != null and boxQuantity != ''">box_quantity = #{boxQuantity},</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user