|
|
@@ -7,17 +7,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.github.pagehelper.PageInfo;
|
|
|
import com.google.common.collect.Lists;
|
|
|
+import com.google.common.collect.Maps;
|
|
|
import com.sckw.contract.dao.KwcContractTradeMapper;
|
|
|
import com.sckw.contract.model.dto.req.QueryListReqDto;
|
|
|
import com.sckw.contract.model.dto.res.QueryListResDto;
|
|
|
-import com.sckw.contract.model.entity.KwcContractTrade;
|
|
|
-import com.sckw.contract.model.entity.KwcContractTradeGoods;
|
|
|
-import com.sckw.contract.model.entity.KwcContractTradeUnit;
|
|
|
+import com.sckw.contract.model.entity.*;
|
|
|
import com.sckw.contract.model.report.TradeListExport;
|
|
|
import com.sckw.contract.model.vo.req.*;
|
|
|
import com.sckw.contract.model.vo.res.*;
|
|
|
-import com.sckw.contract.repository.KwcContractTradeGoodsRepository;
|
|
|
-import com.sckw.contract.repository.KwcContractTradeRepository;
|
|
|
+import com.sckw.contract.repository.*;
|
|
|
import com.sckw.contract.service.CommonBusinessService;
|
|
|
import com.sckw.contract.service.KwcContractTradeGoodsService;
|
|
|
import com.sckw.contract.service.KwcContractTradeTrackService;
|
|
|
@@ -46,10 +44,7 @@ import com.sckw.stream.enums.MessageEnum;
|
|
|
import com.sckw.stream.model.UserInfo;
|
|
|
import com.sckw.system.api.RemoteSystemService;
|
|
|
import com.sckw.system.api.RemoteUserService;
|
|
|
-import com.sckw.system.api.model.dto.res.EntCacheResDto;
|
|
|
-import com.sckw.system.api.model.dto.res.KwsUserResDto;
|
|
|
-import com.sckw.system.api.model.dto.res.SysDictResDto;
|
|
|
-import com.sckw.system.api.model.dto.res.UserCacheResDto;
|
|
|
+import com.sckw.system.api.model.dto.res.*;
|
|
|
import jakarta.servlet.http.HttpServletResponse;
|
|
|
import jakarta.validation.Valid;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
@@ -93,6 +88,10 @@ public class KwcContractTradeService {
|
|
|
|
|
|
private final KwcContractTradeGoodsRepository kwcContractTradeGoodsRepository;
|
|
|
private final KwcContractTradeRepository kwcContractTradeRepository;
|
|
|
+ private final KwcContractTradeUnitRepository kwcContractTradeUnitRepository;
|
|
|
+ private final KwcContractTradeOrderRepository kwcContractTradeOrderRepository;
|
|
|
+ private final KwcContractLogisticsUnitRepository kwcContractLogisticsUnitRepository;
|
|
|
+ private final KwcContractLogisticsGoodsRepository kwcContractLogisticsGoodsRepository;
|
|
|
|
|
|
@DubboReference(version = "1.0.0", group = "design", check = false)
|
|
|
private RemoteSystemService remoteSystemService;
|
|
|
@@ -222,7 +221,8 @@ public class KwcContractTradeService {
|
|
|
queryListResVo.setSigningWayName(DictEnum.getLabel(DictTypeEnum.SIGNING_TYPE.getType(), queryListResDto.getSigningWay()));
|
|
|
queryListResVo.setSigningWay(String.valueOf(queryListResDto.getSigningWay()));
|
|
|
queryListResVo.setUnloadWay(String.valueOf(queryListResDto.getUnloadWay()));
|
|
|
- queryListResVo.setUnloadWayName(DictEnum.getLabel(String.valueOf(queryListResDto.getUnloadWay())));
|
|
|
+ queryListResVo.setUnloadWayName(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(),
|
|
|
+ String.valueOf(queryListResDto.getUnloadWay())));
|
|
|
queryListResVo.setAmount(queryListResDto.getAmount());
|
|
|
queryListResVo.setPerformedAmount(queryListResDto.getPerformedAmount());
|
|
|
|
|
|
@@ -1275,4 +1275,228 @@ public class KwcContractTradeService {
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
+ public Boolean updateStatus(@Valid ApprovalReq req) {
|
|
|
+ log.info("修改合同状态,请求参数 :{}", JSON.toJSONString(req));
|
|
|
+ //查询本地商品合同信息
|
|
|
+ KwcContractTrade kwcContractTrade = kwcContractTradeRepository.queryByContractId(req.getContractId());
|
|
|
+ if (Objects.isNull(kwcContractTrade)) {
|
|
|
+ throw new BusinessException("合同不存在");
|
|
|
+ }
|
|
|
+ //创建修改对象
|
|
|
+ KwcContractTrade updateKwcContractTrade = new KwcContractTrade();
|
|
|
+ updateKwcContractTrade.setId(kwcContractTrade.getId());
|
|
|
+ updateKwcContractTrade.setRemark(req.getRemark());
|
|
|
+ //审核 审核后变成待签约
|
|
|
+ if (Objects.equals(req.getStatus(), ContractStatusEnum.SUBMIT.getCode()) && Objects.equals(kwcContractTrade.getStatus(), ContractStatusEnum.WAIT_APPROVE.getCode())) {
|
|
|
+ updateKwcContractTrade.setStatus(ContractStatusEnum.SUBMIT.getCode());
|
|
|
+ }
|
|
|
+ //审核拒绝 (状态由待审核变成已作废)
|
|
|
+ if (Objects.equals(req.getStatus(), ContractStatusEnum.CANNEL.getCode())
|
|
|
+ && Arrays.asList(ContractStatusEnum.WAIT_APPROVE.getCode(), ContractStatusEnum.SUBMIT.getCode()).contains(kwcContractTrade.getStatus())) {
|
|
|
+ updateKwcContractTrade.setStatus(ContractStatusEnum.CANNEL.getCode());
|
|
|
+ }
|
|
|
+ //签约 (状态由带签约变成签约)
|
|
|
+ if (Objects.equals(req.getStatus(), ContractStatusEnum.SIGNED.getCode()) && Objects.equals(kwcContractTrade.getStatus(), ContractStatusEnum.SUBMIT.getCode())) {
|
|
|
+ updateKwcContractTrade.setStatus(ContractStatusEnum.SIGNED.getCode());
|
|
|
+ }
|
|
|
+ //手动完结 (如果不传状态就表示手动完结) 如果当前状态是待签约或者待签约 那么变为作废
|
|
|
+ if (Objects.equals(req.getStatus(),ContractStatusEnum.CANNEL.getCode()) && Arrays.asList(ContractStatusEnum.WAIT_APPROVE.getCode(),
|
|
|
+ ContractStatusEnum.SUBMIT.getCode()).contains(kwcContractTrade.getStatus())){
|
|
|
+ updateKwcContractTrade.setStatus(ContractStatusEnum.CANNEL.getCode());
|
|
|
+ }
|
|
|
+ //手动完结 如果当前的状态是已经签约,订单变成已完结
|
|
|
+ if (Objects.equals(req.getStatus(),ContractStatusEnum.CANNEL.getCode()) && Objects.equals(kwcContractTrade.getStatus(),
|
|
|
+ ContractStatusEnum.SIGNED.getCode())){
|
|
|
+ updateKwcContractTrade.setStatus(ContractStatusEnum.COMPLETE.getCode());
|
|
|
+ }
|
|
|
+ return kwcContractTradeRepository.updateByContractId(updateKwcContractTrade);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public ContractDetailResp queryContractDetail(@Valid ContractDetailReq req) {
|
|
|
+ log.info("查询合同详情,请求参数 :{}", JSON.toJSONString(req));
|
|
|
+ //查询本地商品合同信息
|
|
|
+ KwcContractTrade kwcContractTrade = kwcContractTradeRepository.queryByContractNo(req.getContractCode());
|
|
|
+ if (Objects.isNull(kwcContractTrade)) {
|
|
|
+ return new ContractDetailResp();
|
|
|
+ }
|
|
|
+ //根据订单号查询交易企业信息
|
|
|
+ List<KwcContractTradeUnit> tradeUnits = kwcContractTradeUnitRepository.queryByContractId(kwcContractTrade.getId());
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isEmpty(tradeUnits)){
|
|
|
+ return new ContractDetailResp();
|
|
|
+ }
|
|
|
+ //安装合同id和单位类型组合成key映射公司对象
|
|
|
+ Map<String, KwcContractTradeUnit> ctTypeKeyAndUnitMap = tradeUnits.stream()
|
|
|
+ .peek(t -> t.setContractIdUniTypeKey(t.getContractId() + "-" + t.getUnitType()))
|
|
|
+ .collect(Collectors.toMap(KwcContractTradeUnit::getContractIdUniTypeKey, Function.identity(),
|
|
|
+ (v1, v2) -> v1));
|
|
|
+
|
|
|
+ //查询商品合同
|
|
|
+ List<KwcContractTradeGoods> tradeGoods = kwcContractTradeGoodsRepository.queryByContractId(kwcContractTrade.getId());
|
|
|
+ Map<String, KwcContractTradeGoods> contractTradeKeyAndGoodsMap = Maps.newHashMap();
|
|
|
+ List<Long> goodsIds = Lists.newArrayList();
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(tradeGoods)){
|
|
|
+ //获取商品id
|
|
|
+ goodsIds = tradeGoods.stream()
|
|
|
+ .map(KwcContractTradeGoods::getGoodsId)
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ //过滤主合同查看的标信息 , 合同id商品id组成唯一key映射商品信息
|
|
|
+ contractTradeKeyAndGoodsMap =
|
|
|
+ tradeGoods.stream()
|
|
|
+ .peek(x -> x.setContractIdGoodsIdKey(x.getContractId() + "-" + x.getGoodsId()))
|
|
|
+ .collect(Collectors.toMap(KwcContractTradeGoods::getContractIdGoodsIdKey, Function.identity(), (x, y) -> x));
|
|
|
+
|
|
|
+ }
|
|
|
+ //查询商品 商品id映射商品
|
|
|
+ Map<Long, KwpGoods> goodsIdAndGoodsMap = Maps.newHashMap();
|
|
|
+ if (CollectionUtils.isNotEmpty(goodsIds)){
|
|
|
+ goodsIdAndGoodsMap = goodsInfoService.getGoodsByIds(goodsIds);
|
|
|
+
|
|
|
+ }
|
|
|
+ //查询贸易订单
|
|
|
+ KwcContractTradeOrder kwcContractTradeOrder =
|
|
|
+ kwcContractTradeOrderRepository.queryByContractId(kwcContractTrade.getId());
|
|
|
+
|
|
|
+ //查询物流合同
|
|
|
+ List<KwcContractLogisticsUnit> kwcContractLogisticsUnits = kwcContractLogisticsUnitRepository.queryByContractId(kwcContractTrade.getId());
|
|
|
+ //合同id和单位类型组合成key映射物流对象
|
|
|
+ Map<String, KwcContractLogisticsUnit> contractIdUnitTypeKeyAndUnitMap = kwcContractLogisticsUnits.stream()
|
|
|
+ .peek(x -> x.setContractIdUnitTypeKey(x.getContractId() + "-" + x.getUnitType()))
|
|
|
+ .collect(Collectors.toMap(KwcContractLogisticsUnit::getContractIdUnitTypeKey, Function.identity(), (x, y) -> x));
|
|
|
+
|
|
|
+ //查询物流商品
|
|
|
+ List<KwcContractLogisticsGoods> kwcContractLogisticsGoods = kwcContractLogisticsGoodsRepository.queryByContractId(kwcContractTrade.getId());
|
|
|
+ //合同id和商品id组成唯一key映射物流信息
|
|
|
+ Map<String, KwcContractLogisticsGoods> contractIdGoodsIdKeyAndGoodsMap = kwcContractLogisticsGoods.stream()
|
|
|
+ .peek(x -> x.setContractIdGoodsIdKey(x.getContractId() + "-" + x.getGoodsId()))
|
|
|
+ .collect(Collectors.toMap(KwcContractLogisticsGoods::getContractIdGoodsIdKey, Function.identity(), (x, y) -> x));
|
|
|
+
|
|
|
+ ContractDetailResp contractDetailResp = new ContractDetailResp();
|
|
|
+ contractDetailResp.setId(kwcContractTrade.getId());
|
|
|
+ contractDetailResp.setPid(kwcContractTrade.getContractPid());
|
|
|
+ //获取基本信息
|
|
|
+ ContractDetailResp.TradeBaseInfo baseInfo = getBaseInfo(ctTypeKeyAndUnitMap, kwcContractTrade);
|
|
|
+ contractDetailResp.setBaseInfo(baseInfo);
|
|
|
+ //文件合同
|
|
|
+ contractDetailResp.setContractFile(kwcContractTrade.getSignedUrl());
|
|
|
+
|
|
|
+ //标地信息
|
|
|
+ if (CollectionUtils.isNotEmpty(tradeGoods)){
|
|
|
+ Map<Long, KwpGoods> finalGoodsIdAndGoodsMap = goodsIdAndGoodsMap;
|
|
|
+ List<ContractDetailResp.TradeGoodsInfo> tradeGoodsInfos = tradeGoods.stream()
|
|
|
+ .map(t -> getTradeGoodsInfo(t, finalGoodsIdAndGoodsMap))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ contractDetailResp.setGoodsInfo(tradeGoodsInfos);
|
|
|
+ }
|
|
|
+
|
|
|
+ ContractDetailResp.AssociatedOrder associatedOrder = new ContractDetailResp.AssociatedOrder();
|
|
|
+ if (Objects.nonNull(kwcContractTradeOrder)){
|
|
|
+ associatedOrder.setOrderId(kwcContractTradeOrder.getOrderId());
|
|
|
+ associatedOrder.setOrderStatus(kwcContractTradeOrder.getStatus());
|
|
|
+ associatedOrder.setOrderCode(kwcContractTradeOrder.getOrderNo());
|
|
|
+ KwcContractTradeUnit purchaseUnit =
|
|
|
+ ctTypeKeyAndUnitMap.getOrDefault(kwcContractTrade.getId() + "-" + CooperateTypeEnum.PURCHASER.getCode(), new KwcContractTradeUnit());
|
|
|
+
|
|
|
+
|
|
|
+ KwcContractTradeUnit provideUnit =
|
|
|
+ ctTypeKeyAndUnitMap.getOrDefault(kwcContractTrade.getId() + "-" + CooperateTypeEnum.SUPPLIER.getCode(), new KwcContractTradeUnit());
|
|
|
+
|
|
|
+ associatedOrder.setPurchaseEntId(purchaseUnit.getEntId());
|
|
|
+ associatedOrder.setPurchaseEntName(purchaseUnit.getFirmName());
|
|
|
+ associatedOrder.setProvideEntId(provideUnit.getEntId());
|
|
|
+ associatedOrder.setProvideEntName(provideUnit.getFirmName());
|
|
|
+
|
|
|
+ KwcContractLogisticsUnit logisticsUnit =
|
|
|
+ contractIdUnitTypeKeyAndUnitMap.get(kwcContractTrade.getId() + "-" + CooperateTypeEnum.CONSIGN.getCode());
|
|
|
+ if (Objects.nonNull(logisticsUnit)){
|
|
|
+ associatedOrder.setTransportEntId(logisticsUnit.getEntId());
|
|
|
+ associatedOrder.setTransportEntName(logisticsUnit.getFirmName());
|
|
|
+ }
|
|
|
+ KwcContractLogisticsUnit logisticsCarrigeUnit =
|
|
|
+ contractIdUnitTypeKeyAndUnitMap.get(kwcContractTrade.getId() + "-" + CooperateTypeEnum.CARRIAGE.getCode());
|
|
|
+ if (Objects.nonNull(logisticsCarrigeUnit)){
|
|
|
+ associatedOrder.setTransportEntId(logisticsCarrigeUnit.getEntId());
|
|
|
+ associatedOrder.setTransportEntName(logisticsCarrigeUnit.getFirmName());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ associatedOrder.setGoodsId(kwcContractTradeOrder.getGoodsId());
|
|
|
+ KwpGoods goods = goodsIdAndGoodsMap.getOrDefault(kwcContractTradeOrder.getGoodsId(), new KwpGoods());
|
|
|
+ associatedOrder.setGoodsName(goods.getName());
|
|
|
+ associatedOrder.setBillingWay(kwcContractTradeOrder.getBillingWay());
|
|
|
+ associatedOrder.setBillingWayDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(),
|
|
|
+ String.valueOf(kwcContractTradeOrder.getBillingWay())));
|
|
|
+ associatedOrder.setAmount(Objects.nonNull(kwcContractTradeOrder.getAmount()) ?
|
|
|
+ kwcContractTradeOrder.getAmount().toPlainString() : null);
|
|
|
+ associatedOrder.setLoadAmount(Objects.nonNull(kwcContractTradeOrder.getLoadAmount()) ?
|
|
|
+ kwcContractTradeOrder.getLoadAmount().toPlainString() : null);
|
|
|
+ associatedOrder.setUnloadAmount(Objects.nonNull(kwcContractTradeOrder.getUnloadAmount()) ?
|
|
|
+ kwcContractTradeOrder.getUnloadAmount().toPlainString() : null);
|
|
|
+ KwcContractTradeGoods contractTradeGoods = contractTradeKeyAndGoodsMap
|
|
|
+ .getOrDefault(kwcContractTradeOrder.getContractId() + "-" + kwcContractTradeOrder.getGoodsId(), new KwcContractTradeGoods());
|
|
|
+ KwcContractLogisticsGoods logisticsGoods =
|
|
|
+ contractIdGoodsIdKeyAndGoodsMap.getOrDefault(kwcContractTradeOrder.getContractId() + "-" + kwcContractTradeOrder.getGoodsId(), new KwcContractLogisticsGoods());
|
|
|
+ associatedOrder.setTransportPrice(Objects.nonNull(logisticsGoods.getPrice()) ? logisticsGoods.getPrice().toPlainString() : null);
|
|
|
+ associatedOrder.setLoadAddress(kwcContractTradeOrder.getLoadAddress());
|
|
|
+ associatedOrder.setUnloadAddress(kwcContractTradeOrder.getUnloadAddress());
|
|
|
+ contractDetailResp.setAssociatedOrder(associatedOrder);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ contractDetailResp.setRemark(kwcContractTrade.getRemark());
|
|
|
+
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static ContractDetailResp.TradeGoodsInfo getTradeGoodsInfo(KwcContractTradeGoods t, Map<Long,
|
|
|
+ KwpGoods> finalGoodsIdAndGoodsMap) {
|
|
|
+ ContractDetailResp.TradeGoodsInfo tradeGoodsInfo = new ContractDetailResp.TradeGoodsInfo();
|
|
|
+ tradeGoodsInfo.setGoodsId(t.getGoodsId());
|
|
|
+ KwpGoods goods = finalGoodsIdAndGoodsMap.getOrDefault(t.getGoodsId(), new KwpGoods());
|
|
|
+ tradeGoodsInfo.setGoodsName(goods.getName());
|
|
|
+ tradeGoodsInfo.setAmount(t.getAmount());
|
|
|
+ tradeGoodsInfo.setPrice(t.getPrice());
|
|
|
+ tradeGoodsInfo.setUnit(t.getUnit());
|
|
|
+ tradeGoodsInfo.setEffectiveStartTime(t.getStartTime());
|
|
|
+ tradeGoodsInfo.setEffectiveEntTime(t.getEndTime());
|
|
|
+ return tradeGoodsInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static ContractDetailResp.TradeBaseInfo getBaseInfo(Map<String, KwcContractTradeUnit> ctTypeKeyAndUnitMap, KwcContractTrade kwcContractTrade) {
|
|
|
+ ContractDetailResp.TradeBaseInfo tradeBaseInfo = new ContractDetailResp.TradeBaseInfo();
|
|
|
+ KwcContractTradeUnit purchaseUnit =
|
|
|
+ ctTypeKeyAndUnitMap.getOrDefault(kwcContractTrade.getId() + "-" + CooperateTypeEnum.PURCHASER.getCode(), new KwcContractTradeUnit());
|
|
|
+ tradeBaseInfo.setPurchaseEntId(purchaseUnit.getEntId());
|
|
|
+
|
|
|
+ tradeBaseInfo.setPurchaseFirmName(purchaseUnit.getFirmName());
|
|
|
+ tradeBaseInfo.setPurchasePhone(purchaseUnit.getPhone());
|
|
|
+ KwcContractTradeUnit provideUnit =
|
|
|
+ ctTypeKeyAndUnitMap.getOrDefault(kwcContractTrade.getId() + "-" + CooperateTypeEnum.SUPPLIER.getCode(), new KwcContractTradeUnit());
|
|
|
+ tradeBaseInfo.setProvideEntId(provideUnit.getEntId());
|
|
|
+ tradeBaseInfo.setProvideFirmName(provideUnit.getFirmName());
|
|
|
+ tradeBaseInfo.setProvidePhone(provideUnit.getPhone());
|
|
|
+ tradeBaseInfo.setContractCode(kwcContractTrade.getContractNo());
|
|
|
+ tradeBaseInfo.setContractName(kwcContractTrade.getName());
|
|
|
+ tradeBaseInfo.setEndTime(kwcContractTrade.getEndTime());
|
|
|
+ tradeBaseInfo.setSigningWay(kwcContractTrade.getSigningWay());
|
|
|
+ tradeBaseInfo.setSigningWayDesc(DictEnum.getLabel(DictTypeEnum.SIGNING_WAY.getType(), String.valueOf(kwcContractTrade.getSigningWay())));
|
|
|
+ tradeBaseInfo.setStartTime(kwcContractTrade.getStartTime());
|
|
|
+ tradeBaseInfo.setSettlement(kwcContractTrade.getSettlement());
|
|
|
+ tradeBaseInfo.setSettlementDesc(DictEnum.getLabel(DictTypeEnum.SIGNING_TYPE.getType(),
|
|
|
+ String.valueOf(kwcContractTrade.getSettlement())));
|
|
|
+ tradeBaseInfo.setConsignment(kwcContractTrade.getConsignment());
|
|
|
+ tradeBaseInfo.setConsignmentDesc(DictEnum.getLabel(DictTypeEnum.CONSIGNMENT_WAY.getType(),
|
|
|
+ String.valueOf(kwcContractTrade.getConsignment())));
|
|
|
+
|
|
|
+ tradeBaseInfo.setUnloadWay(kwcContractTrade.getUnloadWay());
|
|
|
+ tradeBaseInfo.setUnloadWayDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(),
|
|
|
+ String.valueOf(kwcContractTrade.getUnloadWay())));
|
|
|
+ tradeBaseInfo.setSalesmanId(kwcContractTrade.getSalesmanId());
|
|
|
+ tradeBaseInfo.setSalesmanPhone(kwcContractTrade.getSalesmanPhone());
|
|
|
+ return tradeBaseInfo;
|
|
|
+ }
|
|
|
}
|