|
|
@@ -4,8 +4,12 @@ import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import 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.KwcContractLogisticsMapper;
|
|
|
import com.sckw.contract.model.dto.req.QueryListReqDto;
|
|
|
import com.sckw.contract.model.dto.res.QueryListResDto;
|
|
|
@@ -15,6 +19,9 @@ import com.sckw.contract.model.entity.KwcContractLogisticsUnit;
|
|
|
import com.sckw.contract.model.report.LogisticsListExport;
|
|
|
import com.sckw.contract.model.vo.req.*;
|
|
|
import com.sckw.contract.model.vo.res.*;
|
|
|
+import com.sckw.contract.repository.KwcContractLogisticsGoodsRepository;
|
|
|
+import com.sckw.contract.repository.KwcContractLogisticsRepository;
|
|
|
+import com.sckw.contract.repository.KwcContractLogisticsUnitRepository;
|
|
|
import com.sckw.contract.service.CommonBusinessService;
|
|
|
import com.sckw.contract.service.KwcContractLogisticsGoodsService;
|
|
|
import com.sckw.contract.service.KwcContractLogisticsTrackService;
|
|
|
@@ -33,6 +40,7 @@ import com.sckw.core.model.page.PageResult;
|
|
|
import com.sckw.core.utils.*;
|
|
|
import com.sckw.core.web.constant.HttpStatus;
|
|
|
import com.sckw.core.web.context.LoginUserHolder;
|
|
|
+import com.sckw.core.web.response.result.PageDataResult;
|
|
|
import com.sckw.excel.utils.ExcelUtil;
|
|
|
import com.sckw.product.api.dubbo.GoodsInfoService;
|
|
|
import com.sckw.stream.enums.MessageEnum;
|
|
|
@@ -44,6 +52,7 @@ 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 jakarta.servlet.http.HttpServletResponse;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -63,6 +72,7 @@ import java.util.stream.Collectors;
|
|
|
*/
|
|
|
@Service
|
|
|
@Slf4j
|
|
|
+@RequiredArgsConstructor
|
|
|
public class KwcContractLogisticsService {
|
|
|
|
|
|
@Autowired
|
|
|
@@ -80,6 +90,10 @@ public class KwcContractLogisticsService {
|
|
|
@Autowired
|
|
|
private CommonBusinessService commonBusinessService;
|
|
|
|
|
|
+ private final KwcContractLogisticsRepository kwcContractLogisticsRepository;
|
|
|
+ private final KwcContractLogisticsUnitRepository kwcContractLogisticsUnitRepository;
|
|
|
+ private final KwcContractLogisticsGoodsRepository kwcContractLogisticsGoodsRepository;
|
|
|
+
|
|
|
@DubboReference(version = "1.0.0", group = "design", check = false)
|
|
|
private RemoteSystemService remoteSystemService;
|
|
|
|
|
|
@@ -1030,4 +1044,118 @@ public class KwcContractLogisticsService {
|
|
|
ExcelUtil.downData(response, LogisticsListExport.class, dataList);
|
|
|
}
|
|
|
|
|
|
+ public PageDataResult<QueryLogisticListResp> queryLogisticsContractListByPage(QueryLogisticListReq req) {
|
|
|
+ log.info("分页查询物流合同参数:{}", JSON.toJSONString( req));
|
|
|
+ List<Long> entIdList = Lists.newArrayList();
|
|
|
+ if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getConsignCompanyId())){
|
|
|
+ entIdList.add(Long.valueOf(req.getConsignCompanyId()));
|
|
|
+ }
|
|
|
+ if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getCarriageCompanyId())){
|
|
|
+ entIdList.add(Long.valueOf(req.getCarriageCompanyId()));
|
|
|
+ }
|
|
|
+
|
|
|
+ IPage<KwcContractLogistics> page =kwcContractLogisticsRepository.queryByPage(req.getPageNum(),req.getPageSize(),
|
|
|
+ req.getContractNo(),
|
|
|
+ req.getContractName(),entIdList);
|
|
|
+ List<KwcContractLogistics> records = page.getRecords();
|
|
|
+ if (CollectionUtils.isNotEmpty(records)) {
|
|
|
+ return PageDataResult.empty(req.getPageNum(),req.getPageSize());
|
|
|
+ }
|
|
|
+ //发起人id
|
|
|
+ List<Long> userIds =
|
|
|
+ records.stream()
|
|
|
+ .map(KwcContractLogistics::getCreateBy).distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ Map<Long, UserCacheResDto> longUserCacheResDtoMap = Maps.newHashMap();
|
|
|
+ //获取员工信息
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(userIds)){
|
|
|
+ longUserCacheResDtoMap = remoteSystemService.queryUserCacheMapByIds(userIds);
|
|
|
+ }
|
|
|
+ //企业id
|
|
|
+ Set<Long> entIds = records.stream()
|
|
|
+ .map(KwcContractLogistics::getEntId)
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+ //合同id
|
|
|
+ Set<Long> contractIds = records.stream()
|
|
|
+ .map(KwcContractLogistics::getId)
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+ //查询物流商品信息
|
|
|
+ List<KwcContractLogisticsGoods> kwcContractLogisticsGoods =kwcContractLogisticsGoodsRepository.queryByContractIds(entIds);
|
|
|
+ Map<Long, List<KwcContractLogisticsGoods>> contractIdAndGoodsMap = Maps.newHashMap();
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwcContractLogisticsGoods)){
|
|
|
+ //按照合同id进行分组
|
|
|
+ contractIdAndGoodsMap =
|
|
|
+ kwcContractLogisticsGoods.stream().collect(Collectors.groupingBy(KwcContractLogisticsGoods::getContractId));
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询物流企业信息
|
|
|
+ List<KwcContractLogisticsUnit> kwcContractLogisticsUnits =
|
|
|
+ kwcContractLogisticsUnitRepository.queryByContractIds(contractIds);
|
|
|
+ Map<String, KwcContractLogisticsUnit> contractUniTypeAndUnitMap = Maps.newHashMap();
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwcContractLogisticsUnits)){
|
|
|
+ //合同id和单位类型组合成key映射物流企业信息
|
|
|
+ contractUniTypeAndUnitMap = kwcContractLogisticsUnits.stream()
|
|
|
+ .peek(k -> k.setContractIdUnitTypeKey(k.getContractId() + "-" + k.getUnitType()))
|
|
|
+ .collect(Collectors.toMap(KwcContractLogisticsUnit::getContractIdUnitTypeKey, Function.identity(),
|
|
|
+ (x, y) -> x));
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<Long, UserCacheResDto> finalLongUserCacheResDtoMap = longUserCacheResDtoMap;
|
|
|
+ Map<String, KwcContractLogisticsUnit> finalContractUniTypeAndUnitMap = contractUniTypeAndUnitMap;
|
|
|
+ Map<Long, List<KwcContractLogisticsGoods>> finalContractIdAndGoodsMap = contractIdAndGoodsMap;
|
|
|
+ List<QueryLogisticListResp> resp = records.stream().map(r -> {
|
|
|
+ QueryLogisticListResp queryLogisticListResp = new QueryLogisticListResp();
|
|
|
+ queryLogisticListResp.setId(r.getId());
|
|
|
+ queryLogisticListResp.setContractStatus(r.getStatus());
|
|
|
+ queryLogisticListResp.setContractStatusDesc(ContractStatusEnum.getNameByCode(r.getStatus()));
|
|
|
+ KwcContractLogisticsUnit logisticsUnit = finalContractUniTypeAndUnitMap.get(r.getId() + "-" + CooperateTypeEnum.CONSIGN.getCode());
|
|
|
+ if (Objects.nonNull(logisticsUnit)){
|
|
|
+ queryLogisticListResp.setConsignUnit(String.valueOf(logisticsUnit.getEntId()));
|
|
|
+ queryLogisticListResp.setConsignUnitName(logisticsUnit.getFirmName());
|
|
|
+ }
|
|
|
+ KwcContractLogisticsUnit carriageUnit =
|
|
|
+ finalContractUniTypeAndUnitMap.get(r.getId() + "-" + CooperateTypeEnum.CARRIAGE.getCode());
|
|
|
+ if (Objects.nonNull(carriageUnit)){
|
|
|
+ queryLogisticListResp.setCarriageUnit(String.valueOf(carriageUnit.getEntId()));
|
|
|
+ queryLogisticListResp.setCarriageUnitName(carriageUnit.getFirmName());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ queryLogisticListResp.setContractCode(r.getContractNo());
|
|
|
+ queryLogisticListResp.setContractName(r.getName());
|
|
|
+ queryLogisticListResp.setSignWay(r.getSigningWay());
|
|
|
+ queryLogisticListResp.setSignWayDesc(DictEnum.getLabel(DictTypeEnum.SIGNING_TYPE.getType(),
|
|
|
+ String.valueOf( r.getSigningWay())));
|
|
|
+ queryLogisticListResp.setContractTransportAmount(Objects.nonNull(r.getAmount())?
|
|
|
+ r.getAmount().toPlainString():null);
|
|
|
+ queryLogisticListResp.setPerformedAmount(Objects.nonNull(r.getPerformedAmount())
|
|
|
+ ? r.getPerformedAmount().toPlainString() : null);
|
|
|
+ List<KwcContractLogisticsGoods> goods = finalContractIdAndGoodsMap.get(r.getId());
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(goods)){
|
|
|
+ double totalTransportAmount = goods.stream()
|
|
|
+ .filter(g -> Objects.nonNull(g.getAmount()))
|
|
|
+ .mapToDouble(x -> Double.valueOf(String.valueOf(x.getAmount())))
|
|
|
+ .sum();
|
|
|
+ queryLogisticListResp.setTotalTransportAmount(String.valueOf( totalTransportAmount));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ String startDate = DateUtils.format(r.getStartTime(), DateUtils.DATE_TIME_PATTERN);
|
|
|
+ queryLogisticListResp.setStartDate(startDate);
|
|
|
+ String endDate = DateUtils.format(r.getEndTime(), DateUtils.DATE_TIME_PATTERN);
|
|
|
+ queryLogisticListResp.setEndDate(endDate);
|
|
|
+ UserCacheResDto userCacheResDto = finalLongUserCacheResDtoMap.getOrDefault(r.getCreateBy(), new UserCacheResDto());
|
|
|
+ queryLogisticListResp.setInitiator(userCacheResDto.getName());
|
|
|
+ EntCacheResDto entInfo = userCacheResDto.getEntInfo();
|
|
|
+ queryLogisticListResp.setInitiatorUnit(Objects.nonNull(entInfo) ? entInfo.getFirmName() : null);
|
|
|
+ queryLogisticListResp.setInitiatorTime(DateUtils.format(r.getCreateTime(), DateUtils.DATE_TIME_PATTERN));
|
|
|
+ queryLogisticListResp.setRemark(r.getRemark());
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return queryLogisticListResp;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ return PageDataResult.of(page, resp);
|
|
|
+ }
|
|
|
}
|