记得上下班打卡 | git大法好,push需谨慎

Commit f421155c authored by anjiabin's avatar anjiabin

Merge branch 'dev_nft_411' of...

Merge branch 'dev_nft_411' of http://gitlab.zhengzai.tv/dongjingwei/liquidnet-bus-v1 into dev_nft_411
parents 9c728547 a224e458
......@@ -205,6 +205,28 @@ public class GoblinRedisConst {
*/
public static final String USER_DIGITAL_ARTWORK_GENMARK = PREFIX.concat("u_d_art_gm:");
/* ----------------------------------------------------------------- */
/**
* 用户预约标识
* {goblin:user:anticipate:${skuId}:${uid},(goblin_goods_anticipate_user)}
*/
public static final String USER_ANTICIPATE_STATE = PREFIX.concat("user:anticipate:");
/**
* 真实预约人数
* {goblin:anticipate:people:${autId},numPeople}
*/
public static final String ANTICIPATE_PEOPLE = PREFIX.concat("anticipate:people:");
/**
* 记录sku
*/
public static final String ANTICIPATE_SKUID = PREFIX.concat("anticipate:skuId:");
/* ----------------------------------------------------------------- */
/* ----------------------------------------------------------------- */
}
package com.liquidnet.service.goblin.dto.manage;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinGoodsAnticipateValueVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/**
*
* @author liquidnet
* @since 2022-04-07
*/
@ApiModel(value = "GoblinGoodsAnticipateParam", description = "预约")
@Data
public class GoblinGoodsAnticipateAddParam {
/**
* 预约名称
*/
@ApiModelProperty(value = "预约名称")
@NotBlank(message = "预约名称")
private String name;
/**
* 预约规则
*/
@ApiModelProperty(value = "预约规则")
@NotBlank(message = "预约规则")
private String rule;
/**
* 预约人数
*/
@ApiModelProperty(value = "预约人数")
private Long aboutPeople;
/**
* 预约开始时间
*/
@ApiModelProperty(value = "预约开始时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime aboutStartDate;
/**
* 预约结束时间
*/
@ApiModelProperty(value = "预约结束时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime aboutEndDate;
}
package com.liquidnet.service.goblin.dto.manage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
/**
* <p>
* 预约表
* </p>
*
* @author liquidnet
* @since 2022-04-07
*/
@ApiModel(value = "GoblinGoodsAnticipateParam", description = "预约")
@Data
public class GoblinGoodsAnticipateParam{
@ApiModelProperty(position = 11, required = true, value = "当前记录起始索引", example = "1")
@Min(value = 1, message = "起始索引无效")
@NotNull(message = "起始索引无效")
private Integer pageNum;
@ApiModelProperty(position = 12, required = true, value = "每页显示记录数", example = "20")
@Max(value = 100, message = "显示记录数无效")
@NotNull(message = "显示记录数无效")
private Integer pageSize;
/**
* 预约名称
*/
private String name;
}
package com.liquidnet.service.goblin.dto.manage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
/**
*
* @author liquidnet
* @since 2022-04-07
*/
@ApiModel(value = "GoblinGoodsAnticipateParam", description = "预约")
@Data
public class GoblinGoodsAnticipateUpdateParam {
@ApiModelProperty(value ="预约id")
@NotBlank(message = "预约id")
private String antId;
/**
* 预约名称
*/
@ApiModelProperty(value = "预约名称")
@NotBlank(message = "预约名称")
private String name;
/**
* 预约规则
*/
@ApiModelProperty(value = "预约规则")
@NotBlank(message = "预约规则")
private String rule;
}
package com.liquidnet.service.goblin.dto.manage;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.io.Serializable;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.liquidnet.commons.lang.util.DateUtil;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
/**
* <p>
* 预约关联sku和spu表
* </p>
*
* @author liquidnet
* @since 2022-04-08
*/
@Data
public class GoblinGoodsAnticipateValueParam {
private static final long serialVersionUID = 1L;
/**
* antId
*/
@ApiModelProperty(value = "antId")
@NotBlank(message = "antId不能为空")
private String antId;
/**
* sku名称
*/
@ApiModelProperty(value = "sku名称")
@NotBlank(message = "skuName不能为空")
private String skuName;
/**
* sku_id 对应 goblin_goods_sku.sku_id
*/
@ApiModelProperty(value = "sku_id 对应 goblin_goods_sku.sku_id")
@NotBlank(message = "skuId不能为空")
private String skuId;
/**
* spu_id对应 goblin_goods_spu_id
*/
@ApiModelProperty(value = "spu_id对应 goblin_goods_spu_id")
@NotBlank(message = "spuId不能为空")
private String spuId;
/**
* 预约开始时间
*/
@ApiModelProperty(value = "预约开始时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
@NotBlank(message = "预约开始时间不能为空")
private LocalDateTime aboutStartDate;
/**
* 预约结束时间
*/
@ApiModelProperty(value = "预约结束时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
@NotBlank(message = "预约结束时间不能为空")
private LocalDateTime aboutEndDate;
/**
* 删除(0:未删除1:已删除)
*/
@ApiModelProperty(value = "修改传入参数 创建不传 删除(0:未删除1:已删除)")
private Integer delTag;
}
package com.liquidnet.service.goblin.dto.manage.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.liquidnet.commons.lang.util.DateUtil;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
* <p>
* 预约关联sku和spu表
* </p>
*
* @author liquidnet
* @since 2022-04-08
*/
@Data
public class GoblinGoodsAnticipateValueVo {
private static final long serialVersionUID = 1L;
/**
* antId
*/
@ApiModelProperty(value = "antId")
private String antId;
/**
* sku名称
*/
@ApiModelProperty(value = "sku名称")
private String skuName;
/**
* sku_id 对应 goblin_goods_sku.sku_id
*/
@ApiModelProperty(value = "sku_id 对应 goblin_goods_sku.sku_id")
private String skuId;
/**
* spu_id对应 goblin_goods_spu_id
*/
@ApiModelProperty(value = "spu_id对应 goblin_goods_spu_id")
private String spuId;
/**
* 预约开始时间
*/
@ApiModelProperty(value = "预约开始时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime aboutStartDate;
/**
* 预约结束时间
*/
@ApiModelProperty(value = "预约结束时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime aboutEndDate;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime createdDate;
/**
* 修改时间
*/
@ApiModelProperty(value = "修改时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime updateDate;
/**
* 删除(0:未删除1:已删除)
*/
@ApiModelProperty(value = "删除(0:未删除1:已删除)")
private Integer delTag;
}
package com.liquidnet.service.goblin.dto.vo;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class GoblinApplePayInnerResultVo implements Serializable, Cloneable {
private String code;
private Integer status;
private String orderCode;
private String orderId;
private String payType;
private String showUrl;
private String returnUrl;
private BigDecimal price;
private String productId;
private Object payData;
private static final GoblinApplePayInnerResultVo obj = new GoblinApplePayInnerResultVo();
public static GoblinApplePayInnerResultVo getNew() {
try {
return (GoblinApplePayInnerResultVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new GoblinApplePayInnerResultVo();
}
}
}
package com.liquidnet.service.goblin.dto.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @Author: GH
* @Date: 2022/4/10 18:18
* @Description:
*/
@Data
@NoArgsConstructor
public class GoblinGoodAnticipateUserVo implements Serializable {
private static final long serialVersionUID = 1L;
public static final Integer STATE_VALID = 1;
public static final Integer STATE_INVALID = 1;
@ApiModelProperty(value = "uid")
private String uid;
@ApiModelProperty(value = "用户手机号")
private String phone;
@ApiModelProperty(value = "用户预约的skuId")
private String skuId;
@ApiModelProperty(value = "用户状态")
private Integer state;
public GoblinGoodAnticipateUserVo(String uid, String phone, String skuId, Integer state) {
this.uid = uid;
this.phone = phone;
this.skuId = skuId;
this.state = state;
}
}
package com.liquidnet.service.goblin.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinGoodsAnticipateValueVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.math.BigInteger;
import java.time.LocalDateTime;
import java.util.List;
/**
* <p>
* 预约表
* </p>
*
* @author liquidnet
* @since 2022-04-07
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class GoblinGoodsAnticipateVo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
private String id;
/**
* ant_id
*/
private String antId;
/**
* 预约名称
*/
@ApiModelProperty(value = "预约名称")
private String name;
/**
* 预约规则
*/
@ApiModelProperty(value = "预约规则")
private String rule;
/**
* 预约人数
*/
@ApiModelProperty(value = "预约人数")
private Integer aboutPeople;
/**
* 预约人数
*/
@ApiModelProperty(value = "实际预约人数")
private Integer actualPeople;
/**
* 预约开始时间
*/
@ApiModelProperty(value = "预约开始时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime aboutStartDate;
/**
* 预约结束时间
*/
@ApiModelProperty(value = "预约结束时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime aboutEndDate;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime createdDate;
/**
* 修改时间
*/
@ApiModelProperty(value = "修改时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime updateDate;
/**
* 删除(0:未删除1:已删除)
*/
@ApiModelProperty(value = "删除(0:未删除1:已删除)")
private Integer delTag;
@ApiModelProperty(value = "目前三种状态(0:未开始,1:预约中,2:已结束)")
private Integer state;
}
......@@ -37,6 +37,8 @@ public class GoblinNftGoodsSkuInfoVo implements Serializable, Cloneable {
@ApiModelProperty(position = 21, value = "单品现价[20,2]")
private BigDecimal price;
@ApiModelProperty(position = 22, value = "IOS商品价格[20,2]")
private BigDecimal priceV;
@ApiModelProperty(position = 23, value = "单品详情", example = "单品详情...")
private String details;
......@@ -60,8 +62,6 @@ public class GoblinNftGoodsSkuInfoVo implements Serializable, Cloneable {
@ApiModelProperty(position = 55, value = "spu相关信息")
private GoblinNftGoodsSpuInfoVo goblinNftGoodsSpuInfoVo;
@ApiModelProperty(position = 56, value = "是否售罄[0-否|1-是]")
private String soldoutStatus;
@ApiModelProperty(position = 57, value = "是否还有库存 0没有库存 1有库存 即售罄")
private int isStock;
@ApiModelProperty(position = 58, value = "当前用户还可以购买数量 有限购的时候用")
......@@ -87,12 +87,12 @@ public class GoblinNftGoodsSkuInfoVo implements Serializable, Cloneable {
this.setWatchType(source.getWatchType());
this.setSkuStock(source.getSkuStock());
this.setPrice(source.getPrice());
this.setPriceV(source.getPriceV());
this.setDetails(source.getDetails());
this.setBuyLimit(source.getBuyLimit());
this.setSaleStartTime(source.getSaleStartTime());
this.setSkuCanbuy(source.getSkuCanbuy());
this.setExtagVoList(source.getExtagVoList());
this.setSoldoutStatus(source.getSoldoutStatus());
return this;
}
}
......@@ -38,7 +38,7 @@ public class GoblinNftGoodsSkuListVo implements Serializable, Cloneable {
@ApiModelProperty(position = 55, value = "spu相关信息")
private GoblinNftGoodsSpuInfoVo goblinNftGoodsSpuInfoVo;
@ApiModelProperty(position = 56, value = "是否售罄[0-否|1-是]")
@ApiModelProperty(position = 56, value = "是否售罄[0-否|1-是] 服务端判断库存使用")
private String soldoutStatus;
@ApiModelProperty(position = 57, value = "是否还有库存 0没有库存即售罄 1有库存")
private int isStock;
......
......@@ -27,14 +27,14 @@ public class GoblinPayOrderDetailsVo implements Serializable, Cloneable {
private String skuPic;
@ApiModelProperty(position = 21, value = "单品现价[20,2]")
private BigDecimal price;
@ApiModelProperty(position = 22, value = "IOS商品价格[20,2]")
private BigDecimal priceV;
@ApiModelProperty(value = "商铺名称")
private String storeName;
@ApiModelProperty(position = 22, value = "数量")
@ApiModelProperty(position = 23, value = "数量")
private Integer num;
@ApiModelProperty(position = 23, value = "总价")
private BigDecimal priceTotal;
private static final GoblinPayOrderDetailsVo obj = new GoblinPayOrderDetailsVo();
......@@ -54,6 +54,7 @@ public class GoblinPayOrderDetailsVo implements Serializable, Cloneable {
this.setSubtitle(source.getSubtitle());
this.setSkuPic(source.getSkuPic());
this.setPrice(source.getPrice());
this.setPriceV(source.getPriceV());
return this;
}
}
package com.liquidnet.service.goblin.service;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateAddParam;
import com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateParam;
import com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateUpdateParam;
import com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateValueParam;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsAnticipateVo;
import java.util.List;
/**
* <p>
* 预约表 服务类
* </p>
*
* @author liquidnet
* @since 2022-04-07
*/
public interface IGoblinGoodsAnticipateService{
/**
* 分页获取预约商品列表
* @param goodsAnticipateParam :
* @return :List<GoblinGoodsAnticipateVo>
*/
ResponseDto<PageInfo<GoblinGoodsAnticipateVo>> list(GoblinGoodsAnticipateParam goodsAnticipateParam);
ResponseDto<Object> add(GoblinGoodsAnticipateAddParam goodsAnticipateAddParam);
ResponseDto<Object> update(GoblinGoodsAnticipateUpdateParam goodsAnticipateUpdateParam);
ResponseDto<Object> updatePeople(String antId,Long people);
ResponseDto<Object> delete(String antId);
ResponseDto<Object> userAbout(String antId, String skuId,String uid, String phone,Integer state);
ResponseDto<Object> addAnticipateValues(List<GoblinGoodsAnticipateValueParam> list);
ResponseDto<Object> updateAnticipateValues(List<GoblinGoodsAnticipateValueParam> list);
}
package com.liquidnet.service.goblin.service;
/**
* <p>
* 预约表关联user表 服务类
* </p>
*
* @author liquidnet
* @since 2022-04-07
*/
public interface IGoblinGoodsAnticipateUserService{
}
package com.liquidnet.service.goblin.service;
/**
* <p>
* 预约关联sku和spu表 服务类
* </p>
*
* @author liquidnet
* @since 2022-04-07
*/
public interface IGoblinGoodsAnticipateValueService {
}
......@@ -411,6 +411,7 @@ public class KylinRefundsStatusServiceImpl {
);
if (!Objects.equals(orderRefundsOld.getStatus(), KylinTableStatusConst.ORDER_REFUND_STATUS_APPROVED)
&& !Objects.equals(orderRefundsOld.getStatus(), KylinTableStatusConst.ORDER_REFUND_STATUS_TICKET)
&& !Objects.equals(orderRefundsOld.getStatus(), KylinTableStatusConst.ORDER_REFUND_STATUS_ERROR)
) {
continue;
}
......
......@@ -107,6 +107,7 @@ liquidnet:
order:
url-pay:
pay: http://devdragon.zhengzai.tv/dragon/pay/dragonPay
applePay: http://devdragon.zhengzai.tv/dragon/notify/apple/purchase
check: http://devdragon.zhengzai.tv/dragon/pay/checkOrder
localUrl: http://devorder.zhengzai.tv/order/order/syncOrder
goblinUrl: http://devgoblin.zhengzai.tv/goblin/order/pay/syncOrder
......
......@@ -118,6 +118,7 @@ liquidnet:
url: http://testadam.zhengzai.tv/adam
url-pay:
pay: http://testdragon.zhengzai.tv/dragon/pay/dragonPay
applePay: http://testdragon.zhengzai.tv/dragon/notify/apple/purchase
check: http://testdragon.zhengzai.tv/dragon/pay/checkOrder
localUrl: http://testorder.zhengzai.tv/order/order/syncOrder
goblinUrl: http://testorder.zhengzai.tv/order/goblin/syncOrder
......
......@@ -92,12 +92,12 @@ public class AdamRealNameServiceImpl implements IAdamRealNameService {
delUserRealInfoObjs = CollectionUtil.linkedListObjectArr(),
updateUserMobileLocateObjs = CollectionUtil.linkedListObjectArr();
toMqSqls.add(SqlMapping.get("adam_real_name.add"));
initUserRealInfoObjs.add(paramList.toArray());
toMqSqls.add(SqlMapping.get("adam_real_name.del"));
if (updateFlg) {
delUserRealInfoObjs.add(new Object[]{realName.getCreatedAt(), realName.getUid()});
}
toMqSqls.add(SqlMapping.get("adam_real_name.add"));
initUserRealInfoObjs.add(paramList.toArray());
String mobile = (String) CurrentUtil.getTokenClaims().get(CurrentUtil.TOKEN_MOBILE);
String[] mobileLocateArr = adamRdmService.getMobileLocateArr(mobile);
......@@ -115,7 +115,7 @@ public class AdamRealNameServiceImpl implements IAdamRealNameService {
// );
queueUtils.sendMsgByRedis(
MQConst.AdamQueue.SQL_UCENTER.getKey(),
SqlMapping.gets(toMqSqls, initUserRealInfoObjs, delUserRealInfoObjs, updateUserMobileLocateObjs)
SqlMapping.gets(toMqSqls, delUserRealInfoObjs, initUserRealInfoObjs, updateUserMobileLocateObjs)
);
log.debug("#MQ耗时:{}ms", System.currentTimeMillis() - s);
}
......
......@@ -55,6 +55,26 @@ public class AdamUserBusiAcctServiceImpl implements IAdamUserBusiAcctService {
}
if (AdamEnum.BizAcct.NFT_ZX.name().equals(bizCode)) {
boolean inputNameIdCardInvalidFlg = StringUtils.isBlank(name) || name.contains("*") || StringUtils.isBlank(idCard) || idCard.contains("*");
AdamRealInfoVo realInfoVo = adamRdmService.getRealInfoVoByUidPlain(uid);
if (null != realInfoVo) {// 账号已实名
if (realInfoVo.getNode() == 2) {// 二要素认证的
if (inputNameIdCardInvalidFlg) {
name = realInfoVo.getName();
idCard = realInfoVo.getIdCard();
}
adamUserService.identityForUpsert(uid, name, idCard, mobile, true);
} else {// 三要素认证的
name = realInfoVo.getName();
idCard = realInfoVo.getIdCard();
}
} else {// 账号未实名
if (inputNameIdCardInvalidFlg) {
return ResponseDto.failure(ErrorMapping.get("10101"));
}
adamUserService.identityForUpsert(uid, name, idCard, mobile, false);
}
ResponseDto<AdamUserBizAcctVo> responseDto = this.openAccountForNftZXin(uid, name, idCard, mobile);
if (responseDto.isSuccess()) {
AdamUserBizAcctVo userBizAcctVo = responseDto.getData();
......@@ -80,7 +100,7 @@ public class AdamUserBusiAcctServiceImpl implements IAdamUserBusiAcctService {
}
return responseDto;
}
log.error("#开通业务账号:无效的业务码[UID={},bizCode={}]", bizCode, uid);
log.warn("#开通业务账号:无效的业务码[UID={},bizCode={}]", bizCode, uid);
return ResponseDto.failure();
}
......@@ -94,25 +114,6 @@ public class AdamUserBusiAcctServiceImpl implements IAdamUserBusiAcctService {
* @return ResponseDto<AdamUserBizAcctVo>
*/
private ResponseDto<AdamUserBizAcctVo> openAccountForNftZXin(String uid, String name, String idCard, String mobile) {
AdamRealInfoVo realInfoVo = adamRdmService.getRealInfoVoByUidPlain(uid);
if (StringUtils.isBlank(name) || name.contains("*")) {
if (null == realInfoVo) {
return ResponseDto.failure(ErrorMapping.get("10102"));
}
name = realInfoVo.getName();
idCard = realInfoVo.getIdCard();
if (realInfoVo.getNode() != 3) {// 非三要素认证先做认证
adamUserService.identityForUpsert(uid, name, idCard, mobile, true);
}
} else {
if (null == realInfoVo || (3 != realInfoVo.getNode() && (!realInfoVo.getName().equals(name) || !realInfoVo.getIdCard().equals(idCard)))) {
adamUserService.identityForUpsert(uid, name, idCard, mobile, true);
} else {
name = realInfoVo.getName();
idCard = realInfoVo.getIdCard();
}
}
ObjectNode postBodyNode = JsonUtils.OM().createObjectNode();
postBodyNode.put("routerType", "zxinchain");
postBodyNode.put("idCardType", "1");
......
......@@ -1060,6 +1060,53 @@ create table goblin_user_coupon
) engine = InnoDB comment '商城用户券信息';
create unique index uidx_guc_ucoupon_id on goblin_user_coupon (ucoupon_id);
# -- >>------------------------------------------------------------------------------------
DROP TABLE IF EXISTS `goblin_goods_anticipate`;
CREATE TABLE `goblin_goods_anticipate` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键id',
`ant_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ant_id',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '预约名称',
`rule` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '预约规则',
`about_people` bigint NULL DEFAULT 0 COMMENT '预约人数',
`actual_people` bigint NULL DEFAULT 0 COMMENT '实际预约人数',
`about_start_date` datetime NOT NULL COMMENT '预约开始时间',
`about_end_date` datetime NOT NULL COMMENT '预约结束时间',
`created_date` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
`del_tag` int NOT NULL DEFAULT 0 COMMENT '删除(0:未删除1:已删除)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '预约表' ROW_FORMAT = Dynamic;
# -- >>------------------------------------------------------------------------------------
DROP TABLE IF EXISTS `goblin_goods_anticipate_value`;
CREATE TABLE `goblin_goods_anticipate_value` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键id',
`ant_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '预约id 对应(goblin_goods_anticipate.id)',
`sku_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'sku名称',
`sku_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'sku_id 对应 goblin_goods_sku.sku_id',
`spu_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'spu_id对应 goblin_goods_spu_id',
`about_start_date` datetime NOT NULL COMMENT '预约开始时间',
`about_end_date` datetime NOT NULL COMMENT '预约结束时间',
`created_date` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
`update_date` datetime NULL DEFAULT NULL COMMENT '修改时间',
`del_tag` int NOT NULL DEFAULT 0 COMMENT '删除(0:未删除1:已删除)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '预约关联sku和spu表' ROW_FORMAT = Dynamic;
# -- >>------------------------------------------------------------------------------------
DROP TABLE IF EXISTS `goblin_goods_anticipate_user`;
CREATE TABLE `goblin_goods_anticipate_user` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id',
`uid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户id',
`phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '手机号',
`sku_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'sku_id',
`state` int NOT NULL DEFAULT 0 COMMENT '状态(0:正常(默认))',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '预约表关联user表' ROW_FORMAT = Dynamic;
# -- >>------------------------------------------------------------------------------------
# -- >>------------------------------------------------------------------------------------
# -- >>------------------------------------------------------------------------------------
\ No newline at end of file
package com.liquidnet.service.goblin.controller.manage;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateAddParam;
import com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateParam;
import com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateUpdateParam;
import com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateValueParam;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsAnticipateVo;
import com.liquidnet.service.goblin.service.IGoblinGoodsAnticipateService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* 预约表 前端控制器
* </p>
*
* @author liquidnet
* @since 2022-04-07
*/
@Slf4j
@RestController
@Api(tags = "预约相关")
@RequestMapping("/goblin/anticipate")
public class GoblinGoodsAnticipateController {
@Autowired
IGoblinGoodsAnticipateService goblinGoodsAnticipateService;
@ApiOperation("创建预约信息")
@PostMapping("/add")
public ResponseDto<Object> add(@RequestBody GoblinGoodsAnticipateAddParam goodsAnticipateAddParam) {
return goblinGoodsAnticipateService.add(goodsAnticipateAddParam);
}
@PostMapping("/list")
@ApiOperation("获取预约列表")
public ResponseDto<PageInfo<GoblinGoodsAnticipateVo>> list(GoblinGoodsAnticipateParam goodsAnticipateParam) {
return goblinGoodsAnticipateService.list(goodsAnticipateParam);
}
@ApiOperation("修改预约人数")
@PostMapping("/updatePeople")
public ResponseDto<Object> updatePeople(@RequestParam(name = "antId", required = true) String antId, @RequestParam(name = "people", required = true) Long people) {
return goblinGoodsAnticipateService.updatePeople(antId, people);
}
@ApiOperation("修改预约")
@PostMapping("/update")
public ResponseDto<Object> update(GoblinGoodsAnticipateUpdateParam goodsAnticipateUpdateParam) {
return goblinGoodsAnticipateService.update(goodsAnticipateUpdateParam);
}
@ApiOperation("删除预约")
@DeleteMapping("/delete")
public ResponseDto<Object> delete(@RequestParam(name = "antId") String antId) {
return goblinGoodsAnticipateService.delete(antId);
}
@ApiOperation("创建预约关联sku")
@PostMapping("/addAnticipateValues")
public ResponseDto<Object> addAnticipateValues(@RequestBody List<GoblinGoodsAnticipateValueParam> list) {
return goblinGoodsAnticipateService.addAnticipateValues(list);
}
@ApiOperation("修改预约关联")
@PostMapping("/updateAnticipateValues")
public ResponseDto<Object> updateAnticipateValues(@RequestBody List<GoblinGoodsAnticipateValueParam> list) {
return goblinGoodsAnticipateService.updateAnticipateValues(list);
}
@ApiOperation("用户预约(state预约标识:0为预约,1为取消预约)")
@PostMapping("/userAbout")
public ResponseDto<Object> userAbout(@RequestParam(name = "antId", required = true) String antId,
@RequestParam(name = "skuId", required = true) String skuId,
@RequestParam(name = "uid", required = true) String uid,
@RequestParam(name = "phone", required = true) String phone,
@RequestParam(name = "state", required = true) Integer state) {
return goblinGoodsAnticipateService.userAbout(antId, skuId, uid, phone, state);
}
}
package com.liquidnet.service.goblin.service.impl;
import com.liquidnet.service.goblin.service.IGoblinGoodsAnticipateUserService;
import org.springframework.stereotype.Service;
/**
* <p>
* 预约表关联user表 服务实现类
* </p>
*
* @author liquidnet
* @since 2022-04-07
*/
@Service
public class GoblinGoodsAnticipateUserServiceImpl implements IGoblinGoodsAnticipateUserService {
}
package com.liquidnet.service.goblin.service.impl;
import com.liquidnet.service.goblin.service.IGoblinGoodsAnticipateValueService;
import org.springframework.stereotype.Service;
/**
* <p>
* 预约关联sku和spu表 服务实现类
* </p>
*
* @author liquidnet
* @since 2022-04-07
*/
@Service
public class GoblinGoodsAnticipateValueServiceImpl implements IGoblinGoodsAnticipateValueService {
}
......@@ -48,7 +48,11 @@ public class GoblinNftGoodsAppServiceImpl implements IGoblinNftGoodsAppService {
int size = 10;
//条件
Query query = Query.query(
Criteria.where("skuType").is(1).and("delFlg").is("0").and("status").is("3").and("shelvesStatus").is("3").and("skuAppear").is("0")
Criteria.where("skuType").is(1)
.and("delFlg").is("0")
.and("status").is("3")
.and("shelvesStatus").is("3")
.and("skuAppear").is("0")
);
long count = mongoTemplate.count(query, GoblinGoodsSkuInfoVo.class, GoblinGoodsSkuInfoVo.class.getSimpleName());
List<GoblinNftGoodsSkuListVo> skuList = goblinRedisUtils.getGoblinNftGoodsInfoListVo();
......@@ -76,18 +80,15 @@ public class GoblinNftGoodsAppServiceImpl implements IGoblinNftGoodsAppService {
for (GoblinNftGoodsSkuListVo skuInfoVo : skuList) {
int stock = 0;
if (skuInfoVo.getUnbox().equals("0")) {
stock = goblinRedisUtils.getSkuStock(null, skuInfoVo.getSkuId());
if (null == skuInfoVo.getSoldoutStatus() || skuInfoVo.getSoldoutStatus().equals("0")) {
stock = goblinRedisUtils.getSkuStock(null, skuInfoVo.getSkuId());
}
} else {
String spuId = skuInfoVo.getSpuId();
List<String> skuArray = goblinRedisUtils.getGoodsInfoVo(spuId).getSkuIdList();
for (String skuIdItem : skuArray) {
GoblinGoodsSkuInfoVo itemVo = goblinRedisUtils.getGoodsSkuInfoVo(skuIdItem);
if (null == itemVo) {
continue;
}
if (LocalDateTime.now().isAfter(itemVo.getSaleStartTime()) && itemVo.getShelvesStatus().equals("3") && itemVo.getSoldoutStatus().equals("0")) {//开卖后在计算库存
stock += goblinRedisUtils.getSkuStock(null, skuIdItem);
}
stock += goblinRedisUtils.getSkuAllStatusStock(itemVo);
}
}
if (stock <= 0 || (null != skuInfoVo.getSoldoutStatus() && skuInfoVo.getSoldoutStatus().equals("1"))) {
......@@ -106,12 +107,7 @@ public class GoblinNftGoodsAppServiceImpl implements IGoblinNftGoodsAppService {
@Override
public GoblinNftGoodsSkuInfoVo goodsDetail(String skuId) {
GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(skuId);
if (
null != goodsSkuInfoVo && goodsSkuInfoVo.getDelFlg().equals("0") &&
goodsSkuInfoVo.getStatus().equals("3") &&
goodsSkuInfoVo.getShelvesStatus().equals("3") && goodsSkuInfoVo.getSkuAppear().equals("0") &&
goodsSkuInfoVo.getSkuType() == 1
) {
if (goblinRedisUtils.getSkuAllStatusShow(goodsSkuInfoVo)) {
GoblinNftGoodsSkuInfoVo nftGoodsSkuInfoVo = GoblinNftGoodsSkuInfoVo.getNew().copy(goodsSkuInfoVo);
// 限购数量
Integer buyCount = 0;
......@@ -125,22 +121,19 @@ public class GoblinNftGoodsAppServiceImpl implements IGoblinNftGoodsAppService {
// 库存 盲盒计算所有sku库存总数
int stock = 0;
if (goodsSkuInfoVo.getUnbox().equals("0")) {
stock = goblinRedisUtils.getSkuStock(null, skuId);
if (null == goodsSkuInfoVo.getSoldoutStatus() || goodsSkuInfoVo.getSoldoutStatus().equals("0")) {
stock = goblinRedisUtils.getSkuStock(null, skuId);
}
} else {
String spuId = goodsSkuInfoVo.getSpuId();
List<String> skuArray = goblinRedisUtils.getGoodsInfoVo(spuId).getSkuIdList();
for (String skuIdItem : skuArray) {
GoblinGoodsSkuInfoVo itemVo = goblinRedisUtils.getGoodsSkuInfoVo(skuIdItem);
if (null == itemVo) {
continue;
}
if (LocalDateTime.now().isAfter(itemVo.getSaleStartTime()) && itemVo.getShelvesStatus().equals("3") && itemVo.getSoldoutStatus().equals("0")) {//开卖后在计算库存
stock += goblinRedisUtils.getSkuStock(null, skuIdItem);
}
stock += goblinRedisUtils.getSkuAllStatusStock(itemVo);
}
}
log.info("skuId:{}, 库存数量:{}", skuId, stock);
if (stock <= 0 || (null != nftGoodsSkuInfoVo.getSoldoutStatus() && nftGoodsSkuInfoVo.getSoldoutStatus().equals("1"))) {
if (stock <= 0) {
nftGoodsSkuInfoVo.setIsStock(0);
} else {
nftGoodsSkuInfoVo.setIsStock(1);
......
......@@ -84,15 +84,9 @@ public class GoblinNftOrderAppServiceImpl implements IGoblinNftOrderAppService {
@Override
public GoblinPayOrderDetailsVo payOrderDetails(String skuId) {
GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(skuId);
if (
null != goodsSkuInfoVo && goodsSkuInfoVo.getDelFlg().equals("0") &&
goodsSkuInfoVo.getStatus().equals("3") &&
goodsSkuInfoVo.getShelvesStatus().equals("3") && goodsSkuInfoVo.getSkuAppear().equals("0") &&
goodsSkuInfoVo.getSkuType() == 1
) {
if (goblinRedisUtils.getSkuAllStatusShow(goodsSkuInfoVo)) {
GoblinPayOrderDetailsVo payOrderDetailsVo = GoblinPayOrderDetailsVo.getNew().copy(goodsSkuInfoVo);
payOrderDetailsVo.setNum(1);
payOrderDetailsVo.setPriceTotal(payOrderDetailsVo.getPrice());
GoblinStoreInfoVo storeInfoVo = goblinRedisUtils.getStoreInfoVo(goodsSkuInfoVo.getStoreId());
payOrderDetailsVo.setStoreName(storeInfoVo.getStoreName());
......
......@@ -4,9 +4,8 @@ import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.goblin.constant.GoblinStatusConst;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtCouponFilterParam;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtGoodsFilterParam;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtNoticeFilterParam;
import com.liquidnet.service.goblin.dto.manage.*;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinGoodsAnticipateValueVo;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinMgtCategorySpecVo;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtCouponListVo;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtGoodsListVo;
......@@ -37,6 +36,7 @@ import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
......@@ -54,6 +54,128 @@ public class GoblinMongoUtils {
@Autowired
GoblinRedisUtils redisUtils;
/* ---------------------------------------- 预约数据源 ---------------------------------------- */
/**
* 分页查询
*/
public HashMap<String,Object> getGoblinGoodsAnticipateVos(GoblinGoodsAnticipateParam goodsAnticipateParam) {
HashMap<String,Object> info = CollectionUtil.mapStringObject();
Pageable pageable = PageRequest.of(goodsAnticipateParam.getPageNum() - 1, goodsAnticipateParam.getPageSize(), Sort.by(Sort.Direction.DESC,"createdDate"));
Criteria criteria = Criteria.where("delTag").is(0);
if (StringUtils.isNotBlank(goodsAnticipateParam.getName())) {
criteria = criteria.and("name").is(goodsAnticipateParam.getName());
}
Query query = Query.query(criteria);
//查询总数
long count = mongoTemplate.count(query, GoblinGoodsAnticipateVo.class, GoblinGoodsAnticipateVo.class.getSimpleName());
query.with(pageable);
List<GoblinGoodsAnticipateVo> voList = mongoTemplate.find(query, GoblinGoodsAnticipateVo.class, GoblinGoodsAnticipateVo.class.getSimpleName());
info.put("total",count);
info.put("data",voList);
return info;
}
/**
* 新增预约
*/
public void setGoblinGoodsAnticipateVo(GoblinGoodsAnticipateVo vo) {
mongoTemplate.insert(vo, GoblinGoodsAnticipateVo.class.getSimpleName());
}
/**
* 新增用户预约
*/
public void setGoblinGoodsAnticipateUserVo(GoblinGoodAnticipateUserVo vo) {
mongoTemplate.insert(vo, GoblinGoodAnticipateUserVo.class.getSimpleName());
}
/**
* 根据antId修改 预约人数
*/
public void updateGoblinGoodsAnticipateVoPeople(String antId, Long people) {
Query query = Query.query(Criteria.where("antId").is(antId));
Update update = new Update().set("aboutPeople", people).set("updateDate", LocalDateTime.now());
mongoTemplate.updateFirst(query, update, GoblinGoodsAnticipateVo.class.getSimpleName());
}
/**
* 根据antId修改 预约人数
*/
public void updateGoblinGoodsAnticipateVo(GoblinGoodsAnticipateUpdateParam goodsAnticipateUpdateParam) {
Query query = Query.query(Criteria.where("antId").is(goodsAnticipateUpdateParam.getAntId()));
Update update = new Update().set("name", goodsAnticipateUpdateParam.getName()).set("rule", goodsAnticipateUpdateParam.getRule()).set("updateDate",LocalDateTime.now());
mongoTemplate.updateFirst(query, update, GoblinGoodsAnticipateVo.class.getSimpleName());
}
/**
* 根据amtId删除VO
*/
public boolean delGoodsAnticipateVo(String antId) {
//查询该预约下有多少个开启预约的skuId
delAnticipateValues(antId);
redisUtils.delGoodsAnticipateVo(antId);
Query query = Query.query(Criteria.where("antId").is(antId));
return mongoTemplate.remove(query, GoblinGoodsAnticipateVo.class.getSimpleName()).getDeletedCount() > 0;
}
/**
* 根据活动id查询关联
*/
public List<GoblinGoodsAnticipateValueVo> getGoodsAnticipateValues(String antId){
Criteria criteria = Criteria.where("antId").is(antId);
Query query = Query.query(criteria);
return mongoTemplate.find(query, GoblinGoodsAnticipateValueVo.class, GoblinGoodsAnticipateValueVo.class.getSimpleName());
}
/**
* 根据用户预约
*/
public void delGoodsAnticipateUserVo(String uid,String skuId) {
Query query = Query.query(Criteria.where("uid").is(uid).and("skuId").is(skuId));
mongoTemplate.remove(query, GoblinGoodsAnticipateVo.class.getSimpleName()).getDeletedCount();
}
/**
* 根据预约ID获取预约详情
*/
public GoblinGoodsAnticipateVo getAnticipateVo(String antId) {
return mongoTemplate.findOne(Query.query(Criteria.where("autId").is(antId)),
GoblinGoodsAnticipateVo.class, GoblinGoodsAnticipateVo.class.getSimpleName());
}
/**
* 添加预约中间表信息
*/
public void addAnticipateValues(GoblinGoodsAnticipateValueVo goodsAnticipateValueVo) {
mongoTemplate.insert(goodsAnticipateValueVo, GoblinGoodsAnticipateValueVo.class.getSimpleName());
}
/**
* 根据预约id和skuId删除关联
*/
public void delAnticipateValueVo(GoblinGoodsAnticipateValueVo goodsAnticipateValueVo) {
Query query = Query.query(Criteria.where("antId").is(goodsAnticipateValueVo.getAntId()).and("skuId").is(goodsAnticipateValueVo.getSkuId()));
mongoTemplate.remove(query, GoblinGoodsAnticipateValueVo.class.getSimpleName()).getDeletedCount();
}
/**
* 根据预约id删除sku关联信息
*/
public void delAnticipateValues(String antId){
Query query = Query.query(Criteria.where("antId").is(antId));
mongoTemplate.remove(query, GoblinGoodsAnticipateValueVo.class.getSimpleName()).getDeletedCount();
}
/**
* 修改sku关联信息
*/
public void updateAnticipateValueVo(GoblinGoodsAnticipateValueVo goodsAnticipateValueVo) {
Query query = Query.query(Criteria.where("antId").is(goodsAnticipateValueVo.getAntId()).and("skuId").is(goodsAnticipateValueVo.getSkuId()));
Update update = new Update().set("aboutStartDate", goodsAnticipateValueVo.getAboutStartDate()).set("aboutEndDate", goodsAnticipateValueVo.getAboutEndDate()).set("updateDate",LocalDateTime.now());
mongoTemplate.updateFirst(query, update, GoblinGoodsAnticipateValueVo.class.getSimpleName());
}
/* ---------------------------------------- 平台分类数据源 ---------------------------------------- */
public List<GoblinSelfGoodsCategoryVo> getSelfGoodsCategoryVos() {
......
......@@ -2,10 +2,7 @@ package com.liquidnet.service.goblin.util;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.type.TypeReference;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.adam.dto.vo.AdamRscPolymer01Vo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.candy.param.BackCouponParam;
......
......@@ -42,6 +42,78 @@ public class GoblinRedisUtils {
redisUtil.del(keys);
}
/* ---------------------------------------- 预约相关 ---------------------------------------- */
/**
* 该skuId已开启预约
*/
public void setAnticipateValue(String antId, String skuId){
redisUtil.set(GoblinRedisConst.ANTICIPATE_SKUID.concat(antId).concat(skuId),1);
}
/**
* 删除skuId已开启预约
*/
public void delAnticipateValue(String antId, String skuId){
redisUtil.del(GoblinRedisConst.ANTICIPATE_SKUID.concat(antId).concat(skuId));
}
/**
* 获取关联
*/
public boolean getAnticipate(String antId, String skuId){
return redisUtil.get(GoblinRedisConst.ANTICIPATE_SKUID.concat(antId).concat(skuId)) != null;
}
public GoblinGoodAnticipateUserVo getUserAboutAut(String skuId, String uid) {
return (GoblinGoodAnticipateUserVo) redisUtil.get(GoblinRedisConst.USER_ANTICIPATE_STATE.concat(skuId).concat(uid));
}
/**
* 新增用户预约
*/
public void setUserAboutSku(GoblinGoodAnticipateUserVo user) {
goblinMongoUtils.setGoblinGoodsAnticipateUserVo(user);
redisUtil.set(GoblinRedisConst.USER_ANTICIPATE_STATE.concat(user.getSkuId()).concat(user.getUid()),user);
}
/**
* 删除用户预约
*/
public void delUserAboutSku(String skuId, String uid) {
goblinMongoUtils.delGoodsAnticipateUserVo(uid, skuId);
redisUtil.del(GoblinRedisConst.USER_ANTICIPATE_STATE.concat(skuId).concat(uid));
}
/**
* 实际预约人数修改
*/
public void setAutIdPeople(String autId,Integer state) {
Integer num = (Integer) redisUtil.get(GoblinRedisConst.ANTICIPATE_PEOPLE.concat(autId));
if (state.equals(GoblinGoodAnticipateUserVo.STATE_VALID)){
redisUtil.set(GoblinRedisConst.ANTICIPATE_PEOPLE.concat(autId),num==null? 1:num+1);
}
if (state.equals(GoblinGoodAnticipateUserVo.STATE_INVALID)&&num!=null){
redisUtil.set(GoblinRedisConst.ANTICIPATE_PEOPLE.concat(autId),num-1);
}
}
/**
* 获取实际预约人数修改
*/
public Integer getAutIdPeople(String autId) {
return (Integer) redisUtil.get(GoblinRedisConst.ANTICIPATE_PEOPLE.concat(autId));
}
/**
* 删除预约
*/
public void delGoodsAnticipateVo(String skuId) {
redisUtil.del(GoblinRedisConst.ANTICIPATE_SKUID.concat(skuId));
}
/* ---------------------------------------- sku库存相关 ---------------------------------------- */
public void setSkuStock(String marketPre, String skuId, Integer stock) {
String rk = GoblinRedisConst.REAL_STOCK_SKU;
......@@ -1467,12 +1539,53 @@ public class GoblinRedisUtils {
return redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK.concat(vo.getArtworkId()), vo, 259200);
}
//
// 记录用户开通数字账户
public void setNftNumAccount(String userId) {
String redisKey = GoblinRedisConst.REDIS_GOBLIN_NFT_NUM_ACCOUNT.concat(userId);
redisUtil.set(redisKey, 1);
}
/**
* private int skuType 商品类型[0-常规|1-数字藏品]
* private String status 审核状态[0-初始编辑|1-审核中|2-审核不通过|3-审核通过];
* private String shelvesStatus 单品上架状态[0-待上架|1-下架|2-违规|3-上架];
* private String skuAppear 是否隐藏[0-默认展示|1-隐藏];
* private String delFlg 删除标记[0-未删除|1-删除];
*
* private LocalDateTime saleStartTime 开售时间;
* private LocalDateTime saleStopTime 停售时间 预留 暂时不做处理;
* private String soldoutStatus 是否售罄[0-否|1-是];
*
* private String skuCanbuy 是否购买[0-否|1-是] 这个用来预览 前端自己判断;
*/
// 获取盲盒下藏品的库存 各种状态下不能算库存的排除掉
public int getSkuAllStatusStock(GoblinGoodsSkuInfoVo info) {
if (
info != null
&& LocalDateTime.now().isAfter(info.getSaleStartTime())
&& (null == info.getSoldoutStatus() || info.getSoldoutStatus().equals("0"))
) {// 可以返回库存
return getSkuStock(null, info.getSkuId());
} else {// 不计入库存
return 0;
}
}
// 各种状态下判断藏品是否可以展示
public boolean getSkuAllStatusShow(GoblinGoodsSkuInfoVo info) {
if (
info != null
&& info.getSkuType() == 1
&& info.getStatus().equals("3")
&& info.getShelvesStatus().equals("3")
&& info.getSkuAppear().equals("0")
&& info.getDelFlg().equals("0")
) {
return true;
} else {
return false;
}
}
/* ---------------------------------------- ---------------------------------------- */
/* ---------------------------------------- ---------------------------------------- */
}
......@@ -10,9 +10,9 @@ spring:
cloud:
config:
# uri: http://127.0.0.1:7002/support-config
# uri: http://39.107.71.112:7002/support-config
profile: ${liquidnet.cloudConfig.profile}
name: ${spring.application.name} #默认为spring.application.name
discovery:
enabled: true
service-id: liquidnet-support-config
\ No newline at end of file
uri: http://39.107.71.112:7002/support-config
# profile: ${liquidnet.cloudConfig.profile}
# name: ${spring.application.name} #默认为spring.application.name
# discovery:
# enabled: true
# service-id: liquidnet-support-config
\ No newline at end of file
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class TestGoblinGoodsAnticipate {
}
......@@ -38,13 +38,15 @@ public class OrderApplePayController {
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "orderId", value = "订单ID", example = "1"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "type", value = "订单类型 NFT", example = "NFT"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "receiptData", value = "receipt-data", example = "M0WWAoL3nK5I1xF3OX2n9aHlQptG4NbuHbkYmD7cBsLT"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "transactionId", value = "transactionId", example = "2000000027803904"),
})
public ResponseDto pay(
@RequestParam("orderId") @NotBlank(message = "订单ID不能为空") String orderId,
@RequestParam("type") @NotBlank(message = "订单类型不能为空") @Pattern(regexp = "\\b(NFT)\\b", message = "订单类型无效") String type,
@RequestParam("receiptData") @NotBlank(message = "receiptData不能为空") String receiptData
@RequestParam("receiptData") @NotBlank(message = "receiptData不能为空") String receiptData,
@RequestParam("transactionId") @NotBlank(message = "transactionId不能为空") String transactionId
) {
boolean isPay = applePayService.pay(orderId, type, receiptData);
boolean isPay = applePayService.pay(orderId, type, receiptData, transactionId);
if (isPay) {
return ResponseDto.success("支付成功");
} else {
......
......@@ -162,6 +162,9 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
String orderId = IDGenerator.nextSnowId();
String orderCode = IDGenerator.storeCode(orderId);
BigDecimal totalPrice = skuVo.getPrice();
if (payParam.getPayType().equals("applepay")) {
totalPrice = skuVo.getPriceV();
}
/*if (!StringUtils.isEmpty(platVoucherCode)) {// 平台券
GoblinUseResultVo useResultVo = nftOrderUtils.useCoupon(platVoucherCode, "购买NFT商品[" + orderCode + "]", totalPrice, spuId, uid);
String typeVoucher = useResultVo.getCouType();
......@@ -191,7 +194,7 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
}
// 下单唤起支付
GoblinNftPayResultVo nftPayResultVo = payOrder(nftOrder, uid, payParam);
GoblinNftPayResultVo nftPayResultVo = payOrder(nftOrder, uid, payParam, skuVo.getProductId());
if (null == nftPayResultVo) {
nftOrderUtils.backSkuCountAndStock(uid, stockSkuId, skuId, number);
return ResponseDto.failure("下单失败啦~");
......@@ -360,7 +363,7 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
}
}
private GoblinNftPayResultVo payOrder(GoblinNftOrder nftOrder, String uid, GoblinNftOrderPayParam payParam) {
private GoblinNftPayResultVo payOrder(GoblinNftOrder nftOrder, String uid, GoblinNftOrderPayParam payParam, String productId) {
try {
// 是否免费
boolean isFree = false;
......@@ -374,7 +377,10 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
payCode = "";
NftPayResultVo.setCode(payCode);
NftPayResultVo.setOrderCode(nftOrder.getOrderCode());
NftPayResultVo.setPayData("");
HashMap<String, Object> payDataMap = CollectionUtil.mapStringObject();
payDataMap.put("productId", productId);
payDataMap.put("quantity", nftOrder.getNum());
NftPayResultVo.setPayData(payDataMap);
NftPayResultVo.setPayType(nftOrder.getPayType());
NftPayResultVo.setPrice(nftOrder.getPriceActual());
NftPayResultVo.setShowUrl(showUrl);
......@@ -630,7 +636,7 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.GOBLIN_NFT_ORDER.getKey(),
SqlMapping.gets(sqls, sqlDataOrder));
if (syncOrderParam.getPaymentType().equals("APPLE_PAY")) {// 苹果支付不做处理
if (orderVo.getPayType().equals("applepay")) {// 苹果支付不做处理
return "success";
} else {// 退款
nftOrderUtils.refundOrderSku(orderId, syncOrderParam.getPaymentId(), syncOrderParam.getPaymentType());
......
......@@ -3,9 +3,9 @@ package com.liquidnet.service.order.service.impl;
import com.fasterxml.jackson.core.type.TypeReference;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.vo.GoblinApplePayInnerResultVo;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo;
import com.liquidnet.service.goblin.dto.vo.GoblinNftOrderVo;
import com.liquidnet.service.goblin.dto.vo.GoblinPayInnerResultVo;
import com.liquidnet.service.goblin.param.GoblinNftOrderPayCallbackParam;
import com.liquidnet.service.order.utils.GoblinNftOrderUtils;
import com.liquidnet.service.order.utils.GoblinRedisUtils;
......@@ -30,10 +30,11 @@ public class OrderApplePayServiceImpl {
@Autowired
private GoblinNftOrderServiceImpl goblinNftOrderService;
@Value("${liquidnet.service.order.url-pay.pay}")
@Value("${liquidnet.service.order.url-pay.applePay}")
private String payUrl;
public boolean pay(String orderId, String type, String receiptData) {
public boolean pay(String orderId, String type, String receiptData, String transactionId) {
try {
log.info("苹果支付成功通知参数 [orderId:{},type:{},receiptData:{}]", orderId, type, receiptData);
GoblinNftOrderVo nftOrder = nftOrderUtils.getNftOrder(orderId);
if (null == nftOrder) {
......@@ -58,25 +59,26 @@ public class OrderApplePayServiceImpl {
httpData.add("showUrl", "");
httpData.add("returnUrl", "");
httpData.add("receiptData", receiptData);
httpData.add("transactionId", transactionId);
LinkedMultiValueMap<String, String> header = CollectionUtil.linkedMultiValueMapStringString();
header.add("Accept", "application/json;charset=UTF-8");
String returnData = HttpUtil.post(payUrl, httpData, header);
log.info("苹果支付调用DRAGON结果 = " + returnData);
ResponseDto<GoblinPayInnerResultVo> dto = JsonUtils.fromJson(returnData, new TypeReference<ResponseDto<GoblinPayInnerResultVo>>() {
ResponseDto<GoblinApplePayInnerResultVo> dto = JsonUtils.fromJson(returnData, new TypeReference<ResponseDto<GoblinApplePayInnerResultVo>>() {
});
GoblinPayInnerResultVo dtoData = dto.getData();
if (null == dtoData || dtoData.getStatus() == 0) {
GoblinApplePayInnerResultVo dtoData = dto.getData();
if (null == dtoData || StringUtil.isEmpty(dtoData.getProductId())) {
return false;
} else {
// 支付成功
GoblinNftOrderPayCallbackParam NftOrderPayCallbackParam = GoblinNftOrderPayCallbackParam.getNew();
NftOrderPayCallbackParam.setCode(nftOrder.getPayCode());
NftOrderPayCallbackParam.setCode(dtoData.getCode());
NftOrderPayCallbackParam.setOrderCode(nftOrder.getOrderCode());
NftOrderPayCallbackParam.setPaymentAt(DateUtil.format(LocalDateTime.now(), DateUtil.Formatter.yyyyMMddHHmmss));
NftOrderPayCallbackParam.setPrice(nftOrder.getPriceActual());
NftOrderPayCallbackParam.setPaymentId("APPLE_PAYMENT_ID");// 这里应该是接口返回
NftOrderPayCallbackParam.setPaymentType("APPLE_PAY");// 这里应该是接口返回
NftOrderPayCallbackParam.setPaymentType(nftOrder.getDeviceFrom().concat(nftOrder.getPayType()).toUpperCase());// 这里应该是接口返回
NftOrderPayCallbackParam.setStatus(1);
if (type.equals("NFT")) {
String isSync = goblinNftOrderService.syncOrder(NftOrderPayCallbackParam);
......@@ -86,5 +88,9 @@ public class OrderApplePayServiceImpl {
}
return true;
}
} catch (Exception e) {
log.error("OrderApplePayServiceImplE e:{}", e);
return false;
}
}
}
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