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')") @PreAuthorize("@ss.hasPermi('emis:emisCommissionQuote:add')")
@Log(title = "员工提成方案报价", businessType = BusinessType.INSERT) @Log(title = "员工提成方案报价", businessType = BusinessType.INSERT)
@PostMapping @PostMapping
public AjaxResult add(@RequestBody EmisCommissionQuote emisCommissionQuote) public AjaxResult add(@RequestBody EmisCommissionQuote emisCommissionQuote) {
{ try {
return toAjax(emisCommissionQuoteService.insertEmisCommissionQuote(emisCommissionQuote)); 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')") @PreAuthorize("@ss.hasPermi('emis:emisCommissionQuote:edit')")
@Log(title = "员工提成方案报价", businessType = BusinessType.UPDATE) @Log(title = "员工提成方案报价", businessType = BusinessType.UPDATE)
@PutMapping @PutMapping
public AjaxResult edit(@RequestBody EmisCommissionQuote emisCommissionQuote) public AjaxResult edit(@RequestBody EmisCommissionQuote emisCommissionQuote) {
{ try {
return toAjax(emisCommissionQuoteService.updateEmisCommissionQuote(emisCommissionQuote)); 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 员工提成方案报价 * @param emisCommissionQuote 员工提成方案报价
* @return 结果 * @return 结果
*/ */
public int insertEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote); public int insertEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote) throws EmisBizError;
/** /**
* 修改员工提成方案报价 * 修改员工提成方案报价
@ -59,7 +59,7 @@ public interface IEmisCommissionQuoteService
* @param emisCommissionQuote 员工提成方案报价 * @param emisCommissionQuote 员工提成方案报价
* @return 结果 * @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); 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 结果 * @return 结果
*/ */
@Override @Override
public int insertEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote) public int insertEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote) throws EmisBizError {
{ checkQuoteConflict(emisCommissionQuote);
// 插入提成方案 // 插入提成方案
emisCommissionQuoteMapper.insertEmisCommissionQuote(emisCommissionQuote); emisCommissionQuoteMapper.insertEmisCommissionQuote(emisCommissionQuote);
@ -107,8 +126,8 @@ public class EmisCommissionQuoteServiceImpl implements IEmisCommissionQuoteServi
* @return 结果 * @return 结果
*/ */
@Override @Override
public int updateEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote) public int updateEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote) throws EmisBizError {
{ checkQuoteConflict(emisCommissionQuote);
return emisCommissionQuoteMapper.updateEmisCommissionQuote(emisCommissionQuote); return emisCommissionQuoteMapper.updateEmisCommissionQuote(emisCommissionQuote);
} }
@ -208,26 +227,7 @@ public class EmisCommissionQuoteServiceImpl implements IEmisCommissionQuoteServi
if (emisCommissionQuote.getPriorityLevel() == null) { if (emisCommissionQuote.getPriorityLevel() == null) {
emisCommissionQuote.setPriorityLevel(dbQuote.getPriorityLevel()); emisCommissionQuote.setPriorityLevel(dbQuote.getPriorityLevel());
} }
checkQuoteConflict(emisCommissionQuote);
// 检查日期交叉重复
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());
}
// 更新数据 // 更新数据
result += emisCommissionQuoteMapper.updateEmisCommissionQuote(emisCommissionQuote); result += emisCommissionQuoteMapper.updateEmisCommissionQuote(emisCommissionQuote);
@ -262,8 +262,10 @@ public class EmisCommissionQuoteServiceImpl implements IEmisCommissionQuoteServi
StringUtils.equals(quote1.getPostType(), quote2.getPostType()) && StringUtils.equals(quote1.getPostType(), quote2.getPostType()) &&
StringUtils.equals(quote1.getTransType(), quote2.getTransType()) && StringUtils.equals(quote1.getTransType(), quote2.getTransType()) &&
StringUtils.equals(quote1.getFromCountry(), quote2.getFromCountry()) && StringUtils.equals(quote1.getFromCountry(), quote2.getFromCountry()) &&
StringUtils.equals(quote1.getCountry(), quote2.getCountry())&& StringUtils.equals(quote1.getCountry(), quote2.getCountry()) &&
quote1.getStartDate()==quote2.getStartDate()&& StringUtils.equals(quote1.getTransLineCode(), quote2.getTransLineCode()) &&
quote1.getEndDate()==quote2.getEndDate(); 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="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="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> </where>
order by create_time desc order by create_time desc
</select> </select>
@ -253,7 +260,9 @@
<include refid="selectEmisCommissionQuoteVo"/> <include refid="selectEmisCommissionQuoteVo"/>
<where> <where>
del_flag='0' del_flag='0'
<if test="quoteId != null and quoteId != ''">
and quote_id != #{quoteId} and quote_id != #{quoteId}
</if>
and ( and (
(start_date <![CDATA[ <= ]]> #{startDate} and #{startDate} <![CDATA[ < ]]> end_date) (start_date <![CDATA[ <= ]]> #{startDate} and #{startDate} <![CDATA[ < ]]> end_date)
or or
@ -303,6 +312,22 @@
or country='-1' or country='-1'
) )
</if> </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> </where>
order by create_time desc order by create_time desc
</select> </select>