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..81838a837 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 @@ -126,9 +127,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..252950967 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 @@ -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..079628e65 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 @@ -133,4 +136,134 @@ 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.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()); + } + + // 检查日期交叉重复 + List 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); + } + 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())&& + 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..5c2c3d3df 100644 --- a/emis-biz/src/main/resources/mapper/EmisCommissionQuoteMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisCommissionQuoteMapper.xml @@ -79,8 +79,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 +248,62 @@ #{quoteId} + + \ No newline at end of file