diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsQuoteController.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsQuoteController.java index d7abd48..31b0654 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsQuoteController.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/controller/BizLogisticsQuoteController.java @@ -68,10 +68,11 @@ public class BizLogisticsQuoteController extends BaseController { @SaCheckPermission("amz:shipmentPlan:edit") - @GetMapping("/queryWithDes/{destination}/{date}") + @GetMapping("/queryWithDes/{destination}/{date}/{shipmentId}") public TableDataInfo queryWithDes(@PathVariable("destination") @NotNull(message = "目的地不能为空") String destination, - @PathVariable("date") @NotNull(message = "日期不能为空") String date) { - return bizLogisticsQuoteService.listWithDes(destination, date); + @PathVariable("date") @NotNull(message = "日期不能为空") String date, + @PathVariable("shipmentId") @NotNull(message = "fba货件编号不能为空") String shipmentId) { + return bizLogisticsQuoteService.listWithDes(destination, date,shipmentId); } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizInquiryRequest.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizInquiryRequest.java index 1d249d9..b5b8d81 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizInquiryRequest.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizInquiryRequest.java @@ -110,5 +110,9 @@ public class BizInquiryRequest extends TenantEntity { private FbaShipmentApiResponse.Address shipToAddress; + private String type; + + private String shipmentId; + } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsQuote.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsQuote.java index 38b7b0b..28f5a72 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsQuote.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizLogisticsQuote.java @@ -119,5 +119,11 @@ public class BizLogisticsQuote extends TenantEntity { */ private String backLogisticsType; + private String type; + + private String shipmentId; + + private BigDecimal totalPrice; + } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizSendOrder.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizSendOrder.java index 8860872..96da1cc 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizSendOrder.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizSendOrder.java @@ -105,8 +105,12 @@ public class BizSendOrder extends TenantEntity { private String logisticsProviderName; - private Long logisticsProviderId; + private Long logisticsProviderId; + private String shipmentId; + @TableField(exist = false) + private String shipmentIdKey; + } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentPlan.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentPlan.java index dd95362..445dde5 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentPlan.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/BizShipmentPlan.java @@ -184,6 +184,12 @@ public class BizShipmentPlan extends TenantEntity { */ private Long sendOrderId; + @TableField(exist = false) + private String logisticsProviderName; + + @TableField(exist = false) + private String address; + } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsQuoteBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsQuoteBo.java index a7d8208..84bd9e1 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsQuoteBo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsQuoteBo.java @@ -117,6 +117,9 @@ public class BizLogisticsQuoteBo extends BaseEntity { private String backLogisticsType; + private Long totalPrice; + + } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsQuoteMostBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsQuoteMostBo.java index cd53f8a..92b966b 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsQuoteMostBo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizLogisticsQuoteMostBo.java @@ -125,4 +125,11 @@ public class BizLogisticsQuoteMostBo extends BaseEntity { private String backLogisticsType; + private String type; + + private String shipmentId; + + private BigDecimal totalPrice; + + } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipForwardBo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipForwardBo.java index 9afda91..9c439cd 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipForwardBo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/bo/BizShipForwardBo.java @@ -37,7 +37,7 @@ public class BizShipForwardBo extends BaseEntity { @NotBlank(message = "采购单号不能为空", groups = {AddGroup.class, EditGroup.class}) private String orderSn; - @NotBlank(message = "采购单号不能为空", groups = {AddGroup.class, EditGroup.class}) + @NotBlank(message = "接收方采购单号不能为空", groups = {AddGroup.class, EditGroup.class}) private String inOrderSn; /** diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizInquiryRequestVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizInquiryRequestVo.java index a7deb25..579ca1d 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizInquiryRequestVo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizInquiryRequestVo.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import org.asinkj.amz.domain.BizInquiryRequest; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import org.asinkj.amz.domain.BizSendOrder; import org.asinkj.asinking.entity.FbaShipmentApiResponse; import org.asinkj.common.excel.annotation.ExcelDictFormat; import org.asinkj.common.excel.convert.ExcelDictConvert; @@ -16,6 +17,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; +import java.util.List; /** @@ -125,6 +127,14 @@ public class BizInquiryRequestVo implements Serializable { private String customsFlag; + private String type; + + private String shipmentId; + + private List sendOrders; + + + } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsQuoteVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsQuoteVo.java index 8ef5d9e..5ea7541 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsQuoteVo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/BizLogisticsQuoteVo.java @@ -129,10 +129,14 @@ public class BizLogisticsQuoteVo implements Serializable { @ExcelProperty(value = "单位") private String unit; - private String customsFlag; + private String customsFlag; private String backLogisticsType; + private String type; + private String shipmentId; + + private Long totalPrice; } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/InquiryRequestItemVo.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/InquiryRequestItemVo.java index 705046c..b67b3d9 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/InquiryRequestItemVo.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/domain/vo/InquiryRequestItemVo.java @@ -35,7 +35,7 @@ public class InquiryRequestItemVo implements Serializable { * 目的地(存储四级行政编码,如CN310115) */ @ExcelProperty(value = "目的地", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "存=储四级行政编码,如CN310115") + @ExcelDictFormat(readConverterExp = "四个字母标识") private String destination; @@ -57,5 +57,7 @@ public class InquiryRequestItemVo implements Serializable { private FbaShipmentApiResponse.Address shipToAddress; + private String type; + } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizInquiryRequestMapper.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizInquiryRequestMapper.java index d0d8731..ec7fcdc 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizInquiryRequestMapper.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizInquiryRequestMapper.java @@ -1,5 +1,8 @@ package org.asinkj.amz.mapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import org.asinkj.amz.domain.BizInquiryRequest; import org.asinkj.amz.domain.vo.BizInquiryRequestVo; @@ -18,4 +21,15 @@ public interface BizInquiryRequestMapper extends BaseMapperPlus selectOpenAndEffectiveInquiries(@Param("currentDate") LocalDate currentDate); + + + /** + * XML 分页查询方法 + * @param page 分页参数对象 (必须放在第一位) + * @param wrapper 查询条件构造器 + */ + Page selectCustomPage( + @Param("page") Page page, + @Param(Constants.WRAPPER) Wrapper wrapper + ); } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizSendOrderMapper.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizSendOrderMapper.java index 09f4cf5..024c7fb 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizSendOrderMapper.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizSendOrderMapper.java @@ -1,9 +1,14 @@ package org.asinkj.amz.mapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.MapKey; import org.apache.ibatis.annotations.Param; +import org.asinkj.amz.domain.BizInquiryRequest; import org.asinkj.amz.domain.BizSendOrder; import org.asinkj.amz.domain.OrderWithShipment; +import org.asinkj.amz.domain.vo.BizInquiryRequestVo; import org.asinkj.amz.domain.vo.BizSendOrderVo; import org.asinkj.common.mybatis.core.mapper.BaseMapperPlus; @@ -21,4 +26,10 @@ public interface BizSendOrderMapper extends BaseMapperPlus selectOrdersWithShipmentIds( @Param("shipmentIds") Collection shipmentIds ); + + + Page selectCustomPage( + @Param("page") Page page, + @Param(Constants.WRAPPER) Wrapper wrapper + ); } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipmentPlanMapper.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipmentPlanMapper.java index aa9df74..1ba00df 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipmentPlanMapper.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/mapper/BizShipmentPlanMapper.java @@ -1,7 +1,9 @@ package org.asinkj.amz.mapper; +import org.apache.ibatis.annotations.MapKey; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.asinkj.amz.domain.BizSendOrder; import org.asinkj.amz.domain.BizShipmentPlan; import org.asinkj.amz.domain.BizShipmentPlanFileData; import org.asinkj.amz.domain.OrderShipmentRelation; @@ -10,6 +12,7 @@ import org.asinkj.common.mybatis.core.mapper.BaseMapperPlus; import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -31,4 +34,14 @@ public interface BizShipmentPlanMapper extends BaseMapperPlus findByIds(@Param("ids") Collection ids); int deleteBySendOrderShipmentPlan(@Param("shipmentPlanId") Long shipmentPlanId,@Param("sendOrderId") Long sendOrderId); + + List selectPlanIdsByRequestIds(@Param("requestIds") List requestIds); + + @MapKey("requestId") // 指定分组键 + Map> batchFindSendOrdersByPlanIds( + @Param("planIds") List planIds + ); + + + List batchGetSendOrdersByShipmentIds(List shipmentIds); } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizLogisticsQuoteService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizLogisticsQuoteService.java index 747514b..c699334 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizLogisticsQuoteService.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizLogisticsQuoteService.java @@ -92,5 +92,5 @@ public interface IBizLogisticsQuoteService { List queryQuoteWithQuoteId(Set quoteIds); - TableDataInfo listWithDes(String destination, String date); + TableDataInfo listWithDes(String destination, String date,String shipmentId); } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentPlanService.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentPlanService.java index 79cca5e..b5d18b5 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentPlanService.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/IBizShipmentPlanService.java @@ -1,6 +1,7 @@ package org.asinkj.amz.service; import jakarta.validation.constraints.NotNull; +import org.asinkj.amz.domain.BizSendOrder; import org.asinkj.amz.domain.BizShipmentPlan; import org.asinkj.amz.domain.vo.BizLogisticsQuoteVo; import org.asinkj.amz.domain.vo.BizShipmentPlanOrderVo; @@ -91,4 +92,8 @@ public interface IBizShipmentPlanService { Boolean linkByBo(BizShipmentPlanBo bo); int deleteBySendOrderShipmentPlan(Long shipmentPlanId, Long sendOrderId); + + Map> batchGetSendOrdersByRequestIds(List requestIds); + + List batchGetSendOrdersByShipmentIds(List shipmentIds); } diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizInquiryRequestServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizInquiryRequestServiceImpl.java index 617364e..a58f011 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizInquiryRequestServiceImpl.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizInquiryRequestServiceImpl.java @@ -6,23 +6,19 @@ import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson2.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; import org.asinkj.amz.domain.BizLogisticsQuote; +import org.asinkj.amz.domain.BizSendOrder; import org.asinkj.amz.domain.vo.BizLogisticsChannelVo; -import org.asinkj.amz.domain.vo.BizLogisticsOrderDetailVo; import org.asinkj.amz.domain.vo.InquiryRequestItemVo; import org.asinkj.amz.mapper.BizLogisticsQuoteMapper; import org.asinkj.amz.service.IBizInquiryBlacklistService; import org.asinkj.amz.service.IBizLogisticsChannelService; import org.asinkj.amz.service.IBizShipmentPlanService; import org.asinkj.common.core.domain.R; -import org.asinkj.common.core.exception.ServiceException; import org.asinkj.common.core.utils.MapstructUtils; import org.asinkj.common.core.utils.StringUtils; -import org.asinkj.common.excel.utils.ExcelUtil; import org.asinkj.common.mybatis.core.page.TableDataInfo; import org.asinkj.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -30,13 +26,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.asinkj.common.redis.annotation.DistributedLock; -import org.asinkj.common.redis.utils.RedisUtils; import org.asinkj.common.satoken.utils.LoginHelper; import org.asinkj.common.wp.handler.WxMessagesManager; import org.asinkj.resource.api.RemoteMessageService; import org.asinkj.system.api.RemoteUserService; import org.asinkj.utils.SerialNoGenerator; -import org.redisson.api.RLock; import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.asinkj.amz.domain.bo.BizInquiryRequestBo; @@ -46,7 +40,6 @@ import org.asinkj.amz.mapper.BizInquiryRequestMapper; import org.asinkj.amz.service.IBizInquiryRequestService; import javax.annotation.Resource; -import java.io.InputStream; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.temporal.TemporalAdjusters; @@ -96,9 +89,8 @@ public class BizInquiryRequestServiceImpl implements IBizInquiryRequestService { @DubboReference private RemoteUserService remoteUserService; - - - + @Resource + private IBizShipmentPlanService shipmentPlanService; /** @@ -122,7 +114,31 @@ public class BizInquiryRequestServiceImpl implements IBizInquiryRequestService { @Override public TableDataInfo queryPageList(BizInquiryRequestBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); +// Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + String customSqlSegment = lqw.getCustomSqlSegment(); + log.info("customSqlSegment: {}", customSqlSegment); + String sqlSegment = lqw.getSqlSegment(); + log.info("sqlSegment: {}", sqlSegment); + Page result = baseMapper.selectCustomPage(pageQuery.build(), lqw); + + List shipmentIds = result.getRecords().stream() + .map(BizInquiryRequestVo::getShipmentId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + + // 3. 单个查询获取所有发货单数据(按 shipmentId 分组) + List bizSendOrders = shipmentPlanService.batchGetSendOrdersByShipmentIds(shipmentIds); + if (CollectionUtil.isNotEmpty(bizSendOrders)) { + Map> ordersMap = bizSendOrders.stream().collect(Collectors.groupingBy(BizSendOrder::getShipmentIdKey)); + // 4. 组装发货单数据到结果对象 + + for (BizInquiryRequestVo record : result.getRecords()) { + if ("weight".equals(record.getType())) { + record.setSendOrders(ordersMap.getOrDefault(record.getShipmentId(), Collections.emptyList())); + } + } + } return TableDataInfo.build(result); } @@ -141,6 +157,7 @@ public class BizInquiryRequestServiceImpl implements IBizInquiryRequestService { private LambdaQueryWrapper buildQueryWrapper(BizInquiryRequestBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.apply("1 = 1"); lqw.eq(StringUtils.isNotBlank(bo.getInquiryNo()), BizInquiryRequest::getInquiryNo, bo.getInquiryNo()); lqw.eq(bo.getRequesterId() != null, BizInquiryRequest::getRequesterId, bo.getRequesterId()); lqw.eq(StringUtils.isNotBlank(bo.getTargetProviders()), BizInquiryRequest::getTargetProviders, bo.getTargetProviders()); @@ -160,6 +177,7 @@ public class BizInquiryRequestServiceImpl implements IBizInquiryRequestService { List bizLogisticsQuotes = logisticsQuoteMapper.selectList(queryWrapper); Set collect = bizLogisticsQuotes.stream().map(BizLogisticsQuote::getInquiryId).collect(Collectors.toSet()); lqw.notIn(CollectionUtil.isNotEmpty(collect), BizInquiryRequest::getId, collect); + lqw.orderByDesc(BizInquiryRequest::getCreateTime); return lqw; } @@ -370,6 +388,8 @@ public class BizInquiryRequestServiceImpl implements IBizInquiryRequestService { bizInquiryRequest.setCustomsFlag(request.getCustomsFlag()); bizInquiryRequest.setRequesterName(LoginHelper.getLoginUser().getNickname()); bizInquiryRequest.setInquiryNo(SerialNoGenerator.generateInquiryNo()); + bizInquiryRequest.setType(request.getType()); + bizInquiryRequest.setShipmentId(request.getShipmentId()); // 查询渠道信息 BizLogisticsChannelVo channelVo = bizLogisticsChannelService.queryById(request.getChannelId()); @@ -464,16 +484,13 @@ public class BizInquiryRequestServiceImpl implements IBizInquiryRequestService { ); } -// 查询已存在的记录 List existingList = baseMapper.selectList(wrapper); - // 将已存在的记录转为 Set 方便快速比对(假设三字段组合唯一) Set existingKeys = existingList.stream() .map(e -> e.getDestination() + "_" + e.getChannelId() + "_" + e.getQuoteDate()) .collect(Collectors.toSet()); -// 过滤掉重复的待插入数据 List filteredItems = items.stream() .filter(item -> !existingKeys.contains( item.getDestination() + "_" + item.getChannelId() + "_" + item.getQuoteDate() diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsQuoteServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsQuoteServiceImpl.java index 13ee5d4..2ff08e2 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsQuoteServiceImpl.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizLogisticsQuoteServiceImpl.java @@ -87,7 +87,7 @@ public class BizLogisticsQuoteServiceImpl implements IBizLogisticsQuoteService { // 2. 调用动态报表查询 // return baseMapper.selectDynamicReport(channels); - return baseMapper.getQuoteReport(channels,bo.getQuoteStartDate(), bo.getQuoteEndDate(),bo.getDestination()); + return baseMapper.getQuoteReport(channels, bo.getQuoteStartDate(), bo.getQuoteEndDate(), bo.getDestination()); } @Override @@ -263,6 +263,9 @@ public class BizLogisticsQuoteServiceImpl implements IBizLogisticsQuoteService { bizLogisticsQuote.setRemark(bo.getRemark()); bizLogisticsQuote.setUnit(bo.getUnit()); bizLogisticsQuote.setInquiryId(bo.getId()); + bizLogisticsQuote.setType(bo.getType()); + bizLogisticsQuote.setShipmentId(bo.getShipmentId()); + bizLogisticsQuote.setTotalPrice(bo.getTotalPrice()); bizLogisticsQuotes.add(bizLogisticsQuote); } boolean b = baseMapper.insertBatch(bizLogisticsQuotes); @@ -272,25 +275,52 @@ public class BizLogisticsQuoteServiceImpl implements IBizLogisticsQuoteService { @Override public Boolean checkPriceQuoteByBo(BizLogisticsQuoteMostBo bo) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(BizLogisticsQuote::getDestination, bo.getDestination()) - .eq(BizLogisticsQuote::getChannelName, bo.getChannelName()) - .eq(BizLogisticsQuote::getQuoteDate, bo.getQuoteEndDate()) - ; - List bizLogisticsQuotes = baseMapper.selectList(queryWrapper); - if (bizLogisticsQuotes.size() == 0) { + if ("general".equals(bo.getType())) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(BizLogisticsQuote::getDestination, bo.getDestination()) + .eq(BizLogisticsQuote::getChannelName, bo.getChannelName()) + .eq(BizLogisticsQuote::getQuoteDate, bo.getQuoteEndDate()) + ; + + + List bizLogisticsQuotes = baseMapper.selectList(queryWrapper); + if (bizLogisticsQuotes.size() == 0) { + return Boolean.TRUE; + } + BigDecimal average = bizLogisticsQuotes.stream() + .map(BizLogisticsQuote::getPrice) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .divide(new BigDecimal(bizLogisticsQuotes.size()), 2, RoundingMode.HALF_UP); + + if (average.compareTo(bo.getPrice()) < 0) { + return Boolean.FALSE; + } + return Boolean.TRUE; + } else { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(BizLogisticsQuote::getDestination, bo.getDestination()) + .eq(BizLogisticsQuote::getChannelName, bo.getChannelName()) + .eq(BizLogisticsQuote::getQuoteDate, bo.getQuoteEndDate()) + ; + + queryWrapper.eq(BizLogisticsQuote::getShipmentId, bo.getShipmentId()); + + List bizLogisticsQuotes = baseMapper.selectList(queryWrapper); + if (bizLogisticsQuotes.size() == 0) { + return Boolean.TRUE; + } + BigDecimal average = bizLogisticsQuotes.stream() + .map(BizLogisticsQuote::getTotalPrice) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .divide(new BigDecimal(bizLogisticsQuotes.size()), 2, RoundingMode.HALF_UP); + + if (average.compareTo(bo.getTotalPrice()) < 0) { + return Boolean.FALSE; + } return Boolean.TRUE; } - BigDecimal average = bizLogisticsQuotes.stream() - .map(BizLogisticsQuote::getPrice) - .filter(Objects::nonNull) - .reduce(BigDecimal.ZERO, BigDecimal::add) - .divide(new BigDecimal(bizLogisticsQuotes.size()), 2, RoundingMode.HALF_UP); - - if (average.compareTo(bo.getPrice()) < 0) { - return Boolean.FALSE; - } - return Boolean.TRUE; } @@ -346,11 +376,11 @@ public class BizLogisticsQuoteServiceImpl implements IBizLogisticsQuoteService { } @Override - public TableDataInfo listWithDes(String destination, String date) { + public TableDataInfo listWithDes(String destination, String date, String shipmentId) { if (StringUtils.isNotBlank(destination)) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(BizLogisticsQuote::getDestination, destination); - + queryWrapper.and(wp -> wp.eq(BizLogisticsQuote::getType, "general").or().eq(BizLogisticsQuote::getType, "weight").eq(BizLogisticsQuote::getShipmentId, shipmentId)); queryWrapper.eq(BizLogisticsQuote::getQuoteDate, date); return TableDataInfo.build(baseMapper.selectVoList(queryWrapper)); diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizSendOrderServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizSendOrderServiceImpl.java index 62a3042..ab2cc1c 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizSendOrderServiceImpl.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizSendOrderServiceImpl.java @@ -86,7 +86,7 @@ public class BizSendOrderServiceImpl implements IBizSendOrderService { @Override public TableDataInfo queryPageList(BizSendOrderBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + Page result = baseMapper.selectCustomPage(pageQuery.build(), lqw); List records = result.getRecords(); Set shipmentIds = records.stream().map(BizSendOrderVo::getShipmentId).collect(Collectors.toSet()); Set ids = records.stream().map(BizSendOrderVo::getId).collect(Collectors.toSet()); diff --git a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentPlanServiceImpl.java b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentPlanServiceImpl.java index 28e59fa..2d91eb8 100644 --- a/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentPlanServiceImpl.java +++ b/asinkj-biz/asinkj-amz/src/main/java/org/asinkj/amz/service/impl/BizShipmentPlanServiceImpl.java @@ -9,6 +9,7 @@ import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; +import org.apache.ibatis.annotations.MapKey; import org.asinkj.amz.domain.*; import org.asinkj.amz.domain.bo.SysAmazonStoreBo; import org.asinkj.amz.domain.vo.*; @@ -495,6 +496,31 @@ public class BizShipmentPlanServiceImpl implements IBizShipmentPlanService { return baseMapper.deleteBySendOrderShipmentPlan(shipmentPlanId, sendOrderId); } + @Override + public Map> batchGetSendOrdersByRequestIds(List requestIds) { + if (CollectionUtil.isEmpty(requestIds)) { + return Collections.emptyMap(); + } + + // 1. 查询所有关联的货运计划ID + List planIds = baseMapper.selectPlanIdsByRequestIds(requestIds); + + // 2. 通过货运计划ID批量获取发货单 + if (!CollectionUtil.isEmpty(planIds)) { + return baseMapper.batchFindSendOrdersByPlanIds(planIds); + } + + return Collections.emptyMap(); + } + + @Override + public List batchGetSendOrdersByShipmentIds(List shipmentIds) { + if (CollectionUtil.isEmpty(shipmentIds)) { + return null; + } + return baseMapper.batchGetSendOrdersByShipmentIds(shipmentIds); + } + private void checkData(List bizShipmentPlanFileDataList) { boolean isAllSame = bizShipmentPlanFileDataList.stream() .map(BizShipmentPlanFileData::getShipmentId) diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizInquiryRequestMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizInquiryRequestMapper.xml index 93c68f5..41d6c2a 100644 --- a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizInquiryRequestMapper.xml +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizInquiryRequestMapper.xml @@ -10,4 +10,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND del_flag = '0' AND #{currentDate} = deadline::date + diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizSendOrderMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizSendOrderMapper.xml index 5caeb43..b0cc403 100644 --- a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizSendOrderMapper.xml +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizSendOrderMapper.xml @@ -40,6 +40,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{id} + diff --git a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentPlanMapper.xml b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentPlanMapper.xml index d8663b5..d55b20f 100644 --- a/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentPlanMapper.xml +++ b/asinkj-biz/asinkj-amz/src/main/resources/mapper/amz/BizShipmentPlanMapper.xml @@ -73,6 +73,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + @@ -101,46 +103,50 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + SELECT DISTINCT plan.id + FROM biz_shipment_plan plan + WHERE plan.shipment_id IN + + #{id} + + + + + + + diff --git a/asinkj-common/asinkj-common-core/pom.xml b/asinkj-common/asinkj-common-core/pom.xml index 6de42d2..cc49303 100644 --- a/asinkj-common/asinkj-common-core/pom.xml +++ b/asinkj-common/asinkj-common-core/pom.xml @@ -74,7 +74,7 @@ org.projectlombok lombok - provided + diff --git a/asinkj-common/asinkj-common-mybatis/src/main/java/org/asinkj/common/mybatis/config/MybatisPlusConfiguration.java b/asinkj-common/asinkj-common-mybatis/src/main/java/org/asinkj/common/mybatis/config/MybatisPlusConfiguration.java index 6f82557..1c0f355 100644 --- a/asinkj-common/asinkj-common-mybatis/src/main/java/org/asinkj/common/mybatis/config/MybatisPlusConfiguration.java +++ b/asinkj-common/asinkj-common-mybatis/src/main/java/org/asinkj/common/mybatis/config/MybatisPlusConfiguration.java @@ -5,9 +5,15 @@ import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.session.ResultHandler; +import org.apache.ibatis.session.RowBounds; import org.asinkj.common.core.factory.YmlPropertySourceFactory; import org.asinkj.common.core.utils.SpringUtils; import org.asinkj.common.mybatis.handler.InjectionMetaObjectHandler; @@ -21,6 +27,8 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.PropertySource; import org.springframework.transaction.annotation.EnableTransactionManagement; +import java.lang.reflect.Field; + /** * mybatis-plus配置类(下方注释有插件介绍) * @@ -47,9 +55,40 @@ public class MybatisPlusConfiguration { interceptor.addInnerInterceptor(paginationInnerInterceptor()); // 乐观锁插件 interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor()); +// interceptor.addInnerInterceptor(new EmptyWhereInterceptor()); return interceptor; } + // 自定义拦截器实现 + public class EmptyWhereInterceptor implements InnerInterceptor { + private static final Field SQL_FIELD; + + static { + try { + SQL_FIELD = BoundSql.class.getDeclaredField("sql"); + SQL_FIELD.setAccessible(true); + } catch (NoSuchFieldException e) { + throw new RuntimeException("反射获取sql字段失败", e); + } + } + + @Override + public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, + RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) { + String sql = boundSql.getSql(); + if (sql != null && sql.contains("WHERE") && + !sql.matches("(?is).*\\bWHERE\\s+[^\\s].*")) { + try { + // 通过反射修改原始SQL + SQL_FIELD.set(boundSql, sql.replace("WHERE", "WHERE 1 = 1 AND")); + } catch (IllegalAccessException e) { + // 安全处理异常 + System.err.println("SQL修改失败: " + e.getMessage()); + } + } + } + } + /** * 数据权限拦截器 */