| | |
| | | |
| | | import cc.mrbird.febs.common.entity.FebsResponse; |
| | | import cc.mrbird.febs.common.entity.QueryRequest; |
| | | import cc.mrbird.febs.common.enumerates.ProductEnum; |
| | | import cc.mrbird.febs.mall.conversion.MallProductNftConversion; |
| | | import cc.mrbird.febs.mall.dto.AdminMallProductNftDto; |
| | | import cc.mrbird.febs.mall.dto.AdminPickSellRecordDtoDto; |
| | | import cc.mrbird.febs.mall.dto.MallNewsInfoDto; |
| | | import cc.mrbird.febs.mall.entity.*; |
| | | import cc.mrbird.febs.mall.mapper.MallNewsCategoryMapper; |
| | | import cc.mrbird.febs.mall.mapper.MallNewsInfoMapper; |
| | | import cc.mrbird.febs.mall.mapper.MallProductNftMapper; |
| | | import cc.mrbird.febs.mall.mapper.*; |
| | | import cc.mrbird.febs.mall.service.IMallNewsInfoService; |
| | | import cc.mrbird.febs.mall.vo.AdminMallNewsInfoVo; |
| | | import cc.mrbird.febs.mall.vo.AdminMallProductBuyVo; |
| | | import cc.mrbird.febs.mall.vo.AdminMallProductNftVo; |
| | | import cc.mrbird.febs.mall.vo.AdminMallProductSellVo; |
| | | import cc.mrbird.febs.mall.vo.*; |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import cn.hutool.core.date.DateTime; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | |
| | | private final MallNewsCategoryMapper mallNewsCategoryMapper; |
| | | private final MallProductNftMapper mallProductNftMapper; |
| | | private final MallProductBuyMapper mallProductBuyMapper; |
| | | private final MallProductSellMapper mallProductSellMapper; |
| | | private final MallProductSellRecordMapper mallProductSellRecordMapper; |
| | | private final MallProductBuyRecordMapper mallProductBuyRecordMapper; |
| | | |
| | | @Override |
| | | public IPage<AdminMallNewsInfoVo> getNewInfoList(MallNewsInfo mallNewsInfo, QueryRequest request) { |
| | |
| | | IPage<AdminMallProductSellVo> adminMallProductSellVoIPage = mallProductNftMapper.getSellList(page, mallProductSell); |
| | | return adminMallProductSellVoIPage; |
| | | } |
| | | |
| | | @Override |
| | | public List<AdminMallProductSellPickVo> findSellList() { |
| | | List<AdminMallProductSellPickVo> list = mallProductNftMapper.selectProductSellByState(ProductEnum.PRODUCT_SELL_ON_GOING.getValue()); |
| | | return list; |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse pickSellRecord(AdminPickSellRecordDtoDto pickSellRecordDto) { |
| | | /** |
| | | * 买单条件是否满足 |
| | | * 卖单条件是否满足 |
| | | * 生成卖单子记录 |
| | | * 生成买单子记录 |
| | | * 更新卖单状态 |
| | | * 更新买单状态 |
| | | */ |
| | | Long productBuyId = pickSellRecordDto.getId(); |
| | | Long productSellId = pickSellRecordDto.getProductSellId(); |
| | | BigDecimal pickNftCnt = new BigDecimal(pickSellRecordDto.getPickNftCnt()); |
| | | //买单 |
| | | MallProductBuy mallProductBuy = mallProductBuyMapper.selectById(productBuyId); |
| | | int state = mallProductBuy.getState(); |
| | | if(ProductEnum.PRODUCT_BUY_ON_GOING.getValue() != state){ |
| | | return new FebsResponse().fail().message("预约状态不是进行中"); |
| | | } |
| | | BigDecimal nftAva = mallProductBuy.getNftAva(); |
| | | if(BigDecimal.ZERO.compareTo(pickNftCnt) >= 0){ |
| | | return new FebsResponse().fail().message("本次金额不能小于等于零"); |
| | | } |
| | | if(nftAva.compareTo(pickNftCnt) < 0){ |
| | | return new FebsResponse().fail().message("可分配不足"); |
| | | } |
| | | //卖单 |
| | | MallProductSell mallProductSell = mallProductSellMapper.selectById(productSellId); |
| | | BigDecimal nftCntAva = mallProductSell.getNftCntAva(); |
| | | if(ProductEnum.PRODUCT_SELL_ON_GOING.getValue() != mallProductSell.getState()){ |
| | | return new FebsResponse().fail().message("预约状态不是进行中"); |
| | | } |
| | | if(nftCntAva.compareTo(pickNftCnt) < 0){ |
| | | return new FebsResponse().fail().message("匹配提现剩余不足"); |
| | | } |
| | | DateTime orderTime = DateUtil.date(); |
| | | //生成卖单子记录 |
| | | MallProductSellRecord mallProductSellRecord = new MallProductSellRecord(); |
| | | mallProductSellRecord.setSellId(mallProductSell.getId()); |
| | | mallProductSellRecord.setMemberId(mallProductBuy.getMemberId()); |
| | | mallProductSellRecord.setOrderTime(orderTime); |
| | | mallProductSellRecord.setNftCnt(pickNftCnt); |
| | | mallProductSellRecord.setState(ProductEnum.PRODUCT_MATE_STATE_WAIT_PAY.getValue()); |
| | | mallProductSellRecordMapper.insert(mallProductSellRecord); |
| | | //生成买单子记录 |
| | | MallProductBuyRecord mallProductBuyRecord = new MallProductBuyRecord(); |
| | | mallProductBuyRecord.setBuyId(mallProductBuy.getId()); |
| | | mallProductBuyRecord.setMemberId(mallProductSell.getMemberId()); |
| | | mallProductBuyRecord.setSellRecordId(mallProductSellRecord.getId()); |
| | | mallProductBuyRecord.setPickNftCnt(pickNftCnt); |
| | | mallProductBuyRecord.setState(ProductEnum.PRODUCT_MATE_STATE_WAIT_PAY.getValue()); |
| | | mallProductBuyRecord.setOrderTime(orderTime); |
| | | mallProductBuyRecordMapper.insert(mallProductBuyRecord); |
| | | //更新卖单 |
| | | mallProductSell.setNftCntAva(mallProductSell.getNftCntAva().subtract(pickNftCnt)); |
| | | mallProductSellMapper.updateById(mallProductSell); |
| | | //更新买单 |
| | | mallProductBuy.setNftAva(mallProductBuy.getNftAva().subtract(pickNftCnt)); |
| | | mallProductBuyMapper.updateById(mallProductBuy); |
| | | return new FebsResponse().success(); |
| | | } |
| | | } |