diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisQuotePriceController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisQuotePriceController.java index 557252370..f6301328b 100644 --- a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisQuotePriceController.java +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisQuotePriceController.java @@ -164,6 +164,25 @@ public class EmisQuotePriceController extends EmisBaseController } } + /** + * 批量修改费用报价 + */ + @PreAuthorize("@ss.hasPermi('emis:emisQuotePrice:edit')") + @Log(title = "费用报价", businessType = BusinessType.UPDATE) + @PutMapping("/batch") + public AjaxResult batchEdit(@RequestBody List emisQuotePriceList) { + try { + return toAjax(emisQuotePriceService.batchUpdateEmisQuotePrice(emisQuotePriceList)); + } catch (Exception ex) { + ex.printStackTrace(); + // 返回自定义异常 + if (ex instanceof EmisBizError) { + return AjaxResult.error(ex.getMessage(), ((EmisBizError) ex).getErrorCode()); + } + return AjaxResult.error("服务器异常,联系客服"); + } + } + /** * 删除费用报价 */ diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleInvoiceChRecordMapper.java b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleInvoiceChRecordMapper.java index cd1d4886a..cad7ac6cb 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleInvoiceChRecordMapper.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/mapper/EmisSettleInvoiceChRecordMapper.java @@ -106,4 +106,13 @@ public interface EmisSettleInvoiceChRecordMapper extends BaseMapper selectExtraFieldsByApplySeqNos( + @Param("applySeqNoList") List applySeqNoList); } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java index 11df6c884..f681dd9c8 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/EmisBaseService.java @@ -4062,6 +4062,9 @@ public class EmisBaseService { * @throws EmisBizError */ protected void checkFirstSigningDay(EmisWaybill emisWaybillOld, EmisWaybill emisWaybillNew) throws EmisBizError { + if ("1".equals(emisWaybillNew.getPaymentType())) { + return; + } if (emisWaybillOld == null || emisWaybillOld.getOrderDate() == null || emisWaybillNew == null || StringUtil.isBlank(emisWaybillNew.getCustNo())) { return; } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisQuotePriceService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisQuotePriceService.java index ae23f0216..c65105187 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisQuotePriceService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisQuotePriceService.java @@ -70,4 +70,12 @@ public interface IEmisQuotePriceService * @return 结果 */ public int deleteEmisQuotePriceByQuoteId(Long quoteId); + + /** + * 批量修改费用报价 + * + * @param emisQuotePriceList 费用报价列表 + * @return 结果 + */ + public int batchUpdateEmisQuotePrice(List emisQuotePriceList) throws EmisBizError; } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisQuotePriceServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisQuotePriceServiceImpl.java index 2818f6631..a155f97e5 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisQuotePriceServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisQuotePriceServiceImpl.java @@ -152,4 +152,42 @@ public class EmisQuotePriceServiceImpl implements IEmisQuotePriceService return emisQuotePriceMapper.deleteEmisQuotePriceByQuoteId(quoteId); } + /** + * 批量修改费用报价 + * + * @param emisQuotePriceList 费用报价列表 + * @return 结果 + */ + @Override + @Transactional + public int batchUpdateEmisQuotePrice(List emisQuotePriceList) throws EmisBizError { + if (CollectionUtil.isEmpty(emisQuotePriceList)) { + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, "费用报价列表不能为空"); + } + + int successCount = 0; + for (EmisQuotePrice emisQuotePrice : emisQuotePriceList) { + try { + // 检查是否重复 + List listOld = emisQuotePriceMapper.checkUnique(emisQuotePrice); + if (!CollectionUtil.isEmpty(listOld)) { + String estNameStr = ""; + for (EmisQuotePrice item : listOld) { + estNameStr = estNameStr + item.getQuoteName() + ","; + } + throw new EmisBizError(EmisBizErrorType.EXISTS, "报价重复[" + estNameStr + "]"); + } + + // 更新主表 + int ret = emisQuotePriceMapper.updateEmisQuotePrice(emisQuotePrice); + if (ret > 0) { + successCount++; + } + } catch (Exception e) { + throw new EmisBizError(EmisBizErrorType.SYS_EXCEPTION, "批量修改费用报价失败:" + e.getMessage()); + } + } + return successCount; + } + } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleInvoiceChRecordServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleInvoiceChRecordServiceImpl.java index b3012f46a..169272500 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleInvoiceChRecordServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleInvoiceChRecordServiceImpl.java @@ -11,12 +11,10 @@ package com.xdadan.erp.emis.service.impl; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -37,6 +35,7 @@ import com.xdadan.erp.emis.service.openbill.hx.HXOrderGoods; import com.xdadan.erp.emis.service.openbill.hx.HXOrderInfo; import com.xdadan.erp.emis.service.openbill.hx.HXSdk; import com.xdadan.erp.emis.utils.WaybillHelper; +import jodd.util.StringUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -140,7 +139,7 @@ public class EmisSettleInvoiceChRecordServiceImpl extends EmisBaseService implem Future> future = executor.submit(() -> { PageHelper.startPage(currentPage, pageSize); List list = this.selectEmisSettleInvoiceChRecordListAll( - emisSettleInvoiceChRecord); + emisSettleInvoiceChRecord).stream().filter(i->!"3".equals(i.getOpenChStatus())).collect(Collectors.toList()); if (list == null || list.isEmpty()) { return new ArrayList<>(); @@ -170,7 +169,7 @@ public class EmisSettleInvoiceChRecordServiceImpl extends EmisBaseService implem // 付款日期 vo.setPayDate(InvoiceExportHelper.processPayDate(record.getExportPayDays())); // 业务员 - vo.setSalesmen(record.getSalesmen()); + vo.setSalesmen(record.getApplyManName()); // 快递公司 vo.setExpressCompany(record.getSalesmen()); // 面单单号 @@ -216,14 +215,49 @@ public class EmisSettleInvoiceChRecordServiceImpl extends EmisBaseService implem } @Override - public List selectEmisSettleInvoiceChRecordListAll(EmisSettleInvoiceChRecord emisSettleInvoiceChRecord) { + public List selectEmisSettleInvoiceChRecordListAll( + EmisSettleInvoiceChRecord emisSettleInvoiceChRecord) { long startTime = System.currentTimeMillis(); - List emisSettleInvoiceChRecords = emisSettleInvoiceChRecordMapper.selectEmisSettleInvoiceChRecordListAll(emisSettleInvoiceChRecord); + if (StringUtil.isNotBlank(emisSettleInvoiceChRecord.getInvoiceNo())) { + List emisSettleInvoiceChRecords = emisSettleInvoiceChRecordMapper + .selectEmisSettleInvoiceChRecordList(emisSettleInvoiceChRecord); + setEmisSettleInvoiceChRecords(emisSettleInvoiceChRecords); + return emisSettleInvoiceChRecords; + } + List emisSettleInvoiceChRecords = emisSettleInvoiceChRecordMapper + .selectEmisSettleInvoiceChRecordListAll(emisSettleInvoiceChRecord); long endTime = System.currentTimeMillis(); log.info("查询渠道开票记录列表完成, 耗时: {}ms", (endTime - startTime)); return emisSettleInvoiceChRecords; } + private void setEmisSettleInvoiceChRecords(List emisSettleInvoiceChRecords) { + List applySeqNoList = emisSettleInvoiceChRecords.stream() + .map(EmisSettleInvoiceChRecord::getApplySeqNo) + .collect(Collectors.toList()); + + if (!CollectionUtils.isEmpty(applySeqNoList)) { + List extraInfoList = emisSettleInvoiceChRecordMapper + .selectExtraFieldsByApplySeqNos(applySeqNoList); + + Map extraInfoMap = extraInfoList.stream() + .collect(Collectors.toMap( + EmisSettleInvoiceChRecord::getApplySeqNo, + record -> record, + (existing, replacement) -> existing)); + + emisSettleInvoiceChRecords.forEach(record -> { + EmisSettleInvoiceChRecord extraInfo = extraInfoMap.get(record.getApplySeqNo()); + if (extraInfo != null) { + record.setSendMonth(extraInfo.getSendMonth()); + record.setSettleType(extraInfo.getSettleType()); + record.setOpenBillRemark(extraInfo.getOpenBillRemark()); + record.setPayDays(extraInfo.getPayDays()); + } + }); + } + } + @Override public int checkHasSendToHx(String applySeqNo) diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettlePayRecordServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettlePayRecordServiceImpl.java index 9e7692aa7..2009df0ae 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettlePayRecordServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettlePayRecordServiceImpl.java @@ -11,6 +11,9 @@ package com.xdadan.erp.emis.service.impl; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map; @@ -23,6 +26,7 @@ import com.xdadan.erp.emis.service.EmisBaseService; import com.xdadan.erp.emis.service.IEmisSettleBillService; import com.xdadan.erp.emis.service.IEmisSettleSubBillService; import com.xdadan.erp.emis.utils.WaybillHelper; +import jodd.util.StringUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; @@ -132,23 +136,11 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I @Override public int insertEmisSettlePayRecord(EmisSettlePayRecord emisSettlePayRecord,String payId) throws EmisBizError { - if(StringUtils.isEmpty(emisSettlePayRecord.getSettleBillNo())){ - throw new EmisBizError(EmisBizErrorType.FAIL,"账单编号不能为空"); - } + // 非空校验 + checkParam(emisSettlePayRecord); -// || BigDecimal.ZERO.compareTo(emisSettlePayRecord.getPayMoney()) == 0 - if("1".equals(emisSettlePayRecord.getRecType())) { - if (emisSettlePayRecord.getPayMoney() == null ) { - throw new EmisBizError(EmisBizErrorType.FAIL, "收款金额不能为空"); - } - } - -// || BigDecimal.ZERO.compareTo(emisSettlePayRecord.getRefundMoney()) == 0 - else if("2".equals(emisSettlePayRecord.getRecType())) { - if (emisSettlePayRecord.getRefundMoney()== null ) { - throw new EmisBizError(EmisBizErrorType.FAIL, "退款金额不能为空"); - } - } + // 校验交易日期不能晚于当天 + checkDate(emisSettlePayRecord); emisSettlePayRecord.setSettleBillNo(WaybillHelper.formatQueryValue(emisSettlePayRecord.getSettleBillNo())); // 多账单合并收款 @@ -232,6 +224,65 @@ public class EmisSettlePayRecordServiceImpl extends EmisBaseService implements I return 1; } + private static void checkParam(EmisSettlePayRecord emisSettlePayRecord) throws EmisBizError { + if(StringUtils.isEmpty(emisSettlePayRecord.getSettleBillNo())){ + throw new EmisBizError(EmisBizErrorType.FAIL,"账单编号不能为空"); + } + + if("1".equals(emisSettlePayRecord.getRecType())) { + if (emisSettlePayRecord.getPayMoney() == null) { + throw new EmisBizError(EmisBizErrorType.FAIL, "收款金额不能为空"); + } + if (StringUtil.isBlank(emisSettlePayRecord.getPayType())) { + throw new EmisBizError(EmisBizErrorType.FAIL, "支付方式不能为空"); + } + if (StringUtil.isBlank(emisSettlePayRecord.getPayMan())) { + throw new EmisBizError(EmisBizErrorType.FAIL, "收款人不能为空"); + } + if (emisSettlePayRecord.getTradeDate() == null) { + throw new EmisBizError(EmisBizErrorType.FAIL, "交易日期不能为空"); + } + } else if("2".equals(emisSettlePayRecord.getRecType())) { + if (emisSettlePayRecord.getRefundMoney() == null) { + throw new EmisBizError(EmisBizErrorType.FAIL, "退款金额不能为空"); + } + if (StringUtil.isBlank(emisSettlePayRecord.getPayMan())) { + throw new EmisBizError(EmisBizErrorType.FAIL, "退款人不能为空"); + } + if (StringUtil.isBlank(emisSettlePayRecord.getRefundMode())) { + throw new EmisBizError(EmisBizErrorType.FAIL, "退款方式不能为空"); + } + if (StringUtil.isBlank(emisSettlePayRecord.getRefundReason())) { + throw new EmisBizError(EmisBizErrorType.FAIL, "退款原因不能为空"); + } + if (emisSettlePayRecord.getRefundDate() == null) { + throw new EmisBizError(EmisBizErrorType.FAIL, "退款日期不能为空"); + } + } + } + + private static void checkDate(EmisSettlePayRecord emisSettlePayRecord) throws EmisBizError { + LocalDate today = LocalDate.now(); + if (emisSettlePayRecord.getTradeDate() != null) { + LocalDate tradeDate = emisSettlePayRecord.getTradeDate().toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + if (tradeDate.isAfter(today)) { + throw new EmisBizError(EmisBizErrorType.FAIL, + "交易时间不能晚于当天(" + today.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + ")"); + } + } + if (emisSettlePayRecord.getRefundDate() != null) { + LocalDate refundDate = emisSettlePayRecord.getRefundDate().toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + if (refundDate.isAfter(today)) { + throw new EmisBizError(EmisBizErrorType.FAIL, + "退款时间不能晚于当天(" + today.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + ")"); + } + } + } + /** * 收款退款 * @param id diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java index 05859f9b1..e1e85f073 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java @@ -1451,6 +1451,9 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb // 检查是否已锁单 checkDBBillIsLock(emisWaybillOld); + // 校验寄件国家是否匹配线路 + checkCountry(emisWaybillSave); + emisWaybillSave.setId(emisWaybillOld.getId()); // 把历史发货日期带过来用于重新计算预估到到时间 @@ -3023,6 +3026,9 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb throw new EmisBizError(EmisBizErrorType.FAIL, "单号与子单号相同,请换单号"); } + // 校验寄件国家是否匹配线路 + checkCountry(emisWaybillSave); + // 子单号做扣减 if ("1".equals(emisWaybillSave.getBlGenSubbill())) { Integer subBillCount = emisElectronicSitePagService.getTotalAvailablePagCount(emisWaybillSave.getSendSiteCode(), "T7080", "1002"); @@ -3208,6 +3214,19 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb } } + private void checkCountry(EmisWaybill emisWaybillSave) throws EmisBizError { + EmisTransLine emisTransLine = new EmisTransLine(); + emisTransLine.setLineCode(emisWaybillSave.getTransLineType()); + List emisTransLines = emisTransLineMapper.selectEmisTransLineList(emisTransLine); + if(CollectionUtil.isEmpty(emisTransLines)){ + return; + } + if(emisWaybillSave.getSendCountry().equals(emisTransLines.get(0).getFromCountry())){ + return; + } + throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, "寄件国家与所选线路不匹配" ); + } + public int bindSalesmen(String empCode,String customerCode) throws EmisBizError { diff --git a/emis-biz/src/main/resources/mapper/EmisSettleInvoiceChRecordMapper.xml b/emis-biz/src/main/resources/mapper/EmisSettleInvoiceChRecordMapper.xml index 8b444716a..ba7a519da 100644 --- a/emis-biz/src/main/resources/mapper/EmisSettleInvoiceChRecordMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisSettleInvoiceChRecordMapper.xml @@ -171,12 +171,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and EXISTS( - select 1 from emis_settle_bill x2,emis_settle_invoice_bill_rel x3,emis_settle_sub_bill x4 - where x2.del_flag = '0' and x3.del_flag = '0' and x4.del_flag='0' - and a.apply_seq_no=x3.apply_seq_no - and x2.settle_bill_no=x3.settle_bill_no - and x4.settle_bill_no=x2.settle_bill_no - and FIND_IN_SET(x4.`bill_code`,#{params.billCode}) + select 1 from + emis_settle_invoice_rel rel + where a.apply_seq_no=rel.apply_seq_no and + rel.del_flag = '0' + and FIND_IN_SET(rel.`bill_no`,#{params.billCode}) )