diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleInvoiceRecordController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleInvoiceRecordController.java index a713815d0..ab6e6c609 100644 --- a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleInvoiceRecordController.java +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisSettleInvoiceRecordController.java @@ -330,6 +330,32 @@ public class EmisSettleInvoiceRecordController extends BaseController { return AjaxResult.success("操作成功"); } + @Log(title = "发票申请审核回退", businessType = BusinessType.UPDATE) + @PostMapping("/auditCenterPassRollback/{ids}") + public AjaxResult auditCenterPassRollback(@PathVariable Long[] ids) + { + if(ids!=null && ids.length>0){ + for(int i=0;i 员工提成表 实体类

*/ @@ -28,6 +28,7 @@ import com.xdadan.erp.emis.domain.enumtype.ProfitPostType; import com.xdadan.erp.emis.mapper.*; import com.xdadan.erp.emis.service.EmisBaseService; import com.xdadan.erp.emis.utils.WaybillHelper; +import jodd.util.StringUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; @@ -39,7 +40,7 @@ import org.springframework.util.CollectionUtils; /** * 员工提成表Service业务层处理 - * + * * @author linfso * @date 2024-10-24 01:46:36 */ @@ -1346,14 +1347,14 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements if (BigDecimal.valueOf(profitMoney).compareTo(BigDecimal.ZERO) > 0) { // 新增:按销售分成配置插入多岗位提成 String salesSupport = waybill.getSalesSupport(); - String salesExecutive = waybill.getSalesExecutive(); +// String salesExecutive = waybill.getSalesExecutive(); boolean hasRatioInsert = false; - if (StringUtils.isNotEmpty(salesmen) && StringUtils.isNotEmpty(salesSupport) - && StringUtils.isNotEmpty(salesExecutive)) { + if (StringUtils.isNotEmpty(salesmen)) { EmisSalesCommissionRatio ratioQuery = new EmisSalesCommissionRatio(); ratioQuery.setSalesmen(salesmen); - ratioQuery.setSalesSupport(salesSupport); - ratioQuery.setSalesExecutive(salesExecutive); + if(StringUtil.isNotEmpty(salesSupport)){ + ratioQuery.setSalesSupport(salesSupport); + } ratioQuery.setStatus("1"); // 添加运单寄件日期条件,查询运单寄件日期在计提表有效期内的比例配置 if (waybill.getSendDate() != null) { @@ -1386,13 +1387,13 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements hasRatioInsert = true; } // 销售主管 - if (StringUtils.isNotEmpty(salesExecutive) && ratio.getSalesExecutiveRatio() != null + if (StringUtils.isNotEmpty(ratio.getSalesExecutive()) && ratio.getSalesExecutiveRatio() != null && ratio.getSalesExecutiveRatio().compareTo(BigDecimal.ZERO) > 0) { insertCommissionDtl( waybill.getBillCode(), quoteItem.getFeeType(), "1", billMonth, BigDecimal.valueOf(profitMoney).multiply(ratio.getSalesExecutiveRatio()) .divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP), - salesExecutive, calcExprStr, exprItem.getQuoteId(), + ratio.getSalesExecutive(), calcExprStr, exprItem.getQuoteId(), quoteItem.getQuoteName(), exprItem.getId(), calcExprStr); hasRatioInsert = true; } @@ -1726,7 +1727,7 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements /** * 查询员工提成表 - * + * * @param id 员工提成表主键 * @return 员工提成表 */ @@ -1739,7 +1740,7 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements /** * 查询员工提成表列表 - * + * * @param emisCommissionProfit 员工提成表 * @return 员工提成表 */ @@ -1751,8 +1752,8 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements /** * 检查是否重复 - * - * @param emisCommissionProfit + * + * @param emisCommissionProfit * @return 数量 */ @Override @@ -1763,7 +1764,7 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements /** * 新增员工提成表 - * + * * @param emisCommissionProfit 员工提成表 * @return 结果 */ @@ -1775,7 +1776,7 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements /** * 修改员工提成表 - * + * * @param emisCommissionProfit 员工提成表 * @return 结果 */ @@ -1787,7 +1788,7 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements /** * 批量删除员工提成表 - * + * * @param ids 需要删除的员工提成表主键 * @return 结果 */ @@ -1799,7 +1800,7 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements /** * 删除员工提成表信息 - * + * * @param id 员工提成表主键 * @return 结果 */ diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSalesCommissionRatioServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSalesCommissionRatioServiceImpl.java index 9e3771ead..ce73dc52c 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSalesCommissionRatioServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSalesCommissionRatioServiceImpl.java @@ -58,6 +58,10 @@ public class EmisSalesCommissionRatioServiceImpl implements IEmisSalesCommission if (!checkRatioValid(entity)) { throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, "占比总和必须小于等于100%"); } + // 验证一个销售联系人只能对应一个销售主管 + validateSalesmenToExecutive(entity); + // 验证一个销售支持只能对应一个销售联系人、只能对应一个销售主管 + validateSalesSupport(entity); return emisSalesCommissionRatioMapper.insertEmisSalesCommissionRatio(entity); } @@ -76,6 +80,10 @@ public class EmisSalesCommissionRatioServiceImpl implements IEmisSalesCommission if (!checkRatioValid(entity)) { throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, "占比总和必须小于等于100%"); } + // 验证一个销售联系人只能对应一个销售主管 + validateSalesmenToExecutive(entity); + // 验证一个销售支持只能对应一个销售联系人、只能对应一个销售主管 + validateSalesSupport(entity); return emisSalesCommissionRatioMapper.updateEmisSalesCommissionRatio(entity); } @@ -122,4 +130,44 @@ public class EmisSalesCommissionRatioServiceImpl implements IEmisSalesCommission BigDecimal sum = executiveRatio.add(salesmenRatio).add(supportRatio); return sum.compareTo(new BigDecimal("100.00")) <= 0; } + + /** + * 验证一个销售联系人只能对应一个销售主管 + * + * @param entity 配置实体 + * @throws EmisBizError 如果销售联系人已经对应了其他销售主管 + */ + private void validateSalesmenToExecutive(EmisSalesCommissionRatio entity) throws EmisBizError { + if (entity.getSalesmen() != null && !entity.getSalesmen().trim().isEmpty() + && entity.getSalesExecutive() != null && !entity.getSalesExecutive().trim().isEmpty()) { + int count = emisSalesCommissionRatioMapper.countBySalesmenAndDifferentExecutive(entity); + if (count > 0) { + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, + "销售联系人[" + entity.getSalesmen() + "]已经对应了其他销售主管,一个销售联系人只能对应一个销售主管"); + } + } + } + + /** + * 验证一个销售支持只能对应一个销售联系人、只能对应一个销售主管 + * + * @param entity 配置实体 + * @throws EmisBizError 如果销售支持已经对应了其他销售联系人或销售主管 + */ + private void validateSalesSupport(EmisSalesCommissionRatio entity) throws EmisBizError { + if (entity.getSalesSupport() != null && !entity.getSalesSupport().trim().isEmpty()) { + // 检查销售支持是否已经对应了其他销售联系人 + int countSalesmen = emisSalesCommissionRatioMapper.countBySalesSupportAndDifferentSalesmen(entity); + if (countSalesmen > 0) { + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, + "销售支持[" + entity.getSalesSupport() + "]已经对应了其他销售联系人,一个销售支持只能对应一个销售联系人"); + } + // 检查销售支持是否已经对应了其他销售主管 + int countExecutive = emisSalesCommissionRatioMapper.countBySalesSupportAndDifferentExecutive(entity); + if (countExecutive > 0) { + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, + "销售支持[" + entity.getSalesSupport() + "]已经对应了其他销售主管,一个销售支持只能对应一个销售主管"); + } + } + } } \ No newline at end of file diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleInvoiceRecordServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleInvoiceRecordServiceImpl.java index 51f50e64a..bc0a925ae 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleInvoiceRecordServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleInvoiceRecordServiceImpl.java @@ -31,7 +31,6 @@ import com.xdadan.erp.emis.domain.EmisSettlePayRecord; import com.xdadan.erp.emis.domain.EmisWaybill; import com.xdadan.erp.emis.domain.EmisSettleBill; import java.text.SimpleDateFormat; -import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -405,6 +404,47 @@ public class EmisSettleInvoiceRecordServiceImpl extends EmisBaseService implemen } + /** + * 回退中心审核通过 + * + * @param inputObj + * @return + * @throws EmisBizError + */ + @Override + public int rollbackAuditCenterPass(EmisSettleInvoiceRecord inputObj) throws EmisBizError { + EmisSettleInvoiceRecord emisSettleInvoiceRecord = emisSettleInvoiceRecordMapper + .selectEmisSettleInvoiceRecordById(inputObj.getId()); + + if (emisSettleInvoiceRecord == null) { + throw new EmisBizError(EmisBizErrorType.FAIL, "申请不存在"); + } + + if (!"1".equals(emisSettleInvoiceRecord.getBlAudit())) { + throw new EmisBizError(EmisBizErrorType.FAIL, "仅审核通过的申请可回退"); + } + if (!"1".equals(emisSettleInvoiceRecord.getInvoiceStatus())) { + throw new EmisBizError(EmisBizErrorType.FAIL, "仅开票中的申请可回退"); + } + + // 重置审核状态 + emisSettleInvoiceRecord.setBlAudit("0"); + emisSettleInvoiceRecord.setInvoiceStatus("0"); + emisSettleInvoiceRecord.setAuditManCode(null); + emisSettleInvoiceRecord.setAuditSiteCode(null); + emisSettleInvoiceRecord.setAuditNote(null); + + emisSettleInvoiceRecordMapper.rollbackAuditCenterPass(emisSettleInvoiceRecord); + + // 重新计算开票状态 + String[] settleBillArr = emisSettleInvoiceRecord.getSettleBillNo().split(","); + for (int i = 0; i < settleBillArr.length; i++) { + emisSettleBillService.reCalcSettleBillInvoiceStatus(settleBillArr[i]); + } + + return 1; + } + public static void main(String[] args) { BigDecimal totalMoney = BigDecimal.ZERO; BigDecimal recMoney = BigDecimal.ZERO; diff --git a/emis-biz/src/main/resources/mapper/EmisSalesCommissionRatioMapper.xml b/emis-biz/src/main/resources/mapper/EmisSalesCommissionRatioMapper.xml index fb1f6e10b..ca4ff3c2c 100644 --- a/emis-biz/src/main/resources/mapper/EmisSalesCommissionRatioMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisSalesCommissionRatioMapper.xml @@ -156,4 +156,52 @@ AND id != #{id} + + + + + + + + + diff --git a/emis-biz/src/main/resources/mapper/EmisSettleInvoiceRecordMapper.xml b/emis-biz/src/main/resources/mapper/EmisSettleInvoiceRecordMapper.xml index e1b11b120..22dccb541 100644 --- a/emis-biz/src/main/resources/mapper/EmisSettleInvoiceRecordMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisSettleInvoiceRecordMapper.xml @@ -719,6 +719,17 @@ where id = #{id} + + update emis_settle_invoice_record + set bl_audit='0', + invoice_status='0', + audit_date = null, + audit_man_code = null, + audit_site_code = null, + audit_note = null + where id = #{id} + + update emis_settle_invoice_record set payment_status='1' diff --git a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml index e34b1075e..03a2ba25b 100644 --- a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml @@ -3933,9 +3933,9 @@ and a.trans_line_type = #{lineCode} - and DATE_FORMAT(a.send_date, '%Y-%m-%d') = ]]> '2025-01-01' - and DATE_FORMAT(a.send_date, '%Y-%m-%d') DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 7 DAY), - '%Y-%m-%d') +-- and DATE_FORMAT(a.send_date, '%Y-%m-%d') = ]]> '2025-01-01' +-- and DATE_FORMAT(a.send_date, '%Y-%m-%d') DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 7 DAY), +-- '%Y-%m-%d') and ((a.virtual_remark is null or a.virtual_remark = '' or a.virtual_remark = ' ')or a.receive_country != '0095') and a.order_status not in ('0','2')