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:
smshen 2025-04-21 10:09:39 +08:00
commit b6873d718a
33 changed files with 1973 additions and 42 deletions

View File

@ -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)

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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);
}

View File

@ -65,4 +65,6 @@ public class EmisCreditCustomer extends BaseEntity
private String payee;
private String salesmen;
/** 临时额度总额 */
private BigDecimal tempCreditMoney;
}

View File

@ -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;
/* 运输方式 */

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -99,4 +99,12 @@ public interface EmisCreditCustomerMapper extends BaseMapper<EmisCreditCustomer>
* @return 结果
*/
public int deleteEmisCreditCustomerByIds(Long[] ids);
/**
* 根据条件查询客户信用额度信息
*
* @param emisCreditCustomer 客户信用额度
* @return 客户信用额度
*/
EmisCreditCustomer selectCreditCustomerInfo(EmisCreditCustomer emisCreditCustomer);
}

View File

@ -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);
}

View File

@ -156,4 +156,5 @@ public interface EmisSettleSubBillMapper extends BaseMapper<EmisSettleSubBill>
public int deleteEmisSettleSubBillByBillCode(String billCode);
List<EmisSettleSubBill> querysSettleSubBillByBillCodeList(@Param("billCodeList") List<String> billCodeList);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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{

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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;
}
/**

View File

@ -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;
}
/**

View File

@ -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");
}
}
/**
* 修改结算总账单

View File

@ -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));
}
}

View File

@ -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);
}
}

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>