Commit 7514867191af462132fef7fa0ef4211e6fe7ae07

Authored by fengliang
1 parent b995977e

update:效验购物车

etrade-order/src/main/java/com/diligrp/etrade/order/dao/ShopCartMessageMapper.java
... ... @@ -38,4 +38,7 @@ public interface ShopCartMessageMapper extends MybatisMapperSupport {
38 38 * @return
39 39 */
40 40 List<Long> findCartIdByMessageIds(ShopCartDto shopCartDto);
  41 +
  42 + /** 查询并锁定数据 */
  43 + List<ShopCartMessage> selectAndLockByIds(List<Long> messages);
41 44 }
42 45 \ No newline at end of file
... ...
etrade-order/src/main/java/com/diligrp/etrade/order/domain/ProductDto.java
... ... @@ -72,6 +72,9 @@ public class ProductDto {
72 72  
73 73 private String productUnit;
74 74  
  75 + /** 购物车商品Id */
  76 + private Long shopCertMessageId;
  77 +
75 78 public String getCode() {
76 79 return code;
77 80 }
... ... @@ -231,4 +234,12 @@ public class ProductDto {
231 234 public void setProductUnit(String productUnit) {
232 235 this.productUnit = productUnit;
233 236 }
  237 +
  238 + public Long getShopCertMessageId() {
  239 + return shopCertMessageId;
  240 + }
  241 +
  242 + public void setShopCertMessageId(Long shopCertMessageId) {
  243 + this.shopCertMessageId = shopCertMessageId;
  244 + }
234 245 }
... ...
etrade-order/src/main/java/com/diligrp/etrade/order/service/IShopCartMessageService.java
... ... @@ -31,4 +31,7 @@ public interface IShopCartMessageService {
31 31 * @return
32 32 */
33 33 List<Long> findCartIdByMessageIds(ShopCartDto shopCartDto);
  34 +
  35 + /** 查询并上锁 */
  36 + List<ShopCartMessage> selectByIds(List<Long> messages);
34 37 }
... ...
etrade-order/src/main/java/com/diligrp/etrade/order/service/impl/OrderServiceImpl.java
... ... @@ -62,6 +62,7 @@ import java.math.RoundingMode;
62 62 import java.time.Duration;
63 63 import java.time.LocalDateTime;
64 64 import java.util.*;
  65 +import java.util.stream.Collectors;
65 66  
66 67 /**
67 68 * 订单主单服务实现
... ... @@ -123,6 +124,12 @@ public class OrderServiceImpl implements OrderService {
123 124 @Resource
124 125 private BasicDataConfigRpc basicDataConfigRpc;
125 126  
  127 + @Resource
  128 + private IShopCartMessageService shopCartMessageService;
  129 +
  130 + @Resource
  131 + private IShopCartService shopCartService;
  132 +
126 133 @Transactional
127 134 @Override
128 135 public Order createOrder(OrderCreateDto orderCreateDto, Integer orderType,Boolean transportFeeFlag) {
... ... @@ -1385,7 +1392,18 @@ public class OrderServiceImpl implements OrderService {
1385 1392 @Transactional(rollbackFor = Exception.class)
1386 1393 public List<Order> createMultipleOrder(MultipleOrderDto multipleOrderDto, Integer codeInteger) {
1387 1394 List<Order> orders = new ArrayList<>();
1388   - Map<Long,OrderCreateDto> orderCreateDtos = buildOrdersDto(multipleOrderDto);
  1395 + //检测购物车是否存在数据
  1396 + List<Long> messages = multipleOrderDto.getProductDtoList().stream().map(ProductDto::getShopCertMessageId).toList();
  1397 + List<ShopCartMessage> shopCartMessagesIds = shopCartMessageService.selectByIds(messages);
  1398 + if(shopCartMessagesIds != null){
  1399 + Integer size = shopCartMessagesIds.size();
  1400 + if(!size.equals(messages.size())){
  1401 + throw new OrderException(OrderErrorCode.PARAM_ERROR,"购物车数据已变更请刷新后重试");
  1402 + }
  1403 + }else{
  1404 + throw new OrderException(OrderErrorCode.PARAM_ERROR,"购物车数据已变更请刷新后重试");
  1405 + }
  1406 + Map<Long,OrderCreateDto> orderCreateDtos = buildOrdersDto(multipleOrderDto,shopCartMessagesIds);
1389 1407 boolean first = true;
1390 1408 for(Long shopId :orderCreateDtos.keySet()){
1391 1409 if(first){
... ... @@ -1398,6 +1416,9 @@ public class OrderServiceImpl implements OrderService {
1398 1416 orders.add(order);
1399 1417 }
1400 1418 }
  1419 + ShopCartDto shopCartDto = new ShopCartDto();
  1420 + shopCartDto.setIds(messages);
  1421 + shopCartService.deleteShopCartMessageList(shopCartDto);
1401 1422 return orders;
1402 1423 }
1403 1424  
... ... @@ -1497,11 +1518,19 @@ public class OrderServiceImpl implements OrderService {
1497 1518 * @param multipleOrderDto
1498 1519 * @return
1499 1520 */
1500   - private Map<Long,OrderCreateDto> buildOrdersDto(MultipleOrderDto multipleOrderDto) {
  1521 + private Map<Long,OrderCreateDto> buildOrdersDto(MultipleOrderDto multipleOrderDto,List<ShopCartMessage> messages) {
1501 1522 Map<Long,OrderCreateDto> orderCreateDtoMap = new HashMap<>();
1502 1523 BigDecimal totleAmount = new BigDecimal(0).setScale(2, RoundingMode.HALF_UP);
1503 1524 Long tempShopid = 0L;
1504 1525 for (ProductDto productDto : multipleOrderDto.getProductDtoList()){
  1526 + for(ShopCartMessage shopCartMessage : messages){
  1527 + if(shopCartMessage.getId().equals(productDto.getShopCertMessageId())){
  1528 + Long wight= productDto.getProductWeight().multiply(NumberTransform.ONE_HUNDERD).longValue();
  1529 + if(wight.equals(shopCartMessage.getWeight())){
  1530 + throw new OrderException(OrderErrorCode.PARAM_ERROR,productDto.getProductName()+"的数量已发生变更,请刷新后重试");
  1531 + }
  1532 + }
  1533 + }
1505 1534 OrderCreateDto orderCreateDto = orderCreateDtoMap.get(productDto.getShopId());
1506 1535 if(orderCreateDto == null){
1507 1536 orderCreateDto = new OrderCreateDto();
... ... @@ -1535,6 +1564,26 @@ public class OrderServiceImpl implements OrderService {
1535 1564  
1536 1565 tempShopid = productDto.getShopId();
1537 1566 }
  1567 + //配送情况增加计算运费
  1568 + if(multipleOrderDto.getAchieveType().equals(OrderAchieveType.SELLER_DELIVERY.getCodeInteger())){
  1569 + ConfigQueryDto query = new ConfigQueryDto();
  1570 + query.setType("TransportFee");
  1571 + query.setMarketId(multipleOrderDto.getMarketId());
  1572 + BaseOutput<List<ConfigDto>> listBaseOutput = basicDataConfigRpc.queryAll(query);
  1573 + Long transportFee = multipleOrderDto.getTransportFee().multiply(NumberTransform.ONE_HUNDERD).longValue();
  1574 + Long transportFeeConfig = 0L;
  1575 + if("200".equals(listBaseOutput.getCode())){
  1576 + List<ConfigDto> configDtos = listBaseOutput.getData();
  1577 + if(configDtos!=null&&configDtos.size()>0) {
  1578 + ConfigDto configDto = configDtos.get(0);
  1579 + transportFeeConfig = Long.parseLong(configDto.getValue());
  1580 + }
  1581 + }
  1582 + if(!transportFee.equals(transportFeeConfig)){
  1583 + throw new OrderException(OrderErrorCode.PARAM_ERROR,"运费与设置不一致,请刷新后重试");
  1584 + }
  1585 + totleAmount.add(multipleOrderDto.getTransportFee());
  1586 + }
1538 1587 //订单总价,与订单总重效验
1539 1588 if(!(multipleOrderDto.getTotleAmount().compareTo(totleAmount)==0)){
1540 1589 throw new OrderException(OrderErrorCode.PARAM_ERROR,"商品交易总价计算异常");
... ...
etrade-order/src/main/java/com/diligrp/etrade/order/service/impl/ShopCartMessageServiceImpl.java
... ... @@ -201,4 +201,9 @@ public class ShopCartMessageServiceImpl implements IShopCartMessageService {
201 201 public List<Long> findCartIdByMessageIds(ShopCartDto shopCartDto) {
202 202 return shopCartMessageMapper.findCartIdByMessageIds(shopCartDto);
203 203 }
  204 +
  205 + @Override
  206 + public List<ShopCartMessage> selectByIds(List<Long> messages) {
  207 + return shopCartMessageMapper.selectAndLockByIds(messages);
  208 + }
204 209 }
... ...
etrade-order/src/main/resources/com/diligrp/etrade/dao/mapper/shopCart/ShopCartMessageMapper.xml
... ... @@ -104,6 +104,18 @@
104 104 </where>
105 105 group by shop_cart_id
106 106 </select>
  107 + <select id="selectAndLockByIds" resultType="com.diligrp.etrade.order.model.ShopCartMessage">
  108 + select
  109 + id,shop_cart_id,market_id,product_id,weight,`type`,product_name
  110 + from shop_cart_message
  111 + <where>
  112 + id in
  113 + <foreach collection="ids" item="item" open="(" separator="," close=")">
  114 + #{item}
  115 + </foreach>
  116 + </where>
  117 + for update
  118 + </select>
107 119 <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
108 120 delete
109 121 from shop_cart_message
... ...