demand: 客户管理新增现金客户临时额度操作界面对应增删改查逻辑,现金额度管理查询额度列表新增查询临时额度对应逻辑处理
committer: heyu
This commit is contained in:
parent
92438e9d16
commit
6d879fceb6
@ -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));
|
||||
}
|
||||
}
|
||||
@ -41,6 +41,8 @@ public class EmisCreditSalesmen extends BaseEntity
|
||||
private String salesmen;
|
||||
/* 信用额度 */
|
||||
private BigDecimal creditMoney;
|
||||
/* 临时额度 */
|
||||
private BigDecimal tempCreditMoney;
|
||||
/* 使用额度 */
|
||||
private BigDecimal useMoney;
|
||||
/* 超期额度 */
|
||||
|
||||
@ -0,0 +1,45 @@
|
||||
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;
|
||||
|
||||
/** 临时额度总额 */
|
||||
private BigDecimal tempCreditMoney;
|
||||
|
||||
/** 开始日期 */
|
||||
@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;
|
||||
|
||||
}
|
||||
@ -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);
|
||||
|
||||
}
|
||||
@ -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);
|
||||
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
/**
|
||||
/**
|
||||
* @Project: emis
|
||||
* @Title: EmisCreditSalesmenServiceImpl.java
|
||||
* @author linfso
|
||||
@ -11,14 +11,16 @@
|
||||
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.utils.WaybillHelper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -39,6 +41,9 @@ public class EmisCreditSalesmenServiceImpl implements IEmisCreditSalesmenService
|
||||
@Autowired
|
||||
private EmisCreditSalesmenMapper emisCreditSalesmenMapper;
|
||||
|
||||
@Autowired
|
||||
private EmisTempCreditSalesmenMapper emisTempCreditSalesmenMapper;
|
||||
|
||||
/**
|
||||
* 查询销售信用额度
|
||||
* @param id 销售信用额度主键
|
||||
@ -52,13 +57,59 @@ 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) {
|
||||
calculateAndSetTempCreditMoney(item);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算并设置临时额度总额
|
||||
* tempCreditMoney = creditMoney + tempCreditMoneyAdjust
|
||||
* tempCreditMoneyAdjust取自emis_temp_credit_salesmen,有多条时取当前时间在范围内的一条,没有则为0
|
||||
*
|
||||
* @param creditSalesmen 销售信用额度记录
|
||||
*/
|
||||
private void calculateAndSetTempCreditMoney(EmisCreditSalesmen creditSalesmen) {
|
||||
log.info("开始计算客户[{}]的临时额度总额", creditSalesmen.getAccCode());
|
||||
|
||||
// 获取基础信用额度
|
||||
BigDecimal baseCreditMoney = creditSalesmen.getCreditMoney() != null ? creditSalesmen.getCreditMoney()
|
||||
: BigDecimal.ZERO;
|
||||
|
||||
// 查询当前有效的临时额度调整
|
||||
EmisTempCreditSalesmen tempQuery = new EmisTempCreditSalesmen();
|
||||
tempQuery.setAccCode(creditSalesmen.getAccCode());
|
||||
List<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);
|
||||
creditSalesmen.setTempCreditMoney(totalCreditMoney);
|
||||
log.info("客户[{}]的临时额度总额计算完成: 基础额度[{}] + 临时调整[{}] = 总额[{}]",
|
||||
creditSalesmen.getAccCode(), baseCreditMoney, tempAdjust, totalCreditMoney);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -0,0 +1,202 @@
|
||||
/**
|
||||
* @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);
|
||||
|
||||
// 设置销售员
|
||||
emisTempCreditSalesmen.setSalesmen(creditInfo.getSalesmen());
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,127 @@
|
||||
<?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="salesmen" column="salesmen"/>
|
||||
<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"/>
|
||||
<result property="tempCreditMoney" column="temp_credit_money"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectEmisTempCreditSalesmenVo">
|
||||
select t.id, t.acc_code, t.salesmen, 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
|
||||
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, salesmen, credit_money, use_money, over_term_money,
|
||||
in_term_money, currency, trans_type, start_date, end_date, bl_open,
|
||||
remark, tenant_id, del_flag, create_by, create_time, update_by,
|
||||
update_time, create_site, update_site
|
||||
from emis_credit_salesmen
|
||||
where acc_code = #{accCode}
|
||||
and del_flag = '0'
|
||||
order by create_time desc
|
||||
limit 1
|
||||
</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="salesmen != null and salesmen != ''">
|
||||
AND t.salesmen = #{salesmen}
|
||||
</if>
|
||||
<if test="tempCreditMoneyAdjust != null ">
|
||||
AND t.temp_credit_money_adjust = #{tempCreditMoneyAdjust}
|
||||
</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="salesmen != null">salesmen,</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="salesmen != null">#{salesmen},</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="salesmen != null">salesmen = #{salesmen},</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>
|
||||
Loading…
Reference in New Issue
Block a user