Commit c7fbb7d1 authored by 332784038@qq.com's avatar 332784038@qq.com

重构费用申请审批和费用批量申请审批的业务逻辑结构

parent e94db012
......@@ -40,6 +40,7 @@ public enum OrderApprovalTypeEnum {
DISCOUNT_APPLY_BATCH(31, "批量优惠申请", Arrays.asList(1, 2, 6, 11, 14, 23, 28, 32)), // 拆单申请/合单申请/订单修改/退仓/撤销拆单审批/优惠申请(当前商品有在途申请)/批量管理折扣申请(当前商品有在途申请)/管理优惠(当前商品有在途申请)
ADMIN_DISCOUNT_BATCH(32, "批量管理折扣申请", Arrays.asList(1, 2, 6, 11, 14, 23, 28, 31)), // 拆单申请/合单申请/订单修改/退仓/撤销拆单审批/优惠申请(当前商品有在途申请)/批量优惠申请(当前商品有在途申请)/管理优惠(当前商品有在途申请)
expense_apply_BATCH(41, "批量费用申请", Arrays.asList(6, 11, 28)), // 拆单申请/合单申请/撤销拆单审批
//分拣
sorting(50, "分拣审批", Arrays.asList(6, 11, 13, 14, 22, 23, 28)), // 自编号全部申请互斥,跟原本一致,不修改, 自编号下订单除拆单申请/合单申请/调仓申请/订单修改/入仓申请/退仓申请外,其他申请不受限制,允许封柜反审批
......
......@@ -153,6 +153,11 @@ public enum OrderApprovalTypeResultEnum implements IntArrayValuable {
admin_discount_batch_reject(32,3, "admin.discount.batch.reject"),
admin_discount_batch_cancel(32,4, "admin.discount.batch.cancel"),
//批量费用申请
expense_apply_batch_processing(41,1, "fee.application.processing"),
expense_apply_batch_pass(41,2, "fee.application.pass"),
expense_apply_batch_reject(41,3, "fee.application.reject"),
expense_apply_batch_cancel(41,4, "fee.application.cancel"),
//分拣
sorting_processing(50,1, "shipment.sorting.processing"),
......
......@@ -38,8 +38,11 @@ import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import cn.iocoder.yudao.module.wealth.dal.dataobject.receivable.ReceivableDO;
import cn.iocoder.yudao.module.wealth.service.receivable.ReceivableService;
import cn.iocoder.yudao.module.wealth.vo.receivable.ReceivableCreateReqVO;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
......@@ -55,8 +58,7 @@ import java.util.Objects;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
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.expense_apply;
import static cn.iocoder.yudao.module.order.enums.OrderApprovalTypeEnum.*;
/**
* 订单费用申请 Service 实现类
......@@ -182,19 +184,18 @@ public class OrderFeeApplicationServiceImpl extends AbstractService<OrderFeeAppl
orderApprovalDO.setFollowUpSalesmanId(String.valueOf(SecurityFrameworkUtils.getLoginUserId()));
orderApprovalDO.setOrderId(createReqVO.getOrderId());
//批量费用申请
orderApprovalDO.setType(expense_apply.getValue());
orderApprovalDO.setType(expense_apply_BATCH.getValue());
orderApprovalDO.setStatus(ApprovalResultStatusEnum.processing.getValue());
Long bpmProcessId = orderApprovalService.applyAndCreate(orderApprovalDO, WorkFlowEmus.ORDER_BATCH_FREE_APPLY, createReqVO.getCopyUserId());
//创建审批流
OrderDO orderDO = orderService.selectOne(OrderDO::getOrderId, createReqVO.getOrderId());
orderService.updateStatus(orderDO.getOrderId(), null, null, null, null, null, OrderApprovalTypeResultEnum.expense_apply_processing.getType(), OrderApprovalTypeResultEnum.expense_apply_processing.getDesc());
orderService.updateStatus(orderDO.getOrderId(), null, null, null, null, null, OrderApprovalTypeResultEnum.expense_apply_batch_processing.getType(), OrderApprovalTypeResultEnum.expense_apply_batch_processing.getDesc());
//更新费用列表对应的流程申请ID
for (OrderFeeApplicationDO feeApplication : batchFeeList) {
feeApplication.setBatchBpmBusinessId(String.valueOf(bpmProcessId));
feeApplication.setBpmProcessId(String.valueOf(bpmProcessId));
feeApplication.setStatus(ApprovalResultStatusEnum.processing.getValue());
feeApplicationMapper.updateById(feeApplication);
}
......@@ -216,19 +217,19 @@ public class OrderFeeApplicationServiceImpl extends AbstractService<OrderFeeAppl
}
// 更新
OrderFeeApplicationDO updateObj = OrderFeeApplicationConvert.INSTANCE.convert(updateReqVO);
Long userId = SecurityFrameworkUtils.getLoginUserId();
//创建审批单,发起流程
OrderApprovalDO orderApprovalDO = new OrderApprovalDO();
orderApprovalDO.setFollowUpSalesmanId(String.valueOf(SecurityFrameworkUtils.getLoginUserId()));
orderApprovalDO.setOrderId(updateReqVO.getOrderId());
//批量费用申请
//费用申请
orderApprovalDO.setType(expense_apply.getValue());
orderApprovalDO.setStatus(ApprovalResultStatusEnum.processing.getValue());
Long bpmProcessId = orderApprovalService.applyAndCreate(orderApprovalDO, WorkFlowEmus.ORDER_BATCH_FREE_APPLY, updateReqVO.getCopyUserId());
orderApprovalDO.setDetails(JSONObject.toJSONString(updateObj));
Long bpmProcessId = orderApprovalService.applyAndCreate(orderApprovalDO, WorkFlowEmus.ORDER_FREE_APPLY, updateReqVO.getCopyUserId());
Integer auditType = OrderApprovalTypeResultEnum.expense_apply_processing.getType();
orderService.updateStatus(orderDO.getOrderId(), null, null, null, null, null, auditType, OrderApprovalTypeResultEnum.expense_apply_processing.getDesc());
updateObj.setBpmProcessId(String.valueOf(bpmProcessId));
feeApplicationMapper.updateById(updateObj);
orderFeeApplicationDOOld.setBpmProcessId(String.valueOf(bpmProcessId));
feeApplicationMapper.updateById(orderFeeApplicationDOOld);
DictDataRespDTO dictDataFromCacheOld = DictFrameworkUtils.getDictDataFromCache(DictTypeConstants.RECEIVABLE_FEE_TYPE, String.valueOf(orderFeeApplicationDOOld.getFeeType()));
DictDataRespDTO dictDataFromCache = DictFrameworkUtils.getDictDataFromCache(DictTypeConstants.RECEIVABLE_FEE_TYPE, String.valueOf(updateReqVO.getFeeType()));
CurrencyDO currency = currencyService.getCurrency(updateReqVO.getApplicationFeeCurrency());
......@@ -261,7 +262,7 @@ public class OrderFeeApplicationServiceImpl extends AbstractService<OrderFeeAppl
}
// 当费用金额为0时,可以不经审批直接删除
// 判断金额是否为0
if (orderFeeApplicationDO.getApplicationFee().compareTo(BigDecimal.ZERO) != 0){
if (orderFeeApplicationDO.getApplicationFee().compareTo(BigDecimal.ZERO) != 0) {
throw exception(FEE_APPLICATION_NOT_IS_ZERO);
}
// 删除可能的应收单
......@@ -269,7 +270,7 @@ public class OrderFeeApplicationServiceImpl extends AbstractService<OrderFeeAppl
orderFeeApplicationDO.getReceivableId() > 0) {
long idTemp = (long) orderFeeApplicationDO.getReceivableId();
ReceivableDO rDo = receivableService.getReceivable(idTemp);
if(Objects.nonNull(rDo)){
if (Objects.nonNull(rDo)) {
receivableService.removeById(rDo.getId());
}
}
......@@ -323,8 +324,14 @@ public class OrderFeeApplicationServiceImpl extends AbstractService<OrderFeeAppl
@Override
@Transactional(rollbackFor = Exception.class)
public void updateFeeApproveResult(String id, int result) {
OrderFeeApplicationDO orderFeeApplicationDO =
feeApplicationMapper.selectById(id);
OrderApprovalDO orderApprovalDO = orderApprovalService.getApproval(Long.parseLong(id));
if (Objects.isNull(orderApprovalDO)){
throw exception(ORDER_APPROVAL_INFO_NOT_FIND);
}
orderApprovalDO.setStatus(result);
orderApprovalService.updateById(orderApprovalDO);
// 这里已经将修改后的内容更新到原数据中去了
OrderFeeApplicationDO orderFeeApplicationDO = JSONObject.parseObject(orderApprovalDO.getDetails(), OrderFeeApplicationDO.class);
if (orderFeeApplicationDO != null) {
orderFeeApplicationDO.setStatus(result);
feeApplicationMapper.updateById(orderFeeApplicationDO);
......@@ -423,91 +430,92 @@ public class OrderFeeApplicationServiceImpl extends AbstractService<OrderFeeAppl
@Transactional(rollbackFor = Exception.class)
public void updateFeeApproveBatchResult(String id, int result) {
OrderApprovalDO orderApprovalDO = orderApprovalService.getApproval(Long.parseLong(id));
if (orderApprovalDO != null) {
orderApprovalDO.setStatus(result);
orderApprovalService.updateById(orderApprovalDO);
if (result == ApprovalResultStatusEnum.pass.getValue()) {
List<FeeDto> feeDtos = new ArrayList<>();
OrderBackVO order = orderQueryService.getOrder(orderApprovalDO.getOrderId());
LambdaQueryWrapper<OrderFeeApplicationDO> lambdaQueryWrapper = new LambdaQueryWrapper();
lambdaQueryWrapper.eq(OrderFeeApplicationDO::getOrderId, orderApprovalDO.getOrderId());
lambdaQueryWrapper.eq(OrderFeeApplicationDO::getBatchBpmBusinessId, orderApprovalDO.getOrderApprovalId());
List<OrderFeeApplicationDO> batchFeeList = this.list(lambdaQueryWrapper);
for (OrderFeeApplicationDO feeApplicationDO : batchFeeList) {
//生成应收
DictDataRespDTO dictDto = DictFrameworkUtils.getDictDataFromCache("receivable_fee_type", String.valueOf(feeApplicationDO.getFeeType()));
if (feeApplicationDO.getReceivableId() != null && feeApplicationDO.getReceivableId() > 0) {
ReceivableDO receivableDO = new ReceivableDO();
//应收款ID
receivableDO.setId(Long.valueOf(feeApplicationDO.getReceivableId()));
receivableDO.setTitleZh(dictDto.getLabel());
receivableDO.setTitleEn(dictDto.getLabelEn());
receivableDO.setOrderId(feeApplicationDO.getOrderId());
receivableDO.setOrderNo(order.getOrderNo());
receivableDO.setTotalAmount(feeApplicationDO.getApplicationFee());
receivableDO.setCollectionType(feeApplicationDO.getPayType());
receivableDO.setUnitPrice(feeApplicationDO.getApplicationFee());
receivableDO.setCurrencyId(Long.valueOf(feeApplicationDO.getApplicationFeeCurrency()));
receivableDO.setFeeType(feeApplicationDO.getFeeType());
receivableDO.setIsPayAdvance(feeApplicationDO.getPayType() == 4 ? 0 : 1);
receivableDO.setState(feeApplicationDO.getReceiveFlag());
receivableDO.setPaymentUser(String.valueOf(order.getDrawee() != 3 ? order.getDrawee() : orderQueryService.customDrawee(OrderConvert.INSTANCE.convert(order), feeApplicationDO.getFeeType())));//6待修改
receivableDO.setFeeSource(2);
receivableDO.setAuthor(feeApplicationDO.getApplicationAuthor());
receivableDO.setRemark(feeApplicationDO.getRemarks());
//订单费用申请,是申请付给我们的费用,
// 所以要更新应收款信息
receivableService.updateReceivableById(receivableDO);
} else {
ReceivableCreateReqVO receivableCreateReqVO = new ReceivableCreateReqVO();
receivableCreateReqVO.setTitleZh(dictDto.getLabel());
receivableCreateReqVO.setTitleEn(dictDto.getLabelEn());
receivableCreateReqVO.setOrderId(feeApplicationDO.getOrderId());
receivableCreateReqVO.setOrderNo(order.getOrderNo());
receivableCreateReqVO.setTotalAmount(feeApplicationDO.getApplicationFee());
receivableCreateReqVO.setUnitPrice(feeApplicationDO.getApplicationFee());
receivableCreateReqVO.setCollectionType(feeApplicationDO.getPayType());
receivableCreateReqVO.setCurrencyId(Long.valueOf(feeApplicationDO.getApplicationFeeCurrency()));
receivableCreateReqVO.setFeeType(feeApplicationDO.getFeeType());
receivableCreateReqVO.setIsPayAdvance(feeApplicationDO.getPayType() == 4 ? 0 : 1);
receivableCreateReqVO.setState(feeApplicationDO.getReceiveFlag());
receivableCreateReqVO.setPaymentUser(String.valueOf(order.getDrawee() != 3 ? order.getDrawee() : orderQueryService.customDrawee(OrderConvert.INSTANCE.convert(order), feeApplicationDO.getFeeType())));//6待修改
receivableCreateReqVO.setFeeSource(2);
receivableCreateReqVO.setAuthor(feeApplicationDO.getApplicationAuthor());
receivableCreateReqVO.setRemark(feeApplicationDO.getRemarks());
Long receivableId = receivableService.createReceivable(receivableCreateReqVO);
feeApplicationDO.setReceivableId(receivableId.intValue());
}
feeApplicationDO.setStatus(ApprovalResultStatusEnum.pass.getValue());
feeApplicationMapper.updateById(feeApplicationDO);
FeeDto feeDto = new FeeDto();
feeDto.setFeeType(feeApplicationDO.getFeeType());
feeDto.setAmount(feeApplicationDO.getApplicationFee());
feeDto.setCurrencyId(feeApplicationDO.getApplicationFeeCurrency());
feeDtos.add(feeDto);
if (Objects.isNull(orderApprovalDO)){
throw exception(ORDER_APPROVAL_INFO_NOT_FIND);
}
orderApprovalDO.setStatus(result);
orderApprovalService.updateById(orderApprovalDO);
if (result == ApprovalResultStatusEnum.pass.getValue()) {
List<FeeDto> feeDtos = new ArrayList<>();
OrderBackVO order = orderQueryService.getOrder(orderApprovalDO.getOrderId());
LambdaQueryWrapper<OrderFeeApplicationDO> lambdaQueryWrapper = new LambdaQueryWrapper();
lambdaQueryWrapper.eq(OrderFeeApplicationDO::getOrderId, orderApprovalDO.getOrderId());
lambdaQueryWrapper.eq(OrderFeeApplicationDO::getBatchBpmBusinessId, orderApprovalDO.getOrderApprovalId());
List<OrderFeeApplicationDO> batchFeeList = this.list(lambdaQueryWrapper);
for (OrderFeeApplicationDO feeApplicationDO : batchFeeList) {
//生成应收
DictDataRespDTO dictDto = DictFrameworkUtils.getDictDataFromCache("receivable_fee_type", String.valueOf(feeApplicationDO.getFeeType()));
if (feeApplicationDO.getReceivableId() != null && feeApplicationDO.getReceivableId() > 0) {
ReceivableDO receivableDO = new ReceivableDO();
//应收款ID
receivableDO.setId(Long.valueOf(feeApplicationDO.getReceivableId()));
receivableDO.setTitleZh(dictDto.getLabel());
receivableDO.setTitleEn(dictDto.getLabelEn());
receivableDO.setOrderId(feeApplicationDO.getOrderId());
receivableDO.setOrderNo(order.getOrderNo());
receivableDO.setTotalAmount(feeApplicationDO.getApplicationFee());
receivableDO.setCollectionType(feeApplicationDO.getPayType());
receivableDO.setUnitPrice(feeApplicationDO.getApplicationFee());
receivableDO.setCurrencyId(Long.valueOf(feeApplicationDO.getApplicationFeeCurrency()));
receivableDO.setFeeType(feeApplicationDO.getFeeType());
receivableDO.setIsPayAdvance(feeApplicationDO.getPayType() == 4 ? 0 : 1);
receivableDO.setState(feeApplicationDO.getReceiveFlag());
receivableDO.setPaymentUser(String.valueOf(order.getDrawee() != 3 ? order.getDrawee() : orderQueryService.customDrawee(OrderConvert.INSTANCE.convert(order), feeApplicationDO.getFeeType())));//6待修改
receivableDO.setFeeSource(2);
receivableDO.setAuthor(feeApplicationDO.getApplicationAuthor());
receivableDO.setRemark(feeApplicationDO.getRemarks());
//订单费用申请,是申请付给我们的费用,
// 所以要更新应收款信息
receivableService.updateReceivableById(receivableDO);
} else {
ReceivableCreateReqVO receivableCreateReqVO = new ReceivableCreateReqVO();
receivableCreateReqVO.setTitleZh(dictDto.getLabel());
receivableCreateReqVO.setTitleEn(dictDto.getLabelEn());
receivableCreateReqVO.setOrderId(feeApplicationDO.getOrderId());
receivableCreateReqVO.setOrderNo(order.getOrderNo());
receivableCreateReqVO.setTotalAmount(feeApplicationDO.getApplicationFee());
receivableCreateReqVO.setUnitPrice(feeApplicationDO.getApplicationFee());
receivableCreateReqVO.setCollectionType(feeApplicationDO.getPayType());
receivableCreateReqVO.setCurrencyId(Long.valueOf(feeApplicationDO.getApplicationFeeCurrency()));
receivableCreateReqVO.setFeeType(feeApplicationDO.getFeeType());
receivableCreateReqVO.setIsPayAdvance(feeApplicationDO.getPayType() == 4 ? 0 : 1);
receivableCreateReqVO.setState(feeApplicationDO.getReceiveFlag());
receivableCreateReqVO.setPaymentUser(String.valueOf(order.getDrawee() != 3 ? order.getDrawee() : orderQueryService.customDrawee(OrderConvert.INSTANCE.convert(order), feeApplicationDO.getFeeType())));//6待修改
receivableCreateReqVO.setFeeSource(2);
receivableCreateReqVO.setAuthor(feeApplicationDO.getApplicationAuthor());
receivableCreateReqVO.setRemark(feeApplicationDO.getRemarks());
Long receivableId = receivableService.createReceivable(receivableCreateReqVO);
feeApplicationDO.setReceivableId(receivableId.intValue());
}
feeApplicationDO.setStatus(ApprovalResultStatusEnum.pass.getValue());
feeApplicationMapper.updateById(feeApplicationDO);
FeeDto feeDto = new FeeDto();
feeDto.setFeeType(feeApplicationDO.getFeeType());
feeDto.setAmount(feeApplicationDO.getApplicationFee());
feeDto.setCurrencyId(feeApplicationDO.getApplicationFeeCurrency());
feeDtos.add(feeDto);
orderService.addOrderOtherFee(orderApprovalDO.getOrderId(), feeDtos);
orderService.updateStatus(orderApprovalDO.getOrderId(), null, null, null, null, null, 0, OrderApprovalTypeResultEnum.expense_apply_pass.getDesc());
}
if (result == ApprovalResultStatusEnum.reject.getValue()) {
LambdaUpdateWrapper<OrderFeeApplicationDO> lambdaUpdateWrapper = new LambdaUpdateWrapper();
lambdaUpdateWrapper.eq(OrderFeeApplicationDO::getOrderId, orderApprovalDO.getOrderId());
lambdaUpdateWrapper.eq(OrderFeeApplicationDO::getBatchBpmBusinessId, orderApprovalDO.getOrderApprovalId());
lambdaUpdateWrapper.set(OrderFeeApplicationDO::getStatus, ApprovalResultStatusEnum.reject.getValue());
this.update(lambdaUpdateWrapper);
orderService.updateStatus(orderApprovalDO.getOrderId(), null, null, null, null, null, 0, OrderApprovalTypeResultEnum.expense_apply_reject.getDesc());
}
orderService.addOrderOtherFee(orderApprovalDO.getOrderId(), feeDtos);
orderService.updateStatus(orderApprovalDO.getOrderId(), null, null, null, null, null, 0, OrderApprovalTypeResultEnum.expense_apply_pass.getDesc());
}
if (result == ApprovalResultStatusEnum.cancel.getValue()) {
LambdaQueryWrapper<OrderFeeApplicationDO> lambdaQueryWrapper = new LambdaQueryWrapper();
lambdaQueryWrapper.eq(OrderFeeApplicationDO::getOrderId, orderApprovalDO.getOrderId());
lambdaQueryWrapper.eq(OrderFeeApplicationDO::getBatchBpmBusinessId, orderApprovalDO.getOrderApprovalId());
this.remove(lambdaQueryWrapper);
orderService.updateStatus(orderApprovalDO.getOrderId(), null, null, null, null, null, 0, OrderApprovalTypeResultEnum.expense_apply_cancel.getDesc());
}
if (result == ApprovalResultStatusEnum.reject.getValue()) {
LambdaUpdateWrapper<OrderFeeApplicationDO> lambdaUpdateWrapper = new LambdaUpdateWrapper();
lambdaUpdateWrapper.eq(OrderFeeApplicationDO::getOrderId, orderApprovalDO.getOrderId());
lambdaUpdateWrapper.eq(OrderFeeApplicationDO::getBatchBpmBusinessId, orderApprovalDO.getOrderApprovalId());
lambdaUpdateWrapper.set(OrderFeeApplicationDO::getStatus, ApprovalResultStatusEnum.reject.getValue());
this.update(lambdaUpdateWrapper);
orderService.updateStatus(orderApprovalDO.getOrderId(), null, null, null, null, null, 0, OrderApprovalTypeResultEnum.expense_apply_reject.getDesc());
}
if (result == ApprovalResultStatusEnum.cancel.getValue()) {
LambdaQueryWrapper<OrderFeeApplicationDO> lambdaQueryWrapper = new LambdaQueryWrapper();
lambdaQueryWrapper.eq(OrderFeeApplicationDO::getOrderId, orderApprovalDO.getOrderId());
lambdaQueryWrapper.eq(OrderFeeApplicationDO::getBatchBpmBusinessId, orderApprovalDO.getOrderApprovalId());
this.remove(lambdaQueryWrapper);
orderService.updateStatus(orderApprovalDO.getOrderId(), null, null, null, null, null, 0, OrderApprovalTypeResultEnum.expense_apply_cancel.getDesc());
}
}
......@@ -526,6 +534,13 @@ public class OrderFeeApplicationServiceImpl extends AbstractService<OrderFeeAppl
} else {
item.setReceiveFlag(0);
}
if (item.getStatus() == 1 && StringUtils.isNotBlank(item.getBpmProcessId())){
OrderApprovalDO approvalDO = orderApprovalService.getApproval(Long.valueOf(item.getBpmProcessId()));
if (Objects.nonNull(approvalDO) && Objects.nonNull(approvalDO.getDetails())){
OrderFeeApplicationDO feeApplicationDO = JSONObject.parseObject(approvalDO.getDetails(), OrderFeeApplicationDO.class);
BeanUtils.copyProperties(feeApplicationDO, item);
}
}
});
return feeApplicationList;
}
......
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