Commit 1cdfb4a7 authored by shiyu's avatar shiyu

Merge branch 'quanku_v2.3' into quanku_v2.4

parents c37447a0 4717d1f8
......@@ -153,7 +153,9 @@ public class SysSupplierItemServiceImpl implements SysSupplierItemService {
try {
List<SupplierItemVo> supplierItemVos = new ArrayList<>();
if (dto.getType() == null) {
dto.setTypeList(Arrays.asList(DistributionEnum.DistributionTypeEnum.FIXED_PRICE.getCode(), DistributionEnum.DistributionTypeEnum.AUCTION.getCode()));
dto.setTypeList(Arrays.asList(DistributionEnum.DistributionTypeEnum.FIXED_PRICE.getCode(),
DistributionEnum.DistributionTypeEnum.AUCTION.getCode(),
DistributionEnum.DistributionTypeEnum.DISCOUNT.getCode()));
}
List<SupplierItem> supplierItemList = supplierItemDao.findList(dto);
PageInfo<SupplierItem> pageInfo = new PageInfo(supplierItemList);
......
......@@ -52,6 +52,7 @@ public class DistributionEnum {
FIXED_PRICE(1, "一口价"),
AUCTION(2, "竞拍"),
COLLECT(3, "藏品"),
DISCOUNT(4, "折扣品"),
;
private int code;
......
......@@ -267,4 +267,9 @@ public class SupplierItemVo implements Entity {
private String statusName;
/**
* 是否已经有折扣订单
*/
private Boolean isHasDiscountOrder;
}
......@@ -52,6 +52,14 @@ public interface DistributionOrderDao {
List<DistributionOrder> findByBuyerId(long buyerId);
/**
* 根据买家id查询折扣订单
* @param buyerId
* @return
*/
List<DistributionOrder> findByBuyerId(long buyerId, int type, Date startTime, Date endTime);
/**
* 根据买家id查询最近一次购买记录
* @param buyerId
......
......@@ -124,7 +124,7 @@ public class SupplierItemRequestDto extends BaseRequestDto implements Entity {
private String rebate;
/**
* 商品类型1一口价2竞拍3用户上传
* 商品类型1一口价2竞拍3用户上传4折扣商品
*/
private Integer type;
......
......@@ -61,6 +61,21 @@ public class DistributionOrderDaoImpl implements DistributionOrderDao {
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
public DistributionOrder findLastedByBuyerId(long buyerId) {
DistributionOrderExample example = new DistributionOrderExample();
......
......@@ -171,6 +171,12 @@ public class WxPayCallbackController {
if (!updateResult.getSuccess()) {
return JsonUtils.from(returnMap);
}
} else if (distributionOrder.getType() == DistributionEnum.DistributionTypeEnum.DISCOUNT.getCode()) {
//折扣订单
Result updateResult = handleOrderOfDiscount(transaction);
if (!updateResult.getSuccess()) {
return JsonUtils.from(returnMap);
}
}
}
}
......@@ -365,6 +371,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 {
if (shopWhiteListDao.isExisted(dto.getUserId())) {
ShopWhiteList shopWhiteList = shopWhiteListDao.findByUserId(dto.getUserId());
result.put("isShop", true);
result.put("isCollector", true);
result.put("shopId", shopWhiteList.getShopId() == null ? dto.getUserId() : shopWhiteList.getShopId());
userLevel = UserEnum.LevelEnum.DISTRIBUTOR.getCode();
if (collectorWhiteListFlag) {
......@@ -223,6 +224,7 @@ public class UserServiceImpl implements UserService {
ShopDTO shopDTO = cloudServerResponse.getResult();
if (shopDTO != null && !ObjectUtils.isEmpty(shopDTO.getShopId()) && shopDTO.getPayStatus() == 1 && shopDTO.getCheckStatus() == 1 && shopDTO.getType() == 4) {
result.put("isShop", true);
result.put("isCollector", true);
result.put("shopId", shopDTO.getShopId());
//新商家登录,在表中记录
ShopWhiteList shopWhiteList = new ShopWhiteList();
......@@ -259,11 +261,13 @@ public class UserServiceImpl implements UserService {
String userKey = MessageFormat.format(CacheCodeConstants.USER_INFO_KEY, user.getId());
redisUtil.set(userKey, user, 2 * 60 * 60);
//判断用户是否在藏家白名单
if (collectorWhiteListFlag) {
if (collectorWhiteListFlag ) {
result.put("isCollector", true);
} else {
if (!(Boolean) result.get("isShop")) {
result.put("isCollector", false);
}
}
//返回用户信息
user = userDao.queryById(dto.getUserId());
result.put("avatar", com.xxdxxs.utils.StringUtils.isEmpty(user.getAvatar()) ? CommConsts.DEFAULT_AVATAR_URL : user.getAvatar());
......
package com.wwdz.ch.wx.impl.distribution;
import cn.hutool.core.date.DateUtil;
import com.github.pagehelper.PageInfo;
import com.wechat.pay.java.service.refund.model.Refund;
import com.wechat.pay.java.service.refund.model.Status;
......@@ -124,6 +125,12 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
@Override
public Result createDistributionOrder(DistributionOrderRequestDto dto) {
try {
//查询商品信息,检查商品库存
SupplierItem supplierItem = supplierItemDao.findById(dto.getItemId());
if (supplierItem.getType() == DistributionEnum.DistributionTypeEnum.DISCOUNT.getCode()) {
dto.setType(supplierItem.getType());
return createDiscountOrder(dto);
}
String shareRecordId = dto.getShareRecordId();
//查询分享记录详细信息
DistributorShareRecord distributorShareRecord = distributorShareRecordDao.findById(shareRecordId);
......@@ -133,8 +140,6 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
if (!distributorShareRecord.getEnabled()) {
return Result.failed("该分享链接已失效");
}
//查询商品信息,检查商品库存
SupplierItem supplierItem = supplierItemDao.findById(distributorShareRecord.getItemId());
int stock = supplierItem.getStock();
if (stock <= 0) {
return Result.failed("商品库存不足");
......@@ -1188,4 +1193,64 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
}
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;
import cn.hutool.core.date.DateUtil;
import com.github.pagehelper.PageInfo;
import com.wwdz.ch.core.consts.*;
import com.wwdz.ch.core.storage.QiniuStorage;
......@@ -220,8 +221,9 @@ public class SupplierItemServiceImpl implements SupplierItemService {
}
}
}
//用户点击链接进入详情页需要记录
//排除折扣商品
if (supplierItem.getType() != DistributionEnum.DistributionTypeEnum.DISCOUNT.getCode()) {
if (!dto.getIsShop()) {
supplierItemVo.setSalePrice(PriceUtil.convertPriceFenToYuan(distributorShareRecord.getPrice()));
} else {
......@@ -240,10 +242,22 @@ public class SupplierItemServiceImpl implements SupplierItemService {
}
//计算商家自购价
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);
BigDecimal buyPrice = new BigDecimal(PriceUtil.convertPriceFenToYuan(supplierItem.getDistributionPrice())).subtract(bigDecimal).setScale(2, BigDecimal.ROUND_UP);
supplierItemVo.setSelfBuyPrice(buyPrice.toPlainString());
}
} else {
//判断当前用户今天是否已经购买过折扣商品
Date now = new Date();
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 {
supplierItemVo.setIsHasDiscountOrder(true);
}
supplierItemVo.setSalePrice(PriceUtil.convertPriceFenToYuan(supplierItem.getDistributionPrice()));
}
EntityMapper.copyAttribute(supplierItem, supplierItemVo);
supplierItemVo.setItemId(supplierItem.getId());
supplierItemVo.setSupplyPrice(PriceUtil.convertPriceFenToYuan(supplierItem.getSupplyPrice()));
......@@ -260,6 +274,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
public Result reduceStock(long itemId, int stock) {
String itemIdKey = String.valueOf(itemId);
......
......@@ -29,6 +29,14 @@ public interface SupplierItemService {
Result findList(SupplierItemRequestDto dto);
/**
* 查询首页促销商品列表
* @param dto
* @return
*/
Result findDiscountList(SupplierItemRequestDto dto);
/**
* 查询供应商商品详情
* @param dto
......
......@@ -36,8 +36,7 @@ public class DistributionOrderController {
public Result createDistributionOrder(@RequestBody DistributionOrderRequestDto dto) {
logger.info("分销单下单,请求参数:{}", JSON.toJSONString(dto));
Validator validator = new Validator(FormHandler.ofEntity(dto));
validator.set("shareRecordId", "分销分享记录id").must().string()
.set("buyerId", "买方id").must().number()
validator.set("buyerId", "买方id").must().number()
.set("buyerOpenid", "买方微信openid").must().string()
.end();
if (!validator.isValid()) {
......
......@@ -39,6 +39,13 @@ public class SupplierItemController {
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 = "查询供货商品详情")
@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