diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index 6547ba0c5..8e23783b3 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/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; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/tt/TtCoupon.java b/mallinkService/src/main/java/com/iformall/domain/po/tt/TtCoupon.java index e6c2791fb..1879a3761 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/tt/TtCoupon.java +++ b/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 columnCoupons; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/tt/TtOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/tt/TtOrder.java index 47f0beb80..617cff686 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/tt/TtOrder.java +++ b/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 statusS; + @TableField(exist = false) @io.swagger.annotations.ApiModelProperty(value="查询-起始时间",name="startdate") private Date startdate; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java b/mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java index e468f7e6f..43e6a57dd 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumPayWay.java +++ b/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 } } diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumTtCouponStatus.java b/mallinkService/src/main/java/com/iformall/enums/EnumTtCouponStatus.java new file mode 100644 index 000000000..a1f47b825 --- /dev/null +++ b/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; + } +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/TtOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/TtOrderMapper.java index 29064cc4f..b16fde7c9 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/TtOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/TtOrderMapper.java @@ -16,4 +16,5 @@ public interface TtOrderMapper extends CommonMapper { List findList(TtOrder record); + Integer findListCount(TtOrder orderQ); } diff --git a/mallinkService/src/main/java/com/iformall/service/tt/TtCouponService.java b/mallinkService/src/main/java/com/iformall/service/tt/TtCouponService.java index 5bc4f496d..16d53f592 100644 --- a/mallinkService/src/main/java/com/iformall/service/tt/TtCouponService.java +++ b/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); } diff --git a/mallinkService/src/main/java/com/iformall/service/tt/TtOrderService.java b/mallinkService/src/main/java/com/iformall/service/tt/TtOrderService.java index d113adc52..2839d9473 100644 --- a/mallinkService/src/main/java/com/iformall/service/tt/TtOrderService.java +++ b/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 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); } diff --git a/mallinkService/src/main/java/com/iformall/service/tt/impl/TtCouponServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/tt/impl/TtCouponServiceImpl.java index d65ae78f4..6e166d109 100644 --- a/mallinkService/src/main/java/com/iformall/service/tt/impl/TtCouponServiceImpl.java +++ b/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; + } } diff --git a/mallinkService/src/main/java/com/iformall/service/tt/impl/TtOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/tt/impl/TtOrderServiceImpl.java index 96636d798..264926c39 100644 --- a/mallinkService/src/main/java/com/iformall/service/tt/impl/TtOrderServiceImpl.java +++ b/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 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 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 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(); diff --git a/mallinkService/src/main/resources/mapper/TtOrderMapper.xml b/mallinkService/src/main/resources/mapper/TtOrderMapper.xml index 02bc84b9b..5bfbf940b 100644 --- a/mallinkService/src/main/resources/mapper/TtOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/TtOrderMapper.xml @@ -92,6 +92,13 @@ and m.`name` like concat('%', #{author},'%') + + and o.`order_status` in + + #{sItem} + + + and o.`id` in @@ -111,4 +118,35 @@ + + diff --git a/mallinkTTCApi/src/main/java/com/iformall/controller/TtOrderController.java b/mallinkTTCApi/src/main/java/com/iformall/controller/TtOrderController.java index 727a85687..2db785888 100644 --- a/mallinkTTCApi/src/main/java/com/iformall/controller/TtOrderController.java +++ b/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 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 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\"}")