Merge pull request 'develop' (#118) from develop into master

Reviewed-on: http://git.xdadan.loc/tanex/emis-service/pulls/118
This commit is contained in:
heyu 2025-07-14 16:06:09 +08:00
commit 22e02e951b
4 changed files with 68 additions and 35 deletions

View File

@ -106,9 +106,12 @@ public class EmisCommissionQuoteController extends BaseController
@PreAuthorize("@ss.hasPermi('emis:emisCommissionQuote:add')")
@Log(title = "员工提成方案报价", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody EmisCommissionQuote emisCommissionQuote)
{
return toAjax(emisCommissionQuoteService.insertEmisCommissionQuote(emisCommissionQuote));
public AjaxResult add(@RequestBody EmisCommissionQuote emisCommissionQuote) {
try {
return toAjax(emisCommissionQuoteService.insertEmisCommissionQuote(emisCommissionQuote));
} catch (EmisBizError e) {
return AjaxResult.error(e.getMessage(), e.getErrorCode());
}
}
/**
@ -117,9 +120,12 @@ public class EmisCommissionQuoteController extends BaseController
@PreAuthorize("@ss.hasPermi('emis:emisCommissionQuote:edit')")
@Log(title = "员工提成方案报价", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody EmisCommissionQuote emisCommissionQuote)
{
return toAjax(emisCommissionQuoteService.updateEmisCommissionQuote(emisCommissionQuote));
public AjaxResult edit(@RequestBody EmisCommissionQuote emisCommissionQuote) {
try {
return toAjax(emisCommissionQuoteService.updateEmisCommissionQuote(emisCommissionQuote));
} catch (EmisBizError e) {
return AjaxResult.error(e.getMessage(), e.getErrorCode());
}
}
/**

View File

@ -51,7 +51,7 @@ public interface IEmisCommissionQuoteService
* @param emisCommissionQuote 员工提成方案报价
* @return 结果
*/
public int insertEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote);
public int insertEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote) throws EmisBizError;
/**
* 修改员工提成方案报价
@ -59,7 +59,7 @@ public interface IEmisCommissionQuoteService
* @param emisCommissionQuote 员工提成方案报价
* @return 结果
*/
public int updateEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote);
public int updateEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote) throws EmisBizError;
/**
* 批量删除员工提成方案报价

View File

@ -76,6 +76,25 @@ public class EmisCommissionQuoteServiceImpl implements IEmisCommissionQuoteServi
return emisCommissionQuoteMapper.checkUnique(emisCommissionQuote);
}
/**
* 公共验重方法,检查日期交叉和完全重复
*
* @param emisCommissionQuote 当前报价
* @throws EmisBizError 存在冲突时抛出
*/
private void checkQuoteConflict(EmisCommissionQuote emisCommissionQuote) throws EmisBizError {
List<EmisCommissionQuote> overlapList = checkDateOverlap(emisCommissionQuote);
if (!overlapList.isEmpty()) {
StringBuilder errorMsg = new StringBuilder();
errorMsg.append("报价[").append(emisCommissionQuote.getQuoteName());
for (EmisCommissionQuote overlap : overlapList) {
errorMsg.append("\n- 与报价[").append(overlap.getQuoteName()).append("(ID:")
.append(overlap.getQuoteId()).append(")]重复");
}
throw new EmisBizError(EmisBizErrorType.EXISTS, errorMsg.toString());
}
}
/**
* 新增员工提成方案报价
*
@ -83,8 +102,8 @@ public class EmisCommissionQuoteServiceImpl implements IEmisCommissionQuoteServi
* @return 结果
*/
@Override
public int insertEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote)
{
public int insertEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote) throws EmisBizError {
checkQuoteConflict(emisCommissionQuote);
// 插入提成方案
emisCommissionQuoteMapper.insertEmisCommissionQuote(emisCommissionQuote);
@ -107,8 +126,8 @@ public class EmisCommissionQuoteServiceImpl implements IEmisCommissionQuoteServi
* @return 结果
*/
@Override
public int updateEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote)
{
public int updateEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote) throws EmisBizError {
checkQuoteConflict(emisCommissionQuote);
return emisCommissionQuoteMapper.updateEmisCommissionQuote(emisCommissionQuote);
}
@ -208,26 +227,7 @@ public class EmisCommissionQuoteServiceImpl implements IEmisCommissionQuoteServi
if (emisCommissionQuote.getPriorityLevel() == null) {
emisCommissionQuote.setPriorityLevel(dbQuote.getPriorityLevel());
}
// 检查日期交叉重复
List<EmisCommissionQuote> overlapList = checkDateOverlap(emisCommissionQuote);
if (!overlapList.isEmpty()) {
StringBuilder errorMsg = new StringBuilder();
errorMsg.append("报价[").append(emisCommissionQuote.getQuoteName()).append("]存在冲突:");
for (EmisCommissionQuote overlap : overlapList) {
// 判断是否为完全重复
boolean isDuplicate = isDuplicateQuote(emisCommissionQuote, overlap);
if (isDuplicate) {
errorMsg.append("\n- 与报价[").append(overlap.getQuoteName()).append("(ID:")
.append(overlap.getQuoteId()).append(")]重复");
} else {
errorMsg.append("\n- 与报价[").append(overlap.getQuoteName()).append("(ID:")
.append(overlap.getQuoteId()).append(")]日期交叉");
}
}
throw new EmisBizError(EmisBizErrorType.EXISTS, errorMsg.toString());
}
checkQuoteConflict(emisCommissionQuote);
// 更新数据
result += emisCommissionQuoteMapper.updateEmisCommissionQuote(emisCommissionQuote);
@ -262,8 +262,10 @@ public class EmisCommissionQuoteServiceImpl implements IEmisCommissionQuoteServi
StringUtils.equals(quote1.getPostType(), quote2.getPostType()) &&
StringUtils.equals(quote1.getTransType(), quote2.getTransType()) &&
StringUtils.equals(quote1.getFromCountry(), quote2.getFromCountry()) &&
StringUtils.equals(quote1.getCountry(), quote2.getCountry())&&
quote1.getStartDate()==quote2.getStartDate()&&
quote1.getEndDate()==quote2.getEndDate();
StringUtils.equals(quote1.getCountry(), quote2.getCountry()) &&
StringUtils.equals(quote1.getTransLineCode(), quote2.getTransLineCode()) &&
StringUtils.equals(quote1.getProdCode(), quote2.getProdCode()) &&
quote1.getStartDate() == quote2.getStartDate() &&
quote1.getEndDate() == quote2.getEndDate();
}
}

View File

@ -65,6 +65,13 @@
<if test="transLineCode != null and transLineCode != ''"> and trans_line_code=#{transLineCode} </if>
<if test="prodCode != null and prodCode != ''"> and FIND_IN_SET(#{prodCode},prod_code) </if>
<if test="startDate != null">
and DATE(start_date) &gt;= DATE(#{startDate})
</if>
<if test="endDate != null">
and DATE(end_date) &lt;= DATE(#{endDate})
</if>
</where>
order by create_time desc
</select>
@ -253,7 +260,9 @@
<include refid="selectEmisCommissionQuoteVo"/>
<where>
del_flag='0'
<if test="quoteId != null and quoteId != ''">
and quote_id != #{quoteId}
</if>
and (
(start_date <![CDATA[ <= ]]> #{startDate} and #{startDate} <![CDATA[ < ]]> end_date)
or
@ -303,6 +312,22 @@
or country='-1'
)
</if>
<if test="transLineCode != null and transLineCode != ''">
and (
trans_line_code = #{transLineCode}
or FIND_IN_SET(#{transLineCode}, trans_line_code)
or FIND_IN_SET(trans_line_code, #{transLineCode})
or trans_line_code='-1'
)
</if>
<if test="prodCode != null and prodCode != ''">
and (
prod_code = #{prodCode}
or FIND_IN_SET(#{prodCode}, prod_code)
or FIND_IN_SET(prod_code, #{prodCode})
or prod_code='-1'
)
</if>
</where>
order by create_time desc
</select>