Commit 8015bd3f authored by shiyu's avatar shiyu

首页新增折扣商品

parent df033588
...@@ -90,6 +90,7 @@ public class DistributionEnum { ...@@ -90,6 +90,7 @@ public class DistributionEnum {
FIXED_PRICE(1, "一口价"), FIXED_PRICE(1, "一口价"),
AUCTION(2, "竞拍"), AUCTION(2, "竞拍"),
COLLECT(3, "藏品"), COLLECT(3, "藏品"),
DISCOUNT(4, "折扣品"),
; ;
private int code; private int code;
......
...@@ -267,4 +267,9 @@ public class SupplierItemVo implements Entity { ...@@ -267,4 +267,9 @@ public class SupplierItemVo implements Entity {
private String statusName; private String statusName;
/**
* 是否已经有折扣订单
*/
private Boolean isHasDiscountOrder;
} }
...@@ -52,6 +52,14 @@ public interface DistributionOrderDao { ...@@ -52,6 +52,14 @@ public interface DistributionOrderDao {
List<DistributionOrder> findByBuyerId(long buyerId); List<DistributionOrder> findByBuyerId(long buyerId);
/**
* 根据买家id查询折扣订单
* @param buyerId
* @return
*/
List<DistributionOrder> findByBuyerId(long buyerId, int type, Date startTime, Date endTime);
/** /**
* 根据买家id查询最近一次购买记录 * 根据买家id查询最近一次购买记录
* @param buyerId * @param buyerId
......
...@@ -124,7 +124,7 @@ public class SupplierItemRequestDto extends BaseRequestDto implements Entity { ...@@ -124,7 +124,7 @@ public class SupplierItemRequestDto extends BaseRequestDto implements Entity {
private String rebate; private String rebate;
/** /**
* 商品类型1一口价2竞拍3用户上传 * 商品类型1一口价2竞拍3用户上传4折扣商品
*/ */
private Integer type; private Integer type;
......
...@@ -61,6 +61,21 @@ public class DistributionOrderDaoImpl implements DistributionOrderDao { ...@@ -61,6 +61,21 @@ public class DistributionOrderDaoImpl implements DistributionOrderDao {
return distributionOrderMapper.selectByExample(example); return distributionOrderMapper.selectByExample(example);
} }
@Override
public List<DistributionOrder> findByBuyerId(long buyerId, int type, Date startTime, Date endTime) {
DistributionOrderExample example = new DistributionOrderExample();
DistributionOrderExample.Criteria criteria = example.createCriteria();
criteria.andBuyerIdEqualTo(buyerId);
criteria.andTypeEqualTo(type);
criteria.andCreateTimeGreaterThanOrEqualTo(startTime);
criteria.andCreateTimeLessThanOrEqualTo(endTime);
//排除已取消的订单
criteria.andStateNotEqualTo(101);
return distributionOrderMapper.selectByExample(example);
}
@Override @Override
public DistributionOrder findLastedByBuyerId(long buyerId) { public DistributionOrder findLastedByBuyerId(long buyerId) {
DistributionOrderExample example = new DistributionOrderExample(); DistributionOrderExample example = new DistributionOrderExample();
......
...@@ -165,6 +165,12 @@ public class WxPayCallbackController { ...@@ -165,6 +165,12 @@ public class WxPayCallbackController {
if (!updateResult.getSuccess()) { if (!updateResult.getSuccess()) {
return JsonUtils.from(returnMap); return JsonUtils.from(returnMap);
} }
} else if (distributionOrder.getType() == DistributionEnum.DistributionTypeEnum.DISCOUNT.getCode()) {
//折扣订单
Result updateResult = handleOrderOfDiscount(transaction);
if (!updateResult.getSuccess()) {
return JsonUtils.from(returnMap);
}
} }
} }
} }
...@@ -357,6 +363,39 @@ public class WxPayCallbackController { ...@@ -357,6 +363,39 @@ public class WxPayCallbackController {
/**
* 更新折扣订单状态
* @return
*/
public Result handleOrderOfDiscount(Transaction transaction) {
try {
//商户订单号,分销订单号
String distributionOrderId = transaction.getOutTradeNo();
//微信支付交易id
String transactionId = transaction.getTransactionId();
//支付成功时间
String payTime = transaction.getSuccessTime();
//支付成功,更新订单状态为待发货
DistributionOrder distributionOrderDto = new DistributionOrder();
distributionOrderDto.setDistributionOrderId(distributionOrderId);
distributionOrderDto.setTransactionId(transactionId);
distributionOrderDto.setPayTime(TimeUtil.wxTimeConvertToDate(payTime));
distributionOrderDto.setState(DistributionEnum.DistributionOrderStateEnum.PRE_SEND.getCode());
distributionOrderDao.update(distributionOrderDto);
DistributionOrder distributionOrder = distributionOrderDao.findById(distributionOrderId);
//更新库存
supplierItemService.reduceStock(distributionOrder.getItemId(), distributionOrder.getItemNum());
logger.info(">>>>>>>>>>>> 折扣订单,微信支付回调通知处理成功,更新订单状态和商品库存 <<<<<<<<<<<<");
return Result.success();
} catch (Exception e) {
logger.error(">>>>>>>>>>>> 折扣订单,微信支付回调通知处理失败 error :{}", e);
}
return Result.failed();
}
/** /**
* 获取请求体 * 获取请求体
* *
......
...@@ -211,6 +211,7 @@ public class UserServiceImpl implements UserService { ...@@ -211,6 +211,7 @@ public class UserServiceImpl implements UserService {
if (shopWhiteListDao.isExisted(dto.getUserId())) { if (shopWhiteListDao.isExisted(dto.getUserId())) {
ShopWhiteList shopWhiteList = shopWhiteListDao.findByUserId(dto.getUserId()); ShopWhiteList shopWhiteList = shopWhiteListDao.findByUserId(dto.getUserId());
result.put("isShop", true); result.put("isShop", true);
result.put("isCollector", true);
result.put("shopId", shopWhiteList.getShopId() == null ? dto.getUserId() : shopWhiteList.getShopId()); result.put("shopId", shopWhiteList.getShopId() == null ? dto.getUserId() : shopWhiteList.getShopId());
userLevel = UserEnum.LevelEnum.DISTRIBUTOR.getCode(); userLevel = UserEnum.LevelEnum.DISTRIBUTOR.getCode();
if (collectorWhiteListFlag) { if (collectorWhiteListFlag) {
...@@ -223,6 +224,7 @@ public class UserServiceImpl implements UserService { ...@@ -223,6 +224,7 @@ public class UserServiceImpl implements UserService {
ShopDTO shopDTO = cloudServerResponse.getResult(); ShopDTO shopDTO = cloudServerResponse.getResult();
if (shopDTO != null && !ObjectUtils.isEmpty(shopDTO.getShopId()) && shopDTO.getPayStatus() == 1 && shopDTO.getCheckStatus() == 1 && shopDTO.getType() == 4) { if (shopDTO != null && !ObjectUtils.isEmpty(shopDTO.getShopId()) && shopDTO.getPayStatus() == 1 && shopDTO.getCheckStatus() == 1 && shopDTO.getType() == 4) {
result.put("isShop", true); result.put("isShop", true);
result.put("isCollector", true);
result.put("shopId", shopDTO.getShopId()); result.put("shopId", shopDTO.getShopId());
//新商家登录,在表中记录 //新商家登录,在表中记录
ShopWhiteList shopWhiteList = new ShopWhiteList(); ShopWhiteList shopWhiteList = new ShopWhiteList();
...@@ -259,10 +261,12 @@ public class UserServiceImpl implements UserService { ...@@ -259,10 +261,12 @@ public class UserServiceImpl implements UserService {
String userKey = MessageFormat.format(CacheCodeConstants.USER_INFO_KEY, user.getId()); String userKey = MessageFormat.format(CacheCodeConstants.USER_INFO_KEY, user.getId());
redisUtil.set(userKey, user, 2 * 60 * 60); redisUtil.set(userKey, user, 2 * 60 * 60);
//判断用户是否在藏家白名单 //判断用户是否在藏家白名单
if (collectorWhiteListFlag) { if (collectorWhiteListFlag ) {
result.put("isCollector", true); result.put("isCollector", true);
} else { } else {
result.put("isCollector", false); if (!(Boolean) result.get("isShop")) {
result.put("isCollector", false);
}
} }
//返回用户信息 //返回用户信息
user = userDao.queryById(dto.getUserId()); user = userDao.queryById(dto.getUserId());
......
package com.wwdz.ch.wx.impl.distribution; package com.wwdz.ch.wx.impl.distribution;
import cn.hutool.core.date.DateUtil;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.wechat.pay.java.service.refund.model.Refund; import com.wechat.pay.java.service.refund.model.Refund;
import com.wechat.pay.java.service.refund.model.Status; import com.wechat.pay.java.service.refund.model.Status;
...@@ -121,6 +122,9 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -121,6 +122,9 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
@Override @Override
public Result createDistributionOrder(DistributionOrderRequestDto dto) { public Result createDistributionOrder(DistributionOrderRequestDto dto) {
try { try {
if (dto.getType() == DistributionEnum.DistributionTypeEnum.DISCOUNT.getCode()) {
return createDiscountOrder(dto);
}
String shareRecordId = dto.getShareRecordId(); String shareRecordId = dto.getShareRecordId();
//查询分享记录详细信息 //查询分享记录详细信息
DistributorShareRecord distributorShareRecord = distributorShareRecordDao.findById(shareRecordId); DistributorShareRecord distributorShareRecord = distributorShareRecordDao.findById(shareRecordId);
...@@ -1163,4 +1167,64 @@ public class DistributionOrderServiceImpl implements DistributionOrderService { ...@@ -1163,4 +1167,64 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
} }
return Result.failed(); return Result.failed();
} }
@Transactional
public Result createDiscountOrder(DistributionOrderRequestDto dto) {
try {
//查询商品信息,检查商品库存
SupplierItem supplierItem = supplierItemDao.findById(dto.getItemId());
int stock = supplierItem.getStock();
if (stock <= 0) {
return Result.failed("商品库存不足");
}
//查询购买者历史购买记录,折扣商品每人每天只能购买一单
Date now = new Date();
Date todayStartTime = DateUtil.beginOfDay(now);
Date todayEndTime = DateUtil.endOfDay(now);
List<DistributionOrder> distributionOrders = distributionOrderDao.findByBuyerId(dto.getBuyerId(), DistributionEnum.DistributionTypeEnum.DISCOUNT.getCode(), todayStartTime, todayEndTime);
if (!CollectionUtils.isEmpty(distributionOrders)) {
return Result.failed("折扣商品每人每天限购一单");
}
String distributionOrderId = IdUtils.getOrderNumber(DISTRIBUTION_ORDER_PREFIX);
DistributionOrderRequestDto prePayDto = new DistributionOrderRequestDto();
prePayDto.setDistributionOrderId(distributionOrderId);
prePayDto.setAmount(String.valueOf(supplierItem.getDistributionPrice()));
prePayDto.setBuyerOpenid(dto.getBuyerOpenid());
prePayDto.setItemName(supplierItem.getName());
Result prePayResult = wxPayServiceApi.createPrepareOrder(prePayDto);
if (!prePayResult.getSuccess()) {
return Result.failed("预下单失败");
}
String prepayId = (String) prePayResult.getData();
DistributionOrder distributionOrder = new DistributionOrder();
distributionOrder.setItemId(supplierItem.getId());
distributionOrder.setItemNum(1);
distributionOrder.setShareRecordId("DA" + CommConsts.SYSTEM_ACCOUNT);
distributionOrder.setDistributionOrderId(distributionOrderId);
distributionOrder.setPrepayId(prepayId);
distributionOrder.setBuyerId(dto.getBuyerId());
distributionOrder.setBuyerOpenid(dto.getBuyerOpenid());
distributionOrder.setShopId(CommConsts.SYSTEM_ACCOUNT);
distributionOrder.setSellerId(CommConsts.SYSTEM_ACCOUNT);
distributionOrder.setAmount(supplierItem.getDistributionPrice());
distributionOrder.setAddressId(dto.getAddressId());
distributionOrder.setReceiverAddress(dto.getReceiverAddress());
distributionOrder.setReceiverName(dto.getReceiverName());
distributionOrder.setReceiverPhone(dto.getReceiverPhone());
distributionOrder.setCreateTime(new Date());
distributionOrder.setUpdateTime(new Date());
distributionOrder.setType(DistributionEnum.DistributionTypeEnum.DISCOUNT.getCode());
distributionOrder.setState(DistributionEnum.DistributionOrderStateEnum.PRE_PAY.getCode());
distributionOrderDao.insert(distributionOrder);
Map<String, String> map = new HashMap<>();
map.put("distributionOrderId", distributionOrderId);
map.put("prepayId", prepayId);
return Result.success(map);
} catch (Exception e) {
logger.error("创建折扣商品订单失败 error : {}", e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
return Result.failed("创建折扣商品订单失败");
}
} }
package com.wwdz.ch.wx.impl.distribution; package com.wwdz.ch.wx.impl.distribution;
import cn.hutool.core.date.DateUtil;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.wwdz.ch.core.consts.*; import com.wwdz.ch.core.consts.*;
import com.wwdz.ch.core.storage.QiniuStorage; import com.wwdz.ch.core.storage.QiniuStorage;
...@@ -220,30 +221,42 @@ public class SupplierItemServiceImpl implements SupplierItemService { ...@@ -220,30 +221,42 @@ public class SupplierItemServiceImpl implements SupplierItemService {
} }
} }
} }
//用户点击链接进入详情页需要记录 //用户点击链接进入详情页需要记录
if (!dto.getIsShop()) { //排除折扣商品
supplierItemVo.setSalePrice(PriceUtil.convertPriceFenToYuan(distributorShareRecord.getPrice())); if (dto.getType() != DistributionEnum.DistributionTypeEnum.DISCOUNT.getCode()) {
} else { if (!dto.getIsShop()) {
//店家进入详情,需要判断是否购买过样品 supplierItemVo.setSalePrice(PriceUtil.convertPriceFenToYuan(distributorShareRecord.getPrice()));
if (distributionOrderDao.isBuyItem(dto.getUserId(), itemId)) {
supplierItemVo.setShopBought(true);
} else { } else {
supplierItemVo.setShopBought(false); //店家进入详情,需要判断是否购买过样品
if (distributionOrderDao.isBuyItem(dto.getUserId(), itemId)) {
supplierItemVo.setShopBought(true);
} else {
supplierItemVo.setShopBought(false);
}
//判断商家是否已经分享过
DistributorShareRecord shareRecord = distributorShareRecordDao.findItemShareRecordByDistributorId(dto.getUserId(), itemId);
if (shareRecord != null && StringUtils.hasLength(shareRecord.getShareId())) {
supplierItemVo.setIsShared(true);
} else {
supplierItemVo.setIsShared(false);
}
//计算商家自购价
BigDecimal bigDecimal = new BigDecimal(PriceUtil.convertPriceFenToYuan(supplierItem.getDistributionPrice())).multiply(supplierItem.getRebate()).divide(new BigDecimal("100"));
BigDecimal buyPrice = new BigDecimal(PriceUtil.convertPriceFenToYuan(supplierItem.getDistributionPrice())).subtract(bigDecimal).setScale(2, BigDecimal.ROUND_UP);
supplierItemVo.setSelfBuyPrice(buyPrice.toPlainString());
} }
//判断商家是否已经分享过 } else {
DistributorShareRecord shareRecord = distributorShareRecordDao.findItemShareRecordByDistributorId(dto.getUserId(), itemId); //判断当前用户今天是否已经购买过折扣商品
if (shareRecord != null && StringUtils.hasLength(shareRecord.getShareId())) { Date now = new Date();
supplierItemVo.setIsShared(true); Date todayStartTime = DateUtil.beginOfDay(now);
Date todayEndTime = DateUtil.endOfDay(now);
List<DistributionOrder> distributionOrders = distributionOrderDao.findByBuyerId(dto.getUserId(), DistributionEnum.DistributionTypeEnum.DISCOUNT.getCode(), todayStartTime, todayEndTime);
if (CollectionUtils.isEmpty(distributionOrders)) {
supplierItemVo.setIsHasDiscountOrder(false);
} else { } else {
supplierItemVo.setIsShared(false); supplierItemVo.setIsHasDiscountOrder(true);
} }
//计算商家自购价
BigDecimal bigDecimal = new BigDecimal(PriceUtil.convertPriceFenToYuan(supplierItem.getDistributionPrice())).multiply(supplierItem.getRebate()).divide(new BigDecimal("100"));
BigDecimal buyPrice = new BigDecimal(PriceUtil.convertPriceFenToYuan(supplierItem.getDistributionPrice())).subtract(bigDecimal).setScale(2,BigDecimal.ROUND_UP);
supplierItemVo.setSelfBuyPrice(buyPrice.toPlainString());
} }
EntityMapper.copyAttribute(supplierItem, supplierItemVo); EntityMapper.copyAttribute(supplierItem, supplierItemVo);
supplierItemVo.setItemId(supplierItem.getId()); supplierItemVo.setItemId(supplierItem.getId());
supplierItemVo.setSupplyPrice(PriceUtil.convertPriceFenToYuan(supplierItem.getSupplyPrice())); supplierItemVo.setSupplyPrice(PriceUtil.convertPriceFenToYuan(supplierItem.getSupplyPrice()));
...@@ -260,6 +273,32 @@ public class SupplierItemServiceImpl implements SupplierItemService { ...@@ -260,6 +273,32 @@ public class SupplierItemServiceImpl implements SupplierItemService {
} }
@Override
public Result findDiscountList(SupplierItemRequestDto dto) {
try {
SupplierItemRequestDto searchDto = new SupplierItemRequestDto();
searchDto.setType(DistributionEnum.DistributionTypeEnum.DISCOUNT.getCode());
searchDto.setIsDeleted(false);
searchDto.setIsOnSale(true);
List<SupplierItem> supplierItemList = supplierItemDao.findList(searchDto);
PageInfo pageInfo = new PageInfo(supplierItemList);
List<SupplierItemVo> supplierItemVoList = new ArrayList<>();
supplierItemList.forEach(supplierItem -> {
SupplierItemVo supplierItemVo = new SupplierItemVo();
EntityMapper.copyAttribute(supplierItem, supplierItemVo);
supplierItemVo.setItemId(supplierItem.getId());
supplierItemVo.setSupplyPrice(PriceUtil.convertPriceFenToYuan(supplierItem.getSupplyPrice()));
supplierItemVo.setDistributionPrice(PriceUtil.convertPriceFenToYuan(supplierItem.getDistributionPrice()));
supplierItemVo.setHomePageImage(MediaUtil.getHomePageImage(supplierItem.getImages(), supplierItem.getVideos()));
supplierItemVoList.add(supplierItemVo);
});
return Result.success(PageSearchResult.of(pageInfo, supplierItemVoList));
} catch (Exception e) {
logger.error("查询首页促销商品列表失败 error : {}", e);
}
return Result.failed();
}
@Override @Override
public Result reduceStock(long itemId, int stock) { public Result reduceStock(long itemId, int stock) {
String itemIdKey = String.valueOf(itemId); String itemIdKey = String.valueOf(itemId);
......
...@@ -29,6 +29,14 @@ public interface SupplierItemService { ...@@ -29,6 +29,14 @@ public interface SupplierItemService {
Result findList(SupplierItemRequestDto dto); Result findList(SupplierItemRequestDto dto);
/**
* 查询首页促销商品列表
* @param dto
* @return
*/
Result findDiscountList(SupplierItemRequestDto dto);
/** /**
* 查询供应商商品详情 * 查询供应商商品详情
* @param dto * @param dto
......
...@@ -39,6 +39,13 @@ public class SupplierItemController { ...@@ -39,6 +39,13 @@ public class SupplierItemController {
return supplierItemService.findList(dto); return supplierItemService.findList(dto);
} }
@ApiOperation(value = "查询首页促销商品列表")
@PostMapping("/findDiscountList")
public Result findDiscountList(@RequestBody SupplierItemRequestDto dto) {
logger.info("查询首页促销商品列表,请求参数:{}", JSON.toJSONString(dto));
return supplierItemService.findDiscountList(dto);
}
@ApiOperation(value = "查询供货商品详情") @ApiOperation(value = "查询供货商品详情")
@PostMapping("/findDetail") @PostMapping("/findDetail")
......
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