Commit d99d1771 authored by zhangfeng's avatar zhangfeng

feat(wealth): 优化

parent 8fa247ff
......@@ -36,6 +36,8 @@ ALTER TABLE `ecw_receipt` ADD COLUMN `invoice_id` bigint NULL DEFAULT NULL COMME
ALTER TABLE `ecw_receipt` ADD COLUMN `generate_path` int NULL DEFAULT 0 COMMENT '生成路径' AFTER `invoice_id`;
ALTER TABLE `ecw_receipt` ADD COLUMN `write_off_diff_main_currency` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '核销误差兑额外费用主币种金额' AFTER `generate_path`;
CREATE TABLE `ecw_receipt_bank_writeoff_range` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`write_off_down` int NOT NULL DEFAULT 10000 COMMENT '核销比例下界(除以100)',
......
......@@ -4,11 +4,11 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.apollo.core.event.Order.OrderApprovalTypeCheckEvent;
import cn.iocoder.yudao.framework.common.util.spring.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.spring.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.excel.handler.WaterMarkHandler;
import cn.iocoder.yudao.framework.i18n.core.I18nMessage;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
......@@ -17,7 +17,6 @@ import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO;
import cn.iocoder.yudao.framework.security.core.LoginUser;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.customer.dal.dataobject.customer.CustomerDO;
import cn.iocoder.yudao.module.customer.dal.dataobject.customerContacts.CustomerContactsDO;
import cn.iocoder.yudao.module.customer.service.customer.CustomerService;
import cn.iocoder.yudao.module.customer.service.customerContacts.CustomerContactsService;
import cn.iocoder.yudao.module.customer.service.zhongPao.ZhongPaoService;
......@@ -60,7 +59,6 @@ import cn.iocoder.yudao.module.order.dal.dataobject.orderWarehousePicture.OrderW
import cn.iocoder.yudao.module.order.dal.mysql.approval.OrderApprovalMapper;
import cn.iocoder.yudao.module.order.dal.mysql.order.OrderMapper;
import cn.iocoder.yudao.module.order.dal.mysql.orderItem.OrderItemMapper;
import cn.iocoder.yudao.module.order.dal.mysql.orderItemPackLog.OrderItemPackLogMapper;
import cn.iocoder.yudao.module.order.dal.mysql.orderTime.OrderTimeMapper;
import cn.iocoder.yudao.module.order.dal.mysql.orderWarehouseIn.OrderWarehouseInMapper;
import cn.iocoder.yudao.module.order.dto.*;
......@@ -99,10 +97,8 @@ import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.BeanUtils;
......@@ -127,7 +123,6 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU
import static cn.iocoder.yudao.framework.excel.constant.ExportConstant.*;
import static cn.iocoder.yudao.module.order.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.module.order.enums.OrderApprovalTypeEnum.ORDER_UPDATE;
import static cn.iocoder.yudao.module.order.enums.OrderApprovalTypeEnum.merge_order;
import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.NOT_FIND_CURRENCY;
/**
......@@ -3107,7 +3102,7 @@ public class OrderQueryServiceImpl implements OrderQueryService {
writeOffTotalFeeGroupDtoMap.put(receivableDO.getCurrencyId(), writeOffAmountActual);
}
// 计算未收
if (notWriteOffAmount.compareTo(BigDecimal.ZERO) > 0) {
if (notWriteOffAmount.compareTo(BigDecimal.ZERO) >= 0) {
if (notWriteOffTotalFeeGroupDtoMap.containsKey(receivableDO.getCurrencyId())) {
notWriteOffTotalFeeGroupDtoMap.put(receivableDO.getCurrencyId(), notWriteOffAmount.add(notWriteOffTotalFeeGroupDtoMap.get(receivableDO.getCurrencyId())));
} else {
......@@ -3201,7 +3196,7 @@ public class OrderQueryServiceImpl implements OrderQueryService {
writeOffFreightFeeGroupDtoMap.put(receivableDO.getCurrencyId(), writeOffAmountActual);
}
// 计算未收
if (notWriteOffAmount.compareTo(BigDecimal.ZERO) > 0) {
if (notWriteOffAmount.compareTo(BigDecimal.ZERO) >= 0) {
if (notWriteOffFreightFeeGroupDtoMap.containsKey(receivableDO.getCurrencyId())) {
notWriteOffFreightFeeGroupDtoMap.put(receivableDO.getCurrencyId(), notWriteOffAmount.add(notWriteOffFreightFeeGroupDtoMap.get(receivableDO.getCurrencyId())));
} else {
......@@ -3246,7 +3241,7 @@ public class OrderQueryServiceImpl implements OrderQueryService {
writeOffClearanceFeeGroupDtoMap.put(receivableDO.getCurrencyId(), writeOffAmountActual);
}
// 计算未收
if (notWriteOffAmount.compareTo(BigDecimal.ZERO) > 0) {
if (notWriteOffAmount.compareTo(BigDecimal.ZERO) >= 0) {
if (notWriteOffClearanceFeeGroupDtoMap.containsKey(receivableDO.getCurrencyId())) {
notWriteOffClearanceFeeGroupDtoMap.put(receivableDO.getCurrencyId(), notWriteOffAmount.add(notWriteOffClearanceFeeGroupDtoMap.get(receivableDO.getCurrencyId())));
} else {
......@@ -3303,7 +3298,7 @@ public class OrderQueryServiceImpl implements OrderQueryService {
writeOffOtherFeeGroupDtoMap.put(receivableDO.getCurrencyId(), writeOffAmountActual);
}
// 计算未收
if (notWriteOffAmount.compareTo(BigDecimal.ZERO) > 0) {
if (notWriteOffAmount.compareTo(BigDecimal.ZERO) >= 0) {
if (notWriteOffOtherFeeGroupDtoMap.containsKey(receivableDO.getCurrencyId())) {
notWriteOffOtherFeeGroupDtoMap.put(receivableDO.getCurrencyId(), notWriteOffAmount.add(notWriteOffOtherFeeGroupDtoMap.get(receivableDO.getCurrencyId())));
} else {
......@@ -3545,8 +3540,12 @@ public class OrderQueryServiceImpl implements OrderQueryService {
private void convertFeeGroup(Map<Integer, CurrencyRespDTO> currencyRespDTOMap, Map<Long, BigDecimal> feeGroupDtoMap, List<FeeGroupDto> feeGroupDtoList, StringBuilder sb) {
for (Map.Entry<Long, BigDecimal> entry : feeGroupDtoMap.entrySet()) {
int currencyId = entry.getKey().intValue();
if (currencyRespDTOMap.get(currencyId) == null) {
continue;
}
FeeGroupDto feeGroupDto = new FeeGroupDto();
CurrencyRespDTO currencyRespDTO = currencyRespDTOMap.get(entry.getKey().intValue());
CurrencyRespDTO currencyRespDTO = currencyRespDTOMap.get(currencyId);
feeGroupDto.setCurrencyId(entry.getKey());
feeGroupDto.setAmount(entry.getValue().setScale(0, RoundingMode.HALF_UP));
if (Objects.nonNull(currencyRespDTO)) {
......@@ -3564,6 +3563,10 @@ public class OrderQueryServiceImpl implements OrderQueryService {
private void convertFeeGroup(Map<Integer, CurrencyRespDTO> currencyRespDTOMap, Map<Long, BigDecimal> feeGroupDtoMap1, Map<Long, BigDecimal> feeGroupDtoMap2, List<FeeGroupDto> feeGroupDtoList, StringBuilder sb) {
for (Map.Entry<Long, BigDecimal> entry : feeGroupDtoMap1.entrySet()) {
int currencyId = entry.getKey().intValue();
if (currencyRespDTOMap.get(currencyId) == null) {
continue;
}
FeeGroupDto feeGroupDto = new FeeGroupDto();
CurrencyRespDTO currencyRespDTO = currencyRespDTOMap.get(entry.getKey().intValue());
feeGroupDto.setCurrencyId(entry.getKey());
......@@ -3832,10 +3835,10 @@ public class OrderQueryServiceImpl implements OrderQueryService {
query.setLang(I18nMessage.getLang());
}
ArrayList<Integer> orderType = new ArrayList<>();
if (query.getIsHeavyCargo() != null && query.getIsHeavyCargo()) {
if (query.getIsHeavyCargo() != null && query.getIsHeavyCargo() == 1) {
orderType.add(2);
}
if (query.getIsPaoCargo() != null && query.getIsPaoCargo()) {
if (query.getIsPaoCargo() != null && query.getIsPaoCargo() == 1) {
orderType.add(3);
}
query.setOrderType(orderType);
......
......@@ -40,9 +40,9 @@ public class ContainerReportOrderQueryVO {
@ApiModelProperty(value = "订单状态详情见字典:order_status")
private Integer status;
@ApiModelProperty(value = "是否重货")
private Boolean isHeavyCargo;
private Integer isHeavyCargo;
@ApiModelProperty(value = "是否泡货")
private Boolean isPaoCargo;
private Integer isPaoCargo;
@ApiModelProperty(value = "订单类型")
private List<Integer> orderType;
@ApiModelProperty(value = "是否控货")
......
......@@ -7634,6 +7634,7 @@
LEFT JOIN ecw_customer norc on norc.id = nor.customer_id
LEFT JOIN ecw_customer neeo on neeo.id = nee.customer_id
WHERE o.`container_number` = #{query.containerNumber}
<include refid="containerOrderSummaryQuery"/>
</select>
<sql id="containerOrderSummaryQuery">
<if test="query.orderNo != null and query.orderNo != '' ">
......
......@@ -648,7 +648,7 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
}
//已核销状态记录
List<ReceiptItemDO> list = listItemList.stream().filter(i -> i.getReceiptId() == ReceiptId && i.getStatus() != 0).collect(Collectors.toList());
List<ReceiptItemDO> list = listItemList.stream().filter(i -> i.getReceiptId() == ReceiptId && (i.getStatus() == 1 || i.getStatus() == 3)).collect(Collectors.toList());
if (CollectionUtil.isEmpty(list)) {
//核销金额为0 核销比例为空
return sR;
......@@ -921,15 +921,18 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
update.setBmpId(bpmId);
update.setFinanceRemark(financeRemark);
// 更新核销误差兑额外费用主币种金额
if (null == diff) {
diff = totalAmount.subtract(receiptDO.getReceivableTotalAmount());
}
List<ReceiptRelationOrderInfoVO> relationOrder = receiptMapper.getOrderInfoByReceiptId(receiptDO.getId());
OrderVO orderVO = receiptMapper.getContainerNumberByOrderId(relationOrder.get(0).getOrderId());
if (null != orderVO) {
RegionDTO region = regionApi.getRegionById(Long.parseLong(orderVO.getCountry()));
Long importCurrency3 = Long.parseLong(region.getImportCurrency3());
if (!currencyId.equals(importCurrency3)) {
diff = diff == null ? null : diff.multiply(currencyApi.getCurrencyRate(currencyId, importCurrency3).getCurrencyRate());
diff = diff.multiply(currencyApi.getCurrencyRate(currencyId, importCurrency3).getCurrencyRate());
}
update.setWriteOffDiffMainCurrency(diff == null ? "0" : diff.setScale(2, RoundingMode.HALF_UP).toString());
update.setWriteOffDiffMainCurrency(diff.setScale(2, RoundingMode.HALF_UP) + " " + currencyApi.getAllCurrency().get(importCurrency3.intValue()).getFuhao());
}
receiptMapper.updateById(update);
}
......@@ -1148,6 +1151,9 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
backVO.setInvoiceVO(invoiceInReceiptRespVO);
}
}
if (receiptDO.getOpenInvoice() != null && receiptDO.getOpenInvoice() == 0) {
backVO.setInvoiceId(null);
}
backVO.setCreator(adminUserApi.getUserName(receiptDO.getCreator()));
backVO.setUpdater(adminUserApi.getUserName(receiptDO.getUpdater()));
return backVO;
......@@ -1173,31 +1179,38 @@ public class ReceiptServiceImpl extends AbstractService<ReceiptMapper, ReceiptDO
@Override
public void updateReceiptItemStatus(Long receiptId) {
List<ReceiptItemDO> listItem = receiptItemMapper.selectList(ReceiptItemDO::getReceiptId, receiptId);
ReceiptItemStatusInReceiptEnum receiptItemStatus = null;
int countItem = listItem.size();
if (countItem == 0) {
receiptItemStatus = ReceiptItemStatusInReceiptEnum.NO_INPUT;
} else {
long draft = listItem.stream().filter(i -> Objects.equals(i.getStatus(), DRAFT.getValue()) || Objects.equals(i.getStatus(), WRITE_OFF_APPROVE_REJECT.getValue())).count();
long writeOff = listItem.stream().filter(i -> Objects.equals(i.getStatus(), WRITE_OFF.getValue())).count();
long writeOffApproving = listItem.stream().filter(i -> Objects.equals(i.getStatus(), WRITE_OFF_APPROVE_ING.getValue())).count();
long writeOffNoApproving = listItem.stream().filter(i -> Objects.equals(i.getStatus(), WRITE_OFF_NO_APPROVE_ING.getValue())).count();
if (draft == countItem) {
receiptItemStatus = ReceiptItemStatusInReceiptEnum.UN_SUBMITTED;
} else if (draft > 0 && draft < countItem) {
receiptItemStatus = ReceiptItemStatusInReceiptEnum.PART_SUBMITTED;
} else if (writeOffApproving == countItem) {
receiptItemStatus = ReceiptItemStatusInReceiptEnum.UN_APPROVED;
} else if (writeOff == countItem) {
receiptItemStatus = ReceiptItemStatusInReceiptEnum.ALL_APPROVED;
} else if ((writeOffApproving + writeOffNoApproving) == countItem || (writeOff + writeOffNoApproving) == countItem || (writeOffApproving + writeOff) == countItem) {
receiptItemStatus = ReceiptItemStatusInReceiptEnum.PART_APPROVED;
}
}
if (receiptItemStatus != null) {
//ReceiptItemStatusInReceiptEnum receiptItemStatus = null;
//int countItem = listItem.size();
//if (countItem == 0) {
// receiptItemStatus = ReceiptItemStatusInReceiptEnum.NO_INPUT;
//} else {
// long draft = listItem.stream().filter(i -> Objects.equals(i.getStatus(), DRAFT.getValue()) || Objects.equals(i.getStatus(), WRITE_OFF_APPROVE_REJECT.getValue())).count();
// long writeOff = listItem.stream().filter(i -> Objects.equals(i.getStatus(), WRITE_OFF.getValue())).count();
// long writeOffApproving = listItem.stream().filter(i -> Objects.equals(i.getStatus(), WRITE_OFF_APPROVE_ING.getValue())).count();
// long writeOffNoApproving = listItem.stream().filter(i -> Objects.equals(i.getStatus(), WRITE_OFF_NO_APPROVE_ING.getValue())).count();
// if (draft == countItem) {
// receiptItemStatus = ReceiptItemStatusInReceiptEnum.UN_SUBMITTED;
// } else if (draft > 0 && draft < countItem) {
// receiptItemStatus = ReceiptItemStatusInReceiptEnum.PART_SUBMITTED;
// } else if (writeOffApproving == countItem) {
// receiptItemStatus = ReceiptItemStatusInReceiptEnum.UN_APPROVED;
// } else if (writeOff == countItem) {
// receiptItemStatus = ReceiptItemStatusInReceiptEnum.ALL_APPROVED;
// } else if ((writeOffApproving + writeOffNoApproving) == countItem || (writeOff + writeOffNoApproving) == countItem || (writeOffApproving + writeOff) == countItem) {
// receiptItemStatus = ReceiptItemStatusInReceiptEnum.PART_APPROVED;
// }
//}
//if (receiptItemStatus != null) {
// ReceiptDO receiptDO = new ReceiptDO();
// receiptDO.setId(receiptId);
// receiptDO.setReceiptItemStatus(receiptItemStatus.getValue());
// receiptMapper.updateById(receiptDO);
//}
ReceiptItemStatusInReceiptEnum receiptMxStatus = getReceiptMxStatus(listItem, receiptId);
if (receiptMxStatus != null) {
ReceiptDO receiptDO = new ReceiptDO();
receiptDO.setId(receiptId);
receiptDO.setReceiptItemStatus(receiptItemStatus.getValue());
receiptDO.setReceiptItemStatus(receiptMxStatus.getValue());
receiptMapper.updateById(receiptDO);
}
}
......
......@@ -595,7 +595,7 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
if (writeOffRate.compareTo(writeOffDown) < 0 || writeOffRate.compareTo(writeOffUp) > 0) {
return false;
}
String remark = "核销比例为: " + writeOffRate + "%, " + "符合核销比例" + writeOffDown + "%-" + writeOffUp + "%";
String remark = "核销比例为: " + writeOffRate.divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP) + "%, " + "符合核销比例" + writeOffDown.divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP) + "%-" + writeOffUp.divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP) + "%";
receiptService.recordLog(receiptItemDO.getReceiptId(), ReceiptLinkEnum.APPROVE_BANK_RECEIPT, remark, WorkFlowEmus.FINANCE_RECEIPT_ITEM_WRITE_OFF.getValue());
return true;
}
......@@ -996,9 +996,9 @@ public class ReceiptItemServiceImpl extends AbstractService<ReceiptItemMapper, R
createReqVO.setAccountId(account.getId());
createReqVO.setAccountName(account.getBaAccountName());
createReqVO.setAccountBankName(account.getBaBankName());
if (account.getBaCurrency() != null && !allCurrency.get(account.getBaCurrency()).getFuhao().equals(createReqVO.getPayCurrency())) {
return new ReceiptItemBatchRespVO(createReqVO.getOrderNo(), createReqVO.getPayer(), 0, "收款账号币种与实收金额币种不一致");
}
//if (account.getBaCurrency() != null && !allCurrency.get(account.getBaCurrency()).getFuhao().equals(createReqVO.getPayCurrency())) {
// return new ReceiptItemBatchRespVO(createReqVO.getOrderNo(), createReqVO.getPayer(), 0, "收款账号币种与实收金额币种不一致");
//}
return null;
}
}
......@@ -534,6 +534,7 @@ public class ReceivableServiceImpl extends AbstractService<ReceivableMapper, Rec
if (CollectionUtil.isNotEmpty(records)) {
records.forEach(vo -> {
vo.setUpdater(vo.getUpdaterName());
vo.setCurrencySymbol(allCurrency.get(vo.getCurrencyId()).getFuhao());
vo.setNotIncludedTaxAmount(vo.getTotalAmount());
if (vo.getDiscountTotal() == null) {
......
......@@ -174,6 +174,8 @@ public class CostDetailPageVO {
@ApiModelProperty(value = "更新人")
private String updater;
@ApiModelProperty(value = "更新人")
private String updaterName;
@ApiModelProperty(value = "创建时间")
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private Date createTime;
......
......@@ -4,7 +4,6 @@
<select id="getCostDetailPage" resultType="cn.iocoder.yudao.module.wealth.vo.receivable.CostDetailPageVO">
SELECT
o.order_no,
o.transport_id,
o.channel_id,
o.status,
......@@ -16,23 +15,23 @@
obw.title_en objective_warehouse_en,
obw.guojia destination_country,
obw.shi destination_city,
usu.username AS updater,
usu.username AS updaterName,
asu.username AS approver,
ra.update_time AS approverTime,
r.*
FROM ecw_receivable r
LEFT JOIN ecw_order o ON o.order_id = r.order_id
LEFT JOIN ecw_order_departure de ON de.order_id = o.order_id
LEFT JOIN ecw_order_objective ob ON ob.order_id = o.order_id
LEFT JOIN ecw_warehouse dew ON de.departure_warehouse_id = dew.id
LEFT JOIN ecw_warehouse obw ON ob.objective_warehouse_id = obw.id
LEFT JOIN ecw_receipt_approval ra ON ra.receipt_id = r.receipt_id
LEFT JOIN ecw_order o ON o.order_id = r.order_id AND r.deleted = 0
LEFT JOIN ecw_order_departure de ON de.order_id = o.order_id AND de.deleted = 0
LEFT JOIN ecw_order_objective ob ON ob.order_id = o.order_id AND ob.deleted = 0
LEFT JOIN ecw_warehouse dew ON de.departure_warehouse_id = dew.id AND dew.deleted = 0
LEFT JOIN ecw_warehouse obw ON ob.objective_warehouse_id = obw.id AND obw.deleted = 0
LEFT JOIN ecw_receipt_approval ra ON ra.receipt_id = r.receipt_id AND ra.deleted = 0
LEFT JOIN system_user usu ON usu.id = r.updater
LEFT JOIN system_user asu ON asu.id = ra.updater
WHERE
r.deleted = 0
<include refid="costDetailPageCondition"/>
ORDER BY r.create_time
GROUP BY r.id
</select>
<select id="costDetailSearchAmount" resultType="cn.iocoder.yudao.module.wealth.vo.receivable.WealthMoneyAmountVO">
SELECT
......@@ -46,10 +45,10 @@
LEFT JOIN ecw_order o ON o.order_id = r.order_id
</if>
<if test="query.departureWareHouseId != null">
LEFT JOIN ecw_order_departure de ON de.order_id = r.order_id
LEFT JOIN ecw_order_departure de ON de.order_id = r.order_id AND de.deleted = 0
</if>
<if test="query.destCountry != null or query.destCity != null or query.objectiveWareHouseId != null">
LEFT JOIN ecw_order_objective ob ON ob.order_id = r.order_id
LEFT JOIN ecw_order_objective ob ON ob.order_id = r.order_id AND ob.deleted = 0
</if>
WHERE
r.deleted = 0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment