xhxu 5 лет назад
Родитель
Сommit
7234c9edd2
12 измененных файлов: 272 добавлений и 238 удалений
  1. +11
    -0
      mallinkService/src/main/java/com/iformall/common/ErrorCode.java
  2. +6
    -2
      mallinkService/src/main/java/com/iformall/domain/po/tt/TtCoupon.java
  3. +5
    -1
      mallinkService/src/main/java/com/iformall/domain/po/tt/TtOrder.java
  4. +2
    -1
      mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java
  5. +41
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumTtCouponStatus.java
  6. +1
    -0
      mallinkService/src/main/java/com/iformall/mapper/TtOrderMapper.java
  7. +1
    -0
      mallinkService/src/main/java/com/iformall/service/tt/TtCouponService.java
  8. +9
    -0
      mallinkService/src/main/java/com/iformall/service/tt/TtOrderService.java
  9. +6
    -1
      mallinkService/src/main/java/com/iformall/service/tt/impl/TtCouponServiceImpl.java
  10. +117
    -148
      mallinkService/src/main/java/com/iformall/service/tt/impl/TtOrderServiceImpl.java
  11. +38
    -0
      mallinkService/src/main/resources/mapper/TtOrderMapper.xml
  12. +35
    -85
      mallinkTTCApi/src/main/java/com/iformall/controller/TtOrderController.java

+ 11
- 0
mallinkService/src/main/java/com/iformall/common/ErrorCode.java Просмотреть файл

@@ -195,6 +195,11 @@ public enum ErrorCode{
ORDER_PRESS_IS_OVERTIME(3010, "砍价已过期"),
ORDER_PRESS_IS_COMPLETE(3011, "砍价已完成"),
ORDER_UNPAID(3012, "您有未支付的订单"),
ORDER_IS_FIND(3013, "订单已存在"),
ORDER_PAY_IN_REFUND(3014, "订单待退款"),
ORDER_PAY_REFUND(3015, "订单已退款"),
ORDER_PAY_REFUND_FAIL(3016, "订单退款失败"),
ORDER_PAY_EVALUATE(3017, "订单已评价"),
ORDER_USER_NOT_MATCH(2013, "订单用户不匹配"),
ORDER_COUPON_CHANNEL_NOT_MATCH(2014, "订单渠道不匹配"),
ORDER_COUPON_NOT_MATCH(2015, "订单券不匹配"),
@@ -609,6 +614,12 @@ public enum ErrorCode{
GOOAGOO_OPEN_FAIL(62002,"数衍信息请求失败"),


/**
* tt
*/
TTCOUPON_IS_EMPTY(63000, "课程不存在"),
TTCOUPON_IS_TAKE_OFF(63001, "课程不在上架状态"),

;

private int code;


+ 6
- 2
mallinkService/src/main/java/com/iformall/domain/po/tt/TtCoupon.java Просмотреть файл

@@ -4,6 +4,7 @@ import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.iformall.common.SortColumn;
import com.iformall.domain.po.WxMerchant;
import com.iformall.domain.po.base.TenantEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -115,9 +116,9 @@ public class TtCoupon extends TenantEntity {

@io.swagger.annotations.ApiModelProperty(value="作者",name="merchantId")
private Long merchantId;
@io.swagger.annotations.ApiModelProperty(value="",name="merchantName")
@io.swagger.annotations.ApiModelProperty(value="",name="merchantName")//弃用
private String merchantName;
@io.swagger.annotations.ApiModelProperty(value="",name="merchantPic")
@io.swagger.annotations.ApiModelProperty(value="",name="merchantPic")//弃用
private String merchantPic;

@io.swagger.annotations.ApiModelProperty(value="业态",name="businessId")
@@ -125,6 +126,9 @@ public class TtCoupon extends TenantEntity {
@io.swagger.annotations.ApiModelProperty(value="",name="businessName")
private String businessName;

@TableField(exist = false)
private WxMerchant author;

@TableField(exist = false)
@io.swagger.annotations.ApiModelProperty(value = "审批流参数", name = "columnCoupons")
private List<TtCoupon> columnCoupons;


+ 5
- 1
mallinkService/src/main/java/com/iformall/domain/po/tt/TtOrder.java Просмотреть файл

@@ -10,6 +10,7 @@ import lombok.ToString;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

@TableName(value = "tt_order")
@Data
@@ -37,7 +38,7 @@ public class TtOrder extends TenantEntity {
private String author;
@TableField(exist = false)
private String authorPic;
@io.swagger.annotations.ApiModelProperty(value="支付类型(1:支付宝,2:微信)",name="type")
@io.swagger.annotations.ApiModelProperty(value="支付类型(1:微信,)",name="type")
private Integer type;
@io.swagger.annotations.ApiModelProperty(value="0: 付款 1: 退款",name="paymentType")
private Integer paymentType;
@@ -66,6 +67,9 @@ public class TtOrder extends TenantEntity {
@TableField(exist = false)
private String paymentStr;

@TableField(exist = false)
protected List<Integer> statusS;

@TableField(exist = false)
@io.swagger.annotations.ApiModelProperty(value="查询-起始时间",name="startdate")
private Date startdate;


+ 2
- 1
mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java Просмотреть файл

@@ -10,6 +10,7 @@ public enum EnumPayWay {
PAY_WAY_WECHAT_WAP(2, "微信H5",EnumPayWayType.WX_H5PAY,EnumAppPlat.WX,null),
PAY_WAY_ALIPAY(3, "支付宝",EnumPayWayType.ALI_MINIPAY,EnumAppPlat.ALI,null),
PAY_WAY_ALIPAY_WAP(4, "支付宝H5",EnumPayWayType.ALI_H5PAY,EnumAppPlat.ALI,null),
PAY_WAY_TT(5, "抖音担保支付",EnumPayWayType.TT_PAY,EnumAppPlat.TOUTIAO,null),
PAY_WAY_POS_B(10, "POS B端",EnumPayWayType.POS,null,null),
PAY_WAY_POS_NEU(11, "POS 东软",EnumPayWayType.NEU_POS,null,EnumCardSpendFrom.POS),
PAY_WAY_NOT_UNPAY_MERCHANT(91, "商户注券,无需支付",null,null,null),
@@ -71,6 +72,6 @@ public enum EnumPayWay {


public static enum EnumPayWayType {
WX_MINIPAY,WX_H5PAY,ALI_MINIPAY,ALI_H5PAY,NEU_POS,POS
WX_MINIPAY,WX_H5PAY,ALI_MINIPAY,ALI_H5PAY,TT_PAY,NEU_POS,POS
}
}

+ 41
- 0
mallinkService/src/main/java/com/iformall/enums/EnumTtCouponStatus.java Просмотреть файл

@@ -0,0 +1,41 @@
package com.iformall.enums;

/**
* Created by Stormeye on 2018/08/09.
*/
public enum EnumTtCouponStatus {

TTCOUPON_STATUS_DRAFT(1, "草稿"),
TTCOUPON_STATUS_EXAMINE(2, "审核中"),
TTCOUPON_STATUS_REJECT(3, "已驳回"),
TTCOUPON_STATUS_BEFOR_SHELF(4, "待上架"),
TTCOUPON_STATUS_SHELFING(5, "已上架"),
TTCOUPON_STATUS_AFTER_SHELF(6, "已下架"),

;

public static EnumTtCouponStatus getEnum(Integer code) {
for (EnumTtCouponStatus value : values()) {
if (value.getCode().equals(code)) {
return value;
}
}
return null;
}

private Integer code;
private String message;

EnumTtCouponStatus(Integer code, String message) {
this.code = code;
this.message = message;
}

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 1
- 0
mallinkService/src/main/java/com/iformall/mapper/TtOrderMapper.java Просмотреть файл

@@ -16,4 +16,5 @@ public interface TtOrderMapper extends CommonMapper<TtOrder, Long> {

List<TtOrder> findList(TtOrder record);

Integer findListCount(TtOrder orderQ);
}

+ 1
- 0
mallinkService/src/main/java/com/iformall/service/tt/TtCouponService.java Просмотреть файл

@@ -38,4 +38,5 @@ public interface TtCouponService {
*/
void deleteById(Long id);

TtCoupon detail(Long productId);
}

+ 9
- 0
mallinkService/src/main/java/com/iformall/service/tt/TtOrderService.java Просмотреть файл

@@ -1,7 +1,11 @@
package com.iformall.service.tt;

import com.github.pagehelper.PageInfo;
import com.iformall.common.ResultData;
import com.iformall.domain.dto.OrderSaveDto;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.domain.po.tt.TtOrder;
import com.iformall.enums.EnumPayWay;

public interface TtOrderService {

@@ -15,4 +19,9 @@ public interface TtOrderService {
*/
PageInfo<TtOrder> listAsPage(TtOrder record, Integer pageIndex, Integer pageSize);

ResultData saveOrder(Long couponId, Long memberId, EnumPayWay payWay, TenantEntity tenantInfo);

ResultData cancelOrder(Long orderId, Long memberId);

TtOrder detail(Long orderId, Long memberId);
}

+ 6
- 1
mallinkService/src/main/java/com/iformall/service/tt/impl/TtCouponServiceImpl.java Просмотреть файл

@@ -69,7 +69,6 @@ public class TtCouponServiceImpl implements TtCouponService {
} else {
record.setUpdateDate(new Date());
ttCouponMapper.updateById(record);

}
return new ResultData(record.getId());
}
@@ -78,4 +77,10 @@ public class TtCouponServiceImpl implements TtCouponService {
public void deleteById(Long id) {
ttCouponMapper.deleteById(id);
}

@Override
public TtCoupon detail(Long productId) {
TtCoupon byId = this.getById(productId);
return byId;
}
}

+ 117
- 148
mallinkService/src/main/java/com/iformall/service/tt/impl/TtOrderServiceImpl.java Просмотреть файл

@@ -13,6 +13,7 @@ import com.iformall.domain.dto.WxSharingOrderDto;
import com.iformall.domain.po.*;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.domain.po.msg.FmInsideOrderSuccessMsg;
import com.iformall.domain.po.tt.TtCoupon;
import com.iformall.domain.po.tt.TtOrder;
import com.iformall.domain.vo.*;
import com.iformall.enums.*;
@@ -20,6 +21,7 @@ import com.iformall.exception.MallinkException;
import com.iformall.mapper.*;
import com.iformall.mq.MqBaseProducer;
import com.iformall.service.*;
import com.iformall.service.tt.TtCouponService;
import com.iformall.service.tt.TtOrderService;
import com.iformall.utils.*;
import org.apache.commons.lang3.StringUtils;
@@ -51,6 +53,9 @@ public class TtOrderServiceImpl implements TtOrderService {
@Autowired
private TtOrderMapper ttOrderMapper;

@Autowired
private TtCouponService ttCouponService;

@Autowired
RedisLock redisLock;

@@ -153,6 +158,117 @@ public class TtOrderServiceImpl implements TtOrderService {
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> ttOrderMapper.findList(record));
}

@Override
public ResultData saveOrder(Long couponId,Long cUserId,EnumPayWay payWay,TenantEntity tenantEntity) {
logger.info("OrderSave: couponId:" + couponId + "---cUserId:"+cUserId);
WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(cUserId,tenantEntity.getFinalTenantId());
if(wxCUserBasicInfo == null){
return new ResultData(ErrorCode.USER_IS_EMPTY);
}
TtOrder orderQ = new TtOrder();
orderQ.setCUserId(cUserId);
orderQ.setProductId(couponId);
List<Integer> statuss = new ArrayList<>();
statuss.add(EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode());
statuss.add(EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode());
orderQ.setStatusS(statuss);
Integer listCount = ttOrderMapper.findListCount(orderQ);
if(listCount.intValue() > 0){
return new ResultData(ErrorCode.ORDER_IS_FIND);
}

if (wxCUserBasicInfo.getStatus().equals(EnumCUserBasicInfoStatus.LOCKED.getCode())) {
logger.info("会员权益被锁定:cUserId:" + cUserId);
return new ResultData(ErrorCode.MEMBER_IS_LOCKED);
}
TtCoupon coupon = ttCouponService.getById(couponId);
if (null == coupon) {
return new ResultData(ErrorCode.TTCOUPON_IS_EMPTY);
}
if (!coupon.getStatus().equals(EnumTtCouponStatus.TTCOUPON_STATUS_SHELFING.getCode())) {
return new ResultData(ErrorCode.TTCOUPON_IS_TAKE_OFF);
}

try {
// 4.2 保存订单
final IdWorker idWorker = IdWorker.get();
Date now = new Date();
TtOrder order = new TtOrder();
order.setId(idWorker.nextId());
order.updateTenantInfo(tenantEntity);
order.setCUserId(wxCUserBasicInfo.getId());
order.setProductId(coupon.getId());
order.setType(payWay.getCode());
order.setPaymentType(EnumPayType.PAY_PAYMENT.getCode());
order.setPayment(coupon.getSalePrice());
if(order.getPayment() == null || order.getPayment().intValue() == 0){
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode());
order.setPaymentTime(now);
}else{
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode());
}
order.setCreateDate(now);
order.setUpdateDate(now);
ttOrderMapper.insert(order);
return new ResultData(order);
} catch (MallinkException e) {
logger.error(e.getMessage());
return new ResultData(e.getErrorCode(), e.getMessage());
} catch (Exception e) {
logger.error(e.getMessage());
return new ResultData(ErrorCode.ORDER_IS_FAIL, e.getMessage());
}
}

@Override
public ResultData cancelOrder(Long orderId, Long memberId) {
TtOrder ttOrder = ttOrderMapper.selectById(orderId);
if(ttOrder == null){
return new ResultData(ErrorCode.ORDER_IS_NOT_FIND);
}
if(memberId != null && !ttOrder.getCUserId().equals(memberId)){
return new ResultData(ErrorCode.ORDER_USER_NOT_MATCH);
}
if(ttOrder.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode())){//订单待付款
TtOrder record = new TtOrder();
record.setId(ttOrder.getId());
record.setOrderStatus(EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL.getCode());
record.setUpdateDate(new Date());
ttOrderMapper.updateById(record);
return new ResultData();
}else
if(ttOrder.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode())){//订单已支付
return new ResultData(ErrorCode.ORDER_HAD_PAY);
}else
if(ttOrder.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL.getCode())){//订单已取消
return new ResultData(ErrorCode.ORDER_HAD_CANCEL);
}else
if(ttOrder.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_PENDING_REFUND.getCode())){//订单待退款
return new ResultData(ErrorCode.ORDER_PAY_IN_REFUND);
}else
if(ttOrder.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_REFUND_SUCCESS.getCode())){//订单已退款
return new ResultData(ErrorCode.ORDER_PAY_REFUND);
}else
if(ttOrder.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_REFUND_FAILD.getCode())){//订单退款失败
return new ResultData(ErrorCode.ORDER_PAY_REFUND_FAIL);
}
return new ResultData(ErrorCode.ORDER_IS_FAIL);
}

