Commit ae837897 by ping.wu

Merge branches 'feature/20210806_积分商城重构_wuping' and 'qa' of…

Merge branches 'feature/20210806_积分商城重构_wuping' and 'qa' of http://gitlab.freemud.com/order-group-application/order-group into qa

# Conflicts:
#	shopping-cart-application-service/src/main/java/cn/freemud/service/impl/CouponPromotionService.java
parents cbd5d823 47ec9af8
package cn.freemud.amp.config;
import com.freemud.application.sdk.api.config.TopicExchangeConfig;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Component
public class DlSendCouponMqConfig {
public static final String EXCHANGE_NAME = "topic-Exchange";
public static final String QUEUE_NAME = "send-coupon-order-queue";
public static final String QUEUE_ROUTING_KEY = "send-coupon-order-queue-routing-key";
public static final String QUERY_DL_QUEUE_NAME = "send-coupon-order-queue_dl_queue";
public static final String QUERY_DL_ROUTING_KEY = "send-coupon-order-queue_dl_key";
@Bean("dlSendCouponMqTopicExchange")
public Exchange dlSendCouponMqTopicExchange() {
return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
}
/**
* 写入RabbitMQ使用的默认队列
*
* @return
*/
@Bean("sendCouponQueueName")
public Queue sendCouponChangeQueue() {
return QueueBuilder.durable(QUEUE_NAME).build();
}
/**
* 绑定消息队列
*
* @param queue 消息队列
* @param topicExchange RabbitMQ Fanout Exchange
* @return 消息队列绑定
*/
@Bean("bindingSendCouponQueueChange")
Binding bindingSendCouponChange(@Qualifier("sendCouponQueueName") Queue queue, @Qualifier("dlSendCouponMqTopicExchange") Exchange topicExchange) {
return BindingBuilder.bind(queue).to(topicExchange).with(QUEUE_ROUTING_KEY).noargs();
}
@Bean("sendCouponChangeDlQueue")
public Queue sendCouponChangeDlQueue() {
Map<String, Object> delayQueueParams = new HashMap<>(2);
// DLX,dead letter发送到的exchange
delayQueueParams.put("x-dead-letter-exchange", TopicExchangeConfig.EXCHANGE_NAME);
// dead letter携带的routing key
delayQueueParams.put("x-dead-letter-routing-key", QUEUE_ROUTING_KEY);
return QueueBuilder.durable(QUERY_DL_QUEUE_NAME).withArguments(delayQueueParams).build();
}
@Bean("bindingSendCouponDlChange")
Binding bindingSendCouponDlChange(@Qualifier("sendCouponChangeDlQueue") Queue queue, @Qualifier("dlSendCouponMqTopicExchange") Exchange topicExchange) {
Map<String, Object> args = new HashMap<>(2);
args.put("x-dead-letter-exchange", TopicExchangeConfig.EXCHANGE_NAME);
args.put("x-dead-letter-routing-key", QUEUE_ROUTING_KEY);
return BindingBuilder.bind(queue).to(topicExchange).with(QUERY_DL_ROUTING_KEY).and(args);
}
}
package cn.freemud.amp.service;
import cn.freemud.amp.config.DlSendCouponMqConfig;
import cn.freemud.amqp.Header;
import cn.freemud.amqp.MQAction;
import cn.freemud.amqp.MQMessage;
import cn.freemud.amqp.MQService;
import cn.freemud.utils.AppLogUtil;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class SendCouponService {
@Autowired
private MQService mqService;
public void sendCouponMq(OrderInfoReqs request) {
AppLogUtil.infoLog("sendCouponMq", JSONObject.toJSONString(request.getOrderCode()), null);
Header header = new Header(MQAction.INSERT.getAction(), "order-application-service", "1", DlSendCouponMqConfig.QUEUE_NAME);
MQMessage<OrderInfoReqs> message = new MQMessage<>(header, request);
mqService.convertAndSend(DlSendCouponMqConfig.EXCHANGE_NAME, DlSendCouponMqConfig.QUEUE_ROUTING_KEY, message);
}
}
...@@ -19,10 +19,7 @@ import cn.freemud.entities.vo.encircle.CreateReserveOrderVo; ...@@ -19,10 +19,7 @@ import cn.freemud.entities.vo.encircle.CreateReserveOrderVo;
import cn.freemud.entities.vo.encircle.EncircleReserveBaseVo; import cn.freemud.entities.vo.encircle.EncircleReserveBaseVo;
import cn.freemud.handler.OrderReportJobHandler; import cn.freemud.handler.OrderReportJobHandler;
import cn.freemud.monitorcenter.tools.HealthUtil; import cn.freemud.monitorcenter.tools.HealthUtil;
import cn.freemud.service.EncircleOrderService; import cn.freemud.service.*;
import cn.freemud.service.MCCafeOrderService;
import cn.freemud.service.OrderAdapterService;
import cn.freemud.service.Orderservice;
import cn.freemud.service.impl.MallOrderServiceImpl; import cn.freemud.service.impl.MallOrderServiceImpl;
import cn.freemud.utils.AppLogUtil; import cn.freemud.utils.AppLogUtil;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
...@@ -57,6 +54,8 @@ public class OrderController { ...@@ -57,6 +54,8 @@ public class OrderController {
private OrderReportJobHandler orderReportJobHandler; private OrderReportJobHandler orderReportJobHandler;
@Autowired @Autowired
private OrderCountJobHandler orderCountJobHandler; private OrderCountJobHandler orderCountJobHandler;
@Autowired
private PointsMallOrderService pointsMallOrderService;
/** /**
* 创建订单之前校验前面排队的订单数 * 创建订单之前校验前面排队的订单数
...@@ -385,6 +384,24 @@ public class OrderController { ...@@ -385,6 +384,24 @@ public class OrderController {
return orderservice.scoreRecord(queryOrderVo); return orderservice.scoreRecord(queryOrderVo);
} }
/**
* 开个店积分商城-积分兑换记录查询
*/
@ApiAnnotation(logMessage = "scoreRecords")
@PostMapping("/scoreRecords")
public BaseResponse scoreRecords(@Validated @LogParams @RequestBody QueryOrderVo queryOrderVo) {
return pointsMallOrderService.scoreRecords(queryOrderVo);
}
/**
* 积分兑换记录查询详情
*/
@ApiAnnotation(logMessage = "scoreRecord")
@PostMapping("/scoreRecordInfo")
public BaseResponse scoreRecordDetail(@Validated @LogParams @RequestBody QueryOrderVo queryOrderVo) {
return pointsMallOrderService.scoreRecordDetail(queryOrderVo);
}
/** /**
* 订单统计 上报数据 * 订单统计 上报数据
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
*/ */
package cn.freemud.entities.dto; package cn.freemud.entities.dto;
import cn.freemud.entities.dto.GetMenuResponseDto.DataBean.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean;
import cn.freemud.entities.dto.product.ProductInfo; import cn.freemud.entities.dto.product.ProductInfo;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
......
package cn.freemud.entities.dto.product.pointsmall;
import lombok.Data;
@Data
public class EntityProductType {
// @ApiModelProperty(value = "商品编号")
private String productId;
// @ApiModelProperty(value = "商品描述")
// private String detailText;
// @ApiModelProperty(value = "商品图片")
protected String picture;
// @ApiModelProperty(value = "商品说明图片")
// private List<String> detailImageList;
// @ApiModelProperty(value = "轮播图")
// private List<String> carouselList;
}
package cn.freemud.entities.dto.product.pointsmall;
import lombok.Data;
import java.util.List;
@Data
public class IntegralProductType {
// @ApiModelProperty(value = "商品编号")
private String productId;
// @ApiModelProperty(value = "商品名称")
private String productName;
// @ApiModelProperty(value = "商品类型(1优惠券,2实物)")
private Integer productType;
// @ApiModelProperty(value = "图片列表")
private List<String> pictureList;
// @ApiModelProperty(value = "优惠券编号")
private String couponCode;
// @ApiModelProperty(value = "兑换方式(1积分,2现金,3积分+现金)")
private Integer exchangeType;
// @ApiModelProperty(value = "积分价格")
private Integer integralPrice;
// @ApiModelProperty(value = "现金价格(分)")
private Integer cashPrice;
// @ApiModelProperty(value = "分类编号")
private String categoryId;
// @ApiModelProperty(value = "分类名称")
private String categoryName;
// @ApiModelProperty(value = "首页推荐(0不推荐,1推荐)")
private Integer isRecommend;
// @ApiModelProperty(value = "开始可售时间")
private String startTime;
// @ApiModelProperty(value = "结束可售时间")
private String endTime;
// @ApiModelProperty(value = "库存限制(1:限制库存, 2不限制库存)")
private Integer stockLimit;
// @ApiModelProperty(value = "用户限购类型(1不限制,2限制每人N件,3限制每人每天N件)")
private Integer limitType;
// @ApiModelProperty(value = "限购数量")
private Integer limitNumber;
// @ApiModelProperty(value = "用户等级限制(1不限制,2限制会员等级,3付费会员,4非付费会员)")
private Integer levelType;
// @ApiModelProperty(value = "会员等级列表")
private List<String> levelList;
// @ApiModelProperty(value = "商品排序值")
private Integer sequence;
// @ApiModelProperty(value = "分类排序值")
private Integer categorySequence;
// @ApiModelProperty(value = "商品状态(1下架,2上架,3售罄,4不在可售时间内,5超过每人总限购数量,6超过每人每天限购数量,7用户等级不足,8用户身份不足)")
private Integer status;
// @ApiModelProperty(value = "实物商品信息")
private EntityProductType entityProductInfo;
// @ApiModelProperty(value = "剩余库存数量")
private Integer stockNumber;
// @ApiModelProperty(value = "已兑换数量")
private Integer exchangeNumber;
}
package cn.freemud.entities.dto.product.pointsmall;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: PointMallListProductInfoRequest
* @Package com.freemud.product.contract
* @Description:
* @author yue.liu
* @date: 2021/8/9 14:28
* @Copyright: 2017 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class PointMallListProductInfoRequest {
// @ApiModelProperty(value = "商户编号", required = true)
private String partnerId;
private String memberId;
// @ApiModelProperty(value = "商品编号列表")
private List<String> productIdList;
// @ApiModelProperty(value = "会员等级编号列表")
private List<String> levelIdList;
// @ApiModelProperty(value = "会员类型(1付费会员,2非付费会员)")
private Integer memberType;
// @ApiModelProperty(value = "是否校验可售时间(true校验,false不校验)")
private boolean isValidateTime;
// @ApiModelProperty(value = "是否校验库存(true校验,false不校验)")
private boolean isValidateStock;
// @ApiModelProperty(value = "是否校验用户限制(true校验,false不校验)")
private boolean isValidateMember;
}
package cn.freemud.entities.dto.product.pointsmall;
import lombok.Data;
@Data
public class PointMallListProductInfoResponse<T> {
private T result;
private Integer statusCode;
private String message;
}
package cn.freemud.entities.dto.product.pointsmall;
import lombok.Data;
@Data
public class ProductStockRequest {
//兑换数量
public Integer exchangeNumber;
//非码商品编号
public String productId;
//库存数量
public Integer stockNumber;
}
package cn.freemud.entities.dto.product.pointsmall;
import lombok.Data;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: UpdateStocksRequest
* @Package com.freemud.product.contract
* @Description:
* @author yue.liu
* @date: 2021/8/9 14:28
* @Copyright: 2017 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class UpdatePointsMallStocksRequest {
// @ApiModelProperty(value = "1增加库存或兑换数量,2减少库存,3修改库存,兑换数量只支持新增", required = true)
public Integer changeType;
// @ApiModelProperty(value = "交易号, maxLength = 36", required = true)
public String transNo;
// @ApiModelProperty("备注, maxLength = 50")
public String remark;
// @ApiModelProperty("交易时间 格式类型 yyyy-MM-dd HH:mm:ss")
public String transTime;
// @ApiModelProperty(value = "商品库存信息,建议数量不要超过500", required = true)
public List<ProductStockRequest> productStocks;
// @ApiModelProperty(value = "会员编号", required = true)
public String memberId;
public String partnerId;
}
package cn.freemud.entities.dto.user;
import lombok.Data;
@Data
public class CustomerPropertyBaseResponse<T> {
protected String code;
protected String message;
protected T data;
}
package cn.freemud.entities.dto.user;
import lombok.Data;
@Data
public class PayScoreResponse {
/**
* 当前积分
*/
private Integer currentScore;
/**
* 变化积分数
*/
private Integer updateScore;
/**
* 交易流水号
*/
private String recordId;
}
package cn.freemud.entities.dto.user;
import lombok.Data;
@Data
public class StatislScoreResponse {
// @ApiModelProperty("当前可用积分")
private Integer currentScore;
// @ApiModelProperty("历史累计积分")
private Integer totalScore;
// @ApiModelProperty("已使用积分")
private Integer usedScore;
// @ApiModelProperty("本月即将过期积分")
private Integer currentProbablyExpireScore;
// @ApiModelProperty("参数status为1并且memberId不为空时,有此返回值")
private Integer expireSoonScore;
/**
* expireSoonScore为空并且expireSoonDate不为空,说明该用户无可用积分。
* expireSoonScore不为空并且expireSoonDate为空,说明积分永不失效
*/
// @ApiModelProperty("参数status为1并且memberId不为空时,有此返回值。")
private String expireSoonDate;
}
package cn.freemud.entities.dto.user;
import lombok.Data;
@Data
public class StatisticalScoreRequestVo {
// @NotEmpty(message = "partnerId 不能为空")
private String partnerId;
// @ApiModelProperty("会员编号")
private String memberId;
// @ApiModelProperty("是否查询即将到期积分{0:否,1:是}")
private Integer status;
}
package cn.freemud.entities.dto.user;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class UseScoreRequest {
/**
* 商户编号 Y
*/
private String partnerId;
/**
* 会员编号 Y
*/
private String memberId;
/**
* 变动积分 Y
*/
private Integer changeScore;
/**
* Y
* 操作类型{1消费送积分2积分支付退回3积分签到4手动赠送5等级升级送积分6割接7生日送8注册送9完善送10消费满赠11手动扣减12积分兑换13积分清理14积分支付15消费送积分扣回16等级升级退积分17消费满赠扣回}
*/
private Integer operationType;
/**
* 操作名称{1消费送积分2积分支付退回3积分签到4手动赠送5等级升级送积分6割接7生日送8注册送9完善送10消费满赠11手动扣减12积分兑换13积分清理14积分支付15消费送积分扣回16等级升级退积分17消费满赠扣回}
*/
private String operationName;
/**
* 变动类型{1新增 2扣减}
*/
private Integer changeType;
/**
* 订单编号
*/
private String orderId;
/**
* 机构编码
*/
private String orgCode;
/**
* 机构类型{1总公司2分公司3门店}
*/
private Integer orgType;
/**
* 备注
*/
private String remark;
/**
* 业务ID{调用方保证唯一} Y
*/
private String idempotencyBussinessId;
/**
* Y
* 业务类型{1注册送 2发放经验值 3等级升级 4等级降级 5积分支付 6消费送积分 7消费满赠 8生日送 9定时送 10储值支付 11储值充值 12完善资料送 13等级升级送积分 14储值卡投放 15会员消费数据增加 16会员消费数据冲正}
*/
private String idempotencyBussinessType;
@ApiModelProperty("是否查询子品牌积分规则")
private Boolean isGetSubBrandRule = false;
@ApiModelProperty("子品牌编号")
private String subBrandCode;
@ApiModelProperty("应用编号")
private String appId;
}
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
package cn.freemud.entities.vo; package cn.freemud.entities.vo;
import cn.freemud.entities.dto.UserDeliveryInfoDto; import cn.freemud.entities.dto.UserDeliveryInfoDto;
import cn.freemud.entities.vo.order.CreateOrderProductVo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.freemud.application.sdk.api.ordercenter.request.create.OrderPayItemCreateReq; import com.freemud.application.sdk.api.ordercenter.request.create.OrderPayItemCreateReq;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
...@@ -286,6 +287,11 @@ public class CreateOrderVo { ...@@ -286,6 +287,11 @@ public class CreateOrderVo {
@Valid @Valid
@ApiModelProperty(value = "电子风味卡") @ApiModelProperty(value = "电子风味卡")
private UnionPayCard unionPayCard; private UnionPayCard unionPayCard;
/**
* 下单商品,积分商城使用
*/
private List<CreateOrderProductVo> products;
/** /**
* 电子风味卡 * 电子风味卡
*/ */
......
...@@ -35,4 +35,32 @@ public class ScoreRecordVo { ...@@ -35,4 +35,32 @@ public class ScoreRecordVo {
//数量 //数量
private Integer productQuantity; private Integer productQuantity;
private Integer orderStatus;
private String productPicUrl;
private Integer productType;
//积分价格
private Integer integralPrice;
//现金价格(分)
private Integer cashPrice;
/**
* 配送渠道名称
*/
private String expressChannelName;
/**
* 配送渠道编号
*/
private String expressChannelCode;
private String userName;
private String mobile;
private String addressDetail;
} }
package cn.freemud.entities.vo.order;
import lombok.Data;
@Data
public class CreateOrderProductVo {
private String spuId;
private String skuId;
}
...@@ -24,7 +24,9 @@ public enum OrderChannelType { ...@@ -24,7 +24,9 @@ public enum OrderChannelType {
BEAUTIFUL("beautiful", "美业"), BEAUTIFUL("beautiful", "美业"),
APP("app", "APP"); APP("app", "APP"),
POINTSMALL("pointsmall", "积分商城");
private String code; private String code;
......
...@@ -21,11 +21,16 @@ import cn.freemud.entities.vo.encircle.EncircleReserveBaseVo; ...@@ -21,11 +21,16 @@ import cn.freemud.entities.vo.encircle.EncircleReserveBaseVo;
public interface EncircleOrderService { public interface EncircleOrderService {
/** /**
* 创建订单
*/
BaseResponse createOrder(CreateOrderVo createOrderVo);
/**
* 围餐--开台 * 围餐--开台
* @param createOrderVo * @param createOrderVo
* @return * @return
*/ */
BaseResponse createReserveOrder(CreateOrderVo createOrderVo); // BaseResponse createReserveOrder(CreateOrderVo createOrderVo);
/** /**
* 查询桌号是否开台 * 查询桌号是否开台
...@@ -38,7 +43,7 @@ public interface EncircleOrderService { ...@@ -38,7 +43,7 @@ public interface EncircleOrderService {
* @param createReserveOrderVo * @param createReserveOrderVo
* @return * @return
*/ */
BaseResponse updateReserveOrder(CreateReserveOrderVo createReserveOrderVo); // BaseResponse updateReserveOrder(CreateReserveOrderVo createReserveOrderVo);
/** /**
* 围餐--预览订单 * 围餐--预览订单
...@@ -52,7 +57,7 @@ public interface EncircleOrderService { ...@@ -52,7 +57,7 @@ public interface EncircleOrderService {
* @param createReserveOrderVo * @param createReserveOrderVo
* @return * @return
*/ */
BaseResponse createPrepaymentOrder(CreateReserveOrderVo createReserveOrderVo); // BaseResponse createPrepaymentOrder(CreateReserveOrderVo createReserveOrderVo);
/** /**
* 清台 * 清台
......
package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.QueryOrderVo;
public interface PointsMallOrderService {
/**
* 创建订单
*/
BaseResponse createOrder(CreateOrderVo createOrderVo);
BaseResponse scoreRecords(QueryOrderVo queryOrderVo);
BaseResponse scoreRecordDetail(QueryOrderVo queryOrderVo);
}
...@@ -121,6 +121,36 @@ public class EncircleOrderServiceImpl implements EncircleOrderService { ...@@ -121,6 +121,36 @@ public class EncircleOrderServiceImpl implements EncircleOrderService {
private static FastDateFormat dateFormat = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss", Locale.CHINA); private static FastDateFormat dateFormat = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
@Override @Override
public BaseResponse createOrder(CreateOrderVo createOrderVo) {
BaseResponse baseResponse = null;
CreateReserveOrderVo createReserveOrderVo = new CreateReserveOrderVo();
createReserveOrderVo.setCarVer(createOrderVo.getCarVer());
createReserveOrderVo.setRepastNumber(createOrderVo.getPeopleNumber());
createReserveOrderVo.setSessionId(createOrderVo.getSessionId());
createReserveOrderVo.setOrderUpdateVer(createOrderVo.getOrderUpdateVer());
createReserveOrderVo.setCouponCode(createOrderVo.getCouponCode());
createReserveOrderVo.setUseCustomerScore(createOrderVo.getUseCustomerScore());
createReserveOrderVo.setCardCode(createOrderVo.getCardCode());
if (createOrderVo.getOperation() == null) {
throw new ServiceException(ResponseResult.ORDER_CREATE_OPERATION_ERROR);
}
switch (createOrderVo.getOperation()) {
case 2:// 开台
baseResponse = this.createReserveOrder(createOrderVo);
break;
case 3:// 下单
baseResponse = this.updateReserveOrder(createReserveOrderVo);
break;
case 4:// 创建预支付订单
baseResponse = this.createPrepaymentOrder(createReserveOrderVo);
break;
default:
throw new ServiceException(ResponseResult.ORDER_CREATE_OPERATION_ERROR);
}
return baseResponse;
}
public BaseResponse createReserveOrder(CreateOrderVo createOrderVo) { public BaseResponse createReserveOrder(CreateOrderVo createOrderVo) {
//查询用户缓存信息(用户信息,用户绑定桌号信息) //查询用户缓存信息(用户信息,用户绑定桌号信息)
AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createOrderVo.getSessionId()); AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createOrderVo.getSessionId());
...@@ -267,7 +297,6 @@ public class EncircleOrderServiceImpl implements EncircleOrderService { ...@@ -267,7 +297,6 @@ public class EncircleOrderServiceImpl implements EncircleOrderService {
} }
@Override
public BaseResponse updateReserveOrder(CreateReserveOrderVo createReserveOrderVo) { public BaseResponse updateReserveOrder(CreateReserveOrderVo createReserveOrderVo) {
//获取缓存(用户信息,桌号信息,桌号与订单号信息) //获取缓存(用户信息,桌号信息,桌号与订单号信息)
AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createReserveOrderVo.getSessionId()); AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createReserveOrderVo.getSessionId());
...@@ -458,7 +487,6 @@ public class EncircleOrderServiceImpl implements EncircleOrderService { ...@@ -458,7 +487,6 @@ public class EncircleOrderServiceImpl implements EncircleOrderService {
} }
@Override
public BaseResponse createPrepaymentOrder(CreateReserveOrderVo createReserveOrderVo) { public BaseResponse createPrepaymentOrder(CreateReserveOrderVo createReserveOrderVo) {
//获取缓存(用户信息,桌号信息,桌号与订单号信息) //获取缓存(用户信息,桌号信息,桌号与订单号信息)
AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createReserveOrderVo.getSessionId()); AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createReserveOrderVo.getSessionId());
......
...@@ -97,6 +97,8 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -97,6 +97,8 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
@Autowired @Autowired
private MallOrderService mallOrderService; private MallOrderService mallOrderService;
@Autowired @Autowired
private PointsMallOrderService pointsMallOrderService;
@Autowired
private AppOrderService appOrderService; private AppOrderService appOrderService;
@Autowired @Autowired
private RedisCache redisCache; private RedisCache redisCache;
...@@ -128,44 +130,20 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -128,44 +130,20 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
// 扩展字段中存储 sessionKey // 扩展字段中存储 sessionKey
createOrderVo.setSessionKey(assortmentCustomerInfoVo.getSessionKey()); createOrderVo.setSessionKey(assortmentCustomerInfoVo.getSessionKey());
if (IappIdType.WC_XCX.getCode().equals(assortmentCustomerInfoVo.getIappId())) { //i围餐 if (IappIdType.WC_XCX.getCode().equals(assortmentCustomerInfoVo.getIappId())) { //i围餐
BaseResponse baseResponse = null; return encircleOrderService.createOrder(createOrderVo);
CreateReserveOrderVo createReserveOrderVo = new CreateReserveOrderVo();
createReserveOrderVo.setCarVer(createOrderVo.getCarVer());
createReserveOrderVo.setRepastNumber(createOrderVo.getPeopleNumber());
createReserveOrderVo.setSessionId(createOrderVo.getSessionId());
createReserveOrderVo.setOrderUpdateVer(createOrderVo.getOrderUpdateVer());
createReserveOrderVo.setCouponCode(createOrderVo.getCouponCode());
createReserveOrderVo.setUseCustomerScore(createOrderVo.getUseCustomerScore());
createReserveOrderVo.setCardCode(createOrderVo.getCardCode());
if (createOrderVo.getOperation() == null) {
throw new ServiceException(ResponseResult.ORDER_CREATE_OPERATION_ERROR);
}
switch (createOrderVo.getOperation()) {
case 2:// 开台
baseResponse = encircleOrderService.createReserveOrder(createOrderVo);
break;
case 3:// 下单
baseResponse = encircleOrderService.updateReserveOrder(createReserveOrderVo);
break;
case 4:// 创建预支付订单
baseResponse = encircleOrderService.createPrepaymentOrder(createReserveOrderVo);
break;
default:
throw new ServiceException(ResponseResult.ORDER_CREATE_OPERATION_ERROR);
} }
return baseResponse;
//积分商城
if (OrderChannelType.POINTSMALL.getCode().equals(createOrderVo.getChannelType())) {
return pointsMallOrderService.createOrder(createOrderVo);
} }
/** //微商城订单
* 商城订单
*/
if (OrderChannelType.SAASMALL.getCode().equals(createOrderVo.getChannelType())) { if (OrderChannelType.SAASMALL.getCode().equals(createOrderVo.getChannelType())) {
return mallOrderService.createOrder(createOrderVo); return mallOrderService.createOrder(createOrderVo);
} }
/** //APP下单
* APP下单
*/
if (UserLoginChannelEnum.APP.getCode().equals(assortmentCustomerInfoVo.getChannel())) { if (UserLoginChannelEnum.APP.getCode().equals(assortmentCustomerInfoVo.getChannel())) {
return appOrderService.createOrderFlow(createOrderVo); return appOrderService.createOrderFlow(createOrderVo);
} }
......
...@@ -4215,7 +4215,6 @@ public class OrderServiceImpl implements Orderservice { ...@@ -4215,7 +4215,6 @@ public class OrderServiceImpl implements Orderservice {
return ResponseUtil.success(result); return ResponseUtil.success(result);
} }
@Override @Override
public BaseResponse<List<OrderCountResp>> selectCountOrdersByPartnerIds(OrderCountRequestVo orderCountRequestVo, String trackingNo) { public BaseResponse<List<OrderCountResp>> selectCountOrdersByPartnerIds(OrderCountRequestVo orderCountRequestVo, String trackingNo) {
OrderCountReqs orderCountReqs = new OrderCountReqs(); OrderCountReqs orderCountReqs = new OrderCountReqs();
......
package cn.freemud.service.impl;
import cn.freemud.amp.service.SendCouponService;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.util.DateUtil;
import cn.freemud.entities.Active;
import cn.freemud.entities.dto.BatchQueryActivityInfoRequestDto;
import cn.freemud.entities.dto.BatchQueryActivityInfoResponseDto;
import cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto;
import cn.freemud.entities.dto.product.pointsmall.*;
import cn.freemud.entities.dto.user.CustomerPropertyBaseResponse;
import cn.freemud.entities.dto.user.StatislScoreResponse;
import cn.freemud.entities.dto.user.StatisticalScoreRequestVo;
import cn.freemud.entities.dto.user.UseScoreRequest;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.ResponseResult;
import cn.freemud.service.CouponService;
import cn.freemud.service.PointsMallOrderService;
import cn.freemud.service.thirdparty.CustomerPropertyClient;
import cn.freemud.service.thirdparty.PointMallProductClient;
import cn.freemud.utils.AppLogUtil;
import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.enums.OrderSettlementType;
import com.freemud.application.sdk.api.ordercenter.enums.OrderType;
import com.freemud.application.sdk.api.ordercenter.request.OrderAffirmReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderConditionsReq;
import com.freemud.application.sdk.api.ordercenter.request.PaySuccessReq;
import com.freemud.application.sdk.api.ordercenter.request.create.CreateOrderRequest;
import com.freemud.application.sdk.api.ordercenter.request.create.DeliveryContactInfoCreateReq;
import com.freemud.application.sdk.api.ordercenter.request.create.OrderItemCreateReq;
import com.freemud.application.sdk.api.ordercenter.request.create.OrderSettlementCreateReq;
import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.DeliveryContactInfoResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderItemResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.QueryByCodeResponse;
import com.freemud.application.sdk.api.ordercenter.service.OrderDownLoadSdkService;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.sdk.api.assortment.order.request.order.OrderProductAddInfoDto;
import com.freemud.sdk.api.assortment.order.request.order.ProductBindingCouponType;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;
@Component
public class PointsMallOrderServiceImpl implements PointsMallOrderService {
@Autowired
private AssortmentCustomerInfoManager customerInfoManager;
@Autowired
private PointMallProductClient pointMallProductClient;
@Autowired
private OrderSdkService orderSdkService;
@Autowired
private CouponService couponService;
@Autowired
private CustomerPropertyClient customerPropertyClient;
@Autowired
private SendCouponService sendCouponService;
@Autowired
private OrderDownLoadSdkService orderDownLoadSdkService;
@Override
public BaseResponse createOrder(CreateOrderVo createOrderVo) {
String sessionId = createOrderVo.getSessionId();
//查询会员信息
AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(sessionId);
if (userLoginInfoDto == null || StringUtils.isEmpty(userLoginInfoDto.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
String partnerId = userLoginInfoDto.getPartnerId();
String storeId = "99999";
String memberId = userLoginInfoDto.getMemberId();
String appId = userLoginInfoDto.getAppId();
String skuId = "";
if (CollectionUtils.isNotEmpty(createOrderVo.getProducts())) {
skuId = createOrderVo.getProducts().get(0).getSkuId();
}
//查询商品信息并且校验用户是否能购买 /product/listProductInfo 查询积分商品详情,可根据入参校验商品
PointMallListProductInfoRequest productInfoRequest = new PointMallListProductInfoRequest();
productInfoRequest.setPartnerId(partnerId);
productInfoRequest.setMemberId(memberId);
productInfoRequest.setProductIdList(Arrays.asList(skuId));
productInfoRequest.setValidateMember(true);
productInfoRequest.setValidateStock(true);
productInfoRequest.setValidateTime(true);
PointMallListProductInfoResponse<List<IntegralProductType>> productInfosDto = pointMallProductClient.listProductInfo(productInfoRequest);
if (!Objects.equals(100, productInfosDto.getStatusCode()) || CollectionUtils.isEmpty(productInfosDto.getResult())) {
return ResponseUtil.error("101", "商品异常");
}
IntegralProductType integralProductType = productInfosDto.getResult().get(0);
if(!Objects.equals(1,integralProductType.getExchangeType())){
return ResponseUtil.error("101","积分商城暂不支持现金兑换");
}
// integralProductType.setIntegralPrice(2);
// integralProductType.setCashPrice(0);
// integralProductType.setExchangeType(1);
Integer points = integralProductType.getIntegralPrice();
Integer exchangeType = integralProductType.getExchangeType();
boolean isCoupon = integralProductType.getProductType() == 1;
WeixinDeliveryAddressDto weixinDeliveryAddress = createOrderVo.getWeixinDeliveryAddress();
if(!isCoupon && (weixinDeliveryAddress == null || StringUtils.isEmpty(weixinDeliveryAddress.getProvinceName()))) {
return ResponseUtil.error("101", "收货地址异常");
}
Active active = null;
if (isCoupon) {
String activityCode = integralProductType.getCouponCode();
//券商品查询券活动信息校验券有效 
BatchQueryActivityInfoRequestDto queryActivityInfoRequestDto = new BatchQueryActivityInfoRequestDto();
queryActivityInfoRequestDto.setActiveCode(Arrays.asList(activityCode));
// queryActivityInfoRequestDto.setActiveCode(Arrays.asList("V1628760321931083"));
queryActivityInfoRequestDto.setPartnerId(Integer.valueOf(partnerId));
BatchQueryActivityInfoResponseDto batchQueryActivityInfoResponseDto = couponService.batchQueryActivityInfo(queryActivityInfoRequestDto);
if (!Objects.equals("0", batchQueryActivityInfoResponseDto.getStatusCode())) {
return ResponseUtil.error(batchQueryActivityInfoResponseDto.getStatusCode(), "优惠券异常");
}
active = batchQueryActivityInfoResponseDto.getActivities().get(0);
}
if (exchangeType != 2) {
//查询积分信息
StatisticalScoreRequestVo statisticalScoreRequest = new StatisticalScoreRequestVo();
statisticalScoreRequest.setPartnerId(userLoginInfoDto.getPartnerId());
statisticalScoreRequest.setMemberId(userLoginInfoDto.getMemberId());
CustomerPropertyBaseResponse<StatislScoreResponse> statislScoreResponseBaseResponse = customerPropertyClient.statisticalScore(statisticalScoreRequest);
if (!Objects.equals("100", statislScoreResponseBaseResponse.getCode())) {
return ResponseUtil.error(statislScoreResponseBaseResponse.getCode(), "查询积分异常");
}
if (statislScoreResponseBaseResponse.getData() != null && statislScoreResponseBaseResponse.getData().getCurrentScore() < points) {
return ResponseUtil.error(statislScoreResponseBaseResponse.getCode(), "积分不足");
}
}
//创建订单
CreateOrderRequest createOrderRequest = convent2NEWCreateOrderRequest(OrderClientType.I_MEMBER.getIndex(), userLoginInfoDto,
storeId, "", "", 4, integralProductType, skuId, active, weixinDeliveryAddress);
com.freemud.application.sdk.api.ordercenter.response.BaseResponse<OrderInfoReqs> createOrderResponseDto = orderSdkService.createOrder(createOrderRequest, "");
if (!Objects.equals("100", createOrderResponseDto.getCode())) {
return ResponseUtil.error(createOrderResponseDto.getCode(), "创建订单异常");
}
String orderCode = createOrderResponseDto.getResult().getOrderCode();
//扣减积分商品商品库存
UpdatePointsMallStocksRequest updatePointsMallStocksRequest = new UpdatePointsMallStocksRequest();
updatePointsMallStocksRequest.setPartnerId(partnerId);
updatePointsMallStocksRequest.setMemberId(memberId);
updatePointsMallStocksRequest.setChangeType(2);
updatePointsMallStocksRequest.setRemark("积分商城兑换");
updatePointsMallStocksRequest.setTransTime(DateUtil.convert2String(new Date(), DateUtil.FORMAT_YYYY_MM_DD_HHMMSS));
updatePointsMallStocksRequest.setTransNo(orderCode);
ProductStockRequest productStockRequest = new ProductStockRequest();
productStockRequest.setProductId(skuId);
productStockRequest.setExchangeNumber(1);
productStockRequest.setStockNumber(1);
updatePointsMallStocksRequest.setProductStocks(Arrays.asList(productStockRequest));
PointMallListProductInfoResponse pointMallListProductInfoResponse = pointMallProductClient.updateStock(updatePointsMallStocksRequest);
if (!Objects.equals(100, pointMallListProductInfoResponse.getStatusCode())) {
return ResponseUtil.error(pointMallListProductInfoResponse.getStatusCode().toString(), "扣减库存失败");
}
//扣减积分 (失败:失败冲正活动库存)
if (exchangeType != 2) {
UseScoreRequest userScoreRequest = new UseScoreRequest();
userScoreRequest.setMemberId(memberId);
userScoreRequest.setPartnerId(partnerId);
userScoreRequest.setChangeScore(points);
userScoreRequest.setOperationType(12);
userScoreRequest.setOperationName("积分兑换");
userScoreRequest.setChangeType(2);
userScoreRequest.setOrderId(orderCode);
userScoreRequest.setOrgCode("");
userScoreRequest.setOrgType(1);
userScoreRequest.setIdempotencyBussinessId(LogThreadLocal.getTrackingNo());
userScoreRequest.setIdempotencyBussinessType("5");
userScoreRequest.setAppId(userLoginInfoDto.getAppId());
CustomerPropertyBaseResponse baseResponse = customerPropertyClient.useScore(userScoreRequest);
if (!Objects.equals("100", baseResponse.getCode())) {
createOrderFail(true, false, partnerId, memberId, orderCode, skuId, points, appId);
return ResponseUtil.error(baseResponse.getCode(), "扣减积分失败");
}
}
//订单完成 (失败:失败冲正活动库存)
String nickName = userLoginInfoDto.getNickName();
com.freemud.application.sdk.api.ordercenter.response.BaseResponse updateOrderStateResp = null;
if (isCoupon) {
OrderAffirmReq request = new OrderAffirmReq();
request.setOrderCode(orderCode);
request.setPayState(2);
request.setOperator(nickName);
updateOrderStateResp = orderSdkService.orderAffirm(request, LogThreadLocal.getTrackingNo());
if (Objects.equals("100", updateOrderStateResp.getCode())) {
//发券mq
sendCouponService.sendCouponMq(createOrderResponseDto.getResult());
}
} else {
PaySuccessReq request = new PaySuccessReq();
request.setOrderCode(orderCode);
request.setOperator(nickName);
updateOrderStateResp = orderSdkService.paySuccess(request, LogThreadLocal.getTrackingNo());
}
if (!Objects.equals("100", updateOrderStateResp.getCode())) {
createOrderFail(false, true, partnerId, memberId, orderCode, skuId, points, appId);
return ResponseUtil.error(updateOrderStateResp.getCode(), "创建订单异常");
}
CreateOrderResponseVo createOrderResponse = new CreateOrderResponseVo();
createOrderResponse.setOid(orderCode);
return ResponseUtil.success(createOrderResponse);
}
@Override
public BaseResponse scoreRecords(QueryOrderVo queryOrderVo) {
AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(queryOrderVo.getSessionId());
if (userLoginInfoDto == null || StringUtils.isBlank(userLoginInfoDto.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
Date startDate;
Date endDate;
if (StringUtils.isBlank(queryOrderVo.getStartDate()) || StringUtils.isBlank(queryOrderVo.getEndDate())) {
Date now = new Date();
startDate = DateUtil.addMonths(now, -6);
endDate = DateUtil.addDays(now, 1);
} else {
String startDateStr = queryOrderVo.getStartDate() + " 00:00:00";
String endDateStr = queryOrderVo.getEndDate() + " 23:59:59";
startDate = DateUtil.convert2Date(startDateStr, "yyyy-MM-dd HH:mm:ss");
if (startDate == null) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "查询订单开始时间格式不正确");
}
endDate = DateUtil.convert2Date(endDateStr, "yyyy-MM-dd HH:mm:ss");
if (endDate == null) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "查询订单结束时间格式不正确");
}
}
OrderConditionsReq queryOrdersDto = new OrderConditionsReq();
queryOrdersDto.setUserId(userLoginInfoDto.getMemberId());
queryOrdersDto.setPartnerId(userLoginInfoDto.getPartnerId());
queryOrdersDto.setPageSize(queryOrderVo.getPageSize() != null ? queryOrderVo.getPageSize() : 500);
queryOrdersDto.setPageNum(queryOrderVo.getPageNumber() != null ? queryOrderVo.getPageNumber() : 1);
queryOrdersDto.setStartTimestamp(startDate.getTime() / 1000);
queryOrdersDto.setEndTimestamp(endDate.getTime() / 1000);
queryOrdersDto.setOrderClients(Arrays.asList(OrderClientType.I_MEMBER.getIndex()));
queryOrdersDto.setBizType(4);
if (queryOrderVo.getQueryOrderStatus() != null) {
if (queryOrderVo.getQueryOrderStatus() == 1) {
queryOrdersDto.setOrderStatus(2);
}
if (queryOrderVo.getQueryOrderStatus() == 2) {
queryOrdersDto.setOrderStatus(6);
}
if (queryOrderVo.getQueryOrderStatus() == 3) {
queryOrdersDto.setOrderStatuses(Arrays.asList(2, 6));
}
} else {
queryOrdersDto.setOrderStatus(6);
}
BaseDownLoadResponse<List<OrderInfoReqs>> response = orderDownLoadSdkService.queryOrderByConditions(queryOrdersDto, LogThreadLocal.getTrackingNo());
if (null == response || null == response.getResult()) {
return ResponseUtil.success();
}
List<ScoreRecordVo> result = new ArrayList<>();
List<OrderInfoReqs> list = response.getResult();
list.forEach(order -> {
ScoreRecordVo responseVo = new ScoreRecordVo();
responseVo.setOrderCode(order.getOrderCode());
responseVo.setOrderStatus(order.getOrderState());
responseVo.setExpressChannelName(order.getExpressChannelName());
responseVo.setExpressChannelCode(order.getExpressChannelCode());
if (order.getCreateTime() != null) {
responseVo.setCreateTime(Long.parseLong(order.getCreateTime()));
}
boolean entityProduct = false;
if (CollectionUtils.isNotEmpty(order.getOrderItemList())) {
OrderItemResp orderItemResp = order.getOrderItemList().get(0);
responseVo.setProductName(orderItemResp.getProductName());
responseVo.setProductQuantity(orderItemResp.getProductQuantity());
responseVo.setProductType(orderItemResp.getProductType());
responseVo.setIntegralPrice(orderItemResp.getProductPrice().intValue());
responseVo.setCashPrice(orderItemResp.getSalePrice().intValue());
responseVo.setProductPicUrl(orderItemResp.getProductPicUrl());
if(orderItemResp.getProductType() == 2){
entityProduct = true;
}
}
if (entityProduct && CollectionUtils.isNotEmpty(order.getDeliveryContactInfoList())) {
DeliveryContactInfoResp deliveryContactInfoResp = order.getDeliveryContactInfoList().get(0);
responseVo.setUserName(deliveryContactInfoResp.getContactsName());
responseVo.setMobile(deliveryContactInfoResp.getMobile());
responseVo.setAddressDetail(deliveryContactInfoResp.getAddressDetail());
}
result.add(responseVo);
});
PageInfo<ScoreRecordVo> pageInfo = new PageInfo<>();
pageInfo.setList(result);
pageInfo.setTotal(response.getTotalNum());
return ResponseUtil.success(pageInfo);
}
@Override
public BaseResponse scoreRecordDetail(QueryOrderVo queryOrderVo) {
AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(queryOrderVo.getSessionId());
if (userLoginInfoDto == null || StringUtils.isBlank(userLoginInfoDto.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
if (StringUtils.isEmpty(queryOrderVo.getOid())) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING);
}
String orderCode = queryOrderVo.getOid();
QueryByCodeResponse queryByCodeResponse = orderSdkService.getOrderInfo("", orderCode, "", null, LogThreadLocal.getTrackingNo());
if (null == queryByCodeResponse || null == queryByCodeResponse.getResult()) {
return ResponseUtil.success();
}
OrderInfoReqs order = queryByCodeResponse.getResult();
ScoreRecordVo responseVo = new ScoreRecordVo();
responseVo.setOrderCode(order.getOrderCode());
responseVo.setOrderStatus(order.getOrderState());
responseVo.setExpressChannelName(order.getExpressChannelName());
responseVo.setExpressChannelCode(order.getExpressChannelCode());
if (order.getCreateTime() != null) {
responseVo.setCreateTime(Long.parseLong(order.getCreateTime()));
}
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(order.getOrderItemList())) {
OrderItemResp orderItemResp = order.getOrderItemList().get(0);
responseVo.setProductName(orderItemResp.getProductName());
responseVo.setProductQuantity(orderItemResp.getProductQuantity());
responseVo.setProductType(orderItemResp.getProductType());
responseVo.setIntegralPrice(orderItemResp.getProductPrice().intValue());
responseVo.setCashPrice(orderItemResp.getSalePrice().intValue());
responseVo.setProductPicUrl(orderItemResp.getProductPicUrl());
}
return ResponseUtil.success(responseVo);
}
/**
* 失败冲正
*/
private void createOrderFail(boolean useScoreFail, boolean orderFail, String partnerId, String memberId, String orderCode,
String skuId, Integer points, String appId) {
try {
//扣减积分失败冲正活动库存
if (useScoreFail || orderFail) {
//扣减积分商品商品库存
UpdatePointsMallStocksRequest updatePointsMallStocksRequest = new UpdatePointsMallStocksRequest();
updatePointsMallStocksRequest.setMemberId(memberId);
updatePointsMallStocksRequest.setChangeType(2);
updatePointsMallStocksRequest.setRemark("积分兑换");
updatePointsMallStocksRequest.setTransTime(DateUtil.convert2String(new Date(), DateUtil.FORMAT_YYYY_MM_DD_HHMMSS));
updatePointsMallStocksRequest.setTransNo(orderCode);
ProductStockRequest productStockRequest = new ProductStockRequest();
productStockRequest.setProductId(skuId);
productStockRequest.setExchangeNumber(1);
productStockRequest.setStockNumber(1);
updatePointsMallStocksRequest.setProductStocks(Arrays.asList(productStockRequest));
PointMallListProductInfoResponse pointMallListProductInfoResponse = pointMallProductClient.updateStock(updatePointsMallStocksRequest);
}
//确认订单或支付成功失败,冲正活动库存与积分
if (orderFail) {
UseScoreRequest userScoreRequest = new UseScoreRequest();
userScoreRequest.setMemberId(memberId);
userScoreRequest.setPartnerId(partnerId);
userScoreRequest.setChangeScore(points);
userScoreRequest.setOperationType(12);
userScoreRequest.setOperationName("积分兑换");
userScoreRequest.setChangeType(1);
userScoreRequest.setOrderId(orderCode);
userScoreRequest.setOrgCode("");
userScoreRequest.setOrgType(1);
userScoreRequest.setIdempotencyBussinessId(LogThreadLocal.getTrackingNo());
userScoreRequest.setIdempotencyBussinessType("5");
userScoreRequest.setAppId(appId);
CustomerPropertyBaseResponse baseResponse = customerPropertyClient.useScore(userScoreRequest);
}
} catch (Exception e) {
AppLogUtil.errorLog("createOrderFail_error", null, null, e);
}
}
private ProductBindingCouponType convent2ProductBindingCouponType(Active active) {
ProductBindingCouponType productBindingCouponType2 = new ProductBindingCouponType();
productBindingCouponType2.setActivityCode(active.getActiveCode());
productBindingCouponType2.setNum(1);
productBindingCouponType2.setActivityName(active.getActiveName());
return productBindingCouponType2;
}
private OrderItemCreateReq convent2OrderItemCreateReq(IntegralProductType productBean, String partnerId, String skuId,
Active active) {
boolean isCoupon = productBean.getProductType() == 1;
//积分价格
Integer integralPrice = productBean.getIntegralPrice() == null ? 0 : productBean.getIntegralPrice();
//现金价格(分)
Integer cashPrice = productBean.getCashPrice() == null ? 0 : productBean.getCashPrice();
Integer settlementAmount = integralPrice + cashPrice;
OrderItemCreateReq orderItemCreateReq = new OrderItemCreateReq();
orderItemCreateReq.setPartnerId(partnerId);
orderItemCreateReq.setSalePrice(cashPrice.longValue());
orderItemCreateReq.setProductPrice(integralPrice.longValue());
orderItemCreateReq.setSettlementPrice(settlementAmount.longValue());
orderItemCreateReq.setProductId(skuId);
orderItemCreateReq.setProductSpec(skuId);
orderItemCreateReq.setProductName(productBean.getProductName());
orderItemCreateReq.setProductSpecName(productBean.getProductName());
orderItemCreateReq.setProductType(productBean.getProductType());
if (CollectionUtils.isNotEmpty(productBean.getPictureList())) {
orderItemCreateReq.setProductPicUrl(productBean.getPictureList().get(0));
}
orderItemCreateReq.setProductSeq(1);
if (productBean.getEntityProductInfo() != null) {
orderItemCreateReq.setProductCode(productBean.getEntityProductInfo().getProductId());
orderItemCreateReq.setThirdProductId(productBean.getEntityProductInfo().getProductId());
orderItemCreateReq.setProductPicUrl(productBean.getEntityProductInfo().getPicture());
}
if (isCoupon) {
//添加商品绑定的券
OrderProductAddInfoDto orderProductAddInfoDto = new OrderProductAddInfoDto();
List<ProductBindingCouponType> productBindingCoupons = new ArrayList<>();
productBindingCoupons.add(convent2ProductBindingCouponType(active));
orderProductAddInfoDto.setProductBindingCoupons(productBindingCoupons);
orderItemCreateReq.setExtInfo(JSONObject.toJSONString(orderProductAddInfoDto));
}
orderItemCreateReq.setProductQuantity(1);
return orderItemCreateReq;
}
private OrderSettlementCreateReq convent2OrderSettlementCreateReq(IntegralProductType productBean) {
OrderSettlementCreateReq orderSettlementCreateReq = new OrderSettlementCreateReq();
orderSettlementCreateReq.setNumber(productBean.getIntegralPrice());
orderSettlementCreateReq.setProductSeq(1);
orderSettlementCreateReq.setExternalObjectId("");
//商家优惠
orderSettlementCreateReq.setShopDiscountAmount(0L);
//结算金额
orderSettlementCreateReq.setSettlementAmount(productBean.getIntegralPrice().longValue());
//是否线上 false:不是 true:是
orderSettlementCreateReq.setIsOnline(true);
orderSettlementCreateReq.setSettlementType(OrderSettlementType.POINTS.getIndex());
return orderSettlementCreateReq;
}
private CreateOrderRequest convent2NEWCreateOrderRequest(Integer orderClient, AssortmentCustomerInfoVo userLoginInfoDto,
String shopId, String cardCode,
String channel, Integer bizType,
IntegralProductType productBean, String skuId,
Active active,WeixinDeliveryAddressDto weixinDeliveryAddress) {
CreateOrderRequest request = new CreateOrderRequest();
String partnerId = userLoginInfoDto.getPartnerId();
request.setOrderClient(orderClient);
request.setPartnerId(partnerId);
request.setStoreId(shopId);
request.setStoreName("虚拟门店");
request.setThirdStoreId("");
//买券虚拟订单 不管APP卖券还是平台,依旧保留传入6
request.setBizType(bizType);
//1:线上支付 2:线下支付
request.setPayType(1);
request.setUserId(userLoginInfoDto.getMemberId());
request.setUserName(userLoginInfoDto.getNickName());
request.setOrderState(1);
request.setPayState(1);
if (StringUtils.isNotBlank(cardCode)) {
request.setPayChannel("10102");
request.setPayChannelName("储值卡支付");
}
//积分价格
Integer integralPrice = productBean.getIntegralPrice() == null ? 0 : productBean.getIntegralPrice();
//现金价格(分)
Integer cashPrice = productBean.getCashPrice() == null ? 0 : productBean.getCashPrice();
Integer settlementAmount = integralPrice + cashPrice;
//订单原始金额,单位分
//用户在界面上看到的支付金额
request.setSettlementAmount(settlementAmount.longValue());
//实际支付现金金额,扣除支付自生优惠,单位分`
request.setActualPayAmount(cashPrice.longValue());
request.setOriginalAmount(settlementAmount.longValue());
request.setOrderType(OrderType.GENERAL_DINE_IN.getIndex());
//商品信息赋值
OrderItemCreateReq orderItemCreateReq = convent2OrderItemCreateReq(productBean, partnerId, skuId, active);
request.setOrderItemList(Arrays.asList(orderItemCreateReq));
//积分优惠
OrderSettlementCreateReq orderSettlementCreateReq = convent2OrderSettlementCreateReq(productBean);
request.setOrderSettlementDetailList(Arrays.asList(orderSettlementCreateReq));
//收货人信息转换
List<DeliveryContactInfoCreateReq> deliveryContactInfoList = new ArrayList<>();
DeliveryContactInfoCreateReq deliveryContactInfoCreateReq = new DeliveryContactInfoCreateReq();
//地址类型 1:订单地址 2:售后单地址 3:配送员信息
deliveryContactInfoCreateReq.setRelateObjectType(1);
//联系方式类型 1:取件 2:收件
deliveryContactInfoCreateReq.setInfoType(1);
deliveryContactInfoCreateReq.setContactsName(userLoginInfoDto.getNickName());
deliveryContactInfoCreateReq.setMobile(userLoginInfoDto.getMobile());
deliveryContactInfoCreateReq.setLatitude(null);
deliveryContactInfoCreateReq.setLongitude(null);
deliveryContactInfoCreateReq.setAddressDetail(null);
deliveryContactInfoCreateReq.setProvince(null);
deliveryContactInfoCreateReq.setCity(null);
deliveryContactInfoCreateReq.setRegion(null);
if(weixinDeliveryAddress != null){
deliveryContactInfoCreateReq.setContactsName(weixinDeliveryAddress.getUserName());
deliveryContactInfoCreateReq.setMobile(weixinDeliveryAddress.getTelNumber());
deliveryContactInfoCreateReq.setAddressDetail(weixinDeliveryAddress.getDetailInfo());
}
deliveryContactInfoList.add(deliveryContactInfoCreateReq);
request.setDeliveryContactInfoList(deliveryContactInfoList);
request.setOperator(userLoginInfoDto.getNickName());
request.setAppId(userLoginInfoDto.getWxAppId());
request.setPayChannel(channel);
return request;
}
}
...@@ -152,7 +152,7 @@ public class MCCafeOrderCenterSdkServiceImpl implements MCCafeOrderCenterSdkServ ...@@ -152,7 +152,7 @@ public class MCCafeOrderCenterSdkServiceImpl implements MCCafeOrderCenterSdkServ
// } // }
// } // }
// 扣减积分,扣减失败冲正积分返回错误 // 扣减积分,扣减失败冲正积分返回错误
// UserScoreRequest userScoreRequest = orderSdkAdapter.convent2UserScoreRequest(orderBean, accounts, true); // UseScoreRequest userScoreRequest = orderSdkAdapter.convent2UserScoreRequest(orderBean, accounts, true);
// if (userScoreRequest != null) { // if (userScoreRequest != null) {
// BaseResponse userScoreResponse = memberScoreService.useScore(userScoreRequest, ""); // BaseResponse userScoreResponse = memberScoreService.useScore(userScoreRequest, "");
// if (!ObjectUtils.equals(RESPONSE_SUCCESS_STR, userScoreResponse.getCode())) { // if (!ObjectUtils.equals(RESPONSE_SUCCESS_STR, userScoreResponse.getCode())) {
......
package cn.freemud.service.thirdparty;
import cn.freemud.annotations.LogIgnoreFeign;
import cn.freemud.entities.dto.user.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "customer-property-service", url = "${customer.property.service.url:}")
@RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface CustomerPropertyClient {
@LogIgnoreFeign(logMessage="useScore")
@PostMapping(value = "/propertyservice/score/pay")
CustomerPropertyBaseResponse<PayScoreResponse> useScore(@RequestBody UseScoreRequest userScoreRequest);
@LogIgnoreFeign(logMessage="statisticalScore")
@PostMapping({"/propertyservice/score/statisticalScore"})
CustomerPropertyBaseResponse<StatislScoreResponse> statisticalScore(StatisticalScoreRequestVo request);
}
package cn.freemud.service.thirdparty;
import cn.freemud.annotations.LogIgnoreFeign;
import cn.freemud.constant.ResponseCodeKeyConstant;
import cn.freemud.entities.dto.product.pointsmall.IntegralProductType;
import cn.freemud.entities.dto.product.pointsmall.PointMallListProductInfoRequest;
import cn.freemud.entities.dto.product.pointsmall.PointMallListProductInfoResponse;
import cn.freemud.entities.dto.product.pointsmall.UpdatePointsMallStocksRequest;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@FeignClient(name = "INTEGRAL-MALL-SERVICE", url = "${ssas.integralMall.feign.url:}")
@RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface PointMallProductClient {
/**
* 获取商品的详细信息
*/
@LogIgnoreFeign(logMessage="listProductInfos",statusCodeFieldName=ResponseCodeKeyConstant.STATUS_CODE)
@PostMapping("/biz/product/listProductInfo")
PointMallListProductInfoResponse<List<IntegralProductType>> listProductInfo(@RequestBody PointMallListProductInfoRequest productInfoRequest);
@LogIgnoreFeign(logMessage="listProductInfos",statusCodeFieldName=ResponseCodeKeyConstant.STATUS_CODE)
@PostMapping("/biz/stock/update")
PointMallListProductInfoResponse updateStock(@RequestBody UpdatePointsMallStocksRequest updatePointsMallStocksRequest);
}
...@@ -77,7 +77,7 @@ public class EncircleOrderServiceImplTest { ...@@ -77,7 +77,7 @@ public class EncircleOrderServiceImplTest {
createOrderVo.setPartnerId("1864"); createOrderVo.setPartnerId("1864");
createOrderVo.setShopId("2700968"); createOrderVo.setShopId("2700968");
createOrderVo.setPeopleNumber(12); createOrderVo.setPeopleNumber(12);
System.out.println(JSON.toJSONString(encircleOrderService.createReserveOrder(createOrderVo))); // System.out.println(JSON.toJSONString(encircleOrderService.createReserveOrder(createOrderVo)));
} }
...@@ -111,7 +111,7 @@ public class EncircleOrderServiceImplTest { ...@@ -111,7 +111,7 @@ public class EncircleOrderServiceImplTest {
CreateReserveOrderVo reserveOrderVo = new CreateReserveOrderVo(); CreateReserveOrderVo reserveOrderVo = new CreateReserveOrderVo();
reserveOrderVo.setSessionId("00e7be90e5fd45b5568da134a36a8d44ea01bd92"); reserveOrderVo.setSessionId("00e7be90e5fd45b5568da134a36a8d44ea01bd92");
reserveOrderVo.setRepastNumber(5); reserveOrderVo.setRepastNumber(5);
System.out.println(JSON.toJSONString(encircleOrderService.updateReserveOrder(reserveOrderVo))); // System.out.println(JSON.toJSONString(encircleOrderService.updateReserveOrder(reserveOrderVo)));
} }
/** /**
...@@ -133,7 +133,7 @@ public class EncircleOrderServiceImplTest { ...@@ -133,7 +133,7 @@ public class EncircleOrderServiceImplTest {
//TODO: Test goes here... //TODO: Test goes here...
CreateReserveOrderVo createReserveOrderVo = new CreateReserveOrderVo(); CreateReserveOrderVo createReserveOrderVo = new CreateReserveOrderVo();
createReserveOrderVo.setSessionId("fbc82ad9a7449590bcd56f96db1b11352e1f3470"); createReserveOrderVo.setSessionId("fbc82ad9a7449590bcd56f96db1b11352e1f3470");
System.out.println(JSON.toJSONString(encircleOrderService.createPrepaymentOrder(createReserveOrderVo))); // System.out.println(JSON.toJSONString(encircleOrderService.createPrepaymentOrder(createReserveOrderVo)));
} }
/** /**
......
...@@ -97,6 +97,7 @@ public class OrderSdkService { ...@@ -97,6 +97,7 @@ public class OrderSdkService {
* @param trackingNo 交易号 * @param trackingNo 交易号
* @return * @return
*/ */
@Deprecated
public QueryByCodeResponse getOrderInfo(String orderId, Integer withOperationHistory, String trackingNo) { public QueryByCodeResponse getOrderInfo(String orderId, Integer withOperationHistory, String trackingNo) {
String url = InterfaceAddressConstant.GET_ORDER_INFO + "?orderCode=" + orderId; String url = InterfaceAddressConstant.GET_ORDER_INFO + "?orderCode=" + orderId;
if (withOperationHistory != null && withOperationHistory == 1) { if (withOperationHistory != null && withOperationHistory == 1) {
......
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