| @@ -140,7 +140,8 @@ public class WxOrderController extends BaseController { | |||||
| } | } | ||||
| return wxOrderService.composeSaveOrder(false,EnumComposeOrder.ONE_NUMBER_ORDER_BATCH,orderSaveDto,memberId,getPayWay(),getTenantInfo(),this.getPayVersion()); | return wxOrderService.composeSaveOrder(false,EnumComposeOrder.ONE_NUMBER_ORDER_BATCH,orderSaveDto,memberId,getPayWay(),getTenantInfo(),this.getPayVersion()); | ||||
| } | } | ||||
| @TenantIgnore | |||||
| @ApiOperation(value = "单个券单个订单,卡(分账导致无法批量下单)、拼团,砍价用", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"}") | @ApiOperation(value = "单个券单个订单,卡(分账导致无法批量下单)、拼团,砍价用", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"}") | ||||
| @PostMapping("save") | @PostMapping("save") | ||||
| public ResultData saveOrder(@RequestBody OrderSaveDto orderSaveDto) { | public ResultData saveOrder(@RequestBody OrderSaveDto orderSaveDto) { | ||||
| @@ -291,5 +291,14 @@ public interface WxCouponService { | |||||
| void setParentCouponMallMerchants(TenantEntity mallTenantEntity,WxCoupon wxCoupon) throws Exception; | void setParentCouponMallMerchants(TenantEntity mallTenantEntity,WxCoupon wxCoupon) throws Exception; | ||||
| Map<Long,Boolean> couponMerchantAutoShare(TenantEntity tenantEntity,WxCoupon wxCoupon) throws Exception; | |||||
| Map<Long,Boolean> couponMerchantAutoShare(TenantEntity tenantEntity,WxCoupon wxCoupon) throws Exception; | |||||
| /** | |||||
| * 判断门店商户是否可用 | |||||
| * @param couponId | |||||
| * @param couponType | |||||
| * @param couponTenantEntity | |||||
| * @return | |||||
| */ | |||||
| boolean isCouponMerchantValid(Long couponId,Integer couponType,TenantEntity couponTenantEntity); | |||||
| } | } | ||||
| @@ -161,6 +161,14 @@ public class TtCouponGoodsServiceImpl implements TtCouponGoodsService { | |||||
| @Override | @Override | ||||
| @Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) | @Transactional(isolation=Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}) | ||||
| public ResultData productSave(WxCoupon coupon) throws Exception { | public ResultData productSave(WxCoupon coupon) throws Exception { | ||||
| TtCouponChannelPoi ttCouponChannelPoi = ttCouponChannelPoiMapper.selectById(coupon.getTenantId(),coupon.getId()); | |||||
| if(ttCouponChannelPoi != null && | |||||
| (EnumSpuSyncStatus.sync_auditing.getCode().equals(ttCouponChannelPoi.getLastStatus()) | |||||
| || EnumSpuSyncStatus.sync_put_on.getCode().equals(ttCouponChannelPoi.getLastStatus()) | |||||
| || EnumSpuSyncStatus.sync_audit_disable.getCode().equals(ttCouponChannelPoi.getLastStatus()))){ | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"该券状态不允许提交审核"); | |||||
| } | |||||
| WxCoupon ttattrs = wxCouponService.getAttrsById(coupon.getId(), coupon.getTenantId()); | WxCoupon ttattrs = wxCouponService.getAttrsById(coupon.getId(), coupon.getTenantId()); | ||||
| if(ttattrs.getProductType() == null || ttattrs.getCategoryId() == null | if(ttattrs.getProductType() == null || ttattrs.getCategoryId() == null | ||||
| || ttattrs.getProductAttrKeyValueMap().isEmpty() | || ttattrs.getProductAttrKeyValueMap().isEmpty() | ||||
| @@ -596,44 +596,6 @@ public class WxCouponChannelServiceImpl implements WxCouponChannelService { | |||||
| } | } | ||||
| return retList; | return retList; | ||||
| } | } | ||||
| private boolean isCouponMerchantValid(Long couponId,Integer couponType,TenantEntity couponTenantEntity) { | |||||
| if (EnumCouponType.isParentCoupon(couponType)) { | |||||
| WxCouponMall couponMall = new WxCouponMall(); | |||||
| couponMall.updateTenantInfo(couponTenantEntity); | |||||
| couponMall.setProductId(couponId); | |||||
| couponMall.setStatus(EnumCouponMallStatus.FINISED.getCode()) ; | |||||
| List<WxCouponMall> couponMallList = wxCouponMallMapper.findList(couponMall); | |||||
| if (null == couponMallList ) { | |||||
| return false; | |||||
| } | |||||
| for (int i = 0 ; i < couponMallList.size(); i++) { | |||||
| WxCouponMall wcm = couponMallList.get(i); | |||||
| TenantEntity mallTenantEntity = new TenantEntity(); | |||||
| mallTenantEntity.setTenantId(wcm.getMallTenantId()); | |||||
| mallTenantEntity.setParentTenantId(couponTenantEntity.getTenantId()); | |||||
| List<WxMerchantVo> merchantVoList = wxMerchantService.findMerchantListByProduct(mallTenantEntity,couponId,false); | |||||
| if (null != merchantVoList && merchantVoList.size() > 0 ) { | |||||
| if (merchantVoList.stream().anyMatch((cm->cm.getMerchantStatus().equals(EnumMerchantStatus.VALID.getCode())))){ | |||||
| return true; | |||||
| } | |||||
| } | |||||
| } | |||||
| return false; | |||||
| }else { | |||||
| List<WxMerchantVo> merchantVoList = wxMerchantService.findMerchantListByProduct(couponTenantEntity,couponId,false); | |||||
| if (null == merchantVoList || merchantVoList.size() <=0 ) { | |||||
| return false; | |||||
| } | |||||
| if (merchantVoList.stream().anyMatch((cm->cm.getMerchantStatus().equals(EnumMerchantStatus.VALID.getCode())))){ | |||||
| return true; | |||||
| } | |||||
| } | |||||
| return false; | |||||
| } | |||||
| @Override | @Override | ||||
| public WxCouponChannelAddVo addCouponChannel(Long couponid,Integer channelId, TenantEntity tenantEntity,Date showBeginTime,Date beginTime,Date endTime,Integer channelPrice,Integer channelStock){ | public WxCouponChannelAddVo addCouponChannel(Long couponid,Integer channelId, TenantEntity tenantEntity,Date showBeginTime,Date beginTime,Date endTime,Integer channelPrice,Integer channelStock){ | ||||
| @@ -684,7 +646,7 @@ public class WxCouponChannelServiceImpl implements WxCouponChannelService { | |||||
| } | } | ||||
| if(!EnumCouponType.COUPON_GIFT.getCode().equals(wxCoupon.getType()) | if(!EnumCouponType.COUPON_GIFT.getCode().equals(wxCoupon.getType()) | ||||
| && !isCouponMerchantValid(wxCoupon.getId(),wxCoupon.getType(),wxCoupon)) { | |||||
| && !wxCouponService.isCouponMerchantValid(wxCoupon.getId(),wxCoupon.getType(),wxCoupon)) { | |||||
| logger.debug(wxCoupon.getId()+couponid+ErrorCode.MERCHANT_INFO_NOT_FOUND.getMessage()); | logger.debug(wxCoupon.getId()+couponid+ErrorCode.MERCHANT_INFO_NOT_FOUND.getMessage()); | ||||
| vo.toCouponChannnelVo(wxCoupon,channelId); | vo.toCouponChannnelVo(wxCoupon,channelId); | ||||
| vo.setErrorMsg(ErrorCode.MERCHANT_INFO_NOT_FOUND.getMessage()); | vo.setErrorMsg(ErrorCode.MERCHANT_INFO_NOT_FOUND.getMessage()); | ||||
| @@ -147,6 +147,9 @@ public class WxCouponServiceImpl implements WxCouponService { | |||||
| @Autowired | @Autowired | ||||
| PayServiceFactory payServiceFactory; | PayServiceFactory payServiceFactory; | ||||
| @Autowired | |||||
| TtCouponChannelPoiMapper ttCouponChannelPoiMapper; | |||||
| @Autowired | @Autowired | ||||
| WxCouponMallMapper wxCouponMallMapper; | WxCouponMallMapper wxCouponMallMapper; | ||||
| @@ -590,6 +593,15 @@ public class WxCouponServiceImpl implements WxCouponService { | |||||
| wxCouponMapper.insert(record); | wxCouponMapper.insert(record); | ||||
| } else { | } else { | ||||
| if(EnumCouponType.getDouYinType().contains(record.getType())){ | |||||
| TtCouponChannelPoi ttCouponChannelPoi = ttCouponChannelPoiMapper.selectById(record.getTenantId(),record.getId()); | |||||
| if(ttCouponChannelPoi != null && | |||||
| (EnumSpuSyncStatus.sync_auditing.getCode().equals(ttCouponChannelPoi.getLastStatus()) | |||||
| || EnumSpuSyncStatus.sync_put_on.getCode().equals(ttCouponChannelPoi.getLastStatus()) | |||||
| || EnumSpuSyncStatus.sync_audit_disable.getCode().equals(ttCouponChannelPoi.getLastStatus()))){ | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"该券状态不允许修改"); | |||||
| } | |||||
| } | |||||
| if(record.getInventory() != null && record.getRemainInventory() != null) { | if(record.getInventory() != null && record.getRemainInventory() != null) { | ||||
| // 库存修改检查 | // 库存修改检查 | ||||
| @@ -908,6 +920,16 @@ public class WxCouponServiceImpl implements WxCouponService { | |||||
| @Override | @Override | ||||
| public ResultData updateTtProduct(WxCoupon record) { | public ResultData updateTtProduct(WxCoupon record) { | ||||
| if(EnumCouponType.getDouYinType().contains(record.getType())){ | |||||
| TtCouponChannelPoi ttCouponChannelPoi = ttCouponChannelPoiMapper.selectById(record.getTenantId(),record.getId()); | |||||
| if(ttCouponChannelPoi != null && | |||||
| (EnumSpuSyncStatus.sync_auditing.getCode().equals(ttCouponChannelPoi.getLastStatus()) | |||||
| || EnumSpuSyncStatus.sync_put_on.getCode().equals(ttCouponChannelPoi.getLastStatus()) | |||||
| || EnumSpuSyncStatus.sync_audit_disable.getCode().equals(ttCouponChannelPoi.getLastStatus()))){ | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"该券状态不允许修改"); | |||||
| } | |||||
| } | |||||
| if(StringUtils.isBlank(record.getProductAttrs()) || StringUtils.isBlank(record.getSkuAttrs())){ | if(StringUtils.isBlank(record.getProductAttrs()) || StringUtils.isBlank(record.getSkuAttrs())){ | ||||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); | return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); | ||||
| } | } | ||||
| @@ -1713,6 +1735,43 @@ public class WxCouponServiceImpl implements WxCouponService { | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @Override | |||||
| public boolean isCouponMerchantValid(Long couponId, Integer couponType, TenantEntity couponTenantEntity) { | |||||
| if (EnumCouponType.isParentCoupon(couponType)) { | |||||
| WxCouponMall couponMall = new WxCouponMall(); | |||||
| couponMall.updateTenantInfo(couponTenantEntity); | |||||
| couponMall.setProductId(couponId); | |||||
| couponMall.setStatus(EnumCouponMallStatus.FINISED.getCode()) ; | |||||
| List<WxCouponMall> couponMallList = wxCouponMallMapper.findList(couponMall); | |||||
| if (null == couponMallList ) { | |||||
| return false; | |||||
| } | |||||
| for (int i = 0 ; i < couponMallList.size(); i++) { | |||||
| WxCouponMall wcm = couponMallList.get(i); | |||||
| TenantEntity mallTenantEntity = new TenantEntity(); | |||||
| mallTenantEntity.setTenantId(wcm.getMallTenantId()); | |||||
| mallTenantEntity.setParentTenantId(couponTenantEntity.getTenantId()); | |||||
| List<WxMerchantVo> merchantVoList = wxMerchantService.findMerchantListByProduct(mallTenantEntity,couponId,false); | |||||
| if (null != merchantVoList && merchantVoList.size() > 0 ) { | |||||
| if (merchantVoList.stream().anyMatch((cm->cm.getMerchantStatus().equals(EnumMerchantStatus.VALID.getCode())))){ | |||||
| return true; | |||||
| } | |||||
| } | |||||
| } | |||||
| return false; | |||||
| }else { | |||||
| List<WxMerchantVo> merchantVoList = wxMerchantService.findMerchantListByProduct(couponTenantEntity,couponId,false); | |||||
| if (null == merchantVoList || merchantVoList.size() <=0 ) { | |||||
| return false; | |||||
| } | |||||
| if (merchantVoList.stream().anyMatch((cm->cm.getMerchantStatus().equals(EnumMerchantStatus.VALID.getCode())))){ | |||||
| return true; | |||||
| } | |||||
| } | |||||
| return false; | |||||
| } | |||||
| } | } | ||||
| @@ -3235,8 +3235,8 @@ public class WxOrderServiceImpl implements WxOrderService { | |||||
| throw new MallinkException(ErrorCode.COUPON_IS_EMPTY.getCode(),premsg+"不存在"); | throw new MallinkException(ErrorCode.COUPON_IS_EMPTY.getCode(),premsg+"不存在"); | ||||
| } | } | ||||
| if (EnumCouponType.mustHasMerchant(coupon.getType())) { | if (EnumCouponType.mustHasMerchant(coupon.getType())) { | ||||
| // 检查券商户信息 | |||||
| if (!isCouponMerchantValid(coupon.getId(),coupon)) { | |||||
| // 检查券商户信息isCouponMerchantValid | |||||
| if (!wxCouponService.isCouponMerchantValid(coupon.getId(),coupon.getType(),coupon)) { | |||||
| throw new MallinkException(ErrorCode.MERCHANT_INFO_NOT_FOUND.getCode(),premsg+"商户信息没找到"); | throw new MallinkException(ErrorCode.MERCHANT_INFO_NOT_FOUND.getCode(),premsg+"商户信息没找到"); | ||||
| } | } | ||||
| } | } | ||||
| @@ -12,6 +12,7 @@ import com.iformall.douyin.pay.orderQuery.OrderQueryResult; | |||||
| import com.iformall.douyin.payv2.result.TtPayOrderQueryV2Result; | import com.iformall.douyin.payv2.result.TtPayOrderQueryV2Result; | ||||
| import com.iformall.enums.EnumPayStatus; | import com.iformall.enums.EnumPayStatus; | ||||
| import com.iformall.exception.MallinkException; | import com.iformall.exception.MallinkException; | ||||
| import com.iformall.service.order.entity.WxComposeOrder; | |||||
| import com.iformall.service.pay.service.pay.entity.PayAdapterResult; | import com.iformall.service.pay.service.pay.entity.PayAdapterResult; | ||||
| import com.iformall.service.pay.service.pay.entity.PayQueryAdapterResult; | import com.iformall.service.pay.service.pay.entity.PayQueryAdapterResult; | ||||
| import com.iformall.utils.MaUtil; | import com.iformall.utils.MaUtil; | ||||
| @@ -33,12 +34,13 @@ public class BaseTtPayAdapterService { | |||||
| /** | /** | ||||
| * 做为支付的扩展数据 | * 做为支付的扩展数据 | ||||
| * @param payOrder | |||||
| * @param | |||||
| * @return | * @return | ||||
| */ | */ | ||||
| protected String getCpExtra(WxPayOrder payOrder) { | |||||
| Map<String,String> map = new HashMap<>(); | |||||
| map.put("tenantId",payOrder.getTenantId()); | |||||
| protected String getCallbackData(WxPayOrder record) { | |||||
| Map<String,Object> map = new HashMap<>(); | |||||
| map.put("composeOrderId",record.getOrderId()); | |||||
| map.put("tenantId",record.getTenantId()); | |||||
| return JSON.toJSONString(map); | return JSON.toJSONString(map); | ||||
| } | } | ||||
| @@ -138,7 +138,7 @@ public class TtMiniAppPayAdapterService extends BaseTtPayAdapterService implemen | |||||
| pageEntry.setParams(JSON.toJSONString(paramMap)); | pageEntry.setParams(JSON.toJSONString(paramMap)); | ||||
| request.setOrderEntrySchema(pageEntry); | request.setOrderEntrySchema(pageEntry); | ||||
| request.setCpExtra(getCpExtra(record)); | |||||
| request.setCpExtra(getCallbackData(record)); | |||||
| TtPayUnifiedOrderV2Result orderV2 = ttPayService.createOrderV2(request); | TtPayUnifiedOrderV2Result orderV2 = ttPayService.createOrderV2(request); | ||||
| @@ -454,7 +454,7 @@ public class TtMiniAppPayAdapterService extends BaseTtPayAdapterService implemen | |||||
| map.put("outOrderNo",record.getOrderId()); | map.put("outOrderNo",record.getOrderId()); | ||||
| map.put("createPay",record.isCreatPay()); | map.put("createPay",record.isCreatPay()); | ||||
| if(record.isCreatPay()){ | if(record.isCreatPay()){ | ||||
| map.put("callbackData",JSONObject.parseObject(getCpExtra(record),Map.class)); | |||||
| map.put("callbackData",JSONObject.parseObject(getCallbackData(record),Map.class)); | |||||
| Map<String,Integer> payment = new HashMap(); | Map<String,Integer> payment = new HashMap(); | ||||
| payment.put("totalAmount",composeOrder.getPayment()); | payment.put("totalAmount",composeOrder.getPayment()); | ||||
| map.put("payment",payment); | map.put("payment",payment); | ||||