|
|
@@ -1,9 +1,14 @@
|
|
|
package com.sckw.order.serivce;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
import com.alibaba.fastjson2.JSON;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import com.github.pagehelper.PageHelper;
|
|
|
+import com.github.pagehelper.PageInfo;
|
|
|
import com.sckw.contract.api.RemoteContractService;
|
|
|
import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
|
|
|
import com.sckw.core.common.enums.enums.DictTypeEnum;
|
|
|
@@ -15,7 +20,15 @@ import com.sckw.core.model.enums.ClientTypeEnum;
|
|
|
import com.sckw.core.model.enums.CooperateTypeEnum;
|
|
|
import com.sckw.core.model.enums.OrderRuleEnum;
|
|
|
import com.sckw.core.model.enums.RedisOrderGenerateEnum;
|
|
|
-import com.sckw.core.utils.*;
|
|
|
+import com.sckw.core.model.page.PageHelperUtil;
|
|
|
+import com.sckw.core.model.page.PageResult;
|
|
|
+import com.sckw.core.model.vo.TableBottom;
|
|
|
+import com.sckw.core.model.vo.TableStatisticRes;
|
|
|
+import com.sckw.core.model.vo.TableTop;
|
|
|
+import com.sckw.core.utils.CollectionUtils;
|
|
|
+import com.sckw.core.utils.DateUtils;
|
|
|
+import com.sckw.core.utils.OrderGenerateSeqNoUtils;
|
|
|
+import com.sckw.core.utils.StringUtils;
|
|
|
import com.sckw.core.web.constant.HttpStatus;
|
|
|
import com.sckw.core.web.context.LoginUserHolder;
|
|
|
import com.sckw.core.web.response.HttpResult;
|
|
|
@@ -26,9 +39,7 @@ import com.sckw.order.api.model.TradeOrderCountStatisticsDTO;
|
|
|
import com.sckw.order.dao.KwoTradeOrderMapper;
|
|
|
import com.sckw.order.enums.*;
|
|
|
import com.sckw.order.model.*;
|
|
|
-import com.sckw.order.model.dto.OrderCheckDTO;
|
|
|
-import com.sckw.order.model.dto.WbTOrderExcelStsReqDTO;
|
|
|
-import com.sckw.order.model.dto.WbTOrderExcelStsResDTO;
|
|
|
+import com.sckw.order.model.dto.*;
|
|
|
import com.sckw.order.model.vo.req.*;
|
|
|
import com.sckw.order.model.vo.res.*;
|
|
|
import com.sckw.payment.api.dubbo.PayCenterDubboService;
|
|
|
@@ -48,15 +59,19 @@ import com.sckw.stream.model.SckwMessage;
|
|
|
import com.sckw.stream.model.UserInfo;
|
|
|
import com.sckw.system.api.RemoteSystemService;
|
|
|
import com.sckw.system.api.model.dto.res.*;
|
|
|
-import com.sckw.transport.api.dubbo.TransportService;
|
|
|
+import com.sckw.transport.api.dubbo.TransportRemoteService;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.cloud.stream.function.StreamBridge;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -89,7 +104,7 @@ public class KwoTradeOrderService {
|
|
|
private PaymentDubboService paymentDubboService;
|
|
|
|
|
|
@DubboReference(version = "1.0.0", group = "design", check = false)
|
|
|
- private TransportService transportDubboService;
|
|
|
+ private TransportRemoteService transportRemoteService;
|
|
|
|
|
|
private final KwoTradeOrderMapper kwoTradeOrderMapper;
|
|
|
private final StreamBridge streamBridge;
|
|
|
@@ -99,6 +114,7 @@ public class KwoTradeOrderService {
|
|
|
private final KwoTradeOrderContractService kwoTradeOrderContractService;
|
|
|
private final KwoTradeOrderTrackService kwoTradeOrderTrackService;
|
|
|
private final KwoTradeOrderGoodsUnitService kwoTradeOrderGoodsUnitService;
|
|
|
+ private final KwoTradeOrderAmountService tradeOrderAmountService;
|
|
|
|
|
|
@Value("${url.order.list.valet.pc}")
|
|
|
private String pcValetListUrl;
|
|
|
@@ -120,7 +136,7 @@ public class KwoTradeOrderService {
|
|
|
* @return: void
|
|
|
*/
|
|
|
public void addPurchaseOrderDraft(PurchaseOrderDraftParam param) {
|
|
|
- KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
|
|
|
+ KwoTradeOrder order = BeanUtil.copyProperties(param, KwoTradeOrder.class);
|
|
|
order.setEntId(LoginUserHolder.getEntId())
|
|
|
.setTOrderNo(getOrderNo())
|
|
|
.setStartTime(DateUtils.localDateToDateStart(param.getStartTime()))
|
|
|
@@ -128,7 +144,7 @@ public class KwoTradeOrderService {
|
|
|
.setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null)
|
|
|
.setSource(OrderSourceEnum.PURCHASE.getType()).setStatus(OrderStatusEnum.SAVED.getCode());
|
|
|
kwoTradeOrderMapper.insert(order);
|
|
|
- addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
|
|
|
+ addOtherOrderInfo(order, BeanUtil.copyProperties(param, ValetOrderParam.class), false, true);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -140,131 +156,160 @@ public class KwoTradeOrderService {
|
|
|
* @Param isUpdate:
|
|
|
* @return: void
|
|
|
*/
|
|
|
- private void addOtherOrderInfo(KwoTradeOrder tradeOrder, ValetOrderParam param, Boolean isUpdate) {
|
|
|
- try {
|
|
|
- Long id = tradeOrder.getId();
|
|
|
- String tOrderNo = tradeOrder.getTOrderNo();
|
|
|
- SckwTradeOrder order = new SckwTradeOrder();
|
|
|
- order.setFirmName(LoginUserHolder.getEntName())
|
|
|
- .setCreateByName(LoginUserHolder.getUserName())
|
|
|
- .setUpdateByName(LoginUserHolder.getUserName())
|
|
|
- .setTOrderId(id)
|
|
|
- .setAssociateStatement(0)
|
|
|
- .setPrice(tradeOrder.getPrice().doubleValue())
|
|
|
- .setAmount(tradeOrder.getAmount().doubleValue())
|
|
|
- .setEntrustAmount(tradeOrder.getEntrustAmount().doubleValue())
|
|
|
- .setActualAmount(tradeOrder.getActualAmount().doubleValue());
|
|
|
-
|
|
|
- BeanUtils.copyProperties(tradeOrder, order);
|
|
|
-
|
|
|
- //商品信息
|
|
|
- kwoTradeOrderGoodsService.delByOrderId(id);
|
|
|
- GoodsInfo goodsInfo = param.getGoodsInfo();
|
|
|
- KwoTradeOrderGoods goods = BeanUtils.copyProperties(goodsInfo, KwoTradeOrderGoods.class);
|
|
|
- if (Objects.nonNull(goods) && Objects.nonNull(goods.getGoodsId())) {
|
|
|
- GoodsDetail goodsDetail = goodsInfoService.getDetailById(goods.getGoodsId());
|
|
|
- if (Objects.isNull(goodsDetail)
|
|
|
- || !Objects.equals(goodsDetail.getStatus(), 1)
|
|
|
- || Objects.equals(goodsDetail.getDelFlag(), Global.YES)) {
|
|
|
- throw new BusinessException("商品不存在或已下架!");
|
|
|
- }
|
|
|
- goods.setTOrderId(id).setTOrderNo(tOrderNo).setGoodsType(goodsDetail.getGoodsType());
|
|
|
- kwoTradeOrderGoodsService.insert(goods);
|
|
|
-
|
|
|
- //商品辅助单位
|
|
|
- kwoTradeOrderGoodsUnitService.delByOrderId(id);
|
|
|
- List<GoodsUnitDetail> assistUnit = goodsDetail.getAssistUnit();
|
|
|
- if (CollectionUtils.isNotEmpty(assistUnit)) {
|
|
|
- List<KwoTradeOrderGoodsUnit> units = new ArrayList<>(assistUnit.size());
|
|
|
- assistUnit.forEach(e -> {
|
|
|
- KwoTradeOrderGoodsUnit unit = BeanUtils.copyProperties(e, KwoTradeOrderGoodsUnit.class);
|
|
|
- unit.setGoodsId(goodsDetail.getId());
|
|
|
- unit.setTOrderId(id);
|
|
|
- unit.setUnit(order.getUnit().equals(e.getFromUnit()) ? e.getToUnit() : e.getFromUnit());
|
|
|
- units.add(unit);
|
|
|
- });
|
|
|
- kwoTradeOrderGoodsUnitService.insertBatch(units);
|
|
|
- }
|
|
|
+ private void addOtherOrderInfo(KwoTradeOrder tradeOrder, ValetOrderParam param, Boolean isUpdate, boolean isDraft) {
|
|
|
+ Long id = tradeOrder.getId();
|
|
|
+ String tOrderNo = tradeOrder.getTOrderNo();
|
|
|
+ SckwTradeOrder order = new SckwTradeOrder();
|
|
|
+ order.setFirmName(LoginUserHolder.getEntName())
|
|
|
+ .setCreateByName(LoginUserHolder.getUserName())
|
|
|
+ .setUpdateByName(LoginUserHolder.getUserName())
|
|
|
+ .setTOrderId(id)
|
|
|
+ .setAssociateStatement(0)
|
|
|
+ .setPrice(Objects.isNull(tradeOrder.getPrice()) ? null : tradeOrder.getPrice().doubleValue())
|
|
|
+ .setAmount(Objects.isNull(tradeOrder.getAmount()) ? null : tradeOrder.getAmount().doubleValue())
|
|
|
+ .setEntrustAmount(Objects.isNull(tradeOrder.getEntrustAmount()) ? null : tradeOrder.getEntrustAmount().doubleValue())
|
|
|
+ .setActualAmount(Objects.isNull(tradeOrder.getActualAmount()) ? null : tradeOrder.getActualAmount().doubleValue());
|
|
|
|
|
|
- //订单关联商品信息
|
|
|
- order.setGoodsId(goodsDetail.getId()).setUnit(goodsDetail.getUnit()).setUnitPrice(goods.getUnitPrice().doubleValue())
|
|
|
- .setGoodsName(goodsDetail.getName()).setGoodsType(goodsDetail.getGoodsType()).setGoodsCode(goodsDetail.getCode())
|
|
|
- .setGoodsTaxRate(goodsDetail.getTaxRate()).setGoodsSpec(goodsDetail.getSpec()).setGoodsThumb(goodsDetail.getThumb());
|
|
|
- }
|
|
|
- if (Objects.isNull(order.getUnitPrice())) {
|
|
|
- order.setUnitPrice(BigDecimal.ZERO.doubleValue());
|
|
|
- }
|
|
|
+ BeanUtil.copyProperties(tradeOrder, order);
|
|
|
|
|
|
- //单位信息
|
|
|
- kwoTradeOrderUnitService.delByOrderId(id);
|
|
|
- List<UnitInfo> unitInfos = param.getUnitInfo();
|
|
|
- if (CollectionUtils.isNotEmpty(unitInfos)) {
|
|
|
- List<KwoTradeOrderUnit> list = new ArrayList<>(unitInfos.size());
|
|
|
- List<Long> entIds = unitInfos.stream().map(UnitInfo::getEntId).distinct().toList();
|
|
|
- Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntTreeByIds(entIds);
|
|
|
- unitInfos.forEach(e -> {
|
|
|
- EntCacheResDto ent = entMap.get(e.getEntId());
|
|
|
- if (Objects.isNull(ent)) {
|
|
|
- throw new BusinessException("企业:" + e.getFirmName() + "的一级企业信息不存在!");
|
|
|
- }
|
|
|
- KwoTradeOrderUnit unit = BeanUtils.copyProperties(e, KwoTradeOrderUnit.class);
|
|
|
- unit.setTOrderId(id).setTOrderNo(tOrderNo).setTopEntId(ent.getId());
|
|
|
- list.add(unit);
|
|
|
- if (Objects.equals(e.getUnitType(), OrderUnitTypeEnum.PURCHASE.getType())) {
|
|
|
- order.setProcureEntId(e.getEntId()).setProcureTopEntId(unit.getTopEntId()).setProcureFirmName(e.getFirmName())
|
|
|
- .setProcureContacts(e.getContacts()).setProcurePhone(e.getPhone()).setProcureContactsId(e.getContactsId());
|
|
|
- } else {
|
|
|
- order.setSupplyEntId(e.getEntId()).setSupplyTopEntId(unit.getTopEntId()).setSupplyFirmName(e.getFirmName())
|
|
|
- .setSupplyContacts(e.getContacts()).setSupplyPhone(e.getPhone()).setSupplyContactsId(e.getContactsId());
|
|
|
- }
|
|
|
+ //商品信息
|
|
|
+ kwoTradeOrderGoodsService.delByOrderId(id);
|
|
|
+ GoodsInfo goodsInfo = param.getGoodsInfo();
|
|
|
+ KwoTradeOrderGoods goods = BeanUtil.copyProperties(goodsInfo, KwoTradeOrderGoods.class);
|
|
|
+ if (Objects.nonNull(goods) && Objects.nonNull(goods.getGoodsId())) {
|
|
|
+ GoodsDetail goodsDetail = goodsInfoService.getDetailById(goods.getGoodsId());
|
|
|
+ if (Objects.isNull(goodsDetail)
|
|
|
+ || !Objects.equals(goodsDetail.getStatus(), 1)
|
|
|
+ || Objects.equals(goodsDetail.getDelFlag(), Global.YES)) {
|
|
|
+ throw new BusinessException("商品不存在或已下架!");
|
|
|
+ }
|
|
|
+ goods.setTOrderId(id).setTOrderNo(tOrderNo).setGoodsType(goodsDetail.getGoodsType());
|
|
|
+ kwoTradeOrderGoodsService.insert(goods);
|
|
|
+
|
|
|
+ //商品辅助单位
|
|
|
+ kwoTradeOrderGoodsUnitService.delByOrderId(id);
|
|
|
+ List<GoodsUnitDetail> assistUnit = goodsDetail.getAssistUnit();
|
|
|
+ if (CollUtil.isNotEmpty(assistUnit)) {
|
|
|
+ List<KwoTradeOrderGoodsUnit> units = new ArrayList<>(assistUnit.size());
|
|
|
+ assistUnit.forEach(e -> {
|
|
|
+ KwoTradeOrderGoodsUnit unit = BeanUtil.copyProperties(e, KwoTradeOrderGoodsUnit.class);
|
|
|
+ unit.setGoodsId(goodsDetail.getId());
|
|
|
+ unit.setTOrderId(id);
|
|
|
+ unit.setUnit(order.getUnit().equals(e.getFromUnit()) ? e.getToUnit() : e.getFromUnit());
|
|
|
+ units.add(unit);
|
|
|
});
|
|
|
- kwoTradeOrderUnitService.insertBatch(list);
|
|
|
+ kwoTradeOrderGoodsUnitService.insertBatch(units);
|
|
|
}
|
|
|
|
|
|
- //地址信息
|
|
|
- kwoTradeOrderAddressService.delByOrderId(id);
|
|
|
- List<AddressInfo> addressInfos = param.getAddressInfo();
|
|
|
- if (CollectionUtils.isNotEmpty(addressInfos)) {
|
|
|
- List<KwoTradeOrderAddress> list = new ArrayList<>(addressInfos.size());
|
|
|
- addressInfos.forEach(e -> {
|
|
|
- KwoTradeOrderAddress address = BeanUtils.copyProperties(e, KwoTradeOrderAddress.class);
|
|
|
- address.setTOrderId(id).setTOrderNo(tOrderNo);
|
|
|
- list.add(address);
|
|
|
+ //订单关联商品信息
|
|
|
+ order.setGoodsId(goodsDetail.getId()).setUnit(goodsDetail.getUnit()).setUnitPrice(goods.getUnitPrice().doubleValue())
|
|
|
+ .setGoodsName(goodsDetail.getName()).setGoodsType(goodsDetail.getGoodsType()).setGoodsCode(goodsDetail.getCode())
|
|
|
+ .setGoodsTaxRate(goodsDetail.getTaxRate()).setGoodsSpec(goodsDetail.getSpec()).setGoodsThumb(goodsDetail.getThumb());
|
|
|
+ }
|
|
|
+ if (Objects.isNull(order.getUnitPrice())) {
|
|
|
+ order.setUnitPrice(BigDecimal.ZERO.doubleValue());
|
|
|
+ }
|
|
|
+
|
|
|
+ //单位信息
|
|
|
+ kwoTradeOrderUnitService.delByOrderId(id);
|
|
|
+ List<UnitInfo> unitInfos = param.getUnitInfo();
|
|
|
+ if (CollUtil.isNotEmpty(unitInfos)) {
|
|
|
+ List<KwoTradeOrderUnit> list = new ArrayList<>(unitInfos.size());
|
|
|
+ List<Long> entIds = unitInfos.stream().map(UnitInfo::getEntId).distinct().toList();
|
|
|
+ Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntTreeByIds(entIds);
|
|
|
+ unitInfos.forEach(e -> {
|
|
|
+ EntCacheResDto ent = entMap.get(e.getEntId());
|
|
|
+ if (Objects.isNull(ent)) {
|
|
|
+ throw new BusinessException("企业:" + e.getFirmName() + "的一级企业信息不存在!");
|
|
|
+ }
|
|
|
+ KwoTradeOrderUnit unit = BeanUtil.copyProperties(e, KwoTradeOrderUnit.class);
|
|
|
+ unit.setTOrderId(id).setTOrderNo(tOrderNo).setTopEntId(ent.getId());
|
|
|
+ list.add(unit);
|
|
|
+ if (Objects.equals(e.getUnitType(), OrderUnitTypeEnum.PURCHASE.getType())) {
|
|
|
+ order.setProcureEntId(e.getEntId()).setProcureTopEntId(unit.getTopEntId()).setProcureFirmName(e.getFirmName())
|
|
|
+ .setProcureContacts(e.getContacts()).setProcurePhone(e.getPhone()).setProcureContactsId(e.getContactsId());
|
|
|
+ } else {
|
|
|
+ order.setSupplyEntId(e.getEntId()).setSupplyTopEntId(unit.getTopEntId()).setSupplyFirmName(e.getFirmName())
|
|
|
+ .setSupplyContacts(e.getContacts()).setSupplyPhone(e.getPhone()).setSupplyContactsId(e.getContactsId());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ kwoTradeOrderUnitService.insertBatch(list);
|
|
|
+ }
|
|
|
+
|
|
|
+ //地址信息
|
|
|
+ kwoTradeOrderAddressService.delByOrderId(id);
|
|
|
+ tradeOrderAmountService.delByOrderId(id);
|
|
|
+ List<AddressInfo> addressInfos = param.getAddressInfo();
|
|
|
+ if (CollUtil.isNotEmpty(addressInfos)) {
|
|
|
+ BigDecimal amount = Objects.isNull(param.getAmount()) ? BigDecimal.ZERO : param.getAmount();
|
|
|
+ if (!isDraft) {
|
|
|
+ BigDecimal totalLoadAmount = BigDecimal.ZERO;
|
|
|
+ BigDecimal totalUnloadAmount = BigDecimal.ZERO;
|
|
|
+ boolean loadFlag = false;
|
|
|
+ boolean unloadFlag = false;
|
|
|
+ for (AddressInfo e : addressInfos) {
|
|
|
+ BigDecimal addressAmount = Objects.isNull(e.getAmount()) ? BigDecimal.ZERO : e.getAmount();
|
|
|
if (Objects.equals(e.getAddressType(), OrderAddressTypeEnum.LOAD.getType())) {
|
|
|
- order.setLoadName(e.getName()).setLoadType(e.getType()).setLoadContacts(e.getContacts())
|
|
|
- .setLoadPhone(e.getPhone()).setLoadCityCode(String.valueOf(e.getCityCode())).setLoadCityName(e.getCityName())
|
|
|
- .setLoadDetailAddress(e.getDetailAddress()).setLoadLat(e.getLat()).setLoadLng(e.getLng());
|
|
|
+ totalLoadAmount = totalLoadAmount.add(addressAmount);
|
|
|
+ loadFlag = true;
|
|
|
} else {
|
|
|
- order.setUnloadName(e.getName()).setUnloadType(e.getType()).setUnloadContacts(e.getContacts())
|
|
|
- .setUnloadPhone(e.getPhone()).setUnloadCityCode(String.valueOf(e.getCityCode())).setUnloadCityName(e.getCityName())
|
|
|
- .setUnloadDetailAddress(e.getDetailAddress()).setUnloadLat(e.getLat()).setUnloadLng(e.getLng());
|
|
|
+ totalUnloadAmount = totalUnloadAmount.add(addressAmount);
|
|
|
+ unloadFlag = true;
|
|
|
}
|
|
|
- });
|
|
|
- kwoTradeOrderAddressService.insertBatch(list);
|
|
|
+ }
|
|
|
+ if (loadFlag && totalLoadAmount.compareTo(amount) != 0) {
|
|
|
+ throw new BusinessException("装货分配量总量与订单总量不符!");
|
|
|
+ }
|
|
|
+ if (unloadFlag && totalUnloadAmount.compareTo(amount) != 0) {
|
|
|
+ throw new BusinessException("卸货分配量总量与订单总量不符!");
|
|
|
+ }
|
|
|
}
|
|
|
+ AtomicInteger loadSort = new AtomicInteger(0);
|
|
|
+ AtomicInteger unloadSort = new AtomicInteger(0);
|
|
|
+ addressInfos.forEach(e -> {
|
|
|
+ KwoTradeOrderAddress address = BeanUtil.copyProperties(e, KwoTradeOrderAddress.class);
|
|
|
+ address.setTOrderId(id).setTOrderNo(tOrderNo);
|
|
|
+ //todo MongoDB如何存多个地址信息?
|
|
|
+ if (Objects.equals(address.getAddressType(), OrderAddressTypeEnum.LOAD.getType())) {
|
|
|
+ address.setSort(loadSort.getAndIncrement());
|
|
|
+ order.setLoadName(e.getName()).setLoadType(e.getType()).setLoadContacts(e.getContacts())
|
|
|
+ .setLoadPhone(e.getPhone()).setLoadCityCode(String.valueOf(e.getCityCode())).setLoadCityName(e.getCityName())
|
|
|
+ .setLoadDetailAddress(e.getDetailAddress()).setLoadLat(e.getLat()).setLoadLng(e.getLng());
|
|
|
+ } else {
|
|
|
+ address.setSort(unloadSort.getAndIncrement());
|
|
|
+ order.setUnloadName(e.getName()).setUnloadType(e.getType()).setUnloadContacts(e.getContacts())
|
|
|
+ .setUnloadPhone(e.getPhone()).setUnloadCityCode(String.valueOf(e.getCityCode())).setUnloadCityName(e.getCityName())
|
|
|
+ .setUnloadDetailAddress(e.getDetailAddress()).setUnloadLat(e.getLat()).setUnloadLng(e.getLng());
|
|
|
+ }
|
|
|
+ //地址信息
|
|
|
+ Long addressId = kwoTradeOrderAddressService.add(address);
|
|
|
+ //分配量信息
|
|
|
+ KwoTradeOrderAmount orderAmount = new KwoTradeOrderAmount();
|
|
|
+ orderAmount.setTOrderId(id).setAmount(e.getAmount())
|
|
|
+ .setTAddressId(addressId);
|
|
|
+ tradeOrderAmountService.add(orderAmount);
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- //合同信息
|
|
|
- kwoTradeOrderContractService.delByOrderId(id);
|
|
|
- ContractInfo contractInfo = param.getContractInfo();
|
|
|
- KwoTradeOrderContract contract = BeanUtils.copyProperties(contractInfo, KwoTradeOrderContract.class);
|
|
|
- if (Objects.nonNull(contract)) {
|
|
|
- contract.setTOrderId(id).setTOrderNo(tOrderNo);
|
|
|
- kwoTradeOrderContractService.insert(contract);
|
|
|
- BeanUtils.copyProperties(contractInfo, order);
|
|
|
- }
|
|
|
+ //合同信息
|
|
|
+ kwoTradeOrderContractService.delByOrderId(id);
|
|
|
+ ContractInfo contractInfo = param.getContractInfo();
|
|
|
+ KwoTradeOrderContract contract = BeanUtil.copyProperties(contractInfo, KwoTradeOrderContract.class);
|
|
|
+ if (Objects.nonNull(contract)) {
|
|
|
+ contract.setTOrderId(id).setTOrderNo(tOrderNo);
|
|
|
+ kwoTradeOrderContractService.insert(contract);
|
|
|
+ BeanUtil.copyProperties(contractInfo, order);
|
|
|
+ }
|
|
|
|
|
|
- //状态信息(草稿更新不加状态记录)
|
|
|
- if (!isUpdate || !Objects.equals(OrderStatusEnum.SAVED.getCode(), tradeOrder.getStatus())) {
|
|
|
- KwoTradeOrderTrack track = new KwoTradeOrderTrack();
|
|
|
- track.setTOrderId(id).setTOrderNo(tOrderNo).setStatus(tradeOrder.getStatus()).setRemark(tradeOrder.getRemark());
|
|
|
- kwoTradeOrderTrackService.insert(track);
|
|
|
- }
|
|
|
- int method = isUpdate ? 2 : 1;
|
|
|
- //存MongoDb
|
|
|
- saveMongoDb(method, order);
|
|
|
- }catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
+ //状态信息(草稿更新不加状态记录)
|
|
|
+ if (!isUpdate || !Objects.equals(OrderStatusEnum.SAVED.getCode(), tradeOrder.getStatus())) {
|
|
|
+ KwoTradeOrderTrack track = new KwoTradeOrderTrack();
|
|
|
+ track.setTOrderId(id).setTOrderNo(tOrderNo).setStatus(tradeOrder.getStatus()).setRemark(tradeOrder.getRemark());
|
|
|
+ kwoTradeOrderTrackService.insert(track);
|
|
|
}
|
|
|
+ int method = isUpdate ? 2 : 1;
|
|
|
+ //存MongoDb
|
|
|
+ saveMongoDb(method, order);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -292,7 +337,7 @@ public class KwoTradeOrderService {
|
|
|
* @return: void
|
|
|
*/
|
|
|
public void addValetOrderDraft(ValetOrderDraftParam param) {
|
|
|
- KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
|
|
|
+ KwoTradeOrder order = BeanUtil.copyProperties(param, KwoTradeOrder.class);
|
|
|
order.setEntId(LoginUserHolder.getEntId())
|
|
|
.setTOrderNo(getOrderNo())
|
|
|
.setStartTime(DateUtils.localDateToDateStart(param.getStartTime()))
|
|
|
@@ -300,7 +345,7 @@ public class KwoTradeOrderService {
|
|
|
.setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null)
|
|
|
.setSource(OrderSourceEnum.SALE.getType()).setStatus(OrderStatusEnum.SAVED.getCode());
|
|
|
kwoTradeOrderMapper.insert(order);
|
|
|
- addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
|
|
|
+ addOtherOrderInfo(order, BeanUtil.copyProperties(param, ValetOrderParam.class), false, true);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -315,12 +360,12 @@ public class KwoTradeOrderService {
|
|
|
if (Objects.isNull(goodsInfo.getPriceRangeId())) {
|
|
|
throw new BusinessException("采购下单价格梯度信息不能为空!");
|
|
|
}
|
|
|
- OrderCheckDTO orderCheck = BeanUtils.copyProperties(param, OrderCheckDTO.class);
|
|
|
+ OrderCheckDTO orderCheck = BeanUtil.copyProperties(param, OrderCheckDTO.class);
|
|
|
getTopEnt(orderCheck, param.getUnitInfo());
|
|
|
orderCheck.setGoodsId(goodsInfo.getGoodsId()).setUnitPrice(goodsInfo.getUnitPrice())
|
|
|
.setOrderSource(OrderSourceEnum.PURCHASE.getType());
|
|
|
orderCheck(orderCheck, false);
|
|
|
- KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
|
|
|
+ KwoTradeOrder order = BeanUtil.copyProperties(param, KwoTradeOrder.class);
|
|
|
order.setEntId(LoginUserHolder.getEntId())
|
|
|
.setTOrderNo(getOrderNo())
|
|
|
.setStartTime(DateUtils.localDateToDateStart(param.getStartTime()))
|
|
|
@@ -335,7 +380,7 @@ public class KwoTradeOrderService {
|
|
|
throw new BusinessException(updateResult.getMsg());
|
|
|
}
|
|
|
//添加订单其他信息
|
|
|
- addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
|
|
|
+ addOtherOrderInfo(order, BeanUtil.copyProperties(param, ValetOrderParam.class), false, false);
|
|
|
//发送消息提醒
|
|
|
submitOrderSendMsg(orderCheck, order.getTOrderNo());
|
|
|
}
|
|
|
@@ -459,7 +504,7 @@ public class KwoTradeOrderService {
|
|
|
String trading = param.getTrading();
|
|
|
BigDecimal price = param.getPrice();
|
|
|
KwpGoods goods = goodsInfoService.getGoodsById(param.getGoodsId());
|
|
|
- if (Objects.isNull(goods) || Objects.equals(goods.getDelFlag(), Global.YES) ) {
|
|
|
+ if (Objects.isNull(goods) || Objects.equals(goods.getDelFlag(), Global.YES)) {
|
|
|
throw new BusinessException("商品不存在!");
|
|
|
}
|
|
|
if (Boolean.FALSE.equals(isAcceptanceOrder)) {
|
|
|
@@ -512,7 +557,7 @@ public class KwoTradeOrderService {
|
|
|
* @return: void
|
|
|
*/
|
|
|
public void addValetOrderSubmit(ValetOrderParam param) {
|
|
|
- OrderCheckDTO orderCheck = BeanUtils.copyProperties(param, OrderCheckDTO.class);
|
|
|
+ OrderCheckDTO orderCheck = BeanUtil.copyProperties(param, OrderCheckDTO.class);
|
|
|
getTopEnt(orderCheck, param.getUnitInfo());
|
|
|
orderCheck.setGoodsId(param.getGoodsInfo().getGoodsId()).setUnitPrice(param.getGoodsInfo().getUnitPrice())
|
|
|
.setOrderSource(OrderSourceEnum.SALE.getType());
|
|
|
@@ -520,7 +565,7 @@ public class KwoTradeOrderService {
|
|
|
ContractInfo contract = param.getContractInfo();
|
|
|
contractCheck(contract);
|
|
|
param.setContractInfo(contract);
|
|
|
- KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
|
|
|
+ KwoTradeOrder order = BeanUtil.copyProperties(param, KwoTradeOrder.class);
|
|
|
order.setEntId(LoginUserHolder.getEntId())
|
|
|
.setTOrderNo(getOrderNo())
|
|
|
.setStartTime(DateUtils.localDateToDateStart(param.getStartTime()))
|
|
|
@@ -549,7 +594,7 @@ public class KwoTradeOrderService {
|
|
|
throw new BusinessException(freezeResult.getMsg());
|
|
|
}
|
|
|
}
|
|
|
- addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
|
|
|
+ addOtherOrderInfo(order, BeanUtil.copyProperties(param, ValetOrderParam.class), false, false);
|
|
|
//发送消息提醒
|
|
|
submitOrderSendMsg(orderCheck, order.getTOrderNo());
|
|
|
}
|
|
|
@@ -557,6 +602,7 @@ public class KwoTradeOrderService {
|
|
|
|
|
|
/**
|
|
|
* 生成贸易订单号
|
|
|
+ *
|
|
|
* @return 订单编号
|
|
|
*/
|
|
|
private String getOrderNo() {
|
|
|
@@ -568,7 +614,7 @@ public class KwoTradeOrderService {
|
|
|
if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 10L))) {
|
|
|
throw new BusinessException("业务繁忙,请稍后再试!");
|
|
|
}
|
|
|
- DateTime dateTime = DateUtils.beginOfDay(date);
|
|
|
+ DateTime dateTime = DateUtil.beginOfDay(date);
|
|
|
String maxOrderNo = kwoTradeOrderMapper.getMaxOrderNoByDate(dateTime);
|
|
|
if (StringUtils.isNotBlank(maxOrderNo)) {
|
|
|
Long maxNum = Long.valueOf(StringUtils.subStrFromIndexToEnd(maxOrderNo, 4));
|
|
|
@@ -621,11 +667,11 @@ public class KwoTradeOrderService {
|
|
|
List<Long> createBys = tracks.stream().map(KwoTradeOrderTrack::getCreateBy).distinct().toList();
|
|
|
Map<Long, UserCacheResDto> map = remoteSystemService.queryUserCacheMapByIds(createBys);
|
|
|
tracks.forEach(e -> {
|
|
|
- OrderProcess process = BeanUtils.copyProperties(e, OrderProcess.class);
|
|
|
+ OrderProcess process = BeanUtil.copyProperties(e, OrderProcess.class);
|
|
|
UserCacheResDto user = map.get(process.getCreateBy());
|
|
|
if (Objects.nonNull(user)) {
|
|
|
process.setCreateByName(user.getName());
|
|
|
- if (CollectionUtils.isNotEmpty(user.getRoleInfo())) {
|
|
|
+ if (CollUtil.isNotEmpty(user.getRoleInfo())) {
|
|
|
List<String> roleNames = user.getRoleInfo().stream().map(KwsRoleResDto::getName).distinct().toList();
|
|
|
process.setRoleName(String.join(",", roleNames));
|
|
|
}
|
|
|
@@ -663,7 +709,7 @@ public class KwoTradeOrderService {
|
|
|
Map<String, String> unitMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
Map<String, String> taxRateMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
Map<String, String> orderUnitMap, orderAddressMap, addressMap;
|
|
|
- if (CollectionUtils.isNotEmpty(dict)) {
|
|
|
+ if (CollUtil.isNotEmpty(dict)) {
|
|
|
tradeMap = dict.get(DictTypeEnum.TRADE_TYPE.getType());
|
|
|
pickupMap = dict.get(DictTypeEnum.PICKUP_TYPE.getType());
|
|
|
deleveryMap = dict.get(DictTypeEnum.DELIVERY_TYPE.getType());
|
|
|
@@ -681,16 +727,16 @@ public class KwoTradeOrderService {
|
|
|
addressMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
}
|
|
|
//订单基本信息
|
|
|
- OrderDetailRes detail = BeanUtils.copyProperties(order, OrderDetailRes.class);
|
|
|
+ OrderDetailRes detail = BeanUtil.copyProperties(order, OrderDetailRes.class);
|
|
|
UserCacheResDto createUser = remoteSystemService.queryUserCacheById(detail.getCreateBy());
|
|
|
EntCacheResDto ent = remoteSystemService.queryEntCacheById(detail.getEntId());
|
|
|
detail.setFirmName(Objects.isNull(ent) ? null : ent.getFirmName())
|
|
|
.setCreateByName(Objects.isNull(createUser) ? null : createUser.getName())
|
|
|
- .setTradingLabel(CollectionUtils.isNotEmpty(tradeMap) ? tradeMap.get(detail.getTrading()) : null)
|
|
|
- .setPickupTypeLabel(CollectionUtils.isNotEmpty(pickupMap) ? pickupMap.get(detail.getPickupType()) : null)
|
|
|
- .setDeliveryTypeLabel(CollectionUtils.isNotEmpty(deleveryMap) ? deleveryMap.get(detail.getDeliveryType()) : null)
|
|
|
- .setSourceLabel(CollectionUtils.isNotEmpty(sourceMap) ? sourceMap.get(detail.getSource()) : null)
|
|
|
- .setStatusLabel(CollectionUtils.isNotEmpty(statusMap) ? statusMap.get(String.valueOf(detail.getStatus())) : null);
|
|
|
+ .setTradingLabel(CollUtil.isNotEmpty(tradeMap) ? tradeMap.get(detail.getTrading()) : null)
|
|
|
+ .setPickupTypeLabel(CollUtil.isNotEmpty(pickupMap) ? pickupMap.get(detail.getPickupType()) : null)
|
|
|
+ .setDeliveryTypeLabel(CollUtil.isNotEmpty(deleveryMap) ? deleveryMap.get(detail.getDeliveryType()) : null)
|
|
|
+ .setSourceLabel(CollUtil.isNotEmpty(sourceMap) ? sourceMap.get(detail.getSource()) : null)
|
|
|
+ .setStatusLabel(CollUtil.isNotEmpty(statusMap) ? statusMap.get(String.valueOf(detail.getStatus())) : null);
|
|
|
//商品信息
|
|
|
KwoTradeOrderGoods orderGoods = kwoTradeOrderGoodsService.getByOrderId(id);
|
|
|
if (Objects.nonNull(orderGoods)) {
|
|
|
@@ -698,9 +744,9 @@ public class KwoTradeOrderService {
|
|
|
if (Objects.nonNull(goods)) {
|
|
|
EntCacheResDto entCache = remoteSystemService.queryEntCacheById(goods.getEntId());
|
|
|
GoodsInfoDetailRes goodsDetail = new GoodsInfoDetailRes();
|
|
|
- goodsDetail.setGoodsTypeLabel(CollectionUtils.isNotEmpty(prodcutNameMap) ? prodcutNameMap.get(goods.getGoodsType()) : null)
|
|
|
- .setUnitLabel(CollectionUtils.isNotEmpty(unitMap) ? unitMap.get(goods.getUnit()) : null)
|
|
|
- .setTaxRateLabel(CollectionUtils.isNotEmpty(taxRateMap) ? taxRateMap.get(goods.getTaxRate()) : null)
|
|
|
+ goodsDetail.setGoodsTypeLabel(CollUtil.isNotEmpty(prodcutNameMap) ? prodcutNameMap.get(goods.getGoodsType()) : null)
|
|
|
+ .setUnitLabel(CollUtil.isNotEmpty(unitMap) ? unitMap.get(goods.getUnit()) : null)
|
|
|
+ .setTaxRateLabel(CollUtil.isNotEmpty(taxRateMap) ? taxRateMap.get(goods.getTaxRate()) : null)
|
|
|
.setGoodsAmount(goods.getAmount())
|
|
|
.setGoodsId(goods.getId()).setCode(goods.getCode()).setName(goods.getName())
|
|
|
.setGoodsType(goods.getGoodsType()).setTaxRate(goods.getTaxRate()).setSpec(goods.getSpec())
|
|
|
@@ -712,11 +758,11 @@ public class KwoTradeOrderService {
|
|
|
|
|
|
//商品辅助单位信息
|
|
|
List<GoodsUnitDetailRes> assistUnit = kwoTradeOrderGoodsUnitService.findGoodsUnitDetail(id);
|
|
|
- if (CollectionUtils.isNotEmpty(assistUnit)) {
|
|
|
+ if (CollUtil.isNotEmpty(assistUnit)) {
|
|
|
Map<String, String> finalUnitMap = unitMap;
|
|
|
assistUnit.forEach(e -> {
|
|
|
- e.setFromUnitName(CollectionUtils.isNotEmpty(finalUnitMap) ? finalUnitMap.get(e.getFromUnit()) : null);
|
|
|
- e.setToUnitName(CollectionUtils.isNotEmpty(finalUnitMap) ? finalUnitMap.get(e.getToUnit()) : null);
|
|
|
+ e.setFromUnitName(CollUtil.isNotEmpty(finalUnitMap) ? finalUnitMap.get(e.getFromUnit()) : null);
|
|
|
+ e.setToUnitName(CollUtil.isNotEmpty(finalUnitMap) ? finalUnitMap.get(e.getToUnit()) : null);
|
|
|
});
|
|
|
}
|
|
|
detail.setAssistUnit(assistUnit);
|
|
|
@@ -725,23 +771,30 @@ public class KwoTradeOrderService {
|
|
|
|
|
|
//单位信息
|
|
|
List<KwoTradeOrderUnit> units = kwoTradeOrderUnitService.getByOrderId(id);
|
|
|
- if (CollectionUtils.isNotEmpty(units)) {
|
|
|
+ if (CollUtil.isNotEmpty(units)) {
|
|
|
List<UnitInfoDetailRes> unitInfos = new ArrayList<>(units.size());
|
|
|
units.forEach(e -> {
|
|
|
- UnitInfoDetailRes unit = BeanUtils.copyProperties(e, UnitInfoDetailRes.class);
|
|
|
- unit.setUnitTypeLabel(CollectionUtils.isNotEmpty(orderUnitMap) ? orderUnitMap.get(unit.getUnitType()) : null);
|
|
|
+ UnitInfoDetailRes unit = BeanUtil.copyProperties(e, UnitInfoDetailRes.class);
|
|
|
+ unit.setUnitTypeLabel(CollUtil.isNotEmpty(orderUnitMap) ? orderUnitMap.get(unit.getUnitType()) : null);
|
|
|
unitInfos.add(unit);
|
|
|
});
|
|
|
detail.setUnitInfo(unitInfos);
|
|
|
}
|
|
|
//地址信息
|
|
|
List<KwoTradeOrderAddress> addressList = kwoTradeOrderAddressService.getByOrderId(id);
|
|
|
- if (CollectionUtils.isNotEmpty(addressList)) {
|
|
|
+ if (CollUtil.isNotEmpty(addressList)) {
|
|
|
+ //分配量信息
|
|
|
+ List<KwoTradeOrderAmount> amountList = tradeOrderAmountService.getByOrderId(id);
|
|
|
+ Map<Long, KwoTradeOrderAmount> amountMap = amountList.stream().collect(Collectors.toMap(KwoTradeOrderAmount::getTAddressId, e -> e, (k1, k2) -> k1));
|
|
|
List<AddressInfoDetailRes> addressInfoDetails = new ArrayList<>(addressList.size());
|
|
|
addressList.forEach(e -> {
|
|
|
- AddressInfoDetailRes address = BeanUtils.copyProperties(e, AddressInfoDetailRes.class);
|
|
|
- address.setAddressTypeLabel(CollectionUtils.isNotEmpty(orderAddressMap) ? orderAddressMap.get(address.getAddressType()) : null);
|
|
|
- address.setTypeLabel(CollectionUtils.isNotEmpty(addressMap) ? addressMap.get(address.getType()) : null);
|
|
|
+ AddressInfoDetailRes address = BeanUtil.copyProperties(e, AddressInfoDetailRes.class);
|
|
|
+ address.setAddressTypeLabel(CollUtil.isNotEmpty(orderAddressMap) ? orderAddressMap.get(address.getAddressType()) : null);
|
|
|
+ address.setTypeLabel(CollUtil.isNotEmpty(addressMap) ? addressMap.get(address.getType()) : null);
|
|
|
+ KwoTradeOrderAmount orderAmount = amountMap.get(e.getId());
|
|
|
+ if (Objects.nonNull(orderAmount)) {
|
|
|
+ address.setAmount(orderAmount.getAmount());
|
|
|
+ }
|
|
|
addressInfoDetails.add(address);
|
|
|
});
|
|
|
detail.setAddressInfo(addressInfoDetails);
|
|
|
@@ -749,7 +802,7 @@ public class KwoTradeOrderService {
|
|
|
//合同信息
|
|
|
KwoTradeOrderContract contract = kwoTradeOrderContractService.getByOrderId(id);
|
|
|
if (Objects.nonNull(contract)) {
|
|
|
- ContractInfo contractInfo = BeanUtils.copyProperties(contract, ContractInfo.class);
|
|
|
+ ContractInfo contractInfo = BeanUtil.copyProperties(contract, ContractInfo.class);
|
|
|
Map<Long, ContractCommonInfoResDto> contractMap = remoteContractService.queryContractBaseInfo(List.of(contractInfo.getContractId()));
|
|
|
ContractCommonInfoResDto contractRes = contractMap.get(contractInfo.getContractId());
|
|
|
if (Objects.nonNull(contractRes)) {
|
|
|
@@ -805,7 +858,7 @@ public class KwoTradeOrderService {
|
|
|
throw new BusinessException("Invalid contract status");
|
|
|
}
|
|
|
}
|
|
|
- orderCheck = BeanUtils.copyProperties(param, OrderCheckDTO.class);
|
|
|
+ orderCheck = BeanUtil.copyProperties(param, OrderCheckDTO.class);
|
|
|
getTopEnt(orderCheck, param.getUnitInfo());
|
|
|
orderCheck.setGoodsId(param.getGoodsInfo().getGoodsId()).setUnitPrice(param.getGoodsInfo().getUnitPrice())
|
|
|
.setOrderSource(source);
|
|
|
@@ -816,7 +869,7 @@ public class KwoTradeOrderService {
|
|
|
throw new BusinessException(updateResult.getMsg());
|
|
|
}
|
|
|
//代客下单冻结金额
|
|
|
- if (Objects.equals(source, OrderSourceEnum.SALE.getType()) && param.getTrading().startsWith("1")){
|
|
|
+ if (Objects.equals(source, OrderSourceEnum.SALE.getType()) && param.getTrading().startsWith("1")) {
|
|
|
HttpResult freezeResult = paymentDubboService.freezeMoney(orderCheck.getProcureTopEntId(),
|
|
|
ChannelEnum.getByTrading(param.getTrading()), orderCheck.getSupplyTopEntId(), param.getPrice(), order.getId());
|
|
|
if (!Objects.equals(HttpStatus.SUCCESS_CODE, freezeResult.getCode())) {
|
|
|
@@ -843,9 +896,9 @@ public class KwoTradeOrderService {
|
|
|
.set(KwoTradeOrder::getStatus, order.getStatus())
|
|
|
.eq(KwoTradeOrder::getId, order.getId());
|
|
|
kwoTradeOrderMapper.update(null, wrapper);
|
|
|
- ValetOrderParam valetOrderParam = BeanUtils.copyProperties(param, ValetOrderParam.class);
|
|
|
+ ValetOrderParam valetOrderParam = BeanUtil.copyProperties(param, ValetOrderParam.class);
|
|
|
|
|
|
- addOtherOrderInfo(order, valetOrderParam, true);
|
|
|
+ addOtherOrderInfo(order, valetOrderParam, true, false);
|
|
|
//订单提交发送提醒消息
|
|
|
if (Objects.equals(param.getOperateType(), 1)) {
|
|
|
submitOrderSendMsg(orderCheck, order.getTOrderNo());
|
|
|
@@ -972,6 +1025,23 @@ public class KwoTradeOrderService {
|
|
|
* @return: void
|
|
|
*/
|
|
|
public void acceptanceOrder(AcceptanceOrderParam param) {
|
|
|
+ BigDecimal amount = param.getAmount();
|
|
|
+ List<UpdateAddressAmountParam> addressAmountParams = param.getAddressAmountParams();
|
|
|
+ BigDecimal totalLoadAmount = addressAmountParams.stream()
|
|
|
+ .map(UpdateAddressAmountParam::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ if (amount.compareTo(totalLoadAmount) != 0) {
|
|
|
+ throw new BusinessException("分配卸货量总量与订单总量不相符!");
|
|
|
+ }
|
|
|
+ List<AddressInfo> loadAddressInfo = param.getAddressInfo();
|
|
|
+ long unloadCount = loadAddressInfo.stream().filter(e -> Objects.equals(OrderAddressTypeEnum.UNLOAD.getType(), e.getAddressType())).count();
|
|
|
+ if (unloadCount > 0) {
|
|
|
+ throw new BusinessException("装货地址类型信息有误!");
|
|
|
+ }
|
|
|
+ BigDecimal totalUnLoadAmount = loadAddressInfo.stream()
|
|
|
+ .map(AddressInfo::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ if (amount.compareTo(totalUnLoadAmount) != 0) {
|
|
|
+ throw new BusinessException("分配装货量总量与订单总量不相符!");
|
|
|
+ }
|
|
|
if (param.getPrice().compareTo(param.getUnitPrice().multiply(param.getAmount())) != 0) {
|
|
|
throw new BusinessException("订单总金额不等于商品单价*订单总量!");
|
|
|
}
|
|
|
@@ -989,16 +1059,31 @@ public class KwoTradeOrderService {
|
|
|
if (Objects.isNull(goods)) {
|
|
|
throw new BusinessException("订单商品信息异常!");
|
|
|
}
|
|
|
- //受理订单总量-原订单总量=订单变化量
|
|
|
List<KwoTradeOrderUnit> units = kwoTradeOrderUnitService.getByOrderId(order.getId());
|
|
|
- List<UnitInfo> unitInfos = BeanUtils.copyToList(units, UnitInfo.class);
|
|
|
+ Long saleUnitId = param.getSaleUnitParam().getId();
|
|
|
+ KwoTradeOrderUnit saleUnit = units.stream().filter(e -> Objects.equals(e.getId(), saleUnitId) &&
|
|
|
+ Objects.equals(e.getUnitType(), OrderUnitTypeEnum.SALE.getType())).findFirst().orElse(null);
|
|
|
+ if (Objects.isNull(saleUnit)) {
|
|
|
+ throw new BusinessException("我方单位信息异常!");
|
|
|
+ }
|
|
|
+ Long contactsId = param.getSaleUnitParam().getContactsId();
|
|
|
+ boolean updateUnit = !Objects.equals(contactsId, saleUnit.getContactsId());
|
|
|
+ if (updateUnit) {
|
|
|
+ UserCacheResDto contactsInfo = remoteSystemService.queryUserCacheById(contactsId);
|
|
|
+ if (Objects.isNull(contactsInfo)) {
|
|
|
+ throw new BusinessException("未查询到我方联系人信息");
|
|
|
+ }
|
|
|
+ saleUnit.setContactsId(contactsId).setContacts(contactsInfo.getName()).setPhone(contactsInfo.getPhone());
|
|
|
+ }
|
|
|
+ List<UnitInfo> unitInfos = BeanUtil.copyToList(units, UnitInfo.class);
|
|
|
if (CollectionUtils.isEmpty(unitInfos)) {
|
|
|
throw new BusinessException("订单企业信息异常!");
|
|
|
}
|
|
|
- BigDecimal amount = param.getAmount().subtract(order.getAmount());
|
|
|
- OrderCheckDTO orderCheck = BeanUtils.copyProperties(param, OrderCheckDTO.class);
|
|
|
+ //受理订单总量-原订单总量=订单变化量
|
|
|
+ BigDecimal changeAmount = amount.subtract(order.getAmount());
|
|
|
+ OrderCheckDTO orderCheck = BeanUtil.copyProperties(param, OrderCheckDTO.class);
|
|
|
getTopEnt(orderCheck, unitInfos);
|
|
|
- orderCheck.setGoodsId(goods.getGoodsId()).setAmount(amount);
|
|
|
+ orderCheck.setGoodsId(goods.getGoodsId()).setAmount(changeAmount);
|
|
|
orderCheck(orderCheck, true);
|
|
|
//冻结金额
|
|
|
if (param.getTrading().startsWith("1")) {
|
|
|
@@ -1009,7 +1094,7 @@ public class KwoTradeOrderService {
|
|
|
}
|
|
|
}
|
|
|
//更新订单信息
|
|
|
- BeanUtils.copyProperties(param, order);
|
|
|
+ BeanUtil.copyProperties(param, order);
|
|
|
ContractInfo contractInfo = param.getContractInfo();
|
|
|
contractCheck(contractInfo);
|
|
|
String contractStatus = contractInfo.getContractStatus();
|
|
|
@@ -1025,8 +1110,32 @@ public class KwoTradeOrderService {
|
|
|
kwoTradeOrderMapper.updateById(order);
|
|
|
//更新商品价格
|
|
|
kwoTradeOrderGoodsService.updateUnitPrice(param.getId(), param.getUnitPrice());
|
|
|
+ //更新单位信息
|
|
|
+ if (updateUnit) {
|
|
|
+ kwoTradeOrderUnitService.updateById(saleUnit);
|
|
|
+ }
|
|
|
+ //更新装货地址信息
|
|
|
+ List<Long> oldLoadAddressIds = kwoTradeOrderAddressService.getByOrderIdAndType(param.getId(), OrderAddressTypeEnum.LOAD.getType())
|
|
|
+ .stream().map(KwoTradeOrderAddress::getId).toList();
|
|
|
+ if (CollUtil.isNotEmpty(oldLoadAddressIds)) {
|
|
|
+ kwoTradeOrderAddressService.delByIds(oldLoadAddressIds);
|
|
|
+ tradeOrderAmountService.delByOrderIdAndAddressIds(param.getId(), oldLoadAddressIds);
|
|
|
+ }
|
|
|
+ loadAddressInfo.forEach(e -> {
|
|
|
+ KwoTradeOrderAddress address = BeanUtil.copyProperties(e, KwoTradeOrderAddress.class);
|
|
|
+ address.setTOrderId(param.getId()).setTOrderNo(order.getTOrderNo());
|
|
|
+ //地址信息
|
|
|
+ Long addressId = kwoTradeOrderAddressService.add(address);
|
|
|
+ //分配量信息
|
|
|
+ KwoTradeOrderAmount orderAmount = new KwoTradeOrderAmount();
|
|
|
+ orderAmount.setTOrderId(param.getId()).setAmount(e.getAmount())
|
|
|
+ .setTAddressId(addressId);
|
|
|
+ tradeOrderAmountService.add(orderAmount);
|
|
|
+ });
|
|
|
+ //更新卸货地址分配量信息
|
|
|
+ addressAmountParams.forEach(tradeOrderAmountService::update);
|
|
|
//保存合同信息
|
|
|
- KwoTradeOrderContract tradeOrderContract = BeanUtils.copyProperties(contractInfo, KwoTradeOrderContract.class);
|
|
|
+ KwoTradeOrderContract tradeOrderContract = BeanUtil.copyProperties(contractInfo, KwoTradeOrderContract.class);
|
|
|
tradeOrderContract.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo());
|
|
|
kwoTradeOrderContractService.insert(tradeOrderContract);
|
|
|
//订单状态记录
|
|
|
@@ -1041,7 +1150,7 @@ public class KwoTradeOrderService {
|
|
|
}
|
|
|
}
|
|
|
//更新mongodb
|
|
|
- SckwTradeOrder updateParam = BeanUtils.copyProperties(param, SckwTradeOrder.class);
|
|
|
+ SckwTradeOrder updateParam = BeanUtil.copyProperties(param, SckwTradeOrder.class);
|
|
|
updateParam.setTOrderId(param.getId())
|
|
|
.setStatus(order.getStatus())
|
|
|
.setStartTime(DateUtils.localDateToDateStart(param.getStartTime()))
|
|
|
@@ -1174,7 +1283,7 @@ public class KwoTradeOrderService {
|
|
|
if (kwoTradeOrderUnitService.entMatch(param.getId(), LoginUserHolder.getEntId(), OrderUnitTypeEnum.SALE.getType())) {
|
|
|
throw new BusinessException("无订单操作权限!");
|
|
|
}
|
|
|
- if (transportDubboService.checkLogisticsOrderByTradeOrderId(tOrderId)) {
|
|
|
+ if (transportRemoteService.checkLogisticsOrderByTradeOrderId(tOrderId)) {
|
|
|
throw new CustomPromptException(HttpStatus.COMPLETE_TORDER_FAIL_CODE, "订单存在未完成的物流托运,不可完结!");
|
|
|
}
|
|
|
String lockKey = String.format(RedisConstant.TORDER_UPDATE_AMOUNT_KEY, tOrderId);
|
|
|
@@ -1230,12 +1339,12 @@ public class KwoTradeOrderService {
|
|
|
LambdaQueryWrapper<KwoTradeOrder> wrapper = new LambdaQueryWrapper<>();
|
|
|
wrapper.in(KwoTradeOrder::getId, ids).ne(KwoTradeOrder::getStatus, 0).eq(KwoTradeOrder::getDelFlag, Global.NO);
|
|
|
List<KwoTradeOrder> list = kwoTradeOrderMapper.selectList(wrapper);
|
|
|
- if (CollectionUtils.isNotEmpty(list)) {
|
|
|
+ if (CollUtil.isNotEmpty(list)) {
|
|
|
throw new BusinessException("删除操作仅针对“已保存”状态的订单");
|
|
|
}
|
|
|
//排除草稿状态权限匹配
|
|
|
List<Long> filterIds = list.stream().filter(e -> !(Objects.equals(e.getStatus(), 0))).map(KwoTradeOrder::getId).toList();
|
|
|
- if (CollectionUtils.isNotEmpty(filterIds) &&
|
|
|
+ if (CollUtil.isNotEmpty(filterIds) &&
|
|
|
kwoTradeOrderUnitService.entBatchMatch(filterIds, LoginUserHolder.getEntId(), String.valueOf(param.getOrderType()))) {
|
|
|
throw new BusinessException("无订单操作权限!");
|
|
|
}
|
|
|
@@ -1245,6 +1354,7 @@ public class KwoTradeOrderService {
|
|
|
kwoTradeOrderGoodsService.delByOrderIds(ids);
|
|
|
kwoTradeOrderUnitService.delByOrderIds(ids);
|
|
|
kwoTradeOrderAddressService.delByOrderIds(ids);
|
|
|
+ tradeOrderAmountService.delByOrderIds(ids);
|
|
|
kwoTradeOrderContractService.delByOrderIds(ids);
|
|
|
//更新mongodb
|
|
|
ids.forEach(id -> {
|
|
|
@@ -1276,6 +1386,7 @@ public class KwoTradeOrderService {
|
|
|
* @Param order:
|
|
|
* @return: void
|
|
|
*/
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public void updateById(KwoTradeOrder order) {
|
|
|
kwoTradeOrderMapper.updateById(order);
|
|
|
}
|
|
|
@@ -1293,7 +1404,7 @@ public class KwoTradeOrderService {
|
|
|
wrapper.eq(KwoTradeOrder::getStatus, OrderStatusEnum.WAIT_SIGNED.getCode())
|
|
|
.in(KwoTradeOrder::getId, tOrderIds).eq(KwoTradeOrder::getDelFlag, Global.NO);
|
|
|
List<KwoTradeOrder> list = kwoTradeOrderMapper.selectList(wrapper);
|
|
|
- return CollectionUtils.emptyIfNull(list);
|
|
|
+ return CollUtil.emptyIfNull(list);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1355,7 +1466,7 @@ public class KwoTradeOrderService {
|
|
|
wrapper.in(KwoTradeOrder::getId, tOrderIds).eq(KwoTradeOrder::getDelFlag, Global.NO)
|
|
|
.in(KwoTradeOrder::getStatus, 1, 2, 3, 4);
|
|
|
List<KwoTradeOrder> list = kwoTradeOrderMapper.selectList(wrapper);
|
|
|
- return CollectionUtils.emptyIfNull(list);
|
|
|
+ return CollUtil.emptyIfNull(list);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1365,8 +1476,8 @@ public class KwoTradeOrderService {
|
|
|
* @Param topEntId:
|
|
|
* @return: java.util.List<com.sckw.order.api.model.TradeOrderCountStatisticsDTO>
|
|
|
*/
|
|
|
- public List<TradeOrderCountStatisticsDTO> getOrderNumByTopEntId(Long topEntId,List<Long> enterpriseIds) {
|
|
|
- return kwoTradeOrderMapper.getOrderNumByTopEntId(topEntId,enterpriseIds);
|
|
|
+ public List<TradeOrderCountStatisticsDTO> getOrderNumByTopEntId(Long topEntId, List<Long> enterpriseIds) {
|
|
|
+ return kwoTradeOrderMapper.getOrderNumByTopEntId(topEntId, enterpriseIds);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1378,7 +1489,7 @@ public class KwoTradeOrderService {
|
|
|
*/
|
|
|
public List<WbTOrderExcelStsResDTO> workbenchExcel(WbTOrderExcelStsReqDTO reqDTO) {
|
|
|
List<WbTOrderExcelStsResDTO> list = kwoTradeOrderMapper.workbenchExcel(reqDTO);
|
|
|
- return CollectionUtils.emptyIfNull(list);
|
|
|
+ return CollUtil.emptyIfNull(list);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1396,27 +1507,27 @@ public class KwoTradeOrderService {
|
|
|
|
|
|
//商品辅助单位
|
|
|
List<GoodsUnitDetailRes> assistUnit = kwoTradeOrderGoodsUnitService.findGoodsUnitDetail(tOrderId);
|
|
|
- if (CollectionUtils.isNotEmpty(assistUnit)) {
|
|
|
+ if (CollUtil.isNotEmpty(assistUnit)) {
|
|
|
assistUnit.forEach(e -> {
|
|
|
unitDetails.add(new GoodsUnitRes(e.getToUnit(), null, false));
|
|
|
});
|
|
|
}
|
|
|
|
|
|
//数据组装
|
|
|
- if (CollectionUtils.isNotEmpty(unitDetails)) {
|
|
|
+ if (CollUtil.isNotEmpty(unitDetails)) {
|
|
|
//货物单位与合理损耗单位
|
|
|
List<SysDictResDto> dicts = remoteSystemService.queryDictByType(DictTypeEnum.UNIT_LOSS_TYPE.getType());
|
|
|
//单位
|
|
|
Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.UNIT_TYPE.getType()));
|
|
|
Map<String, String> unitMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
- if (CollectionUtils.isNotEmpty(dict)) {
|
|
|
+ if (CollUtil.isNotEmpty(dict)) {
|
|
|
unitMap = dict.get(DictTypeEnum.UNIT_TYPE.getType());
|
|
|
}
|
|
|
Map<String, String> finalUnitMap = unitMap;
|
|
|
unitDetails.forEach(e -> {
|
|
|
- e.setLabel( finalUnitMap != null ? finalUnitMap.get(e.getValue()) : null);
|
|
|
+ e.setLabel(finalUnitMap != null ? finalUnitMap.get(e.getValue()) : null);
|
|
|
//组装合理损耗
|
|
|
- if (CollectionUtils.isNotEmpty(dicts)) {
|
|
|
+ if (CollUtil.isNotEmpty(dicts)) {
|
|
|
for (SysDictResDto ee : dicts)
|
|
|
if (ee.getParentId().equals((long) NumberConstant.ZERO)) {
|
|
|
if (ee.getValue().equals(e.getValue())) {
|
|
|
@@ -1438,4 +1549,443 @@ public class KwoTradeOrderService {
|
|
|
|
|
|
return unitDetails;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param id
|
|
|
+ * @return com.sckw.order.model.vo.res.OrderAddressInfoRes
|
|
|
+ * @desc 根据id获取地址信息
|
|
|
+ * @author yzc
|
|
|
+ * @date 2024/3/5 15:50
|
|
|
+ */
|
|
|
+ public OrderAddressInfoRes getAddressInfo(Long id) {
|
|
|
+ OrderAddressInfoRes res = new OrderAddressInfoRes();
|
|
|
+ List<String> loadNameList = new ArrayList<>();
|
|
|
+ List<String> loadDetailAddressList = new ArrayList<>();
|
|
|
+ List<String> unloadNameList = new ArrayList<>();
|
|
|
+ List<String> unloadDetailAddressList = new ArrayList<>();
|
|
|
+ List<KwoTradeOrderAddress> list = kwoTradeOrderAddressService.getByOrderId(id);
|
|
|
+ list.forEach(e -> {
|
|
|
+ if (OrderAddressTypeEnum.LOAD.getType().equals(e.getAddressType())) {
|
|
|
+ loadNameList.add(e.getName());
|
|
|
+ loadDetailAddressList.add(e.getCityName() + e.getDetailAddress());
|
|
|
+ } else {
|
|
|
+ unloadNameList.add(e.getName());
|
|
|
+ unloadDetailAddressList.add(e.getCityName() + e.getDetailAddress());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ res.setLoadNameList(loadNameList)
|
|
|
+ .setLoadDetailAddressList(loadDetailAddressList)
|
|
|
+ .setUnloadNameList(unloadNameList)
|
|
|
+ .setUnloadDetailAddressList(unloadDetailAddressList);
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param params
|
|
|
+ * @return com.sckw.core.model.page.PageResult
|
|
|
+ * @desc 贸易订单列表分页查询
|
|
|
+ * @author yzc
|
|
|
+ * @date 2024/3/15 8:51
|
|
|
+ */
|
|
|
+ public PageResult tradeOrderSelect(TradeOrderListSelectParam params) {
|
|
|
+ TradeOrderListSelectDTO dto = buildSelectParam(params);
|
|
|
+ PageHelper.startPage(params.getPage(), params.getPageSize());
|
|
|
+ List<OrderListResDTO> list = kwoTradeOrderMapper.tradeOrderSelect(dto, dto.getGoodIds(), LoginUserHolder.getAuthUserIdList());
|
|
|
+ return buildResult(list, params.getPageSize());
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param list
|
|
|
+ * @param pageSize
|
|
|
+ * @return com.sckw.core.model.page.PageRes
|
|
|
+ * @desc 构建列表结果响应
|
|
|
+ * @author yzc
|
|
|
+ * @date 2024/3/15 14:23
|
|
|
+ */
|
|
|
+ private PageResult buildResult(List<OrderListResDTO> list, int pageSize) {
|
|
|
+ if (CollUtil.isEmpty(list)) {
|
|
|
+ return PageHelperUtil.getPageResult(new PageInfo<>());
|
|
|
+ }
|
|
|
+ List<OrderListResVO> result = new ArrayList<>();
|
|
|
+ List<Long> goodIdList = new ArrayList<>();
|
|
|
+ List<Long> contracIdList = new ArrayList<>();
|
|
|
+ List<Long> createByIds = new ArrayList<>();
|
|
|
+ list.forEach(e -> {
|
|
|
+ goodIdList.add(e.getGoodsId());
|
|
|
+ contracIdList.add(e.getContractId());
|
|
|
+ createByIds.add(e.getCreateBy());
|
|
|
+ });
|
|
|
+ Map<Long, UserCacheResDto> userMap = remoteSystemService.queryUserCacheMapByIds(createByIds);
|
|
|
+ Map<Long, KwpGoods> goodsMap = goodsInfoService.getGoodsByIds(goodIdList);
|
|
|
+ Map<Long, ContractCommonInfoResDto> contractMap = remoteContractService.queryContractBaseInfo(contracIdList);
|
|
|
+ Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(
|
|
|
+ DictTypeEnum.TORDER_STATUS.getType(), DictTypeEnum.TRADE_TYPE.getType(), DictTypeEnum.DELIVERY_TYPE.getType(),
|
|
|
+ DictTypeEnum.PICKUP_TYPE.getType(), DictTypeEnum.TORDER_SOURCE.getType()));
|
|
|
+ Map<String, SysDictResDto> unitType = remoteSystemService.queryDictMapByType(DictTypeEnum.UNIT_TYPE.getType());
|
|
|
+ Map<String, String> statusMap, tradeMap, deliveryMap, pickupMap, sourceMap;
|
|
|
+ if (CollUtil.isNotEmpty(dict)) {
|
|
|
+ statusMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TORDER_STATUS.getType())) ?
|
|
|
+ dict.get(DictTypeEnum.TORDER_STATUS.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ tradeMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TRADE_TYPE.getType())) ?
|
|
|
+ dict.get(DictTypeEnum.TRADE_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ deliveryMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.DELIVERY_TYPE.getType())) ?
|
|
|
+ dict.get(DictTypeEnum.DELIVERY_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ pickupMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.PICKUP_TYPE.getType())) ?
|
|
|
+ dict.get(DictTypeEnum.PICKUP_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ sourceMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TORDER_SOURCE.getType())) ?
|
|
|
+ dict.get(DictTypeEnum.TORDER_SOURCE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ } else {
|
|
|
+ statusMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ tradeMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ deliveryMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ pickupMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ sourceMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ }
|
|
|
+
|
|
|
+ list.forEach(e -> {
|
|
|
+ OrderListResVO vo = BeanUtil.copyProperties(e, OrderListResVO.class);
|
|
|
+ List<LoadAddressDTO> loadAddresses = e.getLoadAddresses();
|
|
|
+ if (CollUtil.isNotEmpty(loadAddresses)) {
|
|
|
+ List<LoadAddressResVO> loadList = new ArrayList<>();
|
|
|
+ loadAddresses.forEach(l -> {
|
|
|
+ LoadAddressResVO load = new LoadAddressResVO();
|
|
|
+ load.setLoadAddressId(l.getLoadAddressId()).setLoadName(l.getLoadName())
|
|
|
+ .setLoadDetailAddressInfo(l.getLoadCityName() + l.getLoadDetailAddress());
|
|
|
+ loadList.add(load);
|
|
|
+ });
|
|
|
+ vo.setLoadAddresses(loadList);
|
|
|
+ }
|
|
|
+ List<UnloadAddressDTO> unloadAddresses = e.getUnloadAddresses();
|
|
|
+ if (CollUtil.isNotEmpty(unloadAddresses)) {
|
|
|
+ List<UnloadAddressResVO> unloadList = new ArrayList<>();
|
|
|
+ unloadAddresses.forEach(u -> {
|
|
|
+ UnloadAddressResVO unload = new UnloadAddressResVO();
|
|
|
+ unload.setUnloadAddressId(u.getUnloadAddressId()).setUnloadName(u.getUnloadName())
|
|
|
+ .setUnloadDetailAddressInfo(u.getUnloadCityName() + u.getUnloadDetailAddress());
|
|
|
+ unloadList.add(unload);
|
|
|
+ });
|
|
|
+ vo.setUnloadAddresses(unloadList);
|
|
|
+ }
|
|
|
+ BigDecimal actualAmount = Objects.isNull(e.getActualAmount()) ? BigDecimal.ZERO : e.getActualAmount();
|
|
|
+ BigDecimal unitPrice = Objects.isNull(e.getUnitPrice()) ? BigDecimal.ZERO : e.getUnitPrice();
|
|
|
+ KwpGoods goods = goodsMap.get(e.getGoodsId());
|
|
|
+ ContractCommonInfoResDto contract = contractMap.get(e.getContractId());
|
|
|
+ UserCacheResDto userCache = userMap.get(e.getCreateBy());
|
|
|
+ vo.setStatusLabel(statusMap.get(String.valueOf(e.getStatus())))
|
|
|
+ .setTradingLabel(tradeMap.get(e.getTrading()))
|
|
|
+ .setTrading(tradeMap.get(e.getTrading()))
|
|
|
+ .setDeliveryTypeLabel(deliveryMap.get(e.getDeliveryType()))
|
|
|
+ .setDeliveryType(deliveryMap.get(e.getDeliveryType()))
|
|
|
+ .setPickupTypeLabel(pickupMap.get(e.getPickupType()))
|
|
|
+ .setSourceLabel(sourceMap.get(e.getSource()))
|
|
|
+ .setSource(sourceMap.get(e.getSource()))
|
|
|
+ .setContractName(Objects.isNull(contract) ? null : contract.getContactName())
|
|
|
+ .setContractSigningWay(Objects.isNull(contract) ? null : contract.getSigningWayName())
|
|
|
+ .setGoodsName(Objects.isNull(goods) ? null : goods.getName())
|
|
|
+ .setGoodsSpec(Objects.isNull(goods) ? null : goods.getSpec())
|
|
|
+ .setGoodsTaxRate(Objects.isNull(goods) ? null : goods.getTaxRate())
|
|
|
+ .setGoodsThumb(Objects.isNull(goods) ? null : goods.getThumb())
|
|
|
+ .setWaitEntrustAmount(setScale(getWaitEntrustAmount(e.getAmount(), e.getEntrustAmount())))
|
|
|
+ .setActualPrice(actualAmount.multiply(unitPrice).setScale(2, RoundingMode.HALF_UP))
|
|
|
+ .setUnitPrice(setScale(e.getUnitPrice()))
|
|
|
+ .setPrice(setScale(e.getPrice()))
|
|
|
+ .setUnit(e.getUnit())
|
|
|
+ .setUnitLabel(unitType == null ? e.getUnit() : (unitType.get(e.getUnit()) == null ? e.getUnit() : unitType.get(e.getUnit()).getLabel()))
|
|
|
+ .setAmount(setScale(vo.getAmount()))
|
|
|
+ .setEntrustAmount(setScale(e.getEntrustAmount()))
|
|
|
+ .setActualAmount(setScale(e.getActualAmount()))
|
|
|
+ .setCreateByName(Objects.isNull(userCache) ? null : userCache.getName());
|
|
|
+ result.add(vo);
|
|
|
+ });
|
|
|
+ return PageHelperUtil.getPageResult(new PageInfo<>(result), list, pageSize);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param params
|
|
|
+ * @return com.sckw.order.model.dto.TradeOrderListSelectDTO
|
|
|
+ * @desc 构建贸易订单列表请求参数
|
|
|
+ * @author yzc
|
|
|
+ * @date 2024/3/15 8:52
|
|
|
+ */
|
|
|
+ private TradeOrderListSelectDTO buildSelectParam(TradeOrderListStatisticParam params) {
|
|
|
+ TradeOrderListSelectDTO dto = BeanUtil.copyProperties(params, TradeOrderListSelectDTO.class);
|
|
|
+ dto.setEntId(LoginUserHolder.getEntId())
|
|
|
+ .setUserId(LoginUserHolder.getUserId())
|
|
|
+ .setIsMain(LoginUserHolder.getIsMain());
|
|
|
+ //装卸货地址
|
|
|
+ String loadCode = params.getShippingAddressCode();
|
|
|
+ if (StringUtils.isNotBlank(loadCode) && Objects.nonNull(params.getShippingAddressLevel())) {
|
|
|
+ switch (params.getShippingAddressLevel()) {
|
|
|
+ case 1 -> dto.setLoadAddressCode(
|
|
|
+ loadCode.substring(0, 2).trim());
|
|
|
+ case 2 -> dto.setLoadAddressCode(
|
|
|
+ loadCode.substring(0, 4).trim());
|
|
|
+ case 3 -> dto.setLoadAddressCode(loadCode);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ String unloadCode = params.getUnloadingAddressCode();
|
|
|
+ if (StringUtils.isNotBlank(unloadCode) && Objects.nonNull(params.getUnloadingAddressLevel())) {
|
|
|
+ switch (params.getUnloadingAddressLevel()) {
|
|
|
+ case 1 -> dto.setUnloadAddressCode(
|
|
|
+ loadCode.substring(0, 2).trim());
|
|
|
+ case 2 -> dto.setUnloadAddressCode(
|
|
|
+ loadCode.substring(0, 4).trim());
|
|
|
+ case 3 -> dto.setUnloadAddressCode(loadCode);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ String keywords = params.getKeywords();
|
|
|
+ if (StringUtils.isNotBlank(keywords)) {
|
|
|
+ List<Long> goodIds = goodsInfoService.getGoodsByGoodsNameAndTaxRate(keywords, null);
|
|
|
+ dto.setGoodIds(goodIds);
|
|
|
+ }
|
|
|
+ return dto;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc: 设置两位小数
|
|
|
+ * @author: yzc
|
|
|
+ * @date: 2023-09-26 10:11
|
|
|
+ * @Param d:
|
|
|
+ * @return: java.lang.BigDecimal
|
|
|
+ */
|
|
|
+ private BigDecimal setScale(BigDecimal d) {
|
|
|
+ if (Objects.isNull(d) || BigDecimal.ZERO.compareTo(d) == 0) {
|
|
|
+ return NumberConstant.ZERO_TWO;
|
|
|
+ }
|
|
|
+ return d.setScale(2, RoundingMode.HALF_UP);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc: 获取订单待分配运输量
|
|
|
+ * @author: yzc
|
|
|
+ * @date: 2023-08-25 10:32
|
|
|
+ * @Param amount:
|
|
|
+ * @Param entrustAmount:
|
|
|
+ * @return: java.math.Double
|
|
|
+ */
|
|
|
+ private BigDecimal getWaitEntrustAmount(BigDecimal amount, BigDecimal entrustAmount) {
|
|
|
+ if (Objects.isNull(amount) || Objects.isNull(entrustAmount)) {
|
|
|
+ return amount;
|
|
|
+ }
|
|
|
+ return amount.subtract(entrustAmount);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param params
|
|
|
+ * @return com.sckw.core.model.vo.TableStatisticRes
|
|
|
+ * @desc 贸易订单列表统计
|
|
|
+ * @author yzc
|
|
|
+ * @date 2024/3/15 8:52
|
|
|
+ */
|
|
|
+ public TableStatisticRes tradeOrderStatistic(TradeOrderListStatisticParam params) {
|
|
|
+ TableStatisticRes res = new TableStatisticRes();
|
|
|
+ TradeOrderListSelectDTO dto = buildSelectParam(params);
|
|
|
+ dto.setStatus(null);
|
|
|
+ List<TableTop> tableTops = kwoTradeOrderMapper.tradeOrderStatistic(dto, dto.getGoodIds(), LoginUserHolder.getAuthUserIdList());
|
|
|
+ Map<Integer, Integer> map = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ if (CollUtil.isNotEmpty(tableTops)) {
|
|
|
+ map = tableTops.stream().collect(Collectors.toMap
|
|
|
+ (TableTop::getValue, TableTop::getTotal, (k1, k2) -> k2));
|
|
|
+ }
|
|
|
+ List<TableTop> list = new ArrayList<>();
|
|
|
+ int count = 0;
|
|
|
+ for (OrderStatusEnum e : OrderStatusEnum.getSortList()) {
|
|
|
+ Integer value = e.getCode();
|
|
|
+ int total = Objects.isNull(map.get(value)) ? 0 : map.get(value);
|
|
|
+ TableTop tableTop = new TableTop();
|
|
|
+ tableTop.setName(e.getMsg()).setValue(value).setTotal(total);
|
|
|
+ list.add(tableTop);
|
|
|
+ count = count + total;
|
|
|
+ }
|
|
|
+ TableTop all = new TableTop();
|
|
|
+ all.setName("全部").setTotal(count);
|
|
|
+ list.add(0, all);
|
|
|
+ TableBottom tableBottom = new TableBottom();
|
|
|
+ tableBottom.setTotal(count);
|
|
|
+ res.setTableTops(list).setTableBottom(tableBottom);
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc: app主界面贸易订单统计
|
|
|
+ * @author: yzc
|
|
|
+ * @date: 2023-08-21 17:39
|
|
|
+ * @Param params:
|
|
|
+ * @return: java.util.List<com.sckw.order.model.vo.res.TradeOrderAppStatisticVO>
|
|
|
+ */
|
|
|
+ public List<TradeOrderAppStatisticVO> appStatistic(TradeOrderAppStatisticParam params) {
|
|
|
+ TradeOrderAppStatisticParamDTO dto = new TradeOrderAppStatisticParamDTO();
|
|
|
+ dto.setOrderType(params.getOrderType())
|
|
|
+ .setIsMain(LoginUserHolder.getIsMain())
|
|
|
+ .setEntId(LoginUserHolder.getEntId());
|
|
|
+ List<Integer> statuses = Arrays.asList(1, 4, 5, 7);
|
|
|
+ List<Long> authUserIds = LoginUserHolder.getAuthUserIdList();
|
|
|
+ List<TradeOrderAppStatisticVO> tableTops = kwoTradeOrderMapper.appStatistic(dto, statuses, authUserIds);
|
|
|
+ Map<Integer, Integer> map = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ if (CollUtil.isNotEmpty(tableTops)) {
|
|
|
+ map = tableTops.stream().collect(Collectors.toMap
|
|
|
+ (TradeOrderAppStatisticVO::getValue, TradeOrderAppStatisticVO::getTotal, (k1, k2) -> k2));
|
|
|
+ }
|
|
|
+ List<TradeOrderAppStatisticVO> statistics = new ArrayList<>();
|
|
|
+ for (Integer e : statuses) {
|
|
|
+ int total = Objects.isNull(map.get(e)) ? 0 : map.get(e);
|
|
|
+ TradeOrderAppStatisticVO statistic = new TradeOrderAppStatisticVO();
|
|
|
+ statistic.setValue(e).setTotal(total);
|
|
|
+ statistics.add(statistic);
|
|
|
+ }
|
|
|
+ return statistics;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc: 贸易订单列表导出
|
|
|
+ * @author: yzc
|
|
|
+ * @date: 2023-07-17 18:05
|
|
|
+ * @Param params:
|
|
|
+ * @return: java.util.List<com.sckw.report.service.param.TradeOrderListExport>
|
|
|
+ */
|
|
|
+ public List<TradeOrderListExport> export(TradeOrderListExportParam params) {
|
|
|
+ TradeOrderListSelectDTO dto = new TradeOrderListSelectDTO();
|
|
|
+ List<Long> ids = new ArrayList<>();
|
|
|
+ if (StringUtils.isNotBlank(params.getIds())) {
|
|
|
+ ids = StringUtils.splitStrToList(params.getIds(), ",", Long.class);
|
|
|
+ dto.setEntId(LoginUserHolder.getEntId()).setOrderType(params.getOrderType());
|
|
|
+ } else {
|
|
|
+ dto = buildSelectParam(params);
|
|
|
+ }
|
|
|
+ List<OrderListResDTO> orders = kwoTradeOrderMapper.tradeOrderExport(dto, dto.getGoodIds(), LoginUserHolder.getAuthUserIdList(), ids);
|
|
|
+ if (CollUtil.isEmpty(orders)) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(
|
|
|
+ DictTypeEnum.TORDER_STATUS.getType(), DictTypeEnum.PICKUP_TYPE.getType(), DictTypeEnum.DELIVERY_TYPE.getType(),
|
|
|
+ DictTypeEnum.TORDER_SOURCE.getType(), DictTypeEnum.TRADE_TYPE.getType()));
|
|
|
+ Map<String, String> statusMap, pickupMap, deliveryMap, sourceMap, tradeMap;
|
|
|
+ if (CollUtil.isNotEmpty(dict)) {
|
|
|
+ statusMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TORDER_STATUS.getType())) ?
|
|
|
+ dict.get(DictTypeEnum.TORDER_STATUS.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ pickupMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.PICKUP_TYPE.getType())) ?
|
|
|
+ dict.get(DictTypeEnum.PICKUP_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ deliveryMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.DELIVERY_TYPE.getType())) ?
|
|
|
+ dict.get(DictTypeEnum.DELIVERY_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ sourceMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TORDER_SOURCE.getType())) ?
|
|
|
+ dict.get(DictTypeEnum.TORDER_SOURCE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ tradeMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.TRADE_TYPE.getType())) ?
|
|
|
+ dict.get(DictTypeEnum.TRADE_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ } else {
|
|
|
+ statusMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ pickupMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ deliveryMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ sourceMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ tradeMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
|
|
|
+ }
|
|
|
+ List<Long> goodIdList = new ArrayList<>();
|
|
|
+ List<Long> contracIdList = new ArrayList<>();
|
|
|
+ List<Long> createByIds = new ArrayList<>();
|
|
|
+ orders.forEach(e -> {
|
|
|
+ goodIdList.add(e.getGoodsId());
|
|
|
+ contracIdList.add(e.getContractId());
|
|
|
+ createByIds.add(e.getCreateBy());
|
|
|
+ });
|
|
|
+ Map<Long, UserCacheResDto> userMap = remoteSystemService.queryUserCacheMapByIds(createByIds);
|
|
|
+ Map<Long, KwpGoods> goodsMap = goodsInfoService.getGoodsByIds(goodIdList);
|
|
|
+ Map<Long, ContractCommonInfoResDto> contractMap = remoteContractService.queryContractBaseInfo(contracIdList);
|
|
|
+ List<TradeOrderListExport> list = new ArrayList<>();
|
|
|
+ orders.forEach(e -> {
|
|
|
+ TradeOrderListExport vo = BeanUtil.copyProperties(e, TradeOrderListExport.class);
|
|
|
+ List<LoadAddressDTO> loadAddresses = e.getLoadAddresses();
|
|
|
+ if (CollUtil.isNotEmpty(loadAddresses)) {
|
|
|
+ StringBuilder loadName = new StringBuilder();
|
|
|
+ StringBuilder loadDetailAddressInfo = new StringBuilder();
|
|
|
+ for (int i = 0; i < loadAddresses.size(); i++) {
|
|
|
+ LoadAddressDTO l = loadAddresses.get(i);
|
|
|
+ if (i != loadAddresses.size() - 1) {
|
|
|
+ loadName.append(l.getLoadName()).append(",");
|
|
|
+ loadDetailAddressInfo.append(l.getLoadCityName()).append(l.getLoadDetailAddress()).append(",");
|
|
|
+ } else {
|
|
|
+ loadName.append(l.getLoadName());
|
|
|
+ loadDetailAddressInfo.append(l.getLoadCityName()).append(l.getLoadDetailAddress());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ vo.setLoadName(loadName.toString()).setLoadDetailAddressInfo(loadDetailAddressInfo.toString());
|
|
|
+ }
|
|
|
+ List<UnloadAddressDTO> unloadAddresses = e.getUnloadAddresses();
|
|
|
+ if (CollUtil.isNotEmpty(unloadAddresses)) {
|
|
|
+ StringBuilder unloadName = new StringBuilder();
|
|
|
+ StringBuilder unloadDetailAddressInfo = new StringBuilder();
|
|
|
+ for (int i = 0; i < unloadAddresses.size(); i++) {
|
|
|
+ UnloadAddressDTO ul = unloadAddresses.get(i);
|
|
|
+ if (i != unloadAddresses.size() - 1) {
|
|
|
+ unloadName.append(ul.getUnloadName()).append(",");
|
|
|
+ unloadDetailAddressInfo.append(ul.getUnloadCityName()).append(ul.getUnloadDetailAddress()).append(",");
|
|
|
+ } else {
|
|
|
+ unloadName.append(ul.getUnloadName());
|
|
|
+ unloadDetailAddressInfo.append(ul.getUnloadCityName()).append(ul.getUnloadDetailAddress());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ vo.setUnloadName(unloadName.toString()).setUnloadDetailAddressInfo(unloadDetailAddressInfo.toString());
|
|
|
+ }
|
|
|
+ KwpGoods goods = goodsMap.get(e.getGoodsId());
|
|
|
+ ContractCommonInfoResDto contract = contractMap.get(e.getContractId());
|
|
|
+ UserCacheResDto userCache = userMap.get(e.getCreateBy());
|
|
|
+ BigDecimal waitEntrustAmount = getWaitEntrustAmount(e.getAmount(), e.getEntrustAmount());
|
|
|
+ vo.setStatus(statusMap.get(String.valueOf(vo.getStatus())))
|
|
|
+ .setGoodsName(Objects.isNull(goods) ? null : goods.getName())
|
|
|
+ .setGoodsSpec(Objects.isNull(goods) ? null : goods.getSpec())
|
|
|
+ .setUnitPrice(String.valueOf(setScale(e.getUnitPrice())))
|
|
|
+ .setAmount(String.valueOf(setScale(e.getAmount())))
|
|
|
+ .setPrice(String.valueOf(setScale(e.getPrice())))
|
|
|
+ .setGoodsTaxRate(Objects.isNull(goods) ? null : goods.getTaxRate())
|
|
|
+ .setEntrustAmount(String.valueOf(setScale(e.getEntrustAmount())))
|
|
|
+ .setActualAmount(String.valueOf(setScale(e.getActualAmount())))
|
|
|
+ .setWaitEntrustAmount(String.valueOf(setScale(waitEntrustAmount)))
|
|
|
+ .setPickupType(pickupMap.get(e.getPickupType()))
|
|
|
+ .setDeliveryType(deliveryMap.get(e.getDeliveryType()))
|
|
|
+ .setSource(sourceMap.get(e.getSource()))
|
|
|
+ .setTrading(tradeMap.get(e.getTrading()))
|
|
|
+ .setStartTime(Objects.isNull(e.getStartTime()) ? null : e.getStartTime().toString())
|
|
|
+ .setEndTime(Objects.isNull(e.getEndTime()) ? null : e.getEndTime().toString())
|
|
|
+ .setContractSigningWay(Objects.isNull(contract) ? null : contract.getSigningWayName())
|
|
|
+ .setCreateByName(Objects.isNull(userCache) ? null : userCache.getName())
|
|
|
+ .setCreateTime(com.sckw.excel.utils.DateUtil.getDateTime(e.getCreateTime()));
|
|
|
+ list.add(vo);
|
|
|
+ });
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc: 贸易订单对账单分页列表查询
|
|
|
+ * @author: yzc
|
|
|
+ * @date: 2023-07-20 15:03
|
|
|
+ * @Param params:
|
|
|
+ * @return: com.sckw.core.model.page.PageResult
|
|
|
+ */
|
|
|
+ public PageResult tradeOrderStatementList(TradeOrderStatementList params) {
|
|
|
+ TradeOrderStatementListParamDTO dto = BeanUtil.copyProperties(params, TradeOrderStatementListParamDTO.class);
|
|
|
+ List<Long> excludeIds = new ArrayList<>();
|
|
|
+ if (StringUtils.isNotBlank(params.getExcludeIds())) {
|
|
|
+ excludeIds = StringUtils.splitStrToList(params.getExcludeIds(), ",", Long.class);
|
|
|
+ }
|
|
|
+ dto.setEntId(LoginUserHolder.getEntId());
|
|
|
+ List<Long> goodsIds = goodsInfoService.getGoodsByGoodsNameAndTaxRate(params.getGoodsName(), params.getGoodsTaxRate());
|
|
|
+ PageHelper.startPage(params.getPage(), params.getPageSize());
|
|
|
+ List<OrderListResDTO> list = kwoTradeOrderMapper.tradeOrderStatementList(dto, goodsIds, excludeIds);
|
|
|
+ return buildResult(list, params.getPageSize());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @desc: 合同关联订单列表
|
|
|
+ * @author: yzc
|
|
|
+ * @date: 2023-07-27 17:05
|
|
|
+ * @Param params:
|
|
|
+ * @return: com.sckw.core.model.page.PageResult
|
|
|
+ */
|
|
|
+ public PageResult tradeOrderContractList(TradeOrderContractParam params) {
|
|
|
+ TradeOrderContractParamDTO dto = BeanUtil.copyProperties(params, TradeOrderContractParamDTO.class);
|
|
|
+ dto.setEntId(LoginUserHolder.getEntId());
|
|
|
+ List<Long> contractIds = StringUtils.splitStrToList(params.getContractIds(), ",", Long.class);
|
|
|
+ PageHelper.startPage(params.getPage(), params.getPageSize());
|
|
|
+ List<OrderListResDTO> list = kwoTradeOrderMapper.tradeOrderContractList(dto, contractIds);
|
|
|
+ return buildResult(list, params.getPageSize());
|
|
|
+ }
|
|
|
}
|