Merge remote-tracking branch 'origin/master'

pull/1/head
zccbbg 2 years ago
commit 8c1e6b96e2

@ -15,16 +15,18 @@ import java.math.BigDecimal;
@Data @Data
@ApiModel(value = "sku渲染详情") @ApiModel(value = "sku渲染详情")
public class SkuViewDTO { public class SkuViewDTO {
private Long productId; private Long productId;
private Long skuId; private Long skuId;
@ApiModelProperty(value = "商品名称") @ApiModelProperty(value = "商品名称")
private String productName; private String productName;
@ApiModelProperty(value = "销售属性") @ApiModelProperty(value = "销售属性")
private String spData; private String spData;
@ApiModelProperty(value = "购买数量") @ApiModelProperty(value = "购买数量")
private Integer quantity; private Integer quantity;
@ApiModelProperty(value = "主图") @ApiModelProperty(value = "主图")
private String pic; private String pic;
@ApiModelProperty(value = "售价") @ApiModelProperty(value = "售价")
private BigDecimal price; private BigDecimal price;
@ApiModelProperty(value = "库存数")
private Integer stock;
} }

@ -62,6 +62,7 @@ import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
@ -159,6 +160,9 @@ public class H5OrderService {
if (Constants.PublishStatus.UNDERCARRIAGE.equals(product.getPublishStatus())){ if (Constants.PublishStatus.UNDERCARRIAGE.equals(product.getPublishStatus())){
throw new RuntimeException("商品" + product.getName() + "已下架"); throw new RuntimeException("商品" + product.getName() + "已下架");
} }
if (sku.getStock() < skuQuantityMap.get(sku.getId())) {
throw new RuntimeException("库存不足");
}
productTotalAmount = productTotalAmount.add(sku.getPrice().multiply(BigDecimal.valueOf(skuQuantityMap.get(sku.getId())))); productTotalAmount = productTotalAmount.add(sku.getPrice().multiply(BigDecimal.valueOf(skuQuantityMap.get(sku.getId()))));
orderTotalAmount = orderTotalAmount.add(sku.getPrice().multiply(BigDecimal.valueOf(skuQuantityMap.get(sku.getId())))); orderTotalAmount = orderTotalAmount.add(sku.getPrice().multiply(BigDecimal.valueOf(skuQuantityMap.get(sku.getId()))));
dto.setSku(sku); dto.setSku(sku);
@ -206,6 +210,10 @@ public class H5OrderService {
} }
// 保存orderItem // 保存orderItem
orderItemService.saveOrderItem(member, optTime, orderId, skuList); orderItemService.saveOrderItem(member, optTime, orderId, skuList);
skuList.forEach(item -> {
//减少sku的库存
skuMapper.updateStockById(item.getSkuId(),LocalDateTime.now(),item.getQuantity());
});
// 保存订单操作记录 // 保存订单操作记录
OrderOperateHistory orderOperateHistory = new OrderOperateHistory(); OrderOperateHistory orderOperateHistory = new OrderOperateHistory();
orderOperateHistory.setOrderId(orderId); orderOperateHistory.setOrderId(orderId);
@ -262,6 +270,9 @@ public class H5OrderService {
if (Constants.PublishStatus.UNDERCARRIAGE.equals(product.getPublishStatus())){ if (Constants.PublishStatus.UNDERCARRIAGE.equals(product.getPublishStatus())){
throw new RuntimeException("商品" + product.getName() + "已下架"); throw new RuntimeException("商品" + product.getName() + "已下架");
} }
if (sku.getStock() < quantityMap.get(sku.getId())) {
throw new RuntimeException("库存不足");
}
BigDecimal addAmount = sku.getPrice().multiply(BigDecimal.valueOf(dto.getQuantity())); BigDecimal addAmount = sku.getPrice().multiply(BigDecimal.valueOf(dto.getQuantity()));
//由于目前没有运费等数据,暂时订单总金额=商品总金额了 //由于目前没有运费等数据,暂时订单总金额=商品总金额了
productTotalAmount = productTotalAmount.add(addAmount); productTotalAmount = productTotalAmount.add(addAmount);
@ -415,6 +426,13 @@ public class H5OrderService {
if (orderList.size() < request.getIdList().size()){ if (orderList.size() < request.getIdList().size()){
throw new RuntimeException("未查询到订单信息"); throw new RuntimeException("未查询到订单信息");
} }
//查orderItem
QueryWrapper<OrderItem> qw = new QueryWrapper<>();
qw.in("order_id", request.getIdList());
List<OrderItem> orderItem = orderItemMapper.selectList(qw);
if (CollectionUtil.isEmpty(orderItem)) {
throw new RuntimeException("未查询到订单信息");
}
long count = orderList.stream().filter(it -> !Constants.H5OrderStatus.UN_PAY.equals(it.getStatus())).count(); long count = orderList.stream().filter(it -> !Constants.H5OrderStatus.UN_PAY.equals(it.getStatus())).count();
if (count > 0){ if (count > 0){
throw new RuntimeException("订单状态已更新,请刷新页面"); throw new RuntimeException("订单状态已更新,请刷新页面");
@ -434,12 +452,19 @@ public class H5OrderService {
history.setUpdateBy(userId); history.setUpdateBy(userId);
history.setUpdateTime(optDate); history.setUpdateTime(optDate);
addHistoryList.add(history); addHistoryList.add(history);
}); });
//取消订单 //取消订单
int rows = orderMapper.cancelBatch(orderList); int rows = orderMapper.cancelBatch(orderList);
if (rows < 1){ if (rows < 1){
throw new RuntimeException("更改订单状态失败"); throw new RuntimeException("更改订单状态失败");
} }
orderItem.stream().collect(Collectors.groupingBy(it->it.getSkuId())).forEach((k,v)->{
AtomicReference<Integer> totalCount = new AtomicReference<>(0);
v.forEach(it-> totalCount.updateAndGet(v1 -> v1 + it.getQuantity()));
skuMapper.updateStockById(k, optDate, -1 * totalCount.get());
});
//创建订单操作记录 //创建订单操作记录
boolean flag = orderOperateHistoryService.saveBatch(addHistoryList); boolean flag = orderOperateHistoryService.saveBatch(addHistoryList);
if (!flag){ if (!flag){

@ -19,6 +19,7 @@ import com.cyl.manager.oms.mapper.OrderOperateHistoryMapper;
import com.cyl.manager.oms.pojo.request.DealWithAftersaleRequest; import com.cyl.manager.oms.pojo.request.DealWithAftersaleRequest;
import com.cyl.manager.oms.pojo.request.ManagerAftersaleOrderRequest; import com.cyl.manager.oms.pojo.request.ManagerAftersaleOrderRequest;
import com.cyl.manager.oms.pojo.vo.*; import com.cyl.manager.oms.pojo.vo.*;
import com.cyl.manager.pms.mapper.SkuMapper;
import com.cyl.manager.ums.domain.Member; import com.cyl.manager.ums.domain.Member;
import com.cyl.manager.ums.mapper.MemberMapper; import com.cyl.manager.ums.mapper.MemberMapper;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
@ -58,6 +59,8 @@ public class AftersaleService {
@Autowired @Autowired
private OrderOperateHistoryConvert historyConvert; private OrderOperateHistoryConvert historyConvert;
@Autowired
private SkuMapper skuMapper;
/** /**
* *
@ -274,8 +277,17 @@ public class AftersaleService {
orderWrapper.set("aftersale_status", OrderRefundStatus.NO_REFUND.getType()); orderWrapper.set("aftersale_status", OrderRefundStatus.NO_REFUND.getType());
optHistory.setOrderStatus(14); optHistory.setOrderStatus(14);
}else if (ifAgree){ }else if (ifAgree){
aftersaleWrapper.set("status", AftersaleStatus.WAIT.getType()); //如果是未发货的情况下,直接增加库存
orderWrapper.set("aftersale_status", OrderRefundStatus.WAIT.getType()); if (order.getStatus() == 1) {
OrderItem orderItem = orderItemMapper.selectOne(new QueryWrapper<OrderItem>().eq("order_id", order.getId()));
skuMapper.updateStockById(orderItem.getSkuId(),LocalDateTime.now(),-1*orderItem.getQuantity());
//todo 微信直接退款
aftersaleWrapper.set("status", AftersaleStatus.SUCCESS.getType());
orderWrapper.set("aftersale_status", OrderRefundStatus.SUCCESS.getType());
} else {
aftersaleWrapper.set("status", AftersaleStatus.WAIT.getType());
orderWrapper.set("aftersale_status", OrderRefundStatus.WAIT.getType());
}
optHistory.setOrderStatus(12); optHistory.setOrderStatus(12);
} }
int rows = aftersaleMapper.update(null, aftersaleWrapper); int rows = aftersaleMapper.update(null, aftersaleWrapper);

@ -41,4 +41,8 @@ public class Sku extends BaseAudit {
@Excel(name = "商品销售属性json格式") @Excel(name = "商品销售属性json格式")
private String spData; private String spData;
@ApiModelProperty("库存数")
@Excel(name = "库存数")
private Integer stock;
} }

@ -1,8 +1,10 @@
package com.cyl.manager.pms.mapper; package com.cyl.manager.pms.mapper;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cyl.manager.pms.domain.Sku; import com.cyl.manager.pms.domain.Sku;
import org.apache.ibatis.annotations.Param;
/** /**
* skuMapper * skuMapper
@ -17,4 +19,6 @@ public interface SkuMapper extends BaseMapper<Sku> {
* @return sku * @return sku
*/ */
List<Sku> selectByEntity(Sku sku); List<Sku> selectByEntity(Sku sku);
int updateStockById(@Param("skuId")Long skuId, @Param("optDate")LocalDateTime optDate, @Param("quantity")Integer quantity);
} }

@ -28,4 +28,6 @@ public class SkuVO extends BaseAudit {
/** 商品销售属性json格式 */ /** 商品销售属性json格式 */
@Excel(name = "商品销售属性json格式") @Excel(name = "商品销售属性json格式")
private String spData; private String spData;
@Excel(name = "库存数")
private Integer stock;
} }

@ -2,7 +2,10 @@ package com.cyl.manager.pms.service;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.stream.Collectors;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.cyl.h5.pojo.vo.ProductDetail; import com.cyl.h5.pojo.vo.ProductDetail;
@ -12,6 +15,8 @@ import com.cyl.manager.pms.mapper.BrandMapper;
import com.cyl.manager.pms.mapper.SkuMapper; import com.cyl.manager.pms.mapper.SkuMapper;
import com.cyl.manager.pms.pojo.vo.ProductVO; import com.cyl.manager.pms.pojo.vo.ProductVO;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.ruoyi.common.utils.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -28,6 +33,7 @@ import org.springframework.transaction.annotation.Transactional;
* @author zcc * @author zcc
*/ */
@Service @Service
@Slf4j
public class ProductService { public class ProductService {
@Autowired @Autowired
private ProductMapper productMapper; private ProductMapper productMapper;
@ -123,19 +129,53 @@ public class ProductService {
*/ */
@Transactional @Transactional
public int update(ProductVO productVO) { public int update(ProductVO productVO) {
Product dbProduct = productMapper.selectById(productVO.getId());
List<Long> idList = productVO.getSkuList().stream().filter(it -> it.getId() != null).map(it -> it.getId()).collect(Collectors.toList());
if (dbProduct == null) {
return 0;
}
Long userId = SecurityUtils.getUserId();
Product product = convert.vo2do(productVO); Product product = convert.vo2do(productVO);
List<Sku> skuList = productVO.getSkuList(); List<Sku> skuList = productVO.getSkuList();
product.setUpdateBy(userId);
product.setUpdateTime(LocalDateTime.now());
productMapper.updateById(product); productMapper.updateById(product);
//查找库中所有的sku
Map<String,Object> map = new HashMap<>(); Map<String,Object> map = new HashMap<>();
map.put("product_id", product.getId()); map.put("product_id", product.getId());
skuMapper.deleteByMap(map); Map<Long, Sku> skuMap = skuMapper.selectByMap(map).stream().collect(Collectors.toMap(it -> it.getId(), it -> it));
if(skuList!=null){ //针对已有的进行编辑
skuList.forEach(sku -> { List<Sku> updateList = productVO.getSkuList().stream().filter(it -> it.getId() != null).collect(Collectors.toList());
if (!CollectionUtil.isEmpty(updateList)) {
log.info("共有{}个sku需要修改{}productId{}",updateList.size(), JSONUtil.toJsonStr(updateList),productVO.getId());
updateList.forEach(it->{
Sku sku = skuMap.get(it.getId());
sku.setUpdateBy(SecurityUtils.getUserId());
sku.setUpdateTime(LocalDateTime.now());
sku.setPrice(it.getPrice());
sku.setSpData(it.getSpData());
sku.setPic(it.getPic());
sku.setOutSkuId(it.getOutSkuId());
sku.setStock(it.getStock());
skuMapper.updateById(sku);
});
}
//针对没有的进行新增
List<Sku> addList = productVO.getSkuList().stream().filter(it -> it.getId() == null).collect(Collectors.toList());
if (!CollectionUtil.isEmpty(addList)) {
log.info("共有{}个sku需要新增{}productId{}",addList.size(), JSONUtil.toJsonStr(addList),productVO.getId());
addList.forEach(sku -> {
sku.setProductId(product.getId()); sku.setProductId(product.getId());
sku.setCreateTime(LocalDateTime.now()); sku.setCreateTime(LocalDateTime.now());
skuMapper.insert(sku); skuMapper.insert(sku);
}); });
} }
//删除
List<Long> deleteIds = skuMap.keySet().stream().filter(it -> !idList.contains(it)).collect(Collectors.toList());
if (!CollectionUtil.isEmpty(deleteIds)) {
log.info("共有{}个sku需要删除{}productId{}",deleteIds.size(), JSONUtil.toJsonStr(deleteIds),productVO.getId());
skuMapper.deleteBatchIds(deleteIds);
}
return 1; return 1;
} }

@ -24,6 +24,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="selectSkuVo"> <sql id="selectSkuVo">
select id, product_id, out_sku_id, price, pic, sp_data, create_by, create_time, update_by, update_time from pms_sku select id, product_id, out_sku_id, price, pic, sp_data, create_by, create_time, update_by, update_time from pms_sku
</sql> </sql>
<update id="updateStockById">
update
pms_sku
set
stock = stock - #{quantity},
update_time = #{optDate}
where id = #{skuId}
</update>
<select id="selectByEntity" parameterType="Sku" resultMap="SkuResult"> <select id="selectByEntity" parameterType="Sku" resultMap="SkuResult">
<include refid="selectSkuVo"/> <include refid="selectSkuVo"/>

@ -16950,6 +16950,8 @@ CREATE TABLE `pms_sku` (
PRIMARY KEY (`id`) USING BTREE PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 399 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sku信息' ROW_FORMAT = Dynamic; ) ENGINE = InnoDB AUTO_INCREMENT = 399 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'sku信息' ROW_FORMAT = Dynamic;
ALTER TABLE `pms_sku`
ADD COLUMN `stock` int(11) NULL COMMENT '库存' AFTER `pic`;
-- ---------------------------- -- ----------------------------
-- Table structure for pms_sku_snapshot -- Table structure for pms_sku_snapshot
-- ---------------------------- -- ----------------------------

Loading…
Cancel
Save