记得上下班打卡 | 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.github.pagehelper.PageInfo;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
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.manage.vo.GoblinGoodsAnticipateValueVo;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodAnticipateUserVo;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsAnticipateVo;
import com.liquidnet.service.goblin.service.IGoblinGoodsAnticipateService;
import com.liquidnet.service.goblin.util.GoblinMongoUtils;
import com.liquidnet.service.goblin.util.GoblinRedisUtils;
import com.liquidnet.service.goblin.util.QueueUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
/**
* <p>
* 预约表 服务实现类
* </p>
*
* @author liquidnet
* @since 2022-04-07
*/
@Service
@Slf4j
public class GoblinGoodsAnticipateServiceImpl implements IGoblinGoodsAnticipateService {
@Autowired
GoblinMongoUtils goblinMongoUtils;
@Autowired
GoblinRedisUtils goblinRedisUtils;
@Autowired
QueueUtils queueUtils;
@Override
public ResponseDto<PageInfo<GoblinGoodsAnticipateVo>> list(GoblinGoodsAnticipateParam goodsAnticipateParam) {
PageInfo<GoblinGoodsAnticipateVo> pageInfo = new PageInfo<>();
HashMap<String, Object> map = goblinMongoUtils.getGoblinGoodsAnticipateVos(goodsAnticipateParam);
List<GoblinGoodsAnticipateVo> data = (List<GoblinGoodsAnticipateVo>) map.get("data");
for (GoblinGoodsAnticipateVo goblinGoodsAnticipateVo : data) {
//预约开始时间
LocalDateTime aboutStartDate = goblinGoodsAnticipateVo.getAboutStartDate();
LocalDateTime aboutEndDate = goblinGoodsAnticipateVo.getAboutEndDate();
LocalDateTime now = LocalDateTime.now();
if (aboutStartDate.isBefore(now)) {
//未开始 0
goblinGoodsAnticipateVo.setState(0);
}
if (!aboutStartDate.isBefore(now) && aboutEndDate.isAfter(now)) {
//预约中
goblinGoodsAnticipateVo.setState(1);
}
if (aboutEndDate.isBefore(now)) {
//已结束
goblinGoodsAnticipateVo.setState(2);
}
Integer autIdPeople = goblinRedisUtils.getAutIdPeople(goblinGoodsAnticipateVo.getAntId());
//预约人数
goblinGoodsAnticipateVo.setAboutPeople(goblinGoodsAnticipateVo.getAboutPeople() + (autIdPeople != null ? autIdPeople : 0));
//获取真实预约人数
goblinGoodsAnticipateVo.setActualPeople(autIdPeople);
}
pageInfo.setList(data);
pageInfo.setTotal((Long) map.get("total"));
return ResponseDto.success(pageInfo);
}
@Override
public ResponseDto<Object> add(GoblinGoodsAnticipateAddParam goodsAnticipateAddParam) {
if (StringUtils.isNotBlank(goodsAnticipateAddParam.getName())
&& StringUtils.isNotBlank(goodsAnticipateAddParam.getRule())
&& StringUtils.isNotBlank(goodsAnticipateAddParam.getAboutStartDate().toString())
&& StringUtils.isNotBlank(goodsAnticipateAddParam.getAboutEndDate().toString())) {
//生成的antId
String antId = IDGenerator.nextTimeId2();
GoblinGoodsAnticipateVo goodsAnticipateVo = new GoblinGoodsAnticipateVo();
BeanUtils.copyProperties(goodsAnticipateAddParam, goodsAnticipateVo);
goodsAnticipateVo.setAntId(antId);
goodsAnticipateVo.setCreatedDate(LocalDateTime.now());
goodsAnticipateVo.setDelTag(0);
//redis消息预约消息表
LinkedList<Object[]> sqlAnt = CollectionUtil.linkedListObjectArr();
sqlAnt.add(new Object[]{
antId,
goodsAnticipateVo.getName(),
goodsAnticipateVo.getRule(),
goodsAnticipateVo.getAboutPeople(),
goodsAnticipateVo.getAboutStartDate(),
goodsAnticipateVo.getAboutEndDate(),
goodsAnticipateVo.getCreatedDate(),
goodsAnticipateVo.getDelTag()
});
sendRedis("goblin_goods_anticipate", sqlAnt);
//mongodb新增
goblinMongoUtils.setGoblinGoodsAnticipateVo(goodsAnticipateVo);
return ResponseDto.success();
}
return ResponseDto.failure("参数有误");
}
@Override
public ResponseDto<Object> updatePeople(String antId, Long people) {
//修改Mongodb
goblinMongoUtils.updateGoblinGoodsAnticipateVoPeople(antId, people);
//修改mysql
LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr();
sqlValue.add(new Object[]{
people,
antId
});
sendRedis("goblin_goods_anticipate_update_proper", sqlValue);
return ResponseDto.success();
}
@Override
public ResponseDto<Object> update(GoblinGoodsAnticipateUpdateParam goodsAnticipateUpdateParam) {
//跟新mongodb
goblinMongoUtils.updateGoblinGoodsAnticipateVo(goodsAnticipateUpdateParam);
//修改mysql
LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr();
sqlValue.add(new Object[]{
goodsAnticipateUpdateParam.getName(),
goodsAnticipateUpdateParam.getRule(),
goodsAnticipateUpdateParam.getAntId()
});
sendRedis("goblin_goods_anticipate_update", sqlValue);
return ResponseDto.success();
}
@Override
public ResponseDto<Object> delete(String antId) {
//mysql删除
LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr();
sqlValue.add(new Object[]{
antId
});
//预约库删除
sendRedis("goblin_goods_anticipate_delete", sqlValue);
//预约关联库删除
sendRedis("goblin_goods_anticipate_value_delete_by_antId", sqlValue);
//删除mongodb
if (goblinMongoUtils.delGoodsAnticipateVo(antId)) {
return ResponseDto.success();
}
return ResponseDto.success();
}
@Override
public ResponseDto<Object> userAbout(String antId, String skuId, String uid, String phone, Integer state) {
//查询该用户是否预
GoblinGoodAnticipateUserVo userVo = goblinRedisUtils.getUserAboutAut(skuId, uid);
LinkedList<Object[]> antIdValue = CollectionUtil.linkedListObjectArr();
antIdValue.add(new Object[]{
antId
});
LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr();
if (state.equals(GoblinGoodAnticipateUserVo.STATE_VALID) && userVo == null) {
//用户没有预约过
//发送redis消息修改mysql记录用户预约
sqlValue.add(new Object[]{
uid,
skuId,
phone,
state
});
sendRedis("goblin_goods_anticipate_user", sqlValue);
GoblinGoodAnticipateUserVo user = new GoblinGoodAnticipateUserVo(uid, skuId, phone, state);
//mongodb记录
goblinRedisUtils.setUserAboutSku(user);
//新增
sendRedis("goblin_goods_anticipate_update_actual_add_people", antIdValue);
} else {
//mysql删除用户记录
sqlValue.add(new Object[]{
uid,
skuId
});
sendRedis("goblin_goods_anticipate_user_update", sqlValue);
//删除缓存 redis和mongodb
goblinRedisUtils.delUserAboutSku(skuId, uid);
sendRedis("goblin_goods_anticipate_update_actual_reduce_people", antIdValue);
}
goblinRedisUtils.setAutIdPeople(antId, state);
return ResponseDto.success();
}
@Override
public ResponseDto<Object> addAnticipateValues(List<GoblinGoodsAnticipateValueParam> list) {
if (list != null && list.size() > 0) {
for (GoblinGoodsAnticipateValueParam vo : list) {
if (goblinRedisUtils.getAnticipate(vo.getAntId(), vo.getSkuId()))
return ResponseDto.failure("该预约已选择该sku");
}
list.forEach(item -> {
GoblinGoodsAnticipateValueVo goodsAnticipateValueVo = new GoblinGoodsAnticipateValueVo();
BeanUtils.copyProperties(item, goodsAnticipateValueVo);
goodsAnticipateValueVo.setCreatedDate(LocalDateTime.now());
goodsAnticipateValueVo.setCreatedDate(LocalDateTime.now());
goodsAnticipateValueVo.setDelTag(0);
//redis消息
//redis标识存入该sku处于预约列表
goblinRedisUtils.setAnticipateValue(goodsAnticipateValueVo.getAntId(), goodsAnticipateValueVo.getSkuId());
//保存mysql中间表
LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr();
sqlValue.add(new Object[]{
goodsAnticipateValueVo.getAntId(),
goodsAnticipateValueVo.getSkuName(),
goodsAnticipateValueVo.getSkuId(),
goodsAnticipateValueVo.getSpuId(),
goodsAnticipateValueVo.getAboutStartDate(),
goodsAnticipateValueVo.getAboutEndDate(),
goodsAnticipateValueVo.getCreatedDate(),
goodsAnticipateValueVo.getDelTag()
});
sendRedis("goblin_goods_anticipate_value", sqlValue);
//存入mongodb中
goblinMongoUtils.addAnticipateValues(goodsAnticipateValueVo);
});
}
return ResponseDto.success();
}
@Override
public ResponseDto<Object> updateAnticipateValues(List<GoblinGoodsAnticipateValueParam> list) {
if (list != null && list.size() > 0) {
list.forEach(item -> {
GoblinGoodsAnticipateValueVo goodsAnticipateValueVo = new GoblinGoodsAnticipateValueVo();
BeanUtils.copyProperties(item, goodsAnticipateValueVo);
LinkedList<Object[]> sqlValue = CollectionUtil.linkedListObjectArr();
if (goodsAnticipateValueVo.getDelTag() == 1) {
//删除该sku关联
goblinMongoUtils.delAnticipateValueVo(goodsAnticipateValueVo);
//删除redis
goblinRedisUtils.delAnticipateValue(goodsAnticipateValueVo.getAntId(), goodsAnticipateValueVo.getSkuId());
//删除mysql中的关联数据
sqlValue.add(new Object[]{
goodsAnticipateValueVo.getAntId(),
goodsAnticipateValueVo.getSkuId()
});
sendRedis("goblin_goods_anticipate_value_delete_by_antId_and_skuId",sqlValue);
} else {
//保存mysql中间表
sqlValue.add(new Object[]{
goodsAnticipateValueVo.getAboutStartDate(),
goodsAnticipateValueVo.getAboutEndDate(),
goodsAnticipateValueVo.getAntId(),
goodsAnticipateValueVo.getSkuId(),
goodsAnticipateValueVo.getSpuId(),
});
sendRedis("goblin_goods_anticipate_value_update", sqlValue);
//修改mongodb
goblinMongoUtils.updateAnticipateValueVo(goodsAnticipateValueVo);
}
});
}
return ResponseDto.success();
}
public void sendRedis(String sqlKey, LinkedList<Object[]> sqlData) {
LinkedList<String> sql = CollectionUtil.linkedListString();
sql.add(SqlMapping.get(sqlKey));
String sqlStr = SqlMapping.gets(sql, sqlData);
queueUtils.sendMsgByRedis(
MQConst.GoblinQueue.GOBLIN_STORE_MARKET.getKey(),
sqlStr);
}
}
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
#---- 服务支持信息
#---- \u670D\u52A1\u652F\u6301\u4FE1\u606F
goblin_service_support.insert_byreplace=REPLACE INTO goblin_service_support (ssid,name,`desc`,url,del_flg,created_by,created_at)VALUES(?,?,?,?,'0','-',sysdate())
#---- 店铺信息
#---- \u5E97\u94FA\u4FE1\u606F
goblin_store_info.insert_by_cert=INSERT INTO goblin_store_info (store_id,uid,status,store_type,cert_type,created_by,created_at)VALUES(?,?,?,?,?,?,?)
goblin_store_info.update_by_cert1=UPDATE goblin_store_info SET store_type=?,cert_type=?,updated_by=?,updated_at=? WHERE store_id=?
goblin_store_info.update_by_cert2=UPDATE goblin_store_info SET store_name=?,logo_pic=?,background_pic=?,introduce=?,status=?,reason='',store_type=?,updated_by=?,updated_at=? WHERE store_id=?
......@@ -10,30 +10,30 @@ goblin_store_info.update_by_setting=UPDATE goblin_store_info SET status=?,update
goblin_store_certification.insert_by_cert=INSERT INTO goblin_store_certification (store_id,person_cert_type,person_name,person_cert_code,person_cert_validity,person_cert_lasting,person_cert_fpic,person_cert_bpic,person_cert_spic,province_id,province_name,city_id,city_name,county_id,county_name,bus_address,bus_name,bus_cert_code,bus_cert_validity,bus_cert_lasting,bus_cert_pic,bus_quality_pic,created_by,created_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
goblin_store_certification.update_by_cert=UPDATE goblin_store_certification SET person_cert_type=?,person_name=?,person_cert_code=?,person_cert_validity=?,person_cert_lasting=?,person_cert_fpic=?,person_cert_bpic=?,person_cert_spic=?,province_id=?,province_name=?,city_id=?,city_name=?,county_id=?,county_name=?,bus_address=?,bus_name=?,bus_cert_code=?,bus_cert_validity=?,bus_cert_lasting=?,bus_cert_pic=?,bus_quality_pic=?,updated_by=?,updated_at=? WHERE store_id=?
goblin_store_certification.update_by_del=UPDATE goblin_store_certification SET del_flg=1,updated_by=?,updated_at=? WHERE store_id=?
#---- 店铺配置信息
#---- \u5E97\u94FA\u914D\u7F6E\u4FE1\u606F
goblin_store_config.update=UPDATE goblin_store_config SET config_val=?,updated_by=?,updated_at=? WHERE store_id=? AND config_key=?
#---- 店铺公告信息
#---- \u5E97\u94FA\u516C\u544A\u4FE1\u606F
goblin_store_notice.insert=INSERT INTO goblin_store_notice (notice_id,store_id,content,release_time,long_lasting,cancell_time,status,created_by,created_at)VALUES(?,?,?,?,?,?,?,?,?)
goblin_store_notice.update=UPDATE goblin_store_notice SET content=?,release_time=?,long_lasting=?,cancell_time=?,status=?,updated_by=?,updated_at=? WHERE notice_id=?
goblin_store_notice.release=UPDATE goblin_store_notice SET release_time=?,status='1',updated_by=?,updated_at=? WHERE store_id=? AND notice_id=?
goblin_store_notice.remove=UPDATE goblin_store_notice SET del_flg='1',updated_by=?,updated_at=? WHERE store_id=? AND notice_id=?
#---- 店铺商品分类信息
#---- \u5E97\u94FA\u5546\u54C1\u5206\u7C7B\u4FE1\u606F
goblin_store_goods_category.insert=INSERT INTO goblin_store_goods_category (store_id,cate_id,name,sort,grade,cate_pid,ne_isbn,created_by,created_at)VALUES(?,?,?,?,?,?,?,?,?)
goblin_store_goods_category.update=UPDATE goblin_store_goods_category SET name=?,sort=?,updated_by=?,updated_at=? WHERE store_id=? AND cate_id=?
goblin_store_goods_category.remove=UPDATE goblin_store_goods_category SET del_flg='1',updated_by=?,updated_at=?,deleted_by=?,updated_at=? WHERE store_id=? AND cate_id=?
#---- 商品分类规格信息
#---- \u5546\u54C1\u5206\u7C7B\u89C4\u683C\u4FE1\u606F
goblin_goods_category_spec.insert_byreplace=REPLACE INTO goblin_goods_category_spec (cate_id,spec_name,del_flg)VALUES(?,?,'0')
#---- 商品规格信息
#---- \u5546\u54C1\u89C4\u683C\u4FE1\u606F
goblin_goods_spec.insert_byreplace=REPLACE INTO goblin_goods_spec (spec_name,del_flg,created_by,created_at)VALUES(?,'0','-',?)
goblin_goods_spec_value.insert_byreplace=REPLACE INTO goblin_goods_spec_value (spec_name,spec_vname,del_flg,created_by,created_at)VALUES(?,?,'0','-',?)
#---- 商品关联规格信息
#---- \u5546\u54C1\u5173\u8054\u89C4\u683C\u4FE1\u606F
goblin_goods_spu_spec_value.insert_byreplace=REPLACE INTO goblin_goods_spu_spec_value (spu_id,spec_name,spec_vname,sort,del_flg)VALUES(?,?,?,?,'0')
goblin_goods_spu_spec_value.update_by_editdel=UPDATE goblin_goods_spu_spec_value SET del_flg='1' WHERE spu_id=? AND spec_name=? AND spec_vname=? AND del_flg='0'
goblin_goods_spu_spec_value.update_by_del_sku=UPDATE goblin_goods_spu_spec_value SET sort=?,del_flg=? WHERE spu_id=? AND spec_name=? AND spec_vname=?
goblin_goods_sku_spec_value.insert_byreplace=REPLACE INTO goblin_goods_sku_spec_value (spu_id,sku_id,spec_name,spec_vname,del_flg)VALUES(?,?,?,?,'0')
goblin_goods_sku_spec_value.update_by_edit=UPDATE goblin_goods_sku_spec_value SET spec_vname=? WHERE sku_id=? AND spec_name=? AND del_flg='0'
goblin_goods_sku_spec_value.update_by_del_sku=UPDATE goblin_goods_sku_spec_value SET del_flg='1' WHERE sku_id=? AND del_flg='0'
#---- 商品信息
#---- \u5546\u54C1\u4FE1\u606F
goblin_goods.insert=INSERT INTO goblin_goods (spu_id,spu_no,name,subtitle,sell_price, price_ge,price_le,intro,details,cover_pic, video,spec_mode,store_id,cate_fid,cate_sid, cate_tid,store_cate_fid,store_cate_sid,store_cate_tid,brand_id, shelves_handle,shelves_time,spu_validity,virtual_flg,status, shelves_status,spu_appear,shelves_at,created_by,created_at, logistics_template)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
goblin_goods.insert_for_digital=INSERT INTO goblin_goods (spu_id,spu_no,spu_type,name,intro,attention,store_id,cate_fid,cate_sid,cate_tid,virtual_flg,status,shelves_status,spu_appear,created_by,created_at)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
goblin_goods.update_by_edit=UPDATE goblin_goods SET spu_no=?,name=?,subtitle=?,sell_price=?,intro=?,details=?,cover_pic=?,video=?,spec_mode=?,cate_fid=?,cate_sid=?,cate_tid=?,shelves_handle=?,shelves_time=?,spu_validity=?,virtual_flg=?,logistics_template=?,updated_by=?,updated_at=? WHERE spu_id=? AND del_flg='0'
......@@ -74,25 +74,25 @@ goblin_goods_artag.insert_byreplace=REPLACE INTO goblin_goods_tag (spu_id,tag_id
goblin_goods_artag.delete=UPDATE goblin_goods_tag SET del_flg='1' WHERE spu_id=? AND tag_belong=? AND del_flg='0'
goblin_goods_service_support.insert_byreplace=REPLACE INTO goblin_goods_service_support (spu_id,ssid,del_flg)VALUES(?,?,'0')
goblin_goods_service_support.delete=UPDATE goblin_goods_service_support SET del_flg='1' WHERE spu_id=? AND del_flg='0'
#---- 商铺活动
#---- \u5546\u94FA\u6D3B\u52A8
goblin.store.market.insert=INSERT INTO goblin_store_marketing (`store_market_id`,`name`,`type`,`status`,`store_id`,`start_time`,`end_time`,`del_flag`,`is_pre`,`pre_time`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?)
goblin.store.market.status=UPDATE goblin_store_marketing SET status=? , del_flag=? WHERE store_market_id =? and store_id =?
goblin.store.market.update=UPDATE goblin_store_marketing SET name=?,type=?,status=?,store_id=?,describes=?,start_time=?,end_time=?,del_flag=?,is_pre=?,pre_time=?,updated_at=? WHERE store_market_id =? and store_id =?
goblin.store.market.insertRelation=INSERT INTO goblin_store_market_purchasing (`purchase_id`,`store_market_id`,`spu_id`,`sku_id`,`store_id`,`price_marketing`,`stock_marketing`,`buy_factor`,`buy_roster`,`buy_limit`,`del_flag`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)
goblin.store.market.updateRelation=UPDATE goblin_store_market_purchasing SET price_marketing=? ,stock_marketing=? , buy_factor=?,buy_roster=?,buy_limit=?,updated_at=? WHERE store_market_id =? and store_id =?
goblin.store.market.delSpuRelation=UPDATE goblin_store_market_purchasing SET del_flag = ?,updated_at = ? WHERE store_market_id =? and store_id =? and spu_id=?
#---- 平台活动
#---- \u5E73\u53F0\u6D3B\u52A8
goblin.self.market.insertRelation=INSERT INTO goblin_marketing_zhengzai (`zhengzai_id`,`self_market_id`,`spu_id`,`sku_id`,`store_id`,`price_marketing`,`stock_marketing`,`buy_factor`,`buy_roster`,`buy_limit`,`del_flag`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)
goblin.self.market.updateRelation=UPDATE goblin_marketing_zhengzai SET price_marketing=? ,stock_marketing=? , buy_factor=?,buy_roster=?,buy_limit=?,updated_at=? WHERE self_market_id =? and store_id =?
goblin.self.market.delSpuRelation=UPDATE goblin_marketing_zhengzai SET del_flag = ?,updated_at = ? WHERE self_market_id =? and store_id =? and spu_id=?
#---- 订单创建&支付
#---- \u8BA2\u5355\u521B\u5EFA&\u652F\u4ED8
goblin_order.pay.order=UPDATE goblin_store_order SET payment_type = ? ,payment_id=?,pay_code = ? ,pay_time = ?,write_off_code = ? ,status = ? ,updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
goblin_order.pay.sku=UPDATE goblin_order_sku SET status = ? ,updated_at = ? WHERE order_sku_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
#---- 订单绑定[正在下单] 出货
#---- \u8BA2\u5355\u7ED1\u5B9A[\u6B63\u5728\u4E0B\u5355] \u51FA\u8D27
goblin_order.zhengzai.bind=UPDATE goblin_store_order SET user_id = ? ,updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
goblin_order.zhengzai.push=UPDATE goblin_store_order SET zhengzai_status = ? ,updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
#---- 商铺订单操作
#---- \u5546\u94FA\u8BA2\u5355\u64CD\u4F5C
goblin_order.store.cancel=UPDATE goblin_store_order SET status = ? ,cancel_time = ? , cancel_reason = ? , updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
goblin_order.store.orderSkuStatus=UPDATE goblin_order_sku SET status = ? , updated_at = ? WHERE order_sku_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
goblin_order.store.express=UPDATE goblin_store_order SET status = ? , updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
......@@ -111,15 +111,15 @@ goblin_order.store.changeSku=UPDATE goblin_back_order SET real_back_price = ? ,
goblin_order.store.backOrderStatus=UPDATE goblin_back_order SET status = ? , refuse_at=?,refuse_size=?,updated_at = ? WHERE back_order_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
goblin_order.store.orderStatus=UPDATE goblin_store_order SET status = ? , updated_at = ? WHERE order_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
goblin_order.store.applyRefund=UPDATE goblin_back_order SET status = ? ,reason=?,audit_at=?, updated_at = ? WHERE back_order_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
#---- 用户订单操作
#---- \u7528\u6237\u8BA2\u5355\u64CD\u4F5C
goblin_order.user.applyRefund=INSERT INTO goblin_back_order (`back_order_id`,`back_code`,`order_id`,`order_code`,`store_id`,`user_id`,`sku_id_nums`,`type`,`reason`,`describes`,`real_back_price`,`back_price_express`,`status`,`logis_company_name`,`mail_no`,`pics`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
goblin_order.user.againRefund=UPDATE goblin_back_order SET status = ? , describes = ? , pics = ? , reason = ? , type = ?, updated_at=? where back_order_id=?
#---- 购物车操作
#---- \u8D2D\u7269\u8F66\u64CD\u4F5C
goblin_shop.cart.delete=UPDATE goblin_shopping_cart set del_tag=? where user_id=? and sku_id=?
goblin_shop.cart.insert=insert into goblin_shopping_cart (car_id, user_id, store_id,spu_id, sku_id, `number`,marketing_id, del_tag, `comment`,`type`) values (?,?,?,?,?,?,?,?,?,?)
goblin_shop.cart.update=update goblin_shopping_cart set `number` = ? where car_id=? and user_id=? and del_tag=0
#---- 商铺活动:优惠券
#---- \u5546\u94FA\u6D3B\u52A8:\u4F18\u60E0\u5238
goblin_store_coupon.insert=INSERT INTO goblin_store_coupon (store_coupon_id,store_coupon_no,store_id,title,label, notice,type,stock,triggers,val_face, discount,val_over,val_minus,deduction,receive_limit, receive_curb,use_scope,state,start_time,end_time, created_by,created_at)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
goblin_store_coupon.update=UPDATE goblin_store_coupon SET title=?,label=?,notice=?,type=?,triggers=?,val_face=?,discount=?,val_over=?,val_minus=?,deduction=?,receive_limit=?,receive_curb=?,use_scope=?,start_time=?,end_time=?,updated_by=?,updated_at=? WHERE store_coupon_id=? AND del_flg='0'
goblin_store_coupon.update_stock=UPDATE goblin_store_coupon SET stock=?,updated_by=?,updated_at=? WHERE store_coupon_id=? AND del_flg='0'
......@@ -129,7 +129,20 @@ goblin_store_coupon_rule.insert=INSERT INTO goblin_store_coupon_rule (store_coup
goblin_store_coupon_rule.update_del=UPDATE goblin_store_coupon_rule SET del_flg='1',updated_by=?,updated_at=? WHERE store_coupon_id=? AND del_flg='0'
goblin_user_coupon.insert=INSERT INTO goblin_user_coupon (ucoupon_id, store_coupon_id, uid, state, bind_at, dued_at, operator, created_at)VALUES(?,?,?,?,?,?,?,?)
goblin_user_coupon.updateState=UPDATE goblin_user_coupon SET state = ? , used_for = ? ,updated_at = ? where ucoupon_id = ?
#---- 我的藏品
#---- \u6211\u7684\u85CF\u54C1
goblin_user_digital_artwork.update_for_chain=UPDATE goblin_user_digital_artwork SET edition_sn=?,nft_id=?,release_txhash=?,release_at=?,trading_txhash=?,trading_at=?,state=?,updated_at=? WHERE artwork_id=? AND state<>1
goblin_user_digital_artwork.update_for_unboxing=UPDATE goblin_user_digital_artwork SET state=1,del_flg='1',opening_at=?,updated_at=?,deleted_at=? WHERE artwork_id=? AND state<>1
#----
\ No newline at end of file
#----
#---- \u9884\u7EA6
goblin_goods_anticipate=INSERT INTO goblin_goods_anticipate(ant_id,`name`,`rule`,actual_people,about_start_date,about_end_date,created_date,del_tag) VALUES(?,?,?,?,?,?,?,?)
goblin_goods_anticipate_update_actual_add_people=UPDATE goblin_goods_anticipate SET actual_people = actual_people+1 WHERE ant_id = ?
goblin_goods_anticipate_update_actual_reduce_people=UPDATE goblin_goods_anticipate SET actual_people = actual_people-1 WHERE ant_id = ?
goblin_goods_anticipate_delete=UPDATE goblin_goods_anticipate SET `del_tag` = 1 WHERE ant_id = ?
goblin_goods_anticipate_value=INSERT INTO goblin_goods_anticipate_value (ant_id,sku_name,sku_id,spu_id,about_start_date,about_end_date,created_date,del_tag) VALUES(?,?,?,?,?,?,?,?)
goblin_goods_anticipate_value_update=UPDATE goblin_goods_anticipate_value SET `about_start_date` = ?,`about_end_date`= ?,update_date = NOW() WHERE ant_id = ? AND sku_id = ? AND spu_id = ?
goblin_goods_anticipate_value_delete_by_antId=UPDATE goblin_goods_anticipate_value SET `del_tag` = 1,update_date = NOW() WHERE ant_id = ?
goblin_goods_anticipate_value_delete_by_antId_and_skuId=UPDATE goblin_goods_anticipate_value SET `del_tag` = 1,update_date = NOW() WHERE ant_id = ? AND sku_id = ?
goblin_goods_anticipate_update=UPDATE goblin_goods_anticipate SET `name` = ?,`rule`= ? WHERE ant_id = ?
goblin_goods_anticipate_update_proper=UPDATE goblin_goods_anticipate SET about_people = ? WHERE ant_id = ?
goblin_goods_anticipate_user=INSERT INTO goblin_goods_anticipate_user(uid,sku_id,phone,state) VALUES(?,?,?,?)
goblin_goods_anticipate_user_update=UPDATE goblin_goods_anticipate_user SET state = 0 WHERE uid = ? AND sku_id = ?
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