diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisCommissionQuoteController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisCommissionQuoteController.java index f3afb75ac..fdceb4a1a 100644 --- a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisCommissionQuoteController.java +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisCommissionQuoteController.java @@ -34,6 +34,7 @@ import com.xdadan.erp.common.utils.poi.ExcelUtil; import com.xdadan.erp.emis.domain.EmisCommissionQuote; import com.xdadan.erp.emis.service.IEmisCommissionQuoteService; +import com.xdadan.erp.emis.domain.exception.EmisBizError; /** * 员工提成方案报价Controller @@ -105,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()); + } } /** @@ -116,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()); + } } /** @@ -126,9 +133,23 @@ public class EmisCommissionQuoteController extends BaseController */ @PreAuthorize("@ss.hasPermi('emis:emisCommissionQuote:remove')") @Log(title = "员工提成方案报价", businessType = BusinessType.DELETE) - @DeleteMapping("/{quoteIds}") - public AjaxResult remove(@PathVariable Long[] quoteIds) - { + @DeleteMapping("/{quoteIds}") + public AjaxResult remove(@PathVariable Long[] quoteIds) { return toAjax(emisCommissionQuoteService.deleteEmisCommissionQuoteByQuoteIds(quoteIds)); } + + /** + * 批量修改员工提成方案报价 + */ + @PreAuthorize("@ss.hasPermi('emis:emisCommissionQuote:batchUpdate')") + @Log(title = "员工提成方案报价", businessType = BusinessType.UPDATE) + @PutMapping("/batchUpdate") + public AjaxResult batchUpdate(@RequestBody List emisCommissionQuoteList) { + try { + int result = emisCommissionQuoteService.batchUpdateEmisCommissionQuote(emisCommissionQuoteList); + return toAjax(result); + } catch (EmisBizError e) { + return AjaxResult.error(e.getMessage(), e.getErrorCode()); + } + } } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisCommissionQuoteMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisCommissionQuoteMapper.java index 9ef30c7ce..9665f2713 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisCommissionQuoteMapper.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisCommissionQuoteMapper.java @@ -87,4 +87,12 @@ public interface EmisCommissionQuoteMapper extends BaseMapper checkDateOverlap(EmisCommissionQuote emisCommissionQuote); } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisCommissionQuoteService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisCommissionQuoteService.java index 705df1456..be0faf66f 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisCommissionQuoteService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisCommissionQuoteService.java @@ -11,6 +11,7 @@ package com.xdadan.erp.emis.service; import java.util.List; import com.xdadan.erp.emis.domain.EmisCommissionQuote; +import com.xdadan.erp.emis.domain.exception.EmisBizError; /** * @ClassName EmisCommissionQuoteService @@ -50,7 +51,7 @@ public interface IEmisCommissionQuoteService * @param emisCommissionQuote 员工提成方案报价 * @return 结果 */ - public int insertEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote); + public int insertEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote) throws EmisBizError; /** * 修改员工提成方案报价 @@ -58,7 +59,7 @@ public interface IEmisCommissionQuoteService * @param emisCommissionQuote 员工提成方案报价 * @return 结果 */ - public int updateEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote); + public int updateEmisCommissionQuote(EmisCommissionQuote emisCommissionQuote) throws EmisBizError; /** * 批量删除员工提成方案报价 @@ -75,4 +76,20 @@ public interface IEmisCommissionQuoteService * @return 结果 */ public int deleteEmisCommissionQuoteByQuoteId(Long quoteId); + + /** + * 批量修改员工提成方案报价 + * + * @param emisCommissionQuoteList 员工提成方案报价列表 + * @return 结果 + */ + public int batchUpdateEmisCommissionQuote(List emisCommissionQuoteList) throws EmisBizError; + + /** + * 检查日期交叉重复 + * + * @param emisCommissionQuote 员工提成方案报价 + * @return 重复的报价列表 + */ + public List checkDateOverlap(EmisCommissionQuote emisCommissionQuote); } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCommissionQuoteServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCommissionQuoteServiceImpl.java index 61419746f..83287df83 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCommissionQuoteServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCommissionQuoteServiceImpl.java @@ -14,14 +14,17 @@ import java.util.List; import com.xdadan.erp.emis.domain.EmisCommissionExpression; import com.xdadan.erp.emis.mapper.EmisCommissionExpressionMapper; +import com.xdadan.erp.emis.domain.enumtype.EmisBizErrorType; +import com.xdadan.erp.emis.domain.exception.EmisBizError; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.xdadan.erp.emis.domain.EmisCommissionQuote; import com.xdadan.erp.emis.mapper.EmisCommissionQuoteMapper; import com.xdadan.erp.emis.service.IEmisCommissionQuoteService; import org.springframework.util.CollectionUtils; +import org.apache.commons.lang3.StringUtils; - /** +/** * 员工提成方案报价Service业务层处理 * * @author linfso @@ -73,6 +76,25 @@ public class EmisCommissionQuoteServiceImpl implements IEmisCommissionQuoteServi return emisCommissionQuoteMapper.checkUnique(emisCommissionQuote); } + /** + * 公共验重方法,检查日期交叉和完全重复 + * + * @param emisCommissionQuote 当前报价 + * @throws EmisBizError 存在冲突时抛出 + */ + private void checkQuoteConflict(EmisCommissionQuote emisCommissionQuote) throws EmisBizError { + List 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()); + } + } + /** * 新增员工提成方案报价 * @@ -80,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); @@ -104,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); } @@ -133,4 +155,126 @@ public class EmisCommissionQuoteServiceImpl implements IEmisCommissionQuoteServi return emisCommissionQuoteMapper.deleteEmisCommissionQuoteByQuoteId(quoteId); } + /** + * 批量修改员工提成方案报价 + * + * @param emisCommissionQuoteList 员工提成方案报价列表 + * @return 结果 + */ + @Override + public int batchUpdateEmisCommissionQuote(List emisCommissionQuoteList) throws EmisBizError { + int result = 0; + for (EmisCommissionQuote emisCommissionQuote : emisCommissionQuoteList) { + // 先查询数据库中的完整数据 + EmisCommissionQuote dbQuote = emisCommissionQuoteMapper + .selectEmisCommissionQuoteByQuoteId(emisCommissionQuote.getQuoteId()); + if (dbQuote == null) { + continue; + } + + // 补齐前端未传的字段 + if (emisCommissionQuote.getQuoteCode() == null) { + emisCommissionQuote.setQuoteCode(dbQuote.getQuoteCode()); + } + if (emisCommissionQuote.getQuoteName() == null) { + emisCommissionQuote.setQuoteName(dbQuote.getQuoteName()); + } + if (emisCommissionQuote.getTransLineCode() == null) { + emisCommissionQuote.setTransLineCode(dbQuote.getTransLineCode()); + } + if (emisCommissionQuote.getSendSiteCode() == null) { + emisCommissionQuote.setSendSiteCode(dbQuote.getSendSiteCode()); + } + if (emisCommissionQuote.getNextSiteCode() == null) { + emisCommissionQuote.setNextSiteCode(dbQuote.getNextSiteCode()); + } + if (emisCommissionQuote.getProdCode() == null) { + emisCommissionQuote.setProdCode(dbQuote.getProdCode()); + } + if (emisCommissionQuote.getFromCountry() == null) { + emisCommissionQuote.setFromCountry(dbQuote.getFromCountry()); + } + if (emisCommissionQuote.getCountry() == null) { + emisCommissionQuote.setCountry(dbQuote.getCountry()); + } + if (emisCommissionQuote.getFeeType() == null) { + emisCommissionQuote.setFeeType(dbQuote.getFeeType()); + } + if (emisCommissionQuote.getCalcType() == null) { + emisCommissionQuote.setCalcType(dbQuote.getCalcType()); + } + if (emisCommissionQuote.getPostType() == null) { + emisCommissionQuote.setPostType(dbQuote.getPostType()); + } + if (emisCommissionQuote.getTransType() == null) { + emisCommissionQuote.setTransType(dbQuote.getTransType()); + } + if (emisCommissionQuote.getBlOpen() == null) { + emisCommissionQuote.setBlOpen(dbQuote.getBlOpen()); + } + if (emisCommissionQuote.getTransLineCode() == null) { + emisCommissionQuote.setTransLineCode(dbQuote.getTransLineCode()); + } + if (emisCommissionQuote.getProdCode() == null) { + emisCommissionQuote.setProdCode(dbQuote.getProdCode()); + } + if (emisCommissionQuote.getBlOpen() == null) { + emisCommissionQuote.setBlOpen(dbQuote.getBlOpen()); + } + if (emisCommissionQuote.getEmpCode() == null) { + emisCommissionQuote.setEmpCode(dbQuote.getEmpCode()); + } + if (emisCommissionQuote.getEmpName() == null) { + emisCommissionQuote.setEmpName(dbQuote.getEmpName()); + } + if (emisCommissionQuote.getStartDate() == null) { + emisCommissionQuote.setStartDate(dbQuote.getStartDate()); + } + if (emisCommissionQuote.getEndDate() == null) { + emisCommissionQuote.setEndDate(dbQuote.getEndDate()); + } + if (emisCommissionQuote.getPriorityLevel() == null) { + emisCommissionQuote.setPriorityLevel(dbQuote.getPriorityLevel()); + } + checkQuoteConflict(emisCommissionQuote); + + // 更新数据 + result += emisCommissionQuoteMapper.updateEmisCommissionQuote(emisCommissionQuote); + } + return result; + } + + /** + * 检查日期交叉重复 + * + * @param emisCommissionQuote 员工提成方案报价 + * @return 重复的报价列表 + */ + @Override + public List checkDateOverlap(EmisCommissionQuote emisCommissionQuote) { + return emisCommissionQuoteMapper.checkDateOverlap(emisCommissionQuote); + } + + /** + * 判断两个报价是否完全重复 + * + * @param quote1 报价1 + * @param quote2 报价2 + * @return 是否完全重复 + */ + private boolean isDuplicateQuote(EmisCommissionQuote quote1, EmisCommissionQuote quote2) { + // 比较关键字段是否完全相同 + return StringUtils.equals(quote1.getEmpCode(), quote2.getEmpCode()) && + StringUtils.equals(quote1.getEmpName(), quote2.getEmpName()) && + StringUtils.equals(quote1.getFeeType(), quote2.getFeeType()) && + StringUtils.equals(quote1.getCalcType(), quote2.getCalcType()) && + StringUtils.equals(quote1.getPostType(), quote2.getPostType()) && + StringUtils.equals(quote1.getTransType(), quote2.getTransType()) && + StringUtils.equals(quote1.getFromCountry(), quote2.getFromCountry()) && + 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(); + } } diff --git a/emis-biz/src/main/resources/mapper/EmisCommissionQuoteMapper.xml b/emis-biz/src/main/resources/mapper/EmisCommissionQuoteMapper.xml index d7fa9b110..23935e561 100644 --- a/emis-biz/src/main/resources/mapper/EmisCommissionQuoteMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisCommissionQuoteMapper.xml @@ -65,6 +65,13 @@ and trans_line_code=#{transLineCode} and FIND_IN_SET(#{prodCode},prod_code) + + and DATE(start_date) >= DATE(#{startDate}) + + + and DATE(end_date) <= DATE(#{endDate}) + + order by create_time desc @@ -79,8 +86,8 @@ and quote_name like concat('%', #{quoteName}, '%') - and ( FIND_IN_SET(#{fromCountry},from_country) or from_country='-1' or from_country is null or from_country='' or ( #{fromCountry}!='0086' and from_country='-2' ) ) - and ( FIND_IN_SET(#{country},country) or country='-1' or country is null or country='' or ( #{country}!='0086' and country='-2' ) ) + and ( FIND_IN_SET(#{fromCountry},from_country) or from_country='-1' or from_country is null or from_country='' or ( #{fromCountry}!='0086' and from_country='-2' ) or from_country='-3') + and ( FIND_IN_SET(#{country},country) or country='-1' or country is null or country='' or ( #{country}!='0086' and country='-2' ) or from_country='-3' ) and ( ( FIND_IN_SET(#{sendSiteCode},send_site_code) and send_site_code is not null ) or send_site_code is null ) and ( ( FIND_IN_SET(#{nextSiteCode},next_site_code) and next_site_code is not null ) or next_site_code is null ) @@ -248,4 +255,63 @@ #{quoteId} + + \ No newline at end of file