|
|
@@ -19,6 +19,7 @@ package org.springblade.land.service.impl;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
@@ -31,8 +32,12 @@ import org.springblade.client.feign.*;
|
|
|
import org.springblade.core.mp.support.Condition;
|
|
|
import org.springblade.core.mp.support.Query;
|
|
|
import org.springblade.core.secure.utils.AuthUtil;
|
|
|
+import org.springblade.core.secure.utils.SecureUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
import org.springblade.core.tool.utils.*;
|
|
|
+import org.springblade.finance.dto.ApplyDTO;
|
|
|
+import org.springblade.finance.feign.IFinanceClient;
|
|
|
+import org.springblade.finance.vojo.Items;
|
|
|
import org.springblade.land.constant.LandConst;
|
|
|
import org.springblade.land.entity.*;
|
|
|
import org.springblade.land.mapper.*;
|
|
|
@@ -91,6 +96,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, LandOrder> implem
|
|
|
|
|
|
private final IUserSearchClient userSearchClient;
|
|
|
|
|
|
+ private final IFinanceClient financeClient;//财务
|
|
|
+
|
|
|
@Override
|
|
|
public IPage<OrderVO> selectOrderPage(IPage<OrderVO> page, OrderVO order) {
|
|
|
return page.setRecords(baseMapper.selectOrderPage(page, order));
|
|
|
@@ -1274,6 +1281,204 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, LandOrder> implem
|
|
|
return baseMapper.dataAnalysisExport(dataAnalysisVO);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @GlobalTransactional(rollbackFor = Exception.class)
|
|
|
+ public LandOrder generateBill(LandOrder landOrder) {
|
|
|
+ if (null == landOrder.getId()) {
|
|
|
+ throw new RuntimeException("缺少必要参数");
|
|
|
+ }
|
|
|
+ LandOrder order = baseMapper.selectById(landOrder.getId());
|
|
|
+ if (ObjectUtils.isNull(order)) {
|
|
|
+ throw new RuntimeException("未查到单据信息");
|
|
|
+ }
|
|
|
+ Long pid = order.getId();
|
|
|
+ List<Items> itemsList = new ArrayList<>();
|
|
|
+ Items LandOrderItems = new Items();
|
|
|
+ LandOrderItems.setSrcOrderno(order.getBillNo());
|
|
|
+ LandOrderItems.setCorpId(order.getCorpId());
|
|
|
+ LandOrderItems.setSrcParentId(pid);
|
|
|
+ LandOrderItems.setCurrency("CNY");
|
|
|
+ LandOrderItems.setSrcType(9);
|
|
|
+ LandOrderItems.setTradeType("ZDLU");
|
|
|
+ LandOrderItems.setUnit(order.getPricingUnit());
|
|
|
+ LandOrderItems.setSrcSysNo(order.getOrderNo());
|
|
|
+ LandOrderItems.setRemarks(order.getRemarks());
|
|
|
+ LandOrderItems.setSrcBillNo(order.getBillNo());
|
|
|
+ LandOrderItems.setStatusJT(0);
|
|
|
+ LandOrderItems.setBillNo(order.getOrderNo());
|
|
|
+ LandOrderItems.setStockTime(order.getBsDate());
|
|
|
+ //获取费用id
|
|
|
+ LandOrderItems.setCostType(pid.toString());
|
|
|
+ LandOrderItems.setSrcFeesId(pid);
|
|
|
+ CorpsDesc corpsDesc = corpsDescClient.getCorpId(order.getSalesman());
|
|
|
+ if (ObjectUtils.isNotNull(corpsDesc)) {
|
|
|
+ LandOrderItems.setChargeMember(corpsDesc.getCname());
|
|
|
+ }
|
|
|
+ LandOrderItems.setDepartureHarbor(order.getStation());
|
|
|
+ LandOrderItems.setShipName(order.getDispatcher() + "");
|
|
|
+
|
|
|
+ LambdaQueryWrapper<OrderAddress> orderAddressLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ orderAddressLambdaQueryWrapper.eq(OrderAddress::getIsDeleted, 0);
|
|
|
+ orderAddressLambdaQueryWrapper.eq(OrderAddress::getOrderId, pid);
|
|
|
+ orderAddressLambdaQueryWrapper.eq(OrderAddress::getTenantId, AuthUtil.getTenantId());
|
|
|
+ List<OrderAddress> orderAddressList = orderAddressMapper.selectList(orderAddressLambdaQueryWrapper);
|
|
|
+ List<String> arr = orderAddressList.stream().map(OrderAddress::getAddress).distinct().collect(Collectors.toList());
|
|
|
+ LandOrderItems.setObjectiveHarbor(String.join(",", arr));
|
|
|
+
|
|
|
+
|
|
|
+ if ("集装箱".equals(order.getShippingMode())) {
|
|
|
+ LandOrderItems.setSrcBoxBillType("ZDLU-JZX");
|
|
|
+ LandOrderItems.setItemType("ZDLU-JZX");
|
|
|
+ LandOrderItems.setPrice(order.getFreight());
|
|
|
+ //账单数据
|
|
|
+ LandOrderItems.setAmount(order.getFreight());
|
|
|
+ LandOrderItems.setQuantity(new BigDecimal("1"));
|
|
|
+ LandOrderItems.setSrcFeesType("收费");
|
|
|
+ LambdaQueryWrapper<OrderItem> orderItemLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ orderItemLambdaQueryWrapper.eq(OrderItem::getIsDeleted, 0);
|
|
|
+ orderItemLambdaQueryWrapper.eq(OrderItem::getOrderId, pid);
|
|
|
+ orderItemLambdaQueryWrapper.eq(OrderItem::getTenantId, AuthUtil.getTenantId());
|
|
|
+ orderItemLambdaQueryWrapper.eq(OrderItem::getKind, 2);
|
|
|
+ List<OrderItem> orderItemList = orderItemMapper.selectList(orderItemLambdaQueryWrapper);
|
|
|
+ if (ObjectUtils.isNotNull(orderItemList) && orderItemList.size() > 0) {
|
|
|
+ LandOrderItems.setFleetId(orderItemList.get(0).getFleetId());
|
|
|
+ }
|
|
|
+ List<String> PlateNo = orderItemList.stream().map(OrderItem::getPlateNo).distinct().collect(Collectors.toList());
|
|
|
+ LandOrderItems.setPlateNo(String.join(",", PlateNo));
|
|
|
+ List<String> CtnType = orderItemList.stream().map(OrderItem::getCtnType).distinct().collect(Collectors.toList());
|
|
|
+ LandOrderItems.setCtnType(String.join(",", CtnType));
|
|
|
+ itemsList.add(LandOrderItems);
|
|
|
+ } else {
|
|
|
+ for (int i = 0; i < 2; i++) {
|
|
|
+ Items LandItems = new Items();
|
|
|
+ BeanUtil.copyProperties(LandOrderItems, LandItems);
|
|
|
+ LandItems.setSrcBoxBillType("ZDLU-SH");
|
|
|
+ LandItems.setItemType("ZDLU-SH");
|
|
|
+ LandItems.setQuantity(new BigDecimal("1"));
|
|
|
+ LandItems.setFleetId(order.getFleetId());
|
|
|
+ LandItems.setPlateNo(order.getPlateNo());
|
|
|
+ LandItems.setCtnType("散货");
|
|
|
+
|
|
|
+ if (i == 0 && ObjectUtils.isNotNull(order.getFreightCollect())) {
|
|
|
+ LandItems.setSrcFeesType("收费");
|
|
|
+ LandItems.setPrice(order.getFreightCollect());
|
|
|
+ LandItems.setAmount(order.getFreightCollect());
|
|
|
+ itemsList.add(LandItems);
|
|
|
+ }
|
|
|
+ if (i == 1 && ObjectUtils.isNotNull(order.getFreightPay())) {
|
|
|
+ LandItems.setSrcFeesType("付费");
|
|
|
+ LandItems.setPrice(order.getFreightPay());
|
|
|
+ LandItems.setAmount(order.getFreightPay());
|
|
|
+ itemsList.add(LandItems);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ //账单数据
|
|
|
+ ApplyDTO applyDTO = new ApplyDTO();
|
|
|
+ applyDTO.setTradeType("ZDLU");
|
|
|
+ applyDTO.setBelongCompany(order.getCorpName());
|
|
|
+ BigDecimal amount = BigDecimal.ZERO;//对账金额 销售订单生成的金额 销售金额-本次使用返利金额+费用明细
|
|
|
+ BigDecimal quantity = new BigDecimal("1");//对账数量 数量为 就是轮胎条数的和
|
|
|
+ BigDecimal price = BigDecimal.ZERO;//对账单价
|
|
|
+
|
|
|
+ //获取订单收款信息
|
|
|
+ LambdaQueryWrapper<OrderFee> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(OrderFee::getIsDeleted, 0);
|
|
|
+ lambdaQueryWrapper.eq(OrderFee::getOrderId, pid);
|
|
|
+ lambdaQueryWrapper.eq(OrderFee::getTenantId, AuthUtil.getTenantId());
|
|
|
+ lambdaQueryWrapper.eq(OrderFee::getSubmitPay, 0);
|
|
|
+ List<OrderFee> transportItemFeesList = orderFeeMapper.selectList(lambdaQueryWrapper);
|
|
|
+ if (CollectionUtils.isNotEmpty(transportItemFeesList)) {
|
|
|
+ for (OrderFee transportItemFees : transportItemFeesList) {
|
|
|
+ Items items = new Items();
|
|
|
+ amount = transportItemFees.getAmount();
|
|
|
+ //计算单价
|
|
|
+ if (quantity.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ price = amount.divide(quantity, 5, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ }
|
|
|
+ if (1 == transportItemFees.getType()) {
|
|
|
+ items.setSrcFeesType("收费");
|
|
|
+ items.setCorpId(transportItemFees.getCorpId());
|
|
|
+ } else {
|
|
|
+ items.setSrcFeesType("付费");
|
|
|
+ items.setCorpId(transportItemFees.getFleetId());
|
|
|
+ }
|
|
|
+ if ("集装箱".equals(order.getShippingMode())) {
|
|
|
+ items.setSrcBoxBillType("ZDLU-JZX");
|
|
|
+ items.setItemType("ZDLU-JZX");
|
|
|
+ } else {
|
|
|
+ items.setSrcBoxBillType("ZDLU-SH");
|
|
|
+ items.setItemType("ZDLU-SH");
|
|
|
+ }
|
|
|
+ items.setPrice(price);
|
|
|
+ //账单数据
|
|
|
+ items.setAmount(amount);
|
|
|
+ items.setQuantity(quantity);
|
|
|
+ items.setSrcOrderno(order.getBillNo());
|
|
|
+ items.setSrcParentId(transportItemFees.getId());
|
|
|
+ items.setCurrency(transportItemFees.getCurrency());
|
|
|
+ items.setSrcType(10);
|
|
|
+ items.setTradeType("ZDLU");
|
|
|
+ items.setUnit(transportItemFees.getUnit());
|
|
|
+ items.setRemarks(transportItemFees.getRemarks());
|
|
|
+ items.setSrcBillNo(order.getBillNo());
|
|
|
+ items.setStatusJT(0);
|
|
|
+ items.setBillNo(order.getOrderNo());
|
|
|
+ items.setStockTime(order.getBsDate());
|
|
|
+ items.setSrcSysNo(order.getOrderNo());
|
|
|
+ items.setFleetId(transportItemFees.getFleetId());
|
|
|
+ LandOrderItems.setPlateNo(transportItemFees.getPlateNo());
|
|
|
+ //获取费用id
|
|
|
+ if (ObjectUtils.isNotNull(transportItemFees.getFeeId())) {
|
|
|
+ items.setCostType(transportItemFees.getFeeId().toString());
|
|
|
+ }
|
|
|
+ items.setSrcFeesId(transportItemFees.getId());
|
|
|
+ itemsList.add(items);
|
|
|
+ applyDTO.setItemsList(itemsList);
|
|
|
+ //修改费用明细
|
|
|
+ transportItemFees.setSubmitPay(1);
|
|
|
+ orderFeeMapper.updateById(transportItemFees);
|
|
|
+ }
|
|
|
+ if (CollectionUtils.isNotEmpty(itemsList)) {
|
|
|
+ //生成账单
|
|
|
+ R paymentApply = financeClient.paymentApplyLandOrder(applyDTO);
|
|
|
+ if (!paymentApply.isSuccess()) {
|
|
|
+ throw new RuntimeException(paymentApply.getMsg());
|
|
|
+ }
|
|
|
+ //给角色为财务的人发送消息
|
|
|
+ R<String> clientDeptIds = sysClient.getRoleIds(SecureUtil.getTenantId(), "财务");
|
|
|
+ if (clientDeptIds.isSuccess() && com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(clientDeptIds.getData())) {
|
|
|
+ R<List<User>> userList = userClient.listUserByRoleId(Long.valueOf(clientDeptIds.getData()));
|
|
|
+ if (userList.isSuccess() && CollectionUtils.isNotEmpty(userList.getData())) {
|
|
|
+ for (User datum : userList.getData()) {
|
|
|
+ //循环发送消息
|
|
|
+ Message sendMessage = new Message();
|
|
|
+ sendMessage.setParameter(String.valueOf(pid));
|
|
|
+ sendMessage.setUserName(AuthUtil.getUserName());
|
|
|
+ sendMessage.setUserId(AuthUtil.getUserId());
|
|
|
+ sendMessage.setToUserId(datum.getId());
|
|
|
+ sendMessage.setToUserName(datum.getName());
|
|
|
+ sendMessage.setMessageType(1);
|
|
|
+ sendMessage.setTenantId(AuthUtil.getTenantId());
|
|
|
+ sendMessage.setCreateUser(AuthUtil.getUserId());
|
|
|
+ sendMessage.setCreateTime(new Date());
|
|
|
+ /*sendMessage.setUrl(order.getUrl());
|
|
|
+ sendMessage.setPageLabel(order.getPageLabel());
|
|
|
+ sendMessage.setPageStatus(order.getPageStatus());*/
|
|
|
+ sendMessage.setMessageBody("您订单" + order.getOrderNo() + "审核通过,请查看");
|
|
|
+ R save = messageClient.save(sendMessage);
|
|
|
+ if (!save.isSuccess()) {
|
|
|
+ throw new SecurityException("发送消息失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
private List<OrderItem> getOrderItemList(Long id) {
|
|
|
List<OrderItem> orderItemList = orderItemMapper.selectList(new LambdaQueryWrapper<OrderItem>()
|
|
|
.eq(OrderItem::getOrderId, id)
|