@Override
public TtOrder detail(Long orderId, Long memberId) {
TtOrder ttOrder = ttOrderMapper.selectById(orderId);
if(ttOrder == null){
return null;
}
if(memberId != null && !ttOrder.getCUserId().equals(memberId)){
return null;
}
TtCoupon coupon = ttCouponService.detail(ttOrder.getProductId());
return null;
}


@Override
public ResultData microPayListOnDateAsPage(Long bUserId, Integer type, String date, Integer pageIndex, Integer pageSize) {
WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectById(bUserId.longValue());
@@ -1899,54 +2015,8 @@ public class TtOrderServiceImpl implements TtOrderService {
@Qualifier("cUserBasicInfoRedisTemplate")
RedisTemplate<String, WxCUserBasicInfo> cUserBasicInfoRedisTemplate;

@Override
public WxOrder saveOrderForCoupon(WxCUserBasicInfo user, WxCoupon coupon, OrderSaveDto orderSaveDto, boolean isPress,EnumPayWay payWay) {
WxOrder order = null;
// 防止同一用户重复抽奖(一分钟内)
// 1. 订单保存时 加入redis缓存,key --> action:userId:couponId , 时间1000ms
// 2. 如果存在,说明该用户正在下单,返回异常提示
// 3. 方法结束时清除 key
if (checkCouponIsFree(coupon)) {
// 免费券
String key = StringUtils.join("action", ":", user.getId(), coupon.getId());
boolean hasKey = cUserBasicInfoRedisTemplate.hasKey(key);
if (hasKey) {
logger.error("用户正在下单,请求异常返回,user: {} " + JSON.toJSONString(user));
throw new MallinkException(ErrorCode.SYS_REPEAT_SUBMIT_EXCEPTION);
}
cUserBasicInfoRedisTemplate.opsForValue().set(key, user, 1000, TimeUnit.MILLISECONDS);
order = saveFreeOrderForCoupon(user, coupon, orderSaveDto.getCouponChannelId(), orderSaveDto.getFormId(), null,payWay);
if (order != null) {
// 6. 下订单完成,发送内部消息
// 下订单完成,发送内部消息
try {
sendOrderSuccessActionMsg(order);
} catch (Exception e) {
logger.error("内部消息发送失败: " + e.getMessage());
throw new MallinkException(ErrorCode.MSG_INSIDE_ERROR);
}
}
} else {
// 有价券
order = saveNoFreeOrderForCoupon(user, coupon, orderSaveDto.getCouponChannelId(), isPress, orderSaveDto.getOrderGroupId(), orderSaveDto.getFormId());
}
// couponActionLog
try {
wxCouponActionLogService.addOne(order, order.getProductId(), order.getOrderNumber(), EnumCouponSendSendType.ACTIVE.getCode(), orderSaveDto.getCouponChannelId(),0L);
} catch (Exception e) {
// 库存恢复
stockBack(order);
logger.error("保存订单:" + e.getMessage());
throw new MallinkException(ErrorCode.ORDER_SAVE_ERR);
}
return order;
}

@Override
public boolean checkCouponIsFree(WxCoupon coupon) {
return coupon.getSalePrice() == 0;
}


@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
@@ -2343,107 +2413,6 @@ public class TtOrderServiceImpl implements TtOrderService {
return wxOrderMapper.countList(query);
}


@Override
public ResultData saveOrder(OrderSaveDto orderSaveDto,Long cUserId,EnumPayWay payWay,TenantEntity tenantEntity) {
logger.info("OrderSave: " + orderSaveDto);
if (orderSaveDto.getCouponChannelId() == null) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId不能为空");
}
WxCouponChannel wxCouponChannel = wxCouponChannelService.getById(orderSaveDto.getCouponChannelId(),tenantEntity.getTenantId());
if (wxCouponChannel == null) {
logger.error("couponChannelId find error, " + orderSaveDto.getCouponChannelId());
return new ResultData(ErrorCode.COUPON_CHANNEL_IS_TAKE_OFF);
}
ResultData resultData = couponChannelCheck(orderSaveDto, wxCouponChannel);
if (resultData != null) return resultData;

WxCUserBasicInfo wxCUserBasicInfo = wxCUserBasicInfoService.getById(cUserId,tenantEntity.getFinalTenantId());
if (wxCUserBasicInfo != null && wxCUserBasicInfo.getStatus().equals(EnumCUserBasicInfoStatus.LOCKED.getCode())) {
logger.info("会员权益被锁定:cUserId:" + cUserId);
return new ResultData(ErrorCode.MEMBER_IS_LOCKED);
}

WxCoupon coupon = wxCouponService.getById(wxCouponChannel.getCouponId(),wxCouponChannel.getTenantId());
if (null == coupon) {
return new ResultData(ErrorCode.COUPON_IS_EMPTY);
}
if (coupon.getStatus().equals(EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode())) {
return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF);
}
//判断是否是拼团订单,如果是拼团订单,判断现在进行中的,和已完成的数量是否超出券的限制
if (coupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode())) {
int ordercount = this.countUserCouponGroupOrder(cUserId,coupon.getId(),coupon.getTenantId());
if (ordercount>=coupon.getUseLimitQuantity()) {
return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF.getCode(),"您当前此券的有效拼团数量达到券的限购次数。");
}
}

WxCouponCVo wxCouponCVo = null;

String key = "cc:" + orderSaveDto.getCouponChannelId();
ValueOperations<String, WxCouponCVo> operations = cdRedisTemplate.opsForValue();
// 缓存
boolean hasKey = cdRedisTemplate.hasKey(key);
if (hasKey) {
// 从缓存获取用户信息
wxCouponCVo = operations.get(key);
} else {
// 游戏没有入缓存,需要从数据库中读取
wxCouponCVo = wxCouponChannelService.findDetailVo(orderSaveDto.getCouponChannelId(),wxCouponChannel.getTenantId());
if (wxCouponCVo != null) {
// 游戏优化,进缓存
cdRedisTemplate.opsForValue().set(key, wxCouponCVo, 3600, TimeUnit.SECONDS);
}
}
if (wxCouponCVo == null) {
return new ResultData(ErrorCode.COUPON_IS_EMPTY);
}

//此处判断是否存在绝对保证库存不超卖的缓存,如果没有,则把当前的库存设置为最大值。如果有,则是后台设置的时候保存的,以那个为准。
boolean hascache = redisLock.hasCouponStockCache(wxCouponCVo.getCouponId());
if (!hascache) {
long time = System.currentTimeMillis() + RedisLock.TIMEOUT;
String timeStr = String.valueOf(time);
boolean stocksetlock = redisLock.lock("couponLockStockSetByOrder_"+coupon.getId(), timeStr);
if (stocksetlock) {
try {
if (!redisLock.hasCouponStockCache(wxCouponCVo.getCouponId())) {
redisLock.setCouponStock(wxCouponCVo.getCouponId(), coupon.getRemainInventory());
}
}catch(Exception e) {
logger.error("save order stock cache error.",e);
}finally {
redisLock.unlock("couponLockStockSetByOrder_"+coupon.getId(), timeStr);
}
}else {
redisLock.unlock("couponLockStockSetByOrder_"+coupon.getId(), timeStr);
}
}

resultData = couponUserCheck(wxCUserBasicInfo, wxCouponCVo);
if (resultData != null) return resultData;

Long couponId = orderSaveDto.getCouponId() == null ? wxCouponChannel.getCouponId() : orderSaveDto.getCouponId();
if (couponId == null) {
logger.error("couponChannelId或者couponId不能为空");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId或者couponId不能为空");
}
// 是否砍价
boolean isPress = orderSaveDto.getPress() != null ? orderSaveDto.getPress() : false;

try {
WxOrder order = this.saveOrderForCoupon(wxCUserBasicInfo, coupon, orderSaveDto, isPress,payWay);
return new ResultData(order);
} catch (MallinkException e) {
logger.error(e.getMessage());
return new ResultData(e.getErrorCode(), e.getMessage());
} catch (Exception e) {
logger.error(e.getMessage());
return new ResultData(ErrorCode.ORDER_IS_FAIL, e.getMessage());
}
}

private ResultData couponChannelCheck(OrderSaveDto orderSaveDto, WxCouponChannel wxCouponChannel) {
if (wxCouponChannel.getTargetAd().equals(EnumCouponChannelType.COUPON_CHANNEL_ID_TIMED.getCode())) {
Date now = new Date();


+ 38
- 0
mallinkService/src/main/resources/mapper/TtOrderMapper.xml Просмотреть файл

@@ -92,6 +92,13 @@
and m.`name` like concat('%', #{author},'%')
</if>

<if test=" null != statusS ">
and o.`order_status` in
<foreach collection="statusS" index="index" item="sItem" open="(" separator="," close=")">
#{sItem}
</foreach>
</if>

<if test=" null != ids ">
and o.`id` in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
@@ -111,4 +118,35 @@
<include refid="dynamicWhereConditions"/>
</select>

<select id="findListCount" parameterType="com.iformall.domain.po.WxOrder" resultType="Integer">
select count(1)
from wx_order
where 1 = 1
<if test=" null != tenantId and '' != tenantId">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != parentTenantId and '' != parentTenantId">
and `parent_tenant_id` = #{parentTenantId}
</if>

<if test=" null != cUserId ">
and `c_user_id` = #{cUserId}
</if>

<if test=" null != productId ">
and `product_id` = #{productId}
</if>

<if test=" null != orderStatus ">
and `order_status` = #{orderStatus}
</if>

<if test=" null != statusS ">
and `order_status` in
<foreach collection="statusS" index="index" item="sItem" open="(" separator="," close=")">
#{sItem}
</foreach>
</if>
</select>

</mapper>

+ 35
- 85
mallinkTTCApi/src/main/java/com/iformall/controller/TtOrderController.java Просмотреть файл

@@ -79,8 +79,8 @@ public class TtOrderController extends BaseController {
Long memberId;
try {
memberId = getMemberId();
} catch (Exception e) {
return new ResultData(Result.ERROR,e.getMessage());
} catch (MallinkException e) {
return new ResultData(e.getErrorCode(), e.getMessage());
}
order.setCUserId(memberId);
return new ResultData(ttOrderService.listAsPage(order, pageNum, pageSize));
@@ -88,14 +88,25 @@ public class TtOrderController extends BaseController {

@ApiOperation(value = "下订单", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"}")
@PostMapping("save")
public ResultData saveOrder(@RequestBody OrderSaveDto orderSaveDto) {
public ResultData saveOrder(@RequestBody Map<String, String> paramMap) {
String couponIdStr = paramMap.get("couponId");
if (StringUtils.isBlank(couponIdStr) || couponIdStr.equalsIgnoreCase(Constant.UNDEFINED)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponId不能为空");
}
Long couponId;
try {
couponId = Long.valueOf(couponIdStr);
} catch (NumberFormatException e) {
logger.error(e.getMessage());
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL, "couponId: " + couponIdStr + ", e: " + e.getMessage());
}
Long memberId;
try {
memberId = getMemberId();
} catch (Exception e) {
return new ResultData(Result.ERROR,e.getMessage());
}
return wxOrderService.saveOrder(orderSaveDto,memberId,EnumPayWay.PAY_WAY_WECHAT,getTenantInfo());
memberId = getMemberId();
} catch (MallinkException e) {
return new ResultData(e.getErrorCode(), e.getMessage());
}
return ttOrderService.saveOrder(couponId,memberId,EnumPayWay.PAY_WAY_TT,getTenantInfo());
}


@@ -106,56 +117,27 @@ public class TtOrderController extends BaseController {
if (StringUtils.isBlank(orderIdStr) || orderIdStr.equalsIgnoreCase(Constant.UNDEFINED)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "orderId不能为空");
}
Long orderId = 0L;
Long orderId;
try {
orderId = Long.valueOf(orderIdStr);
} catch (NumberFormatException e) {
logger.error(e.getMessage());
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL, "orderId: " + orderIdStr + ", e: " + e.getMessage());
}
Long memberId;
try {
WxOrder order = wxOrderService.getById(orderId,getTenantInfo().getTenantId());
if (order != null) {
wxOrderService.updateOrderStatus(order, EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL);
}
} catch (Exception e) {
logger.error("取消订单失败: " + e.getMessage());
return new ResultData(ErrorCode.ORDER_IS_FAIL.getCode(), "取消订单失败: " + e.getMessage());
}

return new ResultData();
}

@ApiOperation(value = "订单已过期", notes = "{\"orderId\":\"string\"}")
@PostMapping("expired")
public ResultData expiredOrder(@RequestBody Map<String, String> paramMap) {
//Assert.notNull(wxOrders.getName(), "角色名不能为空");
//Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名");
String orderIdStr = paramMap.get("orderId");
if (StringUtils.isBlank(orderIdStr) || orderIdStr.equalsIgnoreCase(Constant.UNDEFINED)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "退款订单ID不能为空");
}
Long orderId = 0L;
try {
orderId = Long.valueOf(orderIdStr);
} catch (NumberFormatException e) {
logger.error(e.getMessage());
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "退款订单ID转换失败");
memberId = getMemberId();
} catch (MallinkException e) {
return new ResultData(e.getErrorCode(), e.getMessage());
}
try {
WxOrder order = wxOrderService.getById(orderId,getTenantInfo().getTenantId());
if (order != null) {
wxOrderService.updateOrderStatus(order, EnumOrderStatus.ORDER_STATUS_REFUND_SUCCESS);
}
return ttOrderService.cancelOrder(orderId,memberId);
} catch (Exception e) {
logger.error("更新退款订单状态失败:" + e.getMessage());
return new ResultData(ErrorCode.REFUND_ORDER_ERROR.getCode(), "更新退款订单状态失败:" + e.getMessage());
logger.error("取消订单失败: " + e.getMessage());
return new ResultData(ErrorCode.ORDER_IS_FAIL.getCode(), "取消订单失败: " + e.getMessage());
}
return new ResultData();
}



@ApiOperation("订单详情接口")
@GetMapping("detail")
@ApiImplicitParams({
@@ -165,53 +147,21 @@ public class TtOrderController extends BaseController {
if (StringUtils.isBlank(orderId) || orderId.equalsIgnoreCase(Constant.UNDEFINED)) {
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
}
// c端用户应该只能看到自己的订单细节
WxOrder wxOrder = new WxOrder();
Long id = 0L;
Long id;
try {
id = Long.valueOf(orderId);
} catch (NumberFormatException e) {
logger.error("parse orderId failed");
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "订单ID转换异常");
logger.error(e.getMessage());
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL, "orderId: " + orderId + ", e: " + e.getMessage());
}
wxOrder.setId(id);
Long memberId;
try {
memberId = getMemberId();
} catch (Exception e) {
return new ResultData(Result.ERROR,e.getMessage());
}
wxOrder.setCUserId(memberId);
WxOrderCouponVo wxOrderCVo = wxOrderService.detailCUserVo(wxOrder);
if (wxOrderCVo == null)
return new ResultData(ErrorCode.ORDER_IS_NOT_FIND);

Date now = new Date();

if (wxOrderCVo.getValidStartDate() != null && wxOrderCVo.getValidEndDate() != null
&& !wxOrderCVo.getType().equals(EnumCouponType.COUPON_PREORDER.getCode())) {
if (wxOrderCVo.getValidStartDate().getTime() > now.getTime()) {
wxOrderCVo.setValidStatus(EnumCouponOrderValidStatus.PREPARED.getCode());
} else if (wxOrderCVo.getValidEndDate().getTime() < now.getTime()) {
wxOrderCVo.setValidStatus(EnumCouponOrderValidStatus.ENDED.getCode());
} else {
wxOrderCVo.setValidStatus(EnumCouponChannelActivityStatus.STARTED.getCode());
}
}
if(wxOrderCVo.getType().equals(EnumCouponType.COUPON_PREORDER.getCode())
&& wxOrderCVo.getPickStartDate() != null && wxOrderCVo.getPickEndDate() != null){
// wxOrderCVo.setValidStartDate(wxOrderCVo.getPickStartDate());
// wxOrderCVo.setValidEndDate(wxOrderCVo.getPickEndDate());
if (wxOrderCVo.getPickStartDate().getTime() > now.getTime()) {
wxOrderCVo.setValidStatus(EnumCouponOrderValidStatus.PREPARED.getCode());
} else if (wxOrderCVo.getPickEndDate().getTime() < now.getTime()) {
wxOrderCVo.setValidStatus(EnumCouponOrderValidStatus.ENDED.getCode());
} else {
wxOrderCVo.setValidStatus(EnumCouponChannelActivityStatus.STARTED.getCode());
}
memberId = getMemberId();
} catch (MallinkException e) {
return new ResultData(e.getErrorCode(), e.getMessage());
}
return new ResultData(wxOrderCVo);
TtOrder order = ttOrderService.detail(id,memberId);
return new ResultData(order);
}

@ApiOperation(value = "根据orderId查询接口", notes = "{\"orderId\":\"string\"}")


Загрузка…
Отмена
Сохранить