diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOrderController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOrderController.java index a5101fe1b..030cee395 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOrderController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOrderController.java @@ -190,7 +190,7 @@ public class WxOrderController extends BaseController { WxComposeOrder composeOrder = orderFactory.getOrderAdapterService(EnumComposeOrder.SINGLE.getCode()).createDBMainOrder(coupon, user, 0, EnumPayWay.PAY_WAY_NOT_UNPAY_CREDIT,EnumPayVersion.NO_VERSION); order = wxOrderService.saveFreeOrderForCoupon(new Date(),false,composeOrder,user, coupon, 1, wxCouponChannel, orderSaveDto.getFormId(), null,null,EnumPayWay.PAY_WAY_NOT_UNPAY_CREDIT,EnumPayVersion.NO_VERSION, - EnumOrderShopingType.ONLINE_PURCHASE.getCode(),null); + EnumOrderShopingType.ONLINE_PURCHASE.getCode(),null,false); return new ResultData(order); } catch (MallinkException e) { logger.error(e.getMessage()); diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxPressBatchController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxPressBatchController.java index d0466e968..7ae3ace2b 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxPressBatchController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxPressBatchController.java @@ -115,7 +115,7 @@ public class WxPressBatchController extends BaseController { if (null == record.getId()) { return new ResultData(Result.ERROR,"参数错误"); } - String cidstr = record.getCouponChannelIds(); + String cidstr = record.getCouponIds(); if (StringUtils.isBlank(cidstr)) { return new ResultData(Result.ERROR,"参数错误"); } diff --git a/mallinkAdmin/src/main/resources/db/migration/V2022090100001_press_batch.sql b/mallinkAdmin/src/main/resources/db/migration/V2022090100001_press_batch.sql index af92a9efb..13e85c43f 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V2022090100001_press_batch.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V2022090100001_press_batch.sql @@ -6,6 +6,7 @@ CREATE TABLE `wx_press_batch` ( `status` int(1) NOT NULL DEFAULT '0' COMMENT '状态0-草稿 1-进行中 2-已停止', `create_date` datetime DEFAULT NULL, `update_date` datetime DEFAULT NULL, + `promoter_limit_rule` int(1) NOT NULL DEFAULT '1' COMMENT '发起人限制规则', `promoter_allow_count` int(3) NOT NULL DEFAULT '0' COMMENT '发起人允许发起次数', `bargainer_allow_same` int(1) NOT NULL DEFAULT '0' COMMENT '同一个用户是否可以砍相同商品', `bargainer_allow_count` int(3) NOT NULL DEFAULT '0' COMMENT '同一个用户可砍价次数', @@ -17,7 +18,7 @@ CREATE TABLE `wx_press_batch_item` ( `tenant_id` varchar(5) NOT NULL, `parent_tenant_id` varchar(5) DEFAULT NULL, `press_batch_id` bigint(20) NOT NULL COMMENT '批次id', - `coupon_channel_id` bigint(20) NOT NULL COMMENT '砍价券id', + `coupon_id` bigint(20) NOT NULL COMMENT '砍价券id', `press_batch_status` int(1) NOT NULL COMMENT '批次状态', `create_date` datetime DEFAULT NULL, `update_date` datetime DEFAULT NULL, diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java index 8595c0428..b932990e4 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponPasswordController.java @@ -104,7 +104,7 @@ public class WxCouponPasswordController extends BaseController { WxComposeOrder composeOrder = orderFactory.getOrderAdapterService(EnumComposeOrder.SINGLE.getCode()).createDBMainOrder(coupon, member, 0, payWay,payVersion); WxOrder order = orderService.saveFreeOrderForCoupon(new Date(),false,composeOrder,member, coupon, 1, null, formId, couponPassword.getId(),null,payWay,payVersion, - EnumOrderShopingType.ONLINE_PURCHASE.getCode(),null); + EnumOrderShopingType.ONLINE_PURCHASE.getCode(),null,false); } catch (MallinkException e) { setCouponPasswordStatus(couponPassword, EnumCouponPasswordStatus.getEnum(pwdStatus)); logger.error(e.getMessage(),e); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxPressOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxPressOrderController.java index d3a2decc5..1e3077ca7 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxPressOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxPressOrderController.java @@ -13,6 +13,7 @@ import com.iformall.exception.MallinkException; import com.iformall.service.WxCouponService; import com.iformall.service.WxOrderPressService; import com.iformall.service.WxOrderService; +import com.iformall.service.WxPressBatchService; import com.iformall.utils.RedisLock; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -57,6 +58,9 @@ public class WxPressOrderController extends BaseController { @Autowired RedisLock redisLock; + + @Autowired + WxPressBatchService wxPressBatchService; // 砍价列表 - /api/wxCouponChannel/list // 我的砍价 - /api/order/pressOrderList @@ -168,7 +172,11 @@ public class WxPressOrderController extends BaseController { logger.error("用户已参与砍价"); return new ResultData(ErrorCode.COUPON_PRESS_IS_EXIST); } - + //验证砍价批次规则 + ResultData result = wxPressBatchService.checkBargainerPressBatchRule(order, memberId); + if (Result.SUCCESS != result.code) { + return result; + } try { WxOrderPress orderPress = wxOrderPressService.pressCouponJoin(order, wxCouponCVo, memberId); if (orderPress != null) { diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOrderPress.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOrderPress.java index 4c6906714..58cc9dd11 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOrderPress.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOrderPress.java @@ -1,5 +1,6 @@ package com.iformall.domain.po; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.iformall.domain.po.base.TenantEntity; import lombok.Data; @@ -16,6 +17,8 @@ public class WxOrderPress extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="券ID",name="couponId") private Long couponId; + @TableField(exist = false) + private List couponIds; @io.swagger.annotations.ApiModelProperty(value="订单ID",name="orderId") private Long orderId; @io.swagger.annotations.ApiModelProperty(value="砍价参与人ID",name="userId") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxPressBatch.java b/mallinkService/src/main/java/com/iformall/domain/po/WxPressBatch.java index 585f853de..b032da2bc 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxPressBatch.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPressBatch.java @@ -26,6 +26,8 @@ public class WxPressBatch extends TenantEntity { private Date createDate; @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") private Date updateDate; + @io.swagger.annotations.ApiModelProperty(value="发起人限制规则EnumCouponUseLimitRule",name="promoterLimitRule") + private Integer promoterLimitRule; @io.swagger.annotations.ApiModelProperty(value="发起人允许发起次数",name="promoterAllowCount") private Integer promoterAllowCount; @io.swagger.annotations.ApiModelProperty(value="同一个用户是否可以砍相同商品",name="bargainerAllowSame") @@ -34,6 +36,8 @@ public class WxPressBatch extends TenantEntity { private Integer bargainerAllowCount; @TableField(exist = false) - private String couponChannelIds; + private String couponIds; + + } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxPressBatchItem.java b/mallinkService/src/main/java/com/iformall/domain/po/WxPressBatchItem.java index 70eb7ca7c..916fa890a 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxPressBatchItem.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPressBatchItem.java @@ -19,8 +19,8 @@ public class WxPressBatchItem extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="批次id",name="pressBatchId") private Long pressBatchId; - @io.swagger.annotations.ApiModelProperty(value="砍价券id",name="couponChannelId") - private Long couponChannelId; + @io.swagger.annotations.ApiModelProperty(value="砍价券id",name="couponId") + private Long couponId; @io.swagger.annotations.ApiModelProperty(value="EnumPressBatchStatus",name="pressBatchStatus") private Integer pressBatchStatus; @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/CouponPressBatchVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/CouponPressBatchVo.java new file mode 100644 index 000000000..dee849f29 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/vo/CouponPressBatchVo.java @@ -0,0 +1,19 @@ +package com.iformall.domain.vo; + +import java.io.Serializable; +import java.text.DecimalFormat; +import java.util.List; + +import com.iformall.domain.po.WxDateAmountRecord; +import com.iformall.domain.po.WxPressBatch; + +import lombok.Data; + +@Data +public class CouponPressBatchVo implements Serializable{ + + private static final long serialVersionUID = 4494858079134918638L; + //核销金额记录 + private WxPressBatch pressBatch; + private List couponIdList; +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOrderPressMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOrderPressMapper.java index e1d0916fe..01bb9adde 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxOrderPressMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOrderPressMapper.java @@ -12,6 +12,6 @@ public interface WxOrderPressMapper extends CommonMapper { WxOrderPress selectById(@Param("id")Long id,@Param("tenantId")String tenantId); List findList(WxOrderPress wxOrderPress); - List findPressList(Map paramMap); + List findPressList(Map paramMap); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxPressBatchItemMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxPressBatchItemMapper.java index 185461cec..cd3712207 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxPressBatchItemMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxPressBatchItemMapper.java @@ -18,4 +18,6 @@ public interface WxPressBatchItemMapper extends CommonMapper getCouponIds(@Param("pressBatchId")Long pressBatchId,@Param("tenantId")String tenantId,@Param("pressBatchStatus")Integer pressBatchStatus); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxOrderPressService.java b/mallinkService/src/main/java/com/iformall/service/WxOrderPressService.java index bf608aa57..f59b0fc21 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOrderPressService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOrderPressService.java @@ -59,12 +59,5 @@ public interface WxOrderPressService { boolean checkCUserHasJoin(WxOrder order, Long cUserId); void sendPressComplateMsg(WxOrder orderUpdatePress); - - - - - - - } diff --git a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java index a6813ddb4..d6b3a5e1e 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java @@ -216,7 +216,7 @@ public interface WxOrderService { // 2. 创建免费订单, 领取 couponOrder WxOrder saveFreeOrderForCoupon(Date orderDate,boolean allowUnPayOrder,WxComposeOrder composeOrder, WxCUserBasicInfo user, WxCoupon coupon, int couponNumber, WxCouponChannel couponChannel, String formId, Long couponPasswordId,String extParam, EnumPayWay payWay,EnumPayVersion payVersion, - Integer shippingType, UserBasicInfoAddress address); + Integer shippingType, UserBasicInfoAddress address,boolean isPressOrder); // 3. 创建有价订单 WxOrder saveNoFreeOrderForCoupon(Date orderDate,boolean allowUnPayOrder,WxComposeOrder composeOrder,WxCUserBasicInfo user, WxCoupon coupon,int couponNumber, diff --git a/mallinkService/src/main/java/com/iformall/service/WxPressBatchService.java b/mallinkService/src/main/java/com/iformall/service/WxPressBatchService.java index 27125fb18..c44102679 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxPressBatchService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxPressBatchService.java @@ -10,9 +10,11 @@ import com.iformall.common.ResultData; import com.iformall.domain.po.TtCouponChannelPoi; import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxOrder; import com.iformall.domain.po.WxPressBatch; import com.iformall.domain.po.WxPressBatchItem; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.CouponPressBatchVo; import com.iformall.domain.vo.TtCouponVo; import com.iformall.domain.vo.WxCouponCVo; import com.iformall.domain.vo.WxCouponStatisVo; @@ -39,10 +41,16 @@ public interface WxPressBatchService { List getItemList(Long batchId,String tenantId); - void saveItems(WxPressBatch pressBatch,String[] couponChannelIds); + void saveItems(WxPressBatch pressBatch,String[] couponIds); void deleteBatch(Long id,String tenantId); void deleteItemById(Long itemId,String tenantId); void deleteItemByBatchId(Long batchId,String tenantId); + + //验证砍价人规则 + ResultData checkBargainerPressBatchRule(WxOrder order, Long cUserId); + + //验证砍价发起人规则 + CouponPressBatchVo getCouponPressBatch(WxCoupon coupon, Long cUserId); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java index d3ae5d75f..5bb253404 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -39,6 +39,8 @@ import com.iformall.service.pay.PayServiceFactory; import com.iformall.service.pay.entity.PayExtraParam; import com.iformall.service.pay.service.pay.entity.PayAdapterResult; import com.iformall.utils.*; + +import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -70,6 +72,8 @@ import com.iformall.mq.MqBaseProducer; import static java.util.stream.Collectors.groupingBy; +import java.lang.reflect.InvocationTargetException; + @Service public class WxOrderServiceImpl implements WxOrderService { @@ -229,6 +233,10 @@ public class WxOrderServiceImpl implements WxOrderService { @Autowired private OrderSnapshotService orderSnapshotService; + @Lazy + @Autowired + WxPressBatchService wxPressBatchService; + @Override public PageInfo listAsPage(WxOrder record, Integer pageIndex, Integer pageSize) { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxOrderMapper.findList(record)); @@ -755,23 +763,46 @@ public class WxOrderServiceImpl implements WxOrderService { * @param counpon * @return */ - private int getUserCouponOrderCount(WxCUserBasicInfo user, WxCoupon counpon,int couponNumber) { + private int getUserCouponOrderCount(WxCUserBasicInfo user, WxCoupon counpon,int couponNumber,boolean isPressOrder) { // + couponOrder ---待使用 try { WxCouponOrder couponOrderQ = new WxCouponOrder(); couponOrderQ.updateTenantInfo(counpon); - couponOrderQ.setCouponId(counpon.getId()); couponOrderQ.setCUserId(user.getId()); - if (counpon.getUseLimitRule().equals(EnumCouponUseLimitRule.TOBEUSED_USELIMIT.getCode())) { - couponOrderQ.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); - } // if (counpon.getSendType().equals(EnumCouponSendType.PASSIVE.getCode())) { // couponOrderQ.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); // } + //如果是砍价,则需要判断批次规则 + if (isPressOrder) { + CouponPressBatchVo checkPressResult = wxPressBatchService.getCouponPressBatch(counpon, user.getId()); + if (null != checkPressResult) { + WxPressBatch pressBatch = checkPressResult.getPressBatch(); + List cids = checkPressResult.getCouponIdList(); + couponOrderQ.setCouponIds(cids); + if (pressBatch.getPromoterLimitRule().equals(EnumCouponUseLimitRule.TOBEUSED_USELIMIT.getCode())) { + couponOrderQ.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); + } + int _count = wxCouponOrderMapper.findProductCount(couponOrderQ)+couponNumber; + if (_count > pressBatch.getPromoterAllowCount()) { + throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"当前用户已达砍价["+counpon.getTitle()+"]所在批次活动发起次数上限."); + } + return _count; + }else { + if (counpon.getUseLimitRule().equals(EnumCouponUseLimitRule.TOBEUSED_USELIMIT.getCode())) { + couponOrderQ.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); + } + couponOrderQ.setCouponId(counpon.getId()); + } + }else { + if (counpon.getUseLimitRule().equals(EnumCouponUseLimitRule.TOBEUSED_USELIMIT.getCode())) { + couponOrderQ.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); + } + couponOrderQ.setCouponId(counpon.getId()); + } return wxCouponOrderMapper.findProductCount(couponOrderQ)+couponNumber; } catch (Exception e) { logger.error("购买是否超限-DB, couponId: " + counpon.getId() + ", e:" + e.getMessage(),e); - throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"["+counpon.getTitle()+"]查询待使用订单错误."); + throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"["+counpon.getTitle()+"]查询待使用订单错误."+e.getMessage()); } } @@ -825,7 +856,7 @@ public class WxOrderServiceImpl implements WxOrderService { // } // 检查用户已购买数量 try { - count = getUserCouponOrderCount(user, coupon,1); + count = getUserCouponOrderCount(user, coupon,1,false); } catch (Exception e) { //解锁 redisLock.unlock(couponIdStr, timeStr); @@ -926,7 +957,7 @@ public class WxOrderServiceImpl implements WxOrderService { * @param */ @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public StockReduceResult stockReduce(boolean allowUnPayOrder,WxCUserBasicInfo user, WxCoupon coupon, WxCouponChannel couponChannel,int number) { + public StockReduceResult stockReduce(boolean allowUnPayOrder,WxCUserBasicInfo user, WxCoupon coupon, WxCouponChannel couponChannel,int number,boolean isPressOrder) { StockReduceResult reduceResult = new StockReduceResult(); @@ -978,24 +1009,21 @@ public class WxOrderServiceImpl implements WxOrderService { if (grouponCount >= coupon.getUseLimitQuantity()) { throw new MallinkException(ErrorCode.ORDER_IS_LIMITED.getCode(),"["+coupon.getTitle()+"]购买超限."); } - // 检查用户已购买数量 int paidCount = 0; try { - paidCount = getUserCouponOrderCount(user, coupon,number); + paidCount = getUserCouponOrderCount(user, coupon,number,isPressOrder); } catch (Exception e) { - throw new MallinkException(ErrorCode.DB_FAIL.getCode(),"["+coupon.getTitle()+"]查询待使用订单错误."); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(),"["+coupon.getTitle()+"]查询待使用订单错误."+e.getMessage()); } if (paidCount > coupon.getUseLimitQuantity()) { throw new MallinkException(ErrorCode.ORDER_IS_LIMITED.getCode(),"此券购买数量已超限["+coupon.getTitle()+"], couponId: " + coupon.getId() + ", count: " + paidCount); } - //如果允许未支付的,则未支付的+已支付的不能超过限购 if ((unPaidcount+paidCount) > coupon.getUseLimitQuantity()) { throw new MallinkException(ErrorCode.ORDER_IS_LIMITED.getCode(),"此券[未支付+已支付]购买数量已超限["+coupon.getTitle()+"], couponId: " + coupon.getId()+ ", count: " + paidCount); } - - + //减库存, if (isChannelStockReduce) { try { @@ -1825,7 +1853,7 @@ public class WxOrderServiceImpl implements WxOrderService { } else { // 减库存操作 try { - stockReduce(false,user, coupon,null,1); + stockReduce(false,user, coupon,null,1,false); }catch(Exception e) { throw new MallinkException(ErrorCode.COUPON_STOCK_ERR.getCode(), e.getMessage()); } @@ -2771,11 +2799,53 @@ public class WxOrderServiceImpl implements WxOrderService { Map paramMap = new HashMap(); paramMap.put("orderId", record.getId()); paramMap.put("tenantId", record.getTenantId()); - paramMap.put("finalTenantId", record.getFinalTenantId()); - pressVo.setOrderPressList(wxOrderPressMapper.findPressList(paramMap)); + pressVo.setOrderPressList(toVoList(wxOrderPressMapper.findPressList(paramMap),record)); } return pressVo; } + + private List toVoList(List pressList,WxOrder record) { + if (null == pressList || pressList.size() <= 0 ) { + return null; + } + String finalTenantId = record.getFinalTenantId(); + List cIds = new ArrayList(); + for (WxOrderPress op : pressList) { + cIds.add(op.getUserId()); + } + Map userMap = new HashMap(); + WxCUserBasicInfo userq = new WxCUserBasicInfo(); + userq.setFinalTenantId(finalTenantId); + userq.setIds(cIds); + List userList = wxCUserBasicInfoMapper.findList(userq); + if (null != userList && userList.size() > 0 ) { + for (WxCUserBasicInfo cbi : userList) { + userMap.put(cbi.getId(), cbi); + } + } + List retList = new ArrayList(); + for (WxOrderPress op : pressList) { + WxOrderPressVo vo = new WxOrderPressVo(); + try { + BeanUtils.copyProperties(vo, op); + Long userId = op.getUserId(); + WxCUserBasicInfo basicInfo = userMap.get(userId); + if (null != basicInfo) { + vo.setAvatarUrl(basicInfo.getAvatarUrl()); + vo.setNickName(basicInfo.getNickName()); + } + retList.add(vo); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + if (retList.size()> 0 ) { + return retList; + } + return null; + } @Override public void updateStatusByPressCouponId(Long couponId, TenantEntity tenantEntity, int orderStatus) { @@ -2925,7 +2995,7 @@ public class WxOrderServiceImpl implements WxOrderService { if (checkCouponIsFree(coupon,couponChannel,shippinType)) { // 免费券 order = proxy.saveFreeOrderForCoupon(orderDate,allowUnPayOrder,composeOrder,user, coupon,perCouponNumber,couponChannel, - formId,null,extParam,payWay,payVersion,shippinType,address); + formId,null,extParam,payWay,payVersion,shippinType,address,isPressOrder); if (order != null) { // 6. 下订单完成,发送内部消息 // 下订单完成,发送内部消息 @@ -2979,11 +3049,11 @@ public class WxOrderServiceImpl implements WxOrderService { @Override public WxOrder saveFreeOrderForCoupon(Date orderDate,boolean allowUnPayOrder,WxComposeOrder composeOrder,WxCUserBasicInfo user, WxCoupon coupon,int couponNumber, WxCouponChannel couponChannel, String formId, Long couponPasswordId,String extParam,EnumPayWay payWay,EnumPayVersion payVersion, - Integer shippingType, UserBasicInfoAddress address) { + Integer shippingType, UserBasicInfoAddress address,boolean isPressOrder) { WxOrderServiceImpl proxy = (WxOrderServiceImpl) AopContext.currentProxy(); // 减库存操作 - StockReduceResult stockReduceResult = proxy.stockReduce(allowUnPayOrder,user, coupon,couponChannel,couponNumber); + StockReduceResult stockReduceResult = proxy.stockReduce(allowUnPayOrder,user, coupon,couponChannel,couponNumber,isPressOrder); // 当积分券或者积分停车券时 则进行积分支付 Integer orderType; @@ -3053,7 +3123,7 @@ public class WxOrderServiceImpl implements WxOrderService { WxOrderServiceImpl proxy = (WxOrderServiceImpl) AopContext.currentProxy(); // 3. 减库存操作。所有的订单都跟减库存操作时的订单详情保持一致 - StockReduceResult stockReduceResult = proxy.stockReduce(allowUnPayOrder,user, coupon, couponChannel,couponNumber); + StockReduceResult stockReduceResult = proxy.stockReduce(allowUnPayOrder,user, coupon, couponChannel,couponNumber,isPressOrder); // 3. 当积分券或者积分停车券时 则进行积分支付 Integer orderType; @@ -3148,7 +3218,7 @@ public class WxOrderServiceImpl implements WxOrderService { } } // 2. 减库存操作 - stockReduce(false,user, coupon, wxCouponChannel,1); + stockReduce(false,user, coupon, wxCouponChannel,1,false); // 3. 当积分券或者积分停车券时 则进行积分支付 Integer orderType; @@ -3829,7 +3899,6 @@ public class WxOrderServiceImpl implements WxOrderService { } } } - couponUserCheck(wxCUserBasicInfo, wxCouponCVo,premsg); Long couponId = wxCouponChannel.getCouponId(); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPressBatchServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPressBatchServiceImpl.java index 81250c5d3..7baabd50a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPressBatchServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPressBatchServiceImpl.java @@ -1,9 +1,16 @@ package com.iformall.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.iformall.common.Result; +import com.iformall.common.ResultData; import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.CouponPressBatchVo; +import com.iformall.enums.EnumPressBatchStatus; +import com.iformall.enums.EnumYesOrNo; +import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.service.*; import org.slf4j.Logger; @@ -23,6 +30,10 @@ public class WxPressBatchServiceImpl implements WxPressBatchService { WxPressBatchMapper wxPressBatchMapper; @Autowired WxPressBatchItemMapper wxPressBatchItemMapper; + @Autowired + WxOrderPressMapper wxOrderPressMapper; + @Autowired + WxOrderMapper wxOrderMapper; @Override @@ -62,12 +73,12 @@ public class WxPressBatchServiceImpl implements WxPressBatchService { @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public void saveItems(WxPressBatch pressBatch, String[] couponChannelIds) { - for (String cid : couponChannelIds) { + public void saveItems(WxPressBatch pressBatch, String[] couponIds) { + for (String cid : couponIds) { WxPressBatchItem iteq = new WxPressBatchItem(); iteq.updateTenantInfo(pressBatch); iteq.setPressBatchId(pressBatch.getId()); - iteq.setCouponChannelId(Long.parseLong(cid)); + iteq.setCouponId(Long.parseLong(cid)); iteq.setPressBatchStatus(pressBatch.getStatus()); iteq.setCreateDate(new Date()); iteq.setUpdateDate(new Date()); @@ -98,6 +109,80 @@ public class WxPressBatchServiceImpl implements WxPressBatchService { wxPressBatchItemMapper.deleteAllItem(iteq); } + @Override + public ResultData checkBargainerPressBatchRule(WxOrder order, Long cUserId) { + WxPressBatchItem query = new WxPressBatchItem(); + query.updateTenantInfo(order); + query.setCouponId(order.getProductId()); + query.setPressBatchStatus(EnumPressBatchStatus.RUNNING.getCode()); + List batchList = wxPressBatchItemMapper.findList(query); + //一个砍价商品只能存在一个有效的批次 + if (null != batchList ) { + if (batchList.size() > 1) { + return new ResultData(Result.ERROR,"该砍价存在多个有效批次活动,请联系管理员重新设置."); + }else { + WxPressBatchItem batchItem = batchList.get(0); + WxPressBatch pressBatch = wxPressBatchMapper.getById(batchItem.getPressBatchId(), batchItem.getTenantId()); + //查询该批次下所有的砍价商品, + List batchCouponIds = wxPressBatchItemMapper.getCouponIds(batchItem.getPressBatchId(), batchItem.getTenantId(), EnumPressBatchStatus.RUNNING.getCode()); + if (null == batchCouponIds || batchCouponIds.size() <= 0 ) { + return new ResultData(Result.ERROR,"未查询到砍价有效批次活动记录,"); + } + //如果不允许砍相同商品 + if (EnumYesOrNo.NO.getCode() == pressBatch.getBargainerAllowSame()) { + WxOrderPress orderPressQ1 = new WxOrderPress(); + orderPressQ1.setTenantId(order.getTenantId()); + orderPressQ1.setUserId(cUserId); + orderPressQ1.setCouponId(order.getProductId()); + int count1 = wxOrderPressMapper.selectCount(new QueryWrapper<>(orderPressQ1)); + if(count1 >= 1) { + return new ResultData(Result.ERROR,"当前用户砍已砍过相同商品,"); + } + } + //查询当前用户参与这些券的砍价次数 + WxOrderPress orderPressQ = new WxOrderPress(); + orderPressQ.setTenantId(order.getTenantId()); + orderPressQ.setUserId(cUserId); + orderPressQ.setCouponIds(batchCouponIds); + int count = wxOrderPressMapper.selectCount(new QueryWrapper<>(orderPressQ)); + if(count >= pressBatch.getBargainerAllowCount().intValue()) { + return new ResultData(Result.ERROR,"当前用户砍价次数已达批次活动设定上限,"); + } else { + return new ResultData(); + } + } + } + return new ResultData(); + } + + @Override + public CouponPressBatchVo getCouponPressBatch(WxCoupon coupon, Long cUserId) { + WxPressBatchItem query = new WxPressBatchItem(); + query.updateTenantInfo(coupon); + query.setCouponId(coupon.getId()); + query.setPressBatchStatus(EnumPressBatchStatus.RUNNING.getCode()); + List batchList = wxPressBatchItemMapper.findList(query); + //一个砍价商品只能存在一个有效的批次 + if (null != batchList ) { + if (batchList.size() > 1) { + throw new MallinkException(Result.ERROR,"该砍价["+coupon.getTitle()+"]存在多个有效批次活动,请联系管理员重新设置."); + }else { + WxPressBatchItem batchItem = batchList.get(0); + WxPressBatch pressBatch = wxPressBatchMapper.getById(batchItem.getPressBatchId(), batchItem.getTenantId()); + //查询该批次下所有的砍价商品, + List batchCouponIds = wxPressBatchItemMapper.getCouponIds(batchItem.getPressBatchId(), batchItem.getTenantId(), EnumPressBatchStatus.RUNNING.getCode()); + if (null == batchCouponIds || batchCouponIds.size() <= 0 ) { + throw new MallinkException(Result.ERROR,"未查询到砍价["+coupon.getTitle()+"]有效批次活动记录,"); + } + CouponPressBatchVo vo = new CouponPressBatchVo(); + vo.setPressBatch(pressBatch); + vo.setCouponIdList(batchCouponIds); + return vo; + } + } + return null; + } + diff --git a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml index 119b5f86c..5009dc81c 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml @@ -579,6 +579,12 @@ and co.coupon_type = #{couponType} + + and co.coupon_id in + + #{couponIdItem} + + - - - - - - - - - - - - - - - op.`id`,op.`order_id`,op.`user_id`,op.`press_value`,op.`create_date`,op.`first`, - cu.`nick_name`, cu.`avatar_url` - - diff --git a/mallinkService/src/main/resources/mapper/WxPressBatchItemMapper.xml b/mallinkService/src/main/resources/mapper/WxPressBatchItemMapper.xml index 9d0df69dc..05916ca73 100644 --- a/mallinkService/src/main/resources/mapper/WxPressBatchItemMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxPressBatchItemMapper.xml @@ -6,7 +6,7 @@ - + @@ -14,7 +14,7 @@ - `id`, `tenant_id`, `parent_tenant_id`, `press_batch_id`, `coupon_channel_id`, `create_date`,`update_date`,`press_batch_status` + `id`, `tenant_id`, `parent_tenant_id`, `press_batch_id`, `coupon_id`, `create_date`,`update_date`,`press_batch_status` @@ -32,8 +32,8 @@ and `press_batch_id` = #{pressBatchId} - - and `coupon_channel_id` = #{couponChannelId} + + and `coupon_id` = #{couponId} @@ -76,5 +76,12 @@ delete from wx_press_batch_item where `press_batch_id` = #{pressBatchId} and tenant_id=#{tenantId} + + diff --git a/mallinkService/src/main/resources/mapper/WxPressBatchMapper.xml b/mallinkService/src/main/resources/mapper/WxPressBatchMapper.xml index 37587714c..ec2775530 100644 --- a/mallinkService/src/main/resources/mapper/WxPressBatchMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxPressBatchMapper.xml @@ -8,7 +8,8 @@ - + + @@ -16,7 +17,7 @@ - `id`, `tenant_id`, `parent_tenant_id`, `name`, `status`, `create_date`,`update_date`,`promoter_allow_count`, `bargainer_allow_same`, `bargainer_allow_count` + `id`, `tenant_id`, `parent_tenant_id`, `name`, `status`, `create_date`,`update_date`,`promoter_limit_rule`,`promoter_allow_count`, `bargainer_allow_same`, `bargainer_allow_count` @@ -33,6 +34,10 @@ and `status` = #{status} + + + and `promoter_limit_rule` = #{promoterLimitRule} + and `bargainer_allow_same` = #{bargainerAllowSame}