Commit ec3947a1 authored by Smile's avatar Smile

需求130后台-集运-包裹列表-包裹详情 校验添加

parent ed36990d
...@@ -22,6 +22,7 @@ import cn.iocoder.yudao.module.order.dal.dataobject.cons.ConsDO; ...@@ -22,6 +22,7 @@ import cn.iocoder.yudao.module.order.dal.dataobject.cons.ConsDO;
import cn.iocoder.yudao.module.order.dal.dataobject.consApproval.ConsApprovalDO; import cn.iocoder.yudao.module.order.dal.dataobject.consApproval.ConsApprovalDO;
import cn.iocoder.yudao.module.order.dal.dataobject.consException.ConsExceptionDO; import cn.iocoder.yudao.module.order.dal.dataobject.consException.ConsExceptionDO;
import cn.iocoder.yudao.module.order.dal.dataobject.consFee.ConsFeeDO; import cn.iocoder.yudao.module.order.dal.dataobject.consFee.ConsFeeDO;
import cn.iocoder.yudao.module.order.dal.dataobject.consFollowup.ConsFollowupDO;
import cn.iocoder.yudao.module.order.dal.dataobject.consItem.ConsItemDO; import cn.iocoder.yudao.module.order.dal.dataobject.consItem.ConsItemDO;
import cn.iocoder.yudao.module.order.dal.dataobject.consLocation.ConsLocationDO; import cn.iocoder.yudao.module.order.dal.dataobject.consLocation.ConsLocationDO;
import cn.iocoder.yudao.module.order.dal.dataobject.consMedia.ConsMediaDO; import cn.iocoder.yudao.module.order.dal.dataobject.consMedia.ConsMediaDO;
...@@ -34,9 +35,11 @@ import cn.iocoder.yudao.module.order.enums.OrderStatusEnum; ...@@ -34,9 +35,11 @@ import cn.iocoder.yudao.module.order.enums.OrderStatusEnum;
import cn.iocoder.yudao.module.order.service.consApproval.ConsApprovalService; import cn.iocoder.yudao.module.order.service.consApproval.ConsApprovalService;
import cn.iocoder.yudao.module.order.service.consException.ConsExceptionService; import cn.iocoder.yudao.module.order.service.consException.ConsExceptionService;
import cn.iocoder.yudao.module.order.service.consFee.ConsFeeService; import cn.iocoder.yudao.module.order.service.consFee.ConsFeeService;
import cn.iocoder.yudao.module.order.service.consFollowup.ConsFollowupService;
import cn.iocoder.yudao.module.order.service.consItem.ConsItemService; import cn.iocoder.yudao.module.order.service.consItem.ConsItemService;
import cn.iocoder.yudao.module.order.service.consLocation.ConsLocationService; import cn.iocoder.yudao.module.order.service.consLocation.ConsLocationService;
import cn.iocoder.yudao.module.order.service.consMedia.ConsMediaService; import cn.iocoder.yudao.module.order.service.consMedia.ConsMediaService;
import cn.iocoder.yudao.module.order.service.consSpecialNeed.ConsSpecialNeedService;
import cn.iocoder.yudao.module.order.service.consTrackingRecord.ConsTrackingRecordService; import cn.iocoder.yudao.module.order.service.consTrackingRecord.ConsTrackingRecordService;
import cn.iocoder.yudao.module.order.service.order.OrderQueryService; import cn.iocoder.yudao.module.order.service.order.OrderQueryService;
import cn.iocoder.yudao.module.order.service.order.OrderService; import cn.iocoder.yudao.module.order.service.order.OrderService;
...@@ -55,6 +58,7 @@ import cn.iocoder.yudao.module.order.vo.orderConsignor.OrderConsignorBackVO; ...@@ -55,6 +58,7 @@ import cn.iocoder.yudao.module.order.vo.orderConsignor.OrderConsignorBackVO;
import cn.iocoder.yudao.module.order.vo.orderItem.OrderItemBackVO; import cn.iocoder.yudao.module.order.vo.orderItem.OrderItemBackVO;
import cn.iocoder.yudao.module.product.dal.dataobject.product.ProductDO; import cn.iocoder.yudao.module.product.dal.dataobject.product.ProductDO;
import cn.iocoder.yudao.module.product.dal.mysql.product.ProductMapper; import cn.iocoder.yudao.module.product.dal.mysql.product.ProductMapper;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -64,8 +68,10 @@ import org.redisson.api.RedissonClient; ...@@ -64,8 +68,10 @@ import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import cn.iocoder.yudao.module.order.dal.dataobject.consSpecialNeed.ConsSpecialNeedDO;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
...@@ -129,6 +135,12 @@ public class ConsServiceImpl extends AbstractService<ConsMapper, ConsDO> impleme ...@@ -129,6 +135,12 @@ public class ConsServiceImpl extends AbstractService<ConsMapper, ConsDO> impleme
@Resource @Resource
private ConsApprovalService consApprovalService; private ConsApprovalService consApprovalService;
@Resource
private ConsSpecialNeedService consSpecialNeedService;
@Resource
private ConsFollowupService consFollowupService;
@Resource @Resource
private CustomerService customerService; private CustomerService customerService;
...@@ -398,16 +410,111 @@ public class ConsServiceImpl extends AbstractService<ConsMapper, ConsDO> impleme ...@@ -398,16 +410,111 @@ public class ConsServiceImpl extends AbstractService<ConsMapper, ConsDO> impleme
int size = page.getRows(); int size = page.getRows();
ConsItemQueryVO consItemQueryVO = new ConsItemQueryVO(); ConsItemQueryVO consItemQueryVO = new ConsItemQueryVO();
consItemQueryVO.setLang(I18nMessage.getLang()); consItemQueryVO.setLang(I18nMessage.getLang());
List<ConsBackVO> consBackVOS = consMapper.myConsPageList(start, size, query); List<ConsBackVO> consBackS = consMapper.myConsPageList(start, size, query);
consBackVOS.removeAll(Collections.singleton(null)); consBackS.removeAll(Collections.singleton(null));
consBackVOS.forEach(consBackVO -> { List<Long> consIds = consBackS.stream().map(ConsBackVO::getId).collect(Collectors.toList());
List<ConsExceptionDO> consExceptionS = consExceptionService.selectList(ConsExceptionDO::getConsId, consIds);
List<ConsApprovalDO> consApprovalS = consApprovalService.selectList(ConsApprovalDO::getConsId, consIds);
List<ConsSpecialNeedDO> consSpecialNeeds = consSpecialNeedService.selectList(ConsSpecialNeedDO::getConsId, consIds);
List<ConsFollowupDO> consFollowupS = consFollowupService.selectList(ConsFollowupDO::getConsId, consIds);
Map<Long, List<ConsFollowupDO>> collectConsFollowupMap;
Map<Long, List<ConsSpecialNeedDO>> collectConsSpecialNeedMap;
if (!consSpecialNeeds.isEmpty()){
collectConsSpecialNeedMap = consSpecialNeeds.stream().collect(Collectors.groupingBy(ConsSpecialNeedDO::getConsId));
}else {
collectConsSpecialNeedMap = new HashMap<>();
}
if (!consFollowupS.isEmpty()){
collectConsFollowupMap = consFollowupS.stream().collect(Collectors.groupingBy(ConsFollowupDO::getConsId));
}else {
collectConsFollowupMap = new HashMap<>();
}
boolean hasException;
boolean hasApproval;
Map<Long, List<ConsExceptionDO>> collectConsExceptionMap;
Map<Long, List<ConsApprovalDO>> collectConsApprovalMap;
if (!consExceptionS.isEmpty()){
hasException = true;
collectConsExceptionMap = consExceptionS.stream().collect(Collectors.groupingBy(ConsExceptionDO::getConsId));
} else {
collectConsExceptionMap = new HashMap<>();
hasException = false;
}
if (!consApprovalS.isEmpty()){
hasApproval = true;
collectConsApprovalMap = consApprovalS.stream().collect(Collectors.groupingBy(ConsApprovalDO::getConsId));
} else {
collectConsApprovalMap = new HashMap<>();
hasApproval = false;
}
consBackS.forEach(consBackVO -> {
if (consBackVO.getStockDurationLimit()==null){
consBackVO.setIsOverTime(true);
}else if(consBackVO.getInWarehouseDays()!=null&&consBackVO.getInWarehouseDays()>consBackVO.getStockDurationLimit()){
consBackVO.setIsOverTime(true);
}
if(collectConsFollowupMap.get(consBackVO.getId())!=null){
ConsFollowupDO consFollowupDO = collectConsFollowupMap.get(consBackVO.getId()).stream().max(Comparator.comparing(ConsFollowupDO::getCreateTime)).get();
//如果跟进时间小于当前时间,且未转运
if (consFollowupDO.getFollowTime()!=null&&consFollowupDO.getFollowTime().compareTo(new Date())<1&&consBackVO.getStatus()<2){
consBackVO.setIsFollowOverTime(true);
}
}
consItemQueryVO.setConsId(consBackVO.getId()); consItemQueryVO.setConsId(consBackVO.getId());
List<ConsItemBackVO> consItemBackVOList = consItemService.getConsItemBackVOList(consItemQueryVO); List<ConsItemBackVO> consItemBackVOList = consItemService.getConsItemBackVOList(consItemQueryVO);
consBackVO.setConsItemVOList(consItemBackVOList); consBackVO.setConsItemVOList(consItemBackVOList);
List<ConsExceptionDO> consExceptionDOS = consExceptionService.selectList(ConsExceptionDO::getConsId, consBackVO.getId()); if (collectConsSpecialNeedMap.get(consBackVO.getId()) != null){
consBackVO.setConsSpecialNeeds(collectConsSpecialNeedMap.get(consBackVO.getId()));
}
if (consBackVO.getNeedInspect()!=null&&consBackVO.getNeedInspect()==1&&consBackVO.getInspectStatus()==2){
//计算验货体积和重量之和
BigDecimal volume = BigDecimal.ZERO;
BigDecimal weight = BigDecimal.ZERO;
for (int i = 0; i < consItemBackVOList.size(); i++) {
volume = consItemBackVOList.get(i).getInspectionVolume().add(volume);
weight = consItemBackVOList.get(i).getInspectionWeight().add(weight);
}
if (consBackVO.getConsVolumeLimit().compareTo(volume) == -1||consBackVO.getConsWeightLimit().compareTo(weight) == -1){
consBackVO.setIsOverLimit(true);
}
}
if (hasException){
if (collectConsExceptionMap.get(consBackVO.getId()) != null){
consBackVO.setHasErrors(true);
}
}
if(hasApproval){
if (collectConsApprovalMap.get(consBackVO.getId()) != null){
List<ConsApprovalDO> consApprovalList = collectConsApprovalMap.get(consBackVO.getId());
for (ConsApprovalDO consApprovalDO : consApprovalList) {
//查看是否有退仓审批/或者退仓未处理
if (consApprovalDO.getApprovalType().equals(0) && (consApprovalDO.getStatus().equals(1))) {
consBackVO.setHasReturnStatus(true);
}
if (consApprovalDO.getApprovalType().equals(0)&&consApprovalDO.getStatus().equals(2)&& JSON.parseObject(consApprovalDO.getApprovalDetail()).getBoolean("isDeal")){
consBackVO.setReturnStatus(1);
}else {
consBackVO.setReturnStatus(0);
}
//查看是否有撤出订单待审批
if(consApprovalDO.getApprovalType().equals(4)&& consApprovalDO.getStatus().equals(1)){
consBackVO.setHasExitApproval(true);
}
//查看是否有追加订单待审批
if(consApprovalDO.getApprovalType().equals(2)&& consApprovalDO.getStatus().equals(1)){
consBackVO.setHasAddApproval(true);
}
//查看是否有追加订单待审批
if(consApprovalDO.getApprovalType().equals(6)&& consApprovalDO.getStatus().equals(1)){
consBackVO.setHasFeeApproval(true);
}
}
}
}
}); });
return new PageResult<>(consBackVOS, total, mpPage.getSize(), page.getPage(), (total + mpPage.getSize() - 1) / mpPage.getSize()); return new PageResult<>(consBackS, total, mpPage.getSize(), page.getPage(), (total + mpPage.getSize() - 1) / mpPage.getSize());
} }
@Override @Override
......
...@@ -5,12 +5,14 @@ import cn.iocoder.yudao.module.depository.vo.warehouse.WarehouseBackVO; ...@@ -5,12 +5,14 @@ import cn.iocoder.yudao.module.depository.vo.warehouse.WarehouseBackVO;
import cn.iocoder.yudao.module.ecw.controller.admin.express.vo.ExpressBaseVO; import cn.iocoder.yudao.module.ecw.controller.admin.express.vo.ExpressBaseVO;
import cn.iocoder.yudao.module.order.dal.dataobject.consApproval.ConsApprovalDO; import cn.iocoder.yudao.module.order.dal.dataobject.consApproval.ConsApprovalDO;
import cn.iocoder.yudao.module.order.dal.dataobject.consFee.ConsFeeDO; import cn.iocoder.yudao.module.order.dal.dataobject.consFee.ConsFeeDO;
import cn.iocoder.yudao.module.order.dal.dataobject.consSpecialNeed.ConsSpecialNeedDO;
import cn.iocoder.yudao.module.order.vo.consItem.ConsItemBackVO; import cn.iocoder.yudao.module.order.vo.consItem.ConsItemBackVO;
import cn.iocoder.yudao.module.order.vo.consItem.ConsItemBaseVO; import cn.iocoder.yudao.module.order.vo.consItem.ConsItemBaseVO;
import cn.iocoder.yudao.module.order.vo.consLocation.ConsLocationUpdateReqVO; import cn.iocoder.yudao.module.order.vo.consLocation.ConsLocationUpdateReqVO;
import cn.iocoder.yudao.module.order.vo.consTrackingRecord.ConsTrackingRecordBackVO; import cn.iocoder.yudao.module.order.vo.consTrackingRecord.ConsTrackingRecordBackVO;
import lombok.*; import lombok.*;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
import io.swagger.annotations.*; import io.swagger.annotations.*;
...@@ -306,15 +308,41 @@ public class ConsBackVO { ...@@ -306,15 +308,41 @@ public class ConsBackVO {
*/ */
private WarehouseBackVO endWarehouse; private WarehouseBackVO endWarehouse;
@ApiModelProperty("集运重量上限")
private BigDecimal consWeightLimit ;
@ApiModelProperty("集运体积上限")
private BigDecimal consVolumeLimit;
@ApiModelProperty("在库时长限制")
private Integer stockDurationLimit;
@ApiModelProperty("是否有异常") @ApiModelProperty("是否有异常")
private Boolean hasErrors; private Boolean hasErrors = false;
@ApiModelProperty("是否有退仓审批")
private Boolean hasReturnStatus = false;
@ApiModelProperty("是否有退仓审批/退仓处理状态=未处理")
private Boolean hasReturnStatus;
@ApiModelProperty("是否存在撤出订单待审批流程") @ApiModelProperty("是否存在撤出订单待审批流程")
private Boolean hasExitApproval; private Boolean hasExitApproval = false;
@ApiModelProperty("是否存在追加订单待审批流程") @ApiModelProperty("是否存在追加订单待审批流程")
private Boolean hasAddApproval; private Boolean hasAddApproval = false;
@ApiModelProperty("是否存在费用待审批流程")
private Boolean hasFeeApproval = false;
@ApiModelProperty("是否超限")
private Boolean isOverLimit = false;
@ApiModelProperty("是否超时")
private Boolean isOverTime = false;
@ApiModelProperty("是否跟进超时")
private Boolean isFollowOverTime = false;
@ApiModelProperty("特需列表")
List<ConsSpecialNeedDO> consSpecialNeeds;
} }
...@@ -25,6 +25,9 @@ ...@@ -25,6 +25,9 @@
ew_dest.title_zh as destTitleZh, ew_dest.title_zh as destTitleZh,
ew_dest.title_en as destTitleEn, ew_dest.title_en as destTitleEn,
ew_dest.title_fr as destTitleFr, ew_dest.title_fr as destTitleFr,
el.stock_duration_limit as stockDurationLimit,
el.cons_volume_limit as consVolumeLimit,
el.cons_weight_limit as consWeightLimit,
o.order_no, o.order_no,
o.status as orderStatus, o.status as orderStatus,
o.channel_id, o.channel_id,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment