记得上下班打卡 | git大法好,push需谨慎

Commit 56dac7be authored by liuran's avatar liuran

Merge remote-tracking branch 'origin/dev_member_voucher_refund' into dev_member_voucher_refund

parents 53028f6a 969e134c
...@@ -23,7 +23,7 @@ public class AdamMemberOrderRefundParam implements Serializable { ...@@ -23,7 +23,7 @@ public class AdamMemberOrderRefundParam implements Serializable {
private BigDecimal refundAmt; private BigDecimal refundAmt;
@NotNull(message = "请选择是否能继续购买会员") @NotNull(message = "请选择是否能继续购买会员")
@ApiModelProperty(required = true, value = "是否能继续购买会员[1-是|2-否]") @ApiModelProperty(required = true, value = "是否能继续购买会员[1-是|2-否]")
private Integer buyMark; private Integer renewable;
@NotBlank(message = "请输入退款原因") @NotBlank(message = "请输入退款原因")
@ApiModelProperty(required = true, value = "退款原因") @ApiModelProperty(required = true, value = "退款原因")
private String reason; private String reason;
......
...@@ -18,7 +18,6 @@ public class CandyMemberCouponBuildParam { ...@@ -18,7 +18,6 @@ public class CandyMemberCouponBuildParam {
@NotBlank(message = "会员权益ID不能为空") @NotBlank(message = "会员权益ID不能为空")
private String mrightsId; private String mrightsId;
@NotBlank(message = "券ID不能为空")
@ApiModelProperty(required = false, value = "券ID", example = "券ID") @ApiModelProperty(required = false, value = "券ID", example = "券ID")
private String couponId; private String couponId;
//private Integer state; //private Integer state;
...@@ -33,13 +32,11 @@ public class CandyMemberCouponBuildParam { ...@@ -33,13 +32,11 @@ public class CandyMemberCouponBuildParam {
// private String notice; // private String notice;
//private Integer exclusive; //private Integer exclusive;
@NotNull(message = "券类别不能为空") @NotNull(message = "券类别不能为空")
@Pattern(regexp = "\\b(0|1|2|3)\\b", message = "业务类别无效")
@ApiModelProperty(required = true, value = "业务类别[0-全场|1-演出|2-商品|3-优先购]", allowableValues = "0,1,2,3") @ApiModelProperty(required = true, value = "业务类别[0-全场|1-演出|2-商品|3-优先购]", allowableValues = "0,1,2,3")
private Integer busiType; private Integer busiType;
@NotNull(message = "券类型不能为空") @NotNull(message = "券类型不能为空")
@Pattern(regexp = "\\b(1|2)\\b", message = "券类型无效") // @ApiModelProperty(required = true, value = "券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]", allowableValues = "1,2,3,4,101")
// @ApiModelProperty(required = true, value = "券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]", allowableValues = "1,2,3,4") @ApiModelProperty(required = true, value = "券类型[1-代金券|2-满减券|101-优先券]", allowableValues = "1,2,101")
@ApiModelProperty(required = true, value = "券类型[1-代金券|2-满减券]", allowableValues = "1,2")
private Integer couType; private Integer couType;
// @NotNull(message = "券领取方式不能为空") // @NotNull(message = "券领取方式不能为空")
// @ApiModelProperty(required = true, value = "领取方式[0-用户输入兑换|1-发放至用户]", allowableValues = "0,1") // @ApiModelProperty(required = true, value = "领取方式[0-用户输入兑换|1-发放至用户]", allowableValues = "0,1")
...@@ -53,7 +50,6 @@ public class CandyMemberCouponBuildParam { ...@@ -53,7 +50,6 @@ public class CandyMemberCouponBuildParam {
@ApiModelProperty(required = false, value = "满减~减", example = "0.01") @ApiModelProperty(required = false, value = "满减~减", example = "0.01")
private BigDecimal valMinus; private BigDecimal valMinus;
@NotNull(message = "券叠加限制不能为空") @NotNull(message = "券叠加限制不能为空")
@Pattern(regexp = "\\b(0|1)\\b", message = "叠加限制无效")
@ApiModelProperty(required = false, value = "叠加限制[0-限制|1-叠加]", allowableValues = "0,1") @ApiModelProperty(required = false, value = "叠加限制[0-限制|1-叠加]", allowableValues = "0,1")
private Integer overlay; private Integer overlay;
//private Integer overlayLevel; //private Integer overlayLevel;
......
...@@ -116,6 +116,10 @@ public class KylinPerformanceVo { ...@@ -116,6 +116,10 @@ public class KylinPerformanceVo {
private Integer isRefundVoucher; private Integer isRefundVoucher;
private Integer isRefundExpress; private Integer isRefundExpress;
private Integer isTransfer;
private String transferStartTime;
private String transferEndTime;
public void setPerformance(KylinPerformances performance) { public void setPerformance(KylinPerformances performance) {
this.mid = performance.getMid(); this.mid = performance.getMid();
this.performancesId = performance.getPerformancesId(); this.performancesId = performance.getPerformancesId();
......
...@@ -66,7 +66,7 @@ public class AdamMemberAdminController extends BaseController { ...@@ -66,7 +66,7 @@ public class AdamMemberAdminController extends BaseController {
startPage(); startPage();
return getDataTable(adamMemberService.list( return getDataTable(adamMemberService.list(
Wrappers.lambdaQuery(AdamMember.class).eq(AdamMember::getState, 1).select( Wrappers.lambdaQuery(AdamMember.class).eq(AdamMember::getState, 1).select(
AdamMember::getMemberId, AdamMember::getIcon, AdamMember::getName, AdamMember::getTitle AdamMember::getMemberId, AdamMember::getIcon, AdamMember::getTitle, AdamMember::getSubTitle, AdamMember::getOnsale
) )
)); ));
} }
...@@ -193,6 +193,11 @@ public class AdamMemberAdminController extends BaseController { ...@@ -193,6 +193,11 @@ public class AdamMemberAdminController extends BaseController {
} }
parameter.setValFace(valMinus); parameter.setValFace(valMinus);
break; break;
case 101:
parameter.setValFace(null);
parameter.setValOver(null);
parameter.setValMinus(null);
break;
default: default:
logger.warn("Invalid operation[buildParam.couType={}]", parameter.getCouType()); logger.warn("Invalid operation[buildParam.couType={}]", parameter.getCouType());
return this.error(AjaxResult.Type.WARN, "券类型无效"); return this.error(AjaxResult.Type.WARN, "券类型无效");
......
...@@ -74,12 +74,15 @@ public class AdamMemberOrderAdminController extends BaseController { ...@@ -74,12 +74,15 @@ public class AdamMemberOrderAdminController extends BaseController {
AdamMemberOrder memberOrder = adamMemberOrderAdminService.getOne(queryWrapper); AdamMemberOrder memberOrder = adamMemberOrderAdminService.getOne(queryWrapper);
if (null == memberOrder) { if (null == memberOrder) {
return this.error("订单不存在"); return AjaxResult.warn("订单不存在");
}
if (memberOrder.getState() != 1) {
return AjaxResult.warn(String.format("该订单[%s]不支持退款,请核实订单状态", parameter.getOrderNo()));
} }
if (memberOrder.getPricePaid().compareTo(parameter.getRefundAmt()) < 0) { if (memberOrder.getPricePaid().compareTo(parameter.getRefundAmt()) < 0) {
return this.error("退款金额超出订单实际支付金额"); return AjaxResult.warn("退款金额超出订单实际支付金额");
} }
return this.toAjax(adamMemberOrderAdminService.refundProcessing(parameter, memberOrder)); return adamMemberOrderAdminService.refundProcessing(parameter, memberOrder);
} }
} }
...@@ -1003,7 +1003,7 @@ var table = { ...@@ -1003,7 +1003,7 @@ var table = {
// 详细信息,以tab页展现 // 详细信息,以tab页展现
detailTab: function(id) { detailTab: function(id) {
table.set(); table.set();
$.modal.openTab("详细" + table.options.modalName, $.operate.detailUrl(id)); $.modal.openTab(table.options.modalName + "详情", $.operate.detailUrl(id));
}, },
// 详细访问地址 // 详细访问地址
detailUrl: function(id) { detailUrl: function(id) {
......
...@@ -33,14 +33,34 @@ ...@@ -33,14 +33,34 @@
title: '会员卡ID' title: '会员卡ID'
}, },
{ {
field: 'name', field: 'icon',
title: '会员卡名称', title: 'ICON',
formatter: function (value, row, index) {
var actions = [];
actions.push($.common.sprintf("<img class='img-circle img-xs' src='%s' />", value));
return actions;
}
}, },
{ {
field: 'title', field: 'title',
title: '会员卡标题', title: '会员卡标题',
align: 'center', align: 'center',
}, },
{
field: 'subTitle',
title: '会员卡说明',
},
{
field: 'onsale',
title: '开售状态',
align: 'center',
formatter: function(value, row, index) {
var actions = [];
var listClass = "badge badge-" + (value === 1 ? 'primary' : 'danger');
actions.push($.common.sprintf("<span class='%s'>%s</span>", listClass, value === 1 ? '开售' : '停售'));
return actions;
}
},
{ {
title: '操作', title: '操作',
align: 'center', align: 'center',
......
package com.liquidnet.client.admin.zhengzai.adam.service; package com.liquidnet.client.admin.zhengzai.adam.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.service.adam.dto.MemberOrderDto; import com.liquidnet.service.adam.dto.MemberOrderDto;
import com.liquidnet.service.adam.dto.admin.AdamMemberOrderRefundParam; import com.liquidnet.service.adam.dto.admin.AdamMemberOrderRefundParam;
import com.liquidnet.service.adam.dto.admin.MemberOrderListReq; import com.liquidnet.service.adam.dto.admin.MemberOrderListReq;
...@@ -24,5 +25,5 @@ public interface IAdamMemberOrderAdminService extends IService<AdamMemberOrder> ...@@ -24,5 +25,5 @@ public interface IAdamMemberOrderAdminService extends IService<AdamMemberOrder>
MemberOrderDetailAdminVo getMemberOrderDetail(String orderNo); MemberOrderDetailAdminVo getMemberOrderDetail(String orderNo);
boolean refundProcessing(AdamMemberOrderRefundParam param, AdamMemberOrder memberOrder); AjaxResult refundProcessing(AdamMemberOrderRefundParam param, AdamMemberOrder memberOrder);
} }
...@@ -3,9 +3,16 @@ package com.liquidnet.client.admin.zhengzai.adam.service.impl; ...@@ -3,9 +3,16 @@ package com.liquidnet.client.admin.zhengzai.adam.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.databind.JsonNode;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.utils.ShiroUtils;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberOrderAdminService; import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberOrderAdminService;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.BeanUtil; import com.liquidnet.commons.lang.util.BeanUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.IDGenerator; import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.MemberOrderDto; import com.liquidnet.service.adam.dto.MemberOrderDto;
import com.liquidnet.service.adam.dto.admin.AdamMemberOrderRefundParam; import com.liquidnet.service.adam.dto.admin.AdamMemberOrderRefundParam;
import com.liquidnet.service.adam.dto.admin.MemberOrderListReq; import com.liquidnet.service.adam.dto.admin.MemberOrderListReq;
...@@ -16,6 +23,7 @@ import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo; ...@@ -16,6 +23,7 @@ import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import com.liquidnet.service.adam.dto.vo.admin.MemberOrderDetailAdminVo; import com.liquidnet.service.adam.dto.vo.admin.MemberOrderDetailAdminVo;
import com.liquidnet.service.adam.entity.*; import com.liquidnet.service.adam.entity.*;
import com.liquidnet.service.adam.mapper.*; import com.liquidnet.service.adam.mapper.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -24,9 +32,12 @@ import org.springframework.util.LinkedMultiValueMap; ...@@ -24,9 +32,12 @@ import org.springframework.util.LinkedMultiValueMap;
import java.beans.IntrospectionException; import java.beans.IntrospectionException;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.IntStream;
/** /**
* @author AnJiabin <anjiabin@zhengzai.tv> * @author AnJiabin <anjiabin@zhengzai.tv>
...@@ -37,6 +48,7 @@ import java.util.Map; ...@@ -37,6 +48,7 @@ import java.util.Map;
* @Copyright: LightNet @ Copyright (c) 2021 * @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/6/6 16:25 * @date 2021/6/6 16:25
*/ */
@Slf4j
@Service @Service
public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrderMapper, AdamMemberOrder> implements IAdamMemberOrderAdminService { public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrderMapper, AdamMemberOrder> implements IAdamMemberOrderAdminService {
@Autowired @Autowired
...@@ -49,6 +61,11 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder ...@@ -49,6 +61,11 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
private AdamUserMapper adamUserMapper; private AdamUserMapper adamUserMapper;
@Autowired @Autowired
private AdamMemberOrderExtMapper adamMemberOrderExtMapper; private AdamMemberOrderExtMapper adamMemberOrderExtMapper;
@Autowired
private AdamMemberRefundMapper adamMemberRefundMapper;
@Autowired
private RedisUtil redisUtil;
@Value("${liquidnet.url-refund.apply}") @Value("${liquidnet.url-refund.apply}")
private String applyUrl; private String applyUrl;
...@@ -111,7 +128,7 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder ...@@ -111,7 +128,7 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
@Override @Override
@Transactional @Transactional
public boolean refundProcessing(AdamMemberOrderRefundParam param, AdamMemberOrder memberOrder) { public AjaxResult refundProcessing(AdamMemberOrderRefundParam param, AdamMemberOrder memberOrder) {
LinkedMultiValueMap<String, String> linkedMultiValueMap = new LinkedMultiValueMap<>(); LinkedMultiValueMap<String, String> linkedMultiValueMap = new LinkedMultiValueMap<>();
linkedMultiValueMap.add("code", memberOrder.getPayNo()); linkedMultiValueMap.add("code", memberOrder.getPayNo());
...@@ -124,10 +141,48 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder ...@@ -124,10 +141,48 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
linkedMultiValueMap.add("priceTotal", String.valueOf(memberOrder.getPricePaid())); linkedMultiValueMap.add("priceTotal", String.valueOf(memberOrder.getPricePaid()));
linkedMultiValueMap.add("reason", param.getReason()); linkedMultiValueMap.add("reason", param.getReason());
// String postResult = HttpUtil.post(applyUrl, linkedMultiValueMap); log.info("会员退款:支付中心请求参数:{}", linkedMultiValueMap);
String postResult = HttpUtil.post(applyUrl, linkedMultiValueMap);
log.info("会员退款:支付中心返回数据:{}", postResult);
JsonNode postResultJNode = JsonUtils.fromJson(postResult, JsonNode.class);
if (!postResultJNode.get("success").asBoolean()) {
return AjaxResult.warn("会员退款请求支付中心失败");
}
// 退款请求成功,修改订单状态,同步REDIS
LocalDateTime now = LocalDateTime.now();
AdamMemberRefund memberRefund = new AdamMemberRefund();
memberRefund.setRefundNo(IDGenerator.nextTimeId2().concat("VR"));
memberRefund.setOrderNo(memberOrder.getOrderNo());
memberRefund.setRefundPrice(param.getRefundAmt());
memberRefund.setRefundReason(param.getReason());
memberRefund.setRenewable(param.getRenewable());
memberRefund.setRefundState(0);
memberRefund.setRefundNo(postResultJNode.get("refundCode").asText());
memberRefund.setOperator(ShiroUtils.getLoginName());
memberRefund.setCreatedAt(now);
adamMemberRefundMapper.insert(memberRefund);
AdamMemberOrder updateInfoMemberOrder = new AdamMemberOrder();
updateInfoMemberOrder.setMid(memberOrder.getMid());
updateInfoMemberOrder.setState(4);
updateInfoMemberOrder.setUpdatedAt(now);
adamMemberOrderMapper.updateById(updateInfoMemberOrder);
String moKey = AdamRedisConst.INFO_MEMBER_ORDER + memberOrder.getUid();
ArrayList<AdamMemberOrderVo> vos = (ArrayList<AdamMemberOrderVo>) redisUtil.get(moKey);
int idx = IntStream.range(0, vos.size())
.filter(i -> vos.get(i).getOrderNo().equals(memberOrder.getOrderNo()))
.findFirst().orElse(-1);
AdamMemberOrderVo vo = vos.get(idx);
vo.setState(4);
vo.setUpdatedAt(now);
vos.set(idx, vo);
redisUtil.set(moKey, vos);
return true; return AjaxResult.success();
} }
} }
...@@ -55,7 +55,7 @@ public class AdamMemberOrder implements Serializable { ...@@ -55,7 +55,7 @@ public class AdamMemberOrder implements Serializable {
*/ */
private Integer days; private Integer days;
/** /**
* 订单状态:0未支付 1已支付 2已超时 5已退款 * 订单状态:0-未支付,1-已支付,2-已关闭,3-超时付,4-退款中,5-已退款
*/ */
private Integer state; private Integer state;
/** /**
......
package com.liquidnet.service.adam.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 会员退款
* </p>
*
* @author liquidnet
* @since 2021-09-07
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class AdamMemberRefund implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 退款请求编号
*/
private String refundNo;
/**
* 对应支付中心order_code
*/
private String orderNo;
/**
* 退款金额
*/
private BigDecimal refundPrice;
/**
* 退款描述
*/
private String refundReason;
/**
* 继续购买[1-可以|2-不可]
*/
private Integer renewable;
/**
* 退款状态[0-发起退款|1-已退款|2-关闭|3-退款失败|9-退款中]
*/
private Integer refundState;
/**
* 支付中心退款编号
*/
private String repayNo;
/**
* 支付中心退款描述
*/
private String repayReason;
/**
* 操作人
*/
private String operator;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
/**
* 完成时间
*/
private LocalDateTime completeAt;
private String comment;
}
package com.liquidnet.service.adam.mapper;
import com.liquidnet.service.adam.entity.AdamMemberRefund;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 会员退款 Mapper 接口
* </p>
*
* @author liquidnet
* @since 2021-09-07
*/
public interface AdamMemberRefundMapper extends BaseMapper<AdamMemberRefund> {
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liquidnet.service.adam.mapper.AdamMemberRefundMapper">
</mapper>
...@@ -367,7 +367,6 @@ alter table adam_member_order add payment_id varchar(64) null comment '支付中 ...@@ -367,7 +367,6 @@ alter table adam_member_order add payment_id varchar(64) null comment '支付中
alter table adam_member_order add area varchar(100) null comment '地区' after birthday; alter table adam_member_order add area varchar(100) null comment '地区' after birthday;
# 会员退款 # 会员退款
drop table if exists adam_member_refund; drop table if exists adam_member_refund;
create table adam_member_refund create table adam_member_refund
...@@ -379,7 +378,7 @@ create table adam_member_refund ...@@ -379,7 +378,7 @@ create table adam_member_refund
refund_price decimal(8, 2) comment '退款金额', refund_price decimal(8, 2) comment '退款金额',
refund_reason varchar(200) comment '退款描述', refund_reason varchar(200) comment '退款描述',
renewable tinyint comment '继续购买[1-可以|2-不可]', renewable tinyint comment '继续购买[1-可以|2-不可]',
refund_state tinyint comment '退款状态[0-发起退款|1-已退款|2-取消退款|3-退款失败|9-退款中]', refund_state tinyint comment '退款状态[0-发起退款|1-已退款|2-关闭|3-退款失败|9-退款中]',
# payment_type varchar(30) comment '支付渠道(即UPPER(CONCAT(device_from,pay_type)))', # payment_type varchar(30) comment '支付渠道(即UPPER(CONCAT(device_from,pay_type)))',
repay_no varchar(64) comment '支付中心退款编号', repay_no varchar(64) comment '支付中心退款编号',
......
...@@ -131,6 +131,9 @@ public class CandyCouponServiceImpl implements ICandyCouponService { ...@@ -131,6 +131,9 @@ public class CandyCouponServiceImpl implements ICandyCouponService {
} }
} }
CandyCouponVo baseVo = CouponBaseUtil.getPerformanceCouponUserVo(dtoItem, priceTotal, performanceId, timeId, ticketId); CandyCouponVo baseVo = CouponBaseUtil.getPerformanceCouponUserVo(dtoItem, priceTotal, performanceId, timeId, ticketId);
if(baseVo.getCouType().equals(101)){
continue;
}
if (dtoItem.getExclusive().equals(1)) { //会员券 if (dtoItem.getExclusive().equals(1)) { //会员券
memberCoupon.add(baseVo); memberCoupon.add(baseVo);
} else {//非会员券 } else {//非会员券
...@@ -153,6 +156,9 @@ public class CandyCouponServiceImpl implements ICandyCouponService { ...@@ -153,6 +156,9 @@ public class CandyCouponServiceImpl implements ICandyCouponService {
int canUse = 0; int canUse = 0;
for (CandyUserCouponBasicDto dtoItem : dtoList) { for (CandyUserCouponBasicDto dtoItem : dtoList) {
CandyCouponVo baseVo = CouponBaseUtil.getPerformanceCouponUserVo(dtoItem, priceTotal, performanceId, timeId, ticketId); CandyCouponVo baseVo = CouponBaseUtil.getPerformanceCouponUserVo(dtoItem, priceTotal, performanceId, timeId, ticketId);
if(baseVo.getCouType().equals(101)){
continue;
}
if (baseVo.getState().equals(1)) { //可用 if (baseVo.getState().equals(1)) { //可用
canUse = 1; canUse = 1;
break; break;
...@@ -182,6 +188,9 @@ public class CandyCouponServiceImpl implements ICandyCouponService { ...@@ -182,6 +188,9 @@ public class CandyCouponServiceImpl implements ICandyCouponService {
} }
} }
CandyCouponVo baseVo = CouponBaseUtil.getGoodCouponUserVo(dtoItem, priceTotal, goodId, dtoList.size()); CandyCouponVo baseVo = CouponBaseUtil.getGoodCouponUserVo(dtoItem, priceTotal, goodId, dtoList.size());
if(baseVo.getCouType().equals(101)){
continue;
}
if (dtoItem.getExclusive().equals(1)) { //会员券 if (dtoItem.getExclusive().equals(1)) { //会员券
memberCoupon.add(baseVo); memberCoupon.add(baseVo);
} else {//非会员券 } else {//非会员券
...@@ -204,6 +213,9 @@ public class CandyCouponServiceImpl implements ICandyCouponService { ...@@ -204,6 +213,9 @@ public class CandyCouponServiceImpl implements ICandyCouponService {
int canUse = 0; int canUse = 0;
for (CandyUserCouponBasicDto dtoItem : dtoList) { for (CandyUserCouponBasicDto dtoItem : dtoList) {
CandyCouponVo baseVo = CouponBaseUtil.getGoodCouponUserVo(dtoItem, priceTotal, goodId, dtoList.size()); CandyCouponVo baseVo = CouponBaseUtil.getGoodCouponUserVo(dtoItem, priceTotal, goodId, dtoList.size());
if(baseVo.getCouType().equals(101)){
continue;
}
if (baseVo.getState().equals(1)) { //可用 if (baseVo.getState().equals(1)) { //可用
canUse = 1; canUse = 1;
break; break;
...@@ -298,6 +310,9 @@ public class CandyCouponServiceImpl implements ICandyCouponService { ...@@ -298,6 +310,9 @@ public class CandyCouponServiceImpl implements ICandyCouponService {
case 92://票 case 92://票
isTarget = CouponBaseUtil.isTargetCoupon(ruleItem.getBusiId(), dto.getCouType(), ticketId, new BigDecimal(totalPrice), dto.getValOver()); isTarget = CouponBaseUtil.isTargetCoupon(ruleItem.getBusiId(), dto.getCouType(), ticketId, new BigDecimal(totalPrice), dto.getValOver());
break; break;
case 100://票
isTarget = true;
break;
default: default:
isTarget = false; isTarget = false;
break; break;
...@@ -410,7 +425,7 @@ public class CandyCouponServiceImpl implements ICandyCouponService { ...@@ -410,7 +425,7 @@ public class CandyCouponServiceImpl implements ICandyCouponService {
} }
String uCouponId = IDGenerator.get32UUID(); String uCouponId = IDGenerator.get32UUID();
//构建baseDto //构建baseDto
CandyUserCouponBasicDto baseDto = CandyUserCouponBasicDto.getNew().copyToRedisBaseCoupon(uCouponId, uid, ccode, infoDto, null); CandyUserCouponBasicDto baseDto = CandyUserCouponBasicDto.getNew().copyToRedisBaseCoupon(uCouponId, uid, ccode, infoDto,LocalDateTime.now().plusDays(infoDto.getRedeemValidity()));
return ResponseDto.success(CouponBaseUtil.getBaseCouponUserVo(baseDto)); return ResponseDto.success(CouponBaseUtil.getBaseCouponUserVo(baseDto));
} else { } else {
return ResponseDto.failure("兑换失败,请稍后再试"); return ResponseDto.failure("兑换失败,请稍后再试");
......
...@@ -28,6 +28,7 @@ public class CouponBaseUtil { ...@@ -28,6 +28,7 @@ public class CouponBaseUtil {
List<CandyCouponRulesVo> rulesVoList = ObjectUtil.getCandyCouponRulesVos(); List<CandyCouponRulesVo> rulesVoList = ObjectUtil.getCandyCouponRulesVos();
vo.setTitle(dtoItem.getTitle()); vo.setTitle(dtoItem.getTitle());
vo.setExpireAt(DateUtil.format(dtoItem.getDuedAt(), DateUtil.Formatter.yyyy_MM_dd)); vo.setExpireAt(DateUtil.format(dtoItem.getDuedAt(), DateUtil.Formatter.yyyy_MM_dd));
vo.setDiscount(dtoItem.getDiscount());
vo.setValFace(dtoItem.getValFace()); vo.setValFace(dtoItem.getValFace());
vo.setBusiType(dtoItem.getBusiType()); vo.setBusiType(dtoItem.getBusiType());
vo.setValOver(dtoItem.getValOver()); vo.setValOver(dtoItem.getValOver());
...@@ -75,6 +76,7 @@ public class CouponBaseUtil { ...@@ -75,6 +76,7 @@ public class CouponBaseUtil {
vo.setTitle(dtoItem.getTitle()); vo.setTitle(dtoItem.getTitle());
vo.setExpireAt(DateUtil.format(dtoItem.getDuedAt(), DateUtil.Formatter.yyyy_MM_dd)); vo.setExpireAt(DateUtil.format(dtoItem.getDuedAt(), DateUtil.Formatter.yyyy_MM_dd));
vo.setValFace(dtoItem.getValFace()); vo.setValFace(dtoItem.getValFace());
vo.setDiscount(dtoItem.getDiscount());
vo.setValOver(dtoItem.getValOver()); vo.setValOver(dtoItem.getValOver());
vo.setValMinus(dtoItem.getValMinus()); vo.setValMinus(dtoItem.getValMinus());
vo.setBindType(dtoItem.getBindType()); vo.setBindType(dtoItem.getBindType());
...@@ -83,6 +85,7 @@ public class CouponBaseUtil { ...@@ -83,6 +85,7 @@ public class CouponBaseUtil {
vo.setUcouponId(dtoItem.getUcouponId()); vo.setUcouponId(dtoItem.getUcouponId());
vo.setUsedAt(DateUtil.format(dtoItem.getUsedAt(), DateUtil.Formatter.yyyy_MM_dd)); vo.setUsedAt(DateUtil.format(dtoItem.getUsedAt(), DateUtil.Formatter.yyyy_MM_dd));
vo.setUsedFor(dtoItem.getUsedFor()); vo.setUsedFor(dtoItem.getUsedFor());
vo.setBusiType(dtoItem.getBusiType());
//适用范围 规则 //适用范围 规则
if (dtoItem.getBusiType().equals(0)) { if (dtoItem.getBusiType().equals(0)) {
isTarget = true; isTarget = true;
...@@ -103,6 +106,9 @@ public class CouponBaseUtil { ...@@ -103,6 +106,9 @@ public class CouponBaseUtil {
case 92://票 case 92://票
isTarget = isTargetCoupon(ruleItem.getBusiId(), dtoItem.getCouType(), ticketId, priceTotal, dtoItem.getValOver()); isTarget = isTargetCoupon(ruleItem.getBusiId(), dtoItem.getCouType(), ticketId, priceTotal, dtoItem.getValOver());
break; break;
case 100://全场
isTarget = true;
break;
default: default:
isTarget = false; isTarget = false;
break; break;
...@@ -111,6 +117,10 @@ public class CouponBaseUtil { ...@@ -111,6 +117,10 @@ public class CouponBaseUtil {
isTarget = false; isTarget = false;
} }
} }
if (dtoItem.getUseRules().size() == 0 && !dtoItem.getBusiType().equals(0)) {
isTarget = false;
}
} }
//券类别 //券类别
if (dtoItem.getBusiType().equals(3)) { if (dtoItem.getBusiType().equals(3)) {
...@@ -146,6 +156,7 @@ public class CouponBaseUtil { ...@@ -146,6 +156,7 @@ public class CouponBaseUtil {
vo.setExpireAt(DateUtil.format(dtoItem.getDuedAt(), DateUtil.Formatter.yyyy_MM_dd)); vo.setExpireAt(DateUtil.format(dtoItem.getDuedAt(), DateUtil.Formatter.yyyy_MM_dd));
vo.setValFace(dtoItem.getValFace()); vo.setValFace(dtoItem.getValFace());
vo.setValOver(dtoItem.getValOver()); vo.setValOver(dtoItem.getValOver());
vo.setDiscount(dtoItem.getDiscount());
vo.setValMinus(dtoItem.getValMinus()); vo.setValMinus(dtoItem.getValMinus());
vo.setBindType(dtoItem.getBindType()); vo.setBindType(dtoItem.getBindType());
vo.setLabel(dtoItem.getLabel()); vo.setLabel(dtoItem.getLabel());
...@@ -153,6 +164,7 @@ public class CouponBaseUtil { ...@@ -153,6 +164,7 @@ public class CouponBaseUtil {
vo.setUcouponId(dtoItem.getUcouponId()); vo.setUcouponId(dtoItem.getUcouponId());
vo.setUsedAt(DateUtil.format(dtoItem.getUsedAt(), DateUtil.Formatter.yyyy_MM_dd)); vo.setUsedAt(DateUtil.format(dtoItem.getUsedAt(), DateUtil.Formatter.yyyy_MM_dd));
vo.setUsedFor(dtoItem.getUsedFor()); vo.setUsedFor(dtoItem.getUsedFor());
vo.setBusiType(dtoItem.getBusiType());
//适用范围 规则 //适用范围 规则
if (dtoItem.getBusiType().equals(0)) { if (dtoItem.getBusiType().equals(0)) {
isTarget = true; isTarget = true;
...@@ -170,6 +182,9 @@ public class CouponBaseUtil { ...@@ -170,6 +182,9 @@ public class CouponBaseUtil {
case 81://款式 case 81://款式
// isTarget = isTargetCoupon(ruleItem.getBusiId(), dtoItem.getCouType(), produceId, priceTotal, dtoItem.getValOver()); // isTarget = isTargetCoupon(ruleItem.getBusiId(), dtoItem.getCouType(), produceId, priceTotal, dtoItem.getValOver());
break; break;
case 100://全场
isTarget = true;
break;
default: default:
isTarget = false; isTarget = false;
break; break;
...@@ -178,6 +193,10 @@ public class CouponBaseUtil { ...@@ -178,6 +193,10 @@ public class CouponBaseUtil {
isTarget = false; isTarget = false;
} }
} }
if (dtoItem.getUseRules().size() == 0 && !dtoItem.getBusiType().equals(0)) {
isTarget = false;
}
} }
//券类别 //券类别
if (dtoItem.getBusiType().equals(3)) { if (dtoItem.getBusiType().equals(3)) {
......
...@@ -421,7 +421,7 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService ...@@ -421,7 +421,7 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
"\"trade_no\":\"" + tradeNo + "\"," + "\"trade_no\":\"" + tradeNo + "\"," +
"\"out_request_no\":\"" + outBizNo + "\"}"); //设置业务参数 "\"out_request_no\":\"" + outBizNo + "\"}"); //设置业务参数
AlipayTradeFastpayRefundQueryResponse response = PayAlipayUtils.getInstance().getHttpClient().execute(request); AlipayTradeFastpayRefundQueryResponse response = PayAlipayUtils.getInstance().getHttpClient().execute(request);
log.info("AlipayTradeFastpayRefundQueryRequest -> data = " + response); log.info("AlipayTradeFastpayRefundQueryRequest -> data = " + JSON.toJSONString(response));
if (response.isSuccess()) { if (response.isSuccess()) {
try { try {
...@@ -455,8 +455,7 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService ...@@ -455,8 +455,7 @@ public class DragonOrderRefundsServiceImpl implements IDragonOrderRefundsService
return "success"; return "success";
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error("EXCEPTION", e);
log.error("");
return "fail"; return "fail";
} }
} else { } else {
......
...@@ -376,7 +376,8 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ ...@@ -376,7 +376,8 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
dataUtils.setOrderCoupon(orderTicketId, couponsList); dataUtils.setOrderCoupon(orderTicketId, couponsList);
} }
orderTickets.setPriceActual(orderTickets.getPriceTotal().subtract(orderTickets.getPriceVoucher())); BigDecimal finalPrice = orderTickets.getPriceTotal().subtract(orderTickets.getPriceVoucher());
orderTickets.setPriceActual(finalPrice.compareTo(BigDecimal.ZERO)<=0?BigDecimal.ZERO:finalPrice);
orderTickets.setPriceExpress(payOrderParam.getIsExpress() == 1 ? ticketData.getPriceExpress() : BigDecimal.valueOf(0)); orderTickets.setPriceExpress(payOrderParam.getIsExpress() == 1 ? ticketData.getPriceExpress() : BigDecimal.valueOf(0));
orderTickets.setPriceRefund(BigDecimal.valueOf(0.0)); orderTickets.setPriceRefund(BigDecimal.valueOf(0.0));
orderTickets.setRefundNumber(0); orderTickets.setRefundNumber(0);
...@@ -592,7 +593,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ ...@@ -592,7 +593,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsOrderServ
syncOrderParam.setOrderCode(orderTickets.getOrderCode()); syncOrderParam.setOrderCode(orderTickets.getOrderCode());
syncOrderParam.setPaymentAt(DateUtil.format(LocalDateTime.now(), DateUtil.Formatter.yyyyMMddHHmmss)); syncOrderParam.setPaymentAt(DateUtil.format(LocalDateTime.now(), DateUtil.Formatter.yyyyMMddHHmmss));
syncOrderParam.setCode(orderTickets.getPayCode()); syncOrderParam.setCode(orderTickets.getPayCode());
syncOrderParam.setPrice(orderTickets.getPrice()); syncOrderParam.setPrice(orderTickets.getPriceActual());
syncOrderParam.setPaymentId("FREE_PAYMENT_ID"); syncOrderParam.setPaymentId("FREE_PAYMENT_ID");
syncOrderParam.setPaymentType(orderTickets.getPaymentType()); syncOrderParam.setPaymentType(orderTickets.getPaymentType());
syncOrderParam.setStatus(1); syncOrderParam.setStatus(1);
......
...@@ -61,6 +61,9 @@ public class CandyMgtCouponTaskController { ...@@ -61,6 +61,9 @@ public class CandyMgtCouponTaskController {
case 4:// 折扣券 case 4:// 折扣券
platformCandyCouponService.issueDiscountCouponHandler(mgtCoupon, coupon); platformCandyCouponService.issueDiscountCouponHandler(mgtCoupon, coupon);
break; break;
case 101:// 优先券
platformCandyCouponService.issuePriorityCouponHandler(mgtCoupon, coupon);
break;
default: default:
log.warn("发放券任务总数:{},任务{}无法处理,无效的券类型[mcouponId:{},couType:{}]", taskSize, i, mgtCoupon.getMcouponId(), coupon.getCouType()); log.warn("发放券任务总数:{},任务{}无法处理,无效的券类型[mcouponId:{},couType:{}]", taskSize, i, mgtCoupon.getMcouponId(), coupon.getCouType());
break; break;
......
...@@ -175,6 +175,7 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C ...@@ -175,6 +175,7 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C
private void processForAllMember(CandyMgtCoupon mgtCoupon, CandyCoupon coupon, List<CandyCouponRuleDto> couponRuleDtoList) { private void processForAllMember(CandyMgtCoupon mgtCoupon, CandyCoupon coupon, List<CandyCouponRuleDto> couponRuleDtoList) {
List<CandyUserCoupon> initUserCouponList = new ArrayList<>(); List<CandyUserCoupon> initUserCouponList = new ArrayList<>();
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
LocalDateTime duedAt = now.plusDays(coupon.getValidity()).withHour(23).withMinute(59).withSecond(59);
LocalDateTime nowEndTime = now.withHour(23).withMinute(59).withSecond(59); LocalDateTime nowEndTime = now.withHour(23).withMinute(59).withSecond(59);
LambdaQueryWrapper<AdamUserMember> queryWrapper = Wrappers.lambdaQuery(AdamUserMember.class).eq(AdamUserMember::getState, 1) LambdaQueryWrapper<AdamUserMember> queryWrapper = Wrappers.lambdaQuery(AdamUserMember.class).eq(AdamUserMember::getState, 1)
...@@ -204,7 +205,8 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C ...@@ -204,7 +205,8 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C
userCoupon.setCouponId(coupon.getCouponId()); userCoupon.setCouponId(coupon.getCouponId());
userCoupon.setState(1); userCoupon.setState(1);
userCoupon.setBindAt(now); userCoupon.setBindAt(now);
userCoupon.setDuedAt(coupon.getExpireAt()); userCoupon.setDuedAt(duedAt);
userCoupon.setCreatedAt(now);
initUserCouponList.add(userCoupon); initUserCouponList.add(userCoupon);
} }
...@@ -247,6 +249,7 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C ...@@ -247,6 +249,7 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C
private void processForUserCoupon(CandyMgtCoupon mgtCoupon, CandyCoupon coupon, List<CandyCouponRuleDto> couponRuleDtoList) { private void processForUserCoupon(CandyMgtCoupon mgtCoupon, CandyCoupon coupon, List<CandyCouponRuleDto> couponRuleDtoList) {
List<CandyUserCoupon> initUserCouponList = new ArrayList<>(); List<CandyUserCoupon> initUserCouponList = new ArrayList<>();
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
LocalDateTime duedAt = now.plusDays(coupon.getValidity()).withHour(23).withMinute(59).withSecond(59);
String eventLimit = mgtCoupon.getEventLimit(); String eventLimit = mgtCoupon.getEventLimit();
String[] eventLimitArr = eventLimit.split(","); String[] eventLimitArr = eventLimit.split(",");
...@@ -265,7 +268,8 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C ...@@ -265,7 +268,8 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C
userCoupon.setCouponId(coupon.getCouponId()); userCoupon.setCouponId(coupon.getCouponId());
userCoupon.setState(1); userCoupon.setState(1);
userCoupon.setBindAt(now); userCoupon.setBindAt(now);
userCoupon.setDuedAt(coupon.getExpireAt()); userCoupon.setDuedAt(duedAt);
userCoupon.setCreatedAt(now);
initUserCouponList.add(userCoupon); initUserCouponList.add(userCoupon);
...@@ -342,4 +346,16 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C ...@@ -342,4 +346,16 @@ public class PlatformCandyCouponService extends ServiceImpl<CandyCouponMapper, C
public void issueDiscountCouponHandler(final CandyMgtCoupon mgtCoupon, final CandyCoupon coupon) { public void issueDiscountCouponHandler(final CandyMgtCoupon mgtCoupon, final CandyCoupon coupon) {
this.issueCouponProcessing(mgtCoupon, coupon); this.issueCouponProcessing(mgtCoupon, coupon);
} }
/**
* <p>
* 发放优先券
* </p>
*
* @param mgtCoupon CandyMgtCoupon
* @param coupon CandyCoupon
*/
public void issuePriorityCouponHandler(final CandyMgtCoupon mgtCoupon, final CandyCoupon coupon) {
this.issueCouponProcessing(mgtCoupon, coupon);
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment