Commit 5d85b2b6 authored by wlx@33.cn's avatar wlx@33.cn

兼容nft使用权

parent a19fe432
package com.fzm.mall.server.admin.constant; package com.fzm.mall.server.admin.constant;
import java.util.Locale;
/** /**
* @author lyz * @author lyz
* @mail lyz@disanbo.com * @mail lyz@disanbo.com
...@@ -142,4 +140,13 @@ public class MALLGlobalConfig { ...@@ -142,4 +140,13 @@ public class MALLGlobalConfig {
//NFT 前缀 //NFT 前缀
public static final String NFT_PREFIX = "NFT-"; public static final String NFT_PREFIX = "NFT-";
/**
* 无效的序列号标识
*/
public static final Integer SERIAL_NO_INVALID = 0;
/**
* 有效的序列号标识
*/
public static final Integer SERIAL_NO_VALID = 1;
} }
package com.fzm.mall.server.admin.goods_center.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 使用权 前端控制器
* </p>
*
* @author fzm
* @since 2021-12-21
*/
@RestController
@RequestMapping("/goods-sku-usufruct")
public class GoodsSkuUsufructController {
}
...@@ -53,11 +53,15 @@ public class GoodsSpuVO { ...@@ -53,11 +53,15 @@ public class GoodsSpuVO {
@TableField(exist = false) @TableField(exist = false)
private Integer coinType; private Integer coinType;
@ApiModelProperty(value = "nft销售方式(1.原商品销售 2.拷贝销售)")
@TableField(exist = false)
private Integer nftSalesType;
public void initTokenId() { public void initTokenId() {
if (commodityPass.equals(COMMODITY_PASS_OUT)){ if (commodityPass.equals(COMMODITY_PASS_OUT)) {
setTokenId(Long.valueOf(tokenIdStr)); setTokenId(Long.valueOf(tokenIdStr));
}else if(commodityPass.equals(COMMODITY_PASS_AUTO) && type == 6){ } else if (commodityPass.equals(COMMODITY_PASS_AUTO) && type == 6) {
setTokenId(Long.valueOf(getTokenIdStr().replace( MALLGlobalConfig.NFT_PREFIX,""))); setTokenId(Long.valueOf(getTokenIdStr().replace(MALLGlobalConfig.NFT_PREFIX, "")));
} }
} }
} }
package com.fzm.mall.server.admin.goods_center.mapper;
import com.fzm.mall.server.admin.goods_center.model.GoodsSkuUsufruct;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 使用权 Mapper 接口
* </p>
*
* @author fzm
* @since 2021-12-21
*/
@Mapper
public interface GoodsSkuUsufructMapper extends BaseMapper<GoodsSkuUsufruct> {
}
package com.fzm.mall.server.admin.goods_center.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 使用权
* </p>
*
* @author fzm
* @since 2021-12-21
*/
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="GoodsSkuUsufruct对象", description="使用权")
public class GoodsSkuUsufruct implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "使用权前缀")
private String prefix;
@ApiModelProperty(value = "序列号")
private String serialNo;
@ApiModelProperty(value = "创建时间")
@TableField(fill = FieldFill.INSERT)
private Long createTime;
@ApiModelProperty(value = "更新时间")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateTime;
}
...@@ -44,6 +44,13 @@ public class Spu implements Serializable { ...@@ -44,6 +44,13 @@ public class Spu implements Serializable {
public static final Integer COMMODITY_PASS_OUT = 2; public static final Integer COMMODITY_PASS_OUT = 2;
/**
* nft销售方式(1.原商品销售 2.拷贝销售)
*/
public static final Integer NFT_SALES_TYPE_DEFAULT = 1;
public static final Integer NFT_SALES_TYPE_COPY = 2;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO) @TableId(value = "id", type = IdType.AUTO)
......
package com.fzm.mall.server.admin.goods_center.service;
import com.fzm.mall.server.admin.goods_center.model.GoodsSkuUsufruct;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 使用权 服务类
* </p>
*
* @author fzm
* @since 2021-12-21
*/
public interface IGoodsSkuUsufructService extends IService<GoodsSkuUsufruct> {
}
package com.fzm.mall.server.admin.goods_center.service.impl;
import com.fzm.mall.server.admin.goods_center.model.GoodsSkuUsufruct;
import com.fzm.mall.server.admin.goods_center.mapper.GoodsSkuUsufructMapper;
import com.fzm.mall.server.admin.goods_center.service.IGoodsSkuUsufructService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 使用权 服务实现类
* </p>
*
* @author fzm
* @since 2021-12-21
*/
@Service
public class GoodsSkuUsufructServiceImpl extends ServiceImpl<GoodsSkuUsufructMapper, GoodsSkuUsufruct> implements IGoodsSkuUsufructService {
}
...@@ -71,5 +71,6 @@ public class OrderDetail implements Serializable { ...@@ -71,5 +71,6 @@ public class OrderDetail implements Serializable {
@TableField(fill = FieldFill.INSERT_UPDATE) @TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateTime; private Long updateTime;
@ApiModelProperty(value = "序列号")
private String serialNo;
} }
...@@ -9,12 +9,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -9,12 +9,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fzm.mall.server.admin.block_chain.util.ChainUtil; import com.fzm.mall.server.admin.block_chain.util.ChainUtil;
import com.fzm.mall.server.admin.config.Redis; import com.fzm.mall.server.admin.config.Redis;
import com.fzm.mall.server.admin.constant.MALLGlobalConfig;
import com.fzm.mall.server.admin.constant.MallResponseError; import com.fzm.mall.server.admin.constant.MallResponseError;
import com.fzm.mall.server.admin.distribution.mapper.ParcelCenterMapper; import com.fzm.mall.server.admin.distribution.mapper.ParcelCenterMapper;
import com.fzm.mall.server.admin.distribution.service.IExpressService; import com.fzm.mall.server.admin.distribution.service.IExpressService;
import com.fzm.mall.server.admin.exception.MyException; import com.fzm.mall.server.admin.exception.MyException;
import com.fzm.mall.server.admin.goods_center.entity.vo.GoodsSpuVO; import com.fzm.mall.server.admin.goods_center.entity.vo.GoodsSpuVO;
import com.fzm.mall.server.admin.goods_center.mapper.GoodsSkuUsufructMapper;
import com.fzm.mall.server.admin.goods_center.mapper.SpuMapper; import com.fzm.mall.server.admin.goods_center.mapper.SpuMapper;
import com.fzm.mall.server.admin.goods_center.model.GoodsSkuUsufruct;
import com.fzm.mall.server.admin.goods_center.model.Spu; import com.fzm.mall.server.admin.goods_center.model.Spu;
import com.fzm.mall.server.admin.home_page.model.Merchant; import com.fzm.mall.server.admin.home_page.model.Merchant;
import com.fzm.mall.server.admin.home_page.service.IMerchantService; import com.fzm.mall.server.admin.home_page.service.IMerchantService;
...@@ -26,6 +29,7 @@ import com.fzm.mall.server.admin.order.mapper.DeliveryMapper; ...@@ -26,6 +29,7 @@ import com.fzm.mall.server.admin.order.mapper.DeliveryMapper;
import com.fzm.mall.server.admin.order.model.Config; import com.fzm.mall.server.admin.order.model.Config;
import com.fzm.mall.server.admin.order.model.Delivery; import com.fzm.mall.server.admin.order.model.Delivery;
import com.fzm.mall.server.admin.order.model.DeliveryLog; import com.fzm.mall.server.admin.order.model.DeliveryLog;
import com.fzm.mall.server.admin.order.model.OrderDetail;
import com.fzm.mall.server.admin.order.service.IDeliveryLogService; import com.fzm.mall.server.admin.order.service.IDeliveryLogService;
import com.fzm.mall.server.admin.order.service.IDeliveryRefundService; import com.fzm.mall.server.admin.order.service.IDeliveryRefundService;
import com.fzm.mall.server.admin.order.service.IDeliveryService; import com.fzm.mall.server.admin.order.service.IDeliveryService;
...@@ -39,9 +43,12 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -39,9 +43,12 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
...@@ -72,6 +79,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i ...@@ -72,6 +79,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
private final IMerchantService merchantService; private final IMerchantService merchantService;
private final ChainUtil chainUtil; private final ChainUtil chainUtil;
private final SpuMapper spuMapper; private final SpuMapper spuMapper;
private final GoodsSkuUsufructMapper goodsSkuUsufructMapper;
@Override @Override
public void send(String adminId, String orderDeliveryId, String expressType, String expressNo, Long updateTime) { public void send(String adminId, String orderDeliveryId, String expressType, String expressNo, Long updateTime) {
...@@ -219,6 +227,13 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i ...@@ -219,6 +227,13 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
* @param delivery * @param delivery
*/ */
private void refundCoinOnChain(Delivery delivery) { private void refundCoinOnChain(Delivery delivery) {
//判断商品是否为NFT
GoodsSpuVO goodsSpu = spuMapper.readByCoin(delivery.getCoin());
boolean isSalesNFTCopy = goodsSpu.getNftSalesType().equals(Spu.NFT_SALES_TYPE_COPY);
/**
* NFT商品为“使用权销售时”,根据订单购买的编号重置为未使用
*/
updateSkuSerialNo(null, delivery.getCoin(), isSalesNFTCopy);
//根据开关判断是否走链,默认不走链 //根据开关判断是否走链,默认不走链
if (payInChain) { if (payInChain) {
User user = userService.getOne(new QueryWrapper<User>().eq("uid", delivery.getUid())); User user = userService.getOne(new QueryWrapper<User>().eq("uid", delivery.getUid()));
...@@ -231,21 +246,60 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i ...@@ -231,21 +246,60 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
tranDto.setAmount(new BigDecimal(delivery.getNumber())); tranDto.setAmount(new BigDecimal(delivery.getNumber()));
tranDto.setTableId(delivery.getOrderDeliveryId()); tranDto.setTableId(delivery.getOrderDeliveryId());
tranDto.setTableType(TranDto.TABLE_TYPE_DELIVERY); tranDto.setTableType(TranDto.TABLE_TYPE_DELIVERY);
//判断商品是否为NFT
GoodsSpuVO goodsSpu = spuMapper.readByCoin(delivery.getCoin());
goodsSpu.initTokenId(); goodsSpu.initTokenId();
String hash; String hash;
if (goodsSpu.getCommodityPass().equals(Spu.COMMODITY_PASS_OUT)) { boolean doEvmTransfer = true;
/**
* 商品为外部导入或者NFT销售类型为“原商品销售”,用外部NFT转账合约
*/
if (goodsSpu.getCommodityPass().equals(Spu.COMMODITY_PASS_OUT) || goodsSpu.getNftSalesType().equals(Spu.NFT_SALES_TYPE_DEFAULT)) {
doEvmTransfer = false;
}
if (doEvmTransfer){
/**
* 内部nft操作
*/
hash = chainUtil.evmTransfer(tranDto.getToAddr(), tranDto.getFromAddr(), goodsSpu.getTokenId(), tranDto.getAmount().longValue());
tranDto.setCoinType(TranDto.COIN_TYPE_NFT_IN);
}else{
long[] tokenIds = new long[]{goodsSpu.getTokenId()}; long[] tokenIds = new long[]{goodsSpu.getTokenId()};
long[] amounts = new long[]{tranDto.getAmount().longValue()}; long[] amounts = new long[]{tranDto.getAmount().longValue()};
hash = chainUtil.evmExec(tokenIds, amounts, tranDto.getFromAddr(), tranDto.getToAddr()); hash = chainUtil.evmExec(tokenIds, amounts, tranDto.getFromAddr(), tranDto.getToAddr());
tranDto.setCoinType(TranDto.COIN_TYPE_NFT_OUT); tranDto.setCoinType(TranDto.COIN_TYPE_NFT_OUT);
} else {
hash = chainUtil.evmTransfer(tranDto.getToAddr(), tranDto.getFromAddr(), goodsSpu.getTokenId(), tranDto.getAmount().longValue());
tranDto.setCoinType(TranDto.COIN_TYPE_NFT_IN);
} }
tranDto.setHash(hash); tranDto.setHash(hash);
producer.sendTTL(JSON.toJSONString(tranDto), QueueTTLTypeEnum.ORDER_REFUND_COINS_TTL, 5 * 1000); producer.sendTTL(JSON.toJSONString(tranDto), QueueTTLTypeEnum.ORDER_REFUND_COINS_TTL, 5 * 1000);
} }
} }
/**
* 商品为“使用权”时,退款和退货,需要重置已使用的编号
* @param serialNo
* @param coin
* @param isSalesNFTCopy
*/
private void updateSkuSerialNo(String serialNo, String coin, boolean isSalesNFTCopy) {
if (!isSalesNFTCopy) {
return;
}
if (StringUtils.isEmpty(serialNo)) {
return;
}
List<Integer> serialNoList = JSON.parseArray(serialNo, int.class);
if (CollectionUtils.isEmpty(serialNoList)) {
return;
}
QueryWrapper<GoodsSkuUsufruct> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("prefix", coin);
GoodsSkuUsufruct skuUsufruct = goodsSkuUsufructMapper.selectOne(queryWrapper);
if (skuUsufruct == null) {
return;
}
List<Integer> dataSerialNoList = JSON.parseArray(skuUsufruct.getSerialNo(), int.class);
serialNoList.forEach(index -> {
dataSerialNoList.set(index, MALLGlobalConfig.SERIAL_NO_VALID);
});
}
} }
...@@ -10,7 +10,9 @@ import com.fzm.mall.server.admin.constant.MALLGlobalConfig; ...@@ -10,7 +10,9 @@ import com.fzm.mall.server.admin.constant.MALLGlobalConfig;
import com.fzm.mall.server.admin.constant.MallResponseError; import com.fzm.mall.server.admin.constant.MallResponseError;
import com.fzm.mall.server.admin.exception.MyException; import com.fzm.mall.server.admin.exception.MyException;
import com.fzm.mall.server.admin.goods_center.entity.vo.GoodsSpuVO; import com.fzm.mall.server.admin.goods_center.entity.vo.GoodsSpuVO;
import com.fzm.mall.server.admin.goods_center.mapper.GoodsSkuUsufructMapper;
import com.fzm.mall.server.admin.goods_center.mapper.SpuMapper; import com.fzm.mall.server.admin.goods_center.mapper.SpuMapper;
import com.fzm.mall.server.admin.goods_center.model.GoodsSkuUsufruct;
import com.fzm.mall.server.admin.goods_center.model.Spu; import com.fzm.mall.server.admin.goods_center.model.Spu;
import com.fzm.mall.server.admin.home_page.model.Merchant; import com.fzm.mall.server.admin.home_page.model.Merchant;
import com.fzm.mall.server.admin.home_page.service.IMerchantService; import com.fzm.mall.server.admin.home_page.service.IMerchantService;
...@@ -27,11 +29,13 @@ import com.fzm.mall.server.admin.user.service.IAssetService; ...@@ -27,11 +29,13 @@ import com.fzm.mall.server.admin.user.service.IAssetService;
import com.fzm.mall.server.admin.user_center.model.User; import com.fzm.mall.server.admin.user_center.model.User;
import com.fzm.mall.server.admin.user_center.service.IUserService; import com.fzm.mall.server.admin.user_center.service.IUserService;
import com.fzm.mall.server.admin.util.WxPayUtil; import com.fzm.mall.server.admin.util.WxPayUtil;
import lombok.RequiredArgsConstructor; import com.google.gson.JsonObject;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
...@@ -46,7 +50,6 @@ import java.util.List; ...@@ -46,7 +50,6 @@ import java.util.List;
*/ */
@Service @Service
@Transactional @Transactional
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements IAssetService { public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements IAssetService {
@Value("${pay.pay-in-chain}") @Value("${pay.pay-in-chain}")
...@@ -68,6 +71,8 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements ...@@ -68,6 +71,8 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements
private PayMapper payMapper; private PayMapper payMapper;
@Autowired @Autowired
private WxPayUtil wxPayUtil; private WxPayUtil wxPayUtil;
@Autowired
private GoodsSkuUsufructMapper goodsSkuUsufructMapper;
/** /**
* 商品订单退款-积分还原,商品币还原 * 商品订单退款-积分还原,商品币还原
...@@ -192,6 +197,14 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements ...@@ -192,6 +197,14 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements
} }
private void refundOrderDetailCoin(String uid, String merchantId, OrderDetail orderDetail) { private void refundOrderDetailCoin(String uid, String merchantId, OrderDetail orderDetail) {
//判断商品是否为NFT
GoodsSpuVO goodsSpu = spuMapper.readByCoin(orderDetail.getCoin());
boolean isSalesNFTCopy = goodsSpu.getNftSalesType().equals(Spu.NFT_SALES_TYPE_COPY);
/**
* NFT商品为“使用权销售时”,根据订单购买的编号重置为未使用
*/
updateSkuSerialNo(orderDetail.getSerialNo(), orderDetail.getCoin(), isSalesNFTCopy);
//根据开关判断是否走链,默认不走链 //根据开关判断是否走链,默认不走链
if (payInChain) { if (payInChain) {
User user = userService.getOne(new QueryWrapper<User>().eq("uid", uid)); User user = userService.getOne(new QueryWrapper<User>().eq("uid", uid));
...@@ -205,21 +218,65 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements ...@@ -205,21 +218,65 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements
tranDto.setTableId(orderDetail.getOid()); tranDto.setTableId(orderDetail.getOid());
tranDto.setTableType(TranDto.TABLE_TYPE_ORDER_INFO); tranDto.setTableType(TranDto.TABLE_TYPE_ORDER_INFO);
//判断商品是否为NFT
GoodsSpuVO goodsSpu = spuMapper.readByCoin(orderDetail.getCoin());
goodsSpu.initTokenId(); goodsSpu.initTokenId();
String hash; String hash;
if (goodsSpu.getCommodityPass().equals(Spu.COMMODITY_PASS_OUT)) { boolean doEvmTransfer = true;
/**
* 商品为外部导入或者NFT销售类型为“原商品销售”,用外部NFT转账合约
*/
if (goodsSpu.getCommodityPass().equals(Spu.COMMODITY_PASS_OUT) || goodsSpu.getNftSalesType().equals(Spu.NFT_SALES_TYPE_DEFAULT)) {
doEvmTransfer = false;
}
if (doEvmTransfer) {
/**
* 内部nft操作
*/
hash = chainUtil.evmTransfer(tranDto.getToAddr(), tranDto.getFromAddr(), goodsSpu.getTokenId(), tranDto.getAmount().longValue());
tranDto.setCoinType(TranDto.COIN_TYPE_NFT_IN);
} else {
long[] tokenIds = new long[]{goodsSpu.getTokenId()}; long[] tokenIds = new long[]{goodsSpu.getTokenId()};
long[] amounts = new long[]{tranDto.getAmount().longValue()}; long[] amounts = new long[]{tranDto.getAmount().longValue()};
hash = chainUtil.evmExec(tokenIds, amounts, tranDto.getFromAddr(), tranDto.getToAddr()); hash = chainUtil.evmExec(tokenIds, amounts, tranDto.getFromAddr(), tranDto.getToAddr());
tranDto.setCoinType(TranDto.COIN_TYPE_NFT_OUT); tranDto.setCoinType(TranDto.COIN_TYPE_NFT_OUT);
} else {
hash = chainUtil.evmTransfer(tranDto.getToAddr(), tranDto.getFromAddr(), goodsSpu.getTokenId(), tranDto.getAmount().longValue());
tranDto.setCoinType(TranDto.COIN_TYPE_NFT_IN);
} }
tranDto.setHash(hash); tranDto.setHash(hash);
producer.sendTTL(JSON.toJSONString(tranDto), QueueTTLTypeEnum.ORDER_REFUND_COINS_TTL, 5 * 1000); producer.sendTTL(JSON.toJSONString(tranDto), QueueTTLTypeEnum.ORDER_REFUND_COINS_TTL, 5 * 1000);
} }
} }
/**
* 商品为“使用权”时,退款和退货,需要重置已使用的编号
* @param serialNo
* @param coin
* @param isSalesNFTCopy
*/
private void updateSkuSerialNo(String serialNo, String coin, boolean isSalesNFTCopy) {
if (!isSalesNFTCopy) {
return;
}
if (StringUtils.isEmpty(serialNo)) {
return;
}
List<Integer> serialNoList = JSON.parseArray(serialNo, int.class);
if (CollectionUtils.isEmpty(serialNoList)) {
return;
}
QueryWrapper<GoodsSkuUsufruct> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("prefix", coin);
GoodsSkuUsufruct skuUsufruct = goodsSkuUsufructMapper.selectOne(queryWrapper);
if (skuUsufruct == null) {
return;
}
List<Integer> dataSerialNoList = JSON.parseArray(skuUsufruct.getSerialNo(), int.class);
serialNoList.forEach(index -> {
dataSerialNoList.set(index, MALLGlobalConfig.SERIAL_NO_VALID);
});
skuUsufruct.setSerialNo(JSON.toJSONString(dataSerialNoList));
UpdateWrapper<GoodsSkuUsufruct> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("prefix", coin);
goodsSkuUsufructMapper.update(skuUsufruct, updateWrapper);
}
} }
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fzm.mall.server.admin.goods_center.mapper.GoodsSkuUsufructMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.fzm.mall.server.admin.goods_center.model.GoodsSkuUsufruct">
<id column="id" property="id" />
<result column="prefix" property="prefix" />
<result column="serial_no" property="serialNo" />
<result column="create_time" property="createTime" />
<result column="update_time" property="updateTime" />
</resultMap>
</mapper>
...@@ -130,11 +130,11 @@ ...@@ -130,11 +130,11 @@
</select> </select>
<select id="readByCoin" resultType="com.fzm.mall.server.admin.goods_center.entity.vo.GoodsSpuVO"> <select id="readByCoin" resultType="com.fzm.mall.server.admin.goods_center.entity.vo.GoodsSpuVO">
select sp.type, sp.commodity_pass, IFNULL(n.token_id, t.token_id) tokenIdStr select sp.type, sp.commodity_pass, IFNULL(n.token_id, t.token_id) tokenIdStr, s.nft_sales_type
from goods_sku s from goods_sku s
left join goods_spu sp on s.goods_id = sp.goods_id left join goods_spu sp on s.goods_id = sp.goods_id
left join goods_nft n on sp.commodity_pass = 1 and sp.type = 6 and sp.goods_id = n.goods_id left join goods_nft n on sp.commodity_pass = 1 and sp.type = 6 and sp.goods_id = n.goods_id
left join external_token t on sp.commodity_pass = 2 and s.coin_name = t.label_name left join external_token t on sp.commodity_pass = 2 and s.commodity_pass_id = t.commodity_pass_id
where s.status = 1 where s.status = 1
and s.coin_name = #{coin} and s.coin_name = #{coin}
</select> </select>
......
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