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

Commit 6b926528 authored by liuran's avatar liuran

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

parents 03321f8b 8ddddb59
...@@ -61,7 +61,7 @@ create table candy_coupon ...@@ -61,7 +61,7 @@ create table candy_coupon
notice varchar(200) comment '注意/须知', notice varchar(200) comment '注意/须知',
exclusive smallint comment '专享标识[0-常规|1-会员礼包]', exclusive smallint comment '专享标识[0-常规|1-会员礼包]',
busi_type smallint comment '业务类别[0-全场|1-演出|2-商品|3-优先购]', busi_type smallint comment '业务类别[0-全场|1-演出|2-商品|3-优先购]',
cou_type smallint comment '券类型[1-代金券|2-满减券|3-兑换券|4-折扣券]', cou_type smallint comment '券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]',
bind_type smallint comment '领取方式[0-用户输入兑换|1-发放至用户]', bind_type smallint comment '领取方式[0-用户输入兑换|1-发放至用户]',
discount decimal(8, 2) comment '折扣[8折即0.8]', discount decimal(8, 2) comment '折扣[8折即0.8]',
......
...@@ -17,7 +17,7 @@ public class AdamMemberRightsCouponVo implements java.io.Serializable, Cloneable ...@@ -17,7 +17,7 @@ public class AdamMemberRightsCouponVo implements java.io.Serializable, Cloneable
private String couponId; private String couponId;
@ApiModelProperty(position = 3, value = "券类别[0-全场|1-演出|2-商品|3-优先购]") @ApiModelProperty(position = 3, value = "券类别[0-全场|1-演出|2-商品|3-优先购]")
private Integer busiType; private Integer busiType;
@ApiModelProperty(position = 4, value = "券类型[1-代金券|2-满减券|3-兑换券|4-折扣券]") @ApiModelProperty(position = 4, value = "券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]")
private Integer couType; private Integer couType;
@ApiModelProperty(position = 5, value = "券标题") @ApiModelProperty(position = 5, value = "券标题")
private String title; private String title;
......
...@@ -38,7 +38,7 @@ public class CandyMemberCouponBuildParam { ...@@ -38,7 +38,7 @@ public class CandyMemberCouponBuildParam {
private Integer busiType; private Integer busiType;
@NotNull(message = "券类型不能为空") @NotNull(message = "券类型不能为空")
@Pattern(regexp = "\\b(1|2)\\b", message = "券类型无效") @Pattern(regexp = "\\b(1|2)\\b", message = "券类型无效")
// @ApiModelProperty(required = true, value = "券类型[1-代金券|2-满减券|3-兑换券|4-折扣券]", allowableValues = "1,2,3,4") // @ApiModelProperty(required = true, value = "券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]", allowableValues = "1,2,3,4")
@ApiModelProperty(required = true, value = "券类型[1-代金券|2-满减券]", allowableValues = "1,2") @ApiModelProperty(required = true, value = "券类型[1-代金券|2-满减券]", allowableValues = "1,2")
private Integer couType; private Integer couType;
// @NotNull(message = "券领取方式不能为空") // @NotNull(message = "券领取方式不能为空")
......
...@@ -24,10 +24,10 @@ public class CandyMgtCouponBuildParam { ...@@ -24,10 +24,10 @@ public class CandyMgtCouponBuildParam {
private String notice; private String notice;
//private Integer exclusive; //private Integer exclusive;
@NotNull(message = "券类别不能为空") @NotNull(message = "券类别不能为空")
@ApiModelProperty(required = true, value = "业务类别[0-全场|1-演出|2-商品|3-优先购]", allowableValues = "0,1,2,3,4") @ApiModelProperty(required = true, value = "业务类别[0-全场|1-演出|2-商品|3-优先购]", allowableValues = "0,1,2,3")
private Integer busiType; private Integer busiType;
@NotNull(message = "券类型不能为空") @NotNull(message = "券类型不能为空")
@ApiModelProperty(required = true, value = "券类型[1-代金券|2-满减券|3-兑换券|4-折扣券]", allowableValues = "1,2,3,4") @ApiModelProperty(required = true, value = "券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]", allowableValues = "1,2,3,4,101")
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")
...@@ -40,13 +40,16 @@ public class CandyMgtCouponBuildParam { ...@@ -40,13 +40,16 @@ public class CandyMgtCouponBuildParam {
private BigDecimal valOver; private BigDecimal valOver;
@ApiModelProperty(required = false, value = "满减~减", example = "0.01") @ApiModelProperty(required = false, value = "满减~减", example = "0.01")
private BigDecimal valMinus; private BigDecimal valMinus;
@NotNull(message = "券叠加限制不能为空") @ApiModelProperty(required = false, value = "叠加限制[0-限制|1-叠加]", allowableValues = "0,1")
@ApiModelProperty(required = true, value = "叠加限制[0-限制|1-叠加]", allowableValues = "0,1") @Min(value = 0, message = "叠加限制配置无效")
@Max(value = 1, message = "叠加限制配置无效")
private Integer overlay; private Integer overlay;
//private Integer overlayLevel; //private Integer overlayLevel;
@NotNull(message = "券有效期不能为空") @NotNull(message = "券有效期不能为空")
@Min(value = 1, message = "有效期不能小于1")
@ApiModelProperty(required = true, value = "有效期(单位天)", example = "30") @ApiModelProperty(required = true, value = "有效期(单位天)", example = "30")
private Integer validity; private Integer validity;
@Min(value = 1, message = "兑换有效期不能小于1")
@ApiModelProperty(required = false, value = "兑换有效期(单位天)", example = "30") @ApiModelProperty(required = false, value = "兑换有效期(单位天)", example = "30")
private Integer redeemValidity; private Integer redeemValidity;
//private LocalDateTime redeemStart; //private LocalDateTime redeemStart;
...@@ -74,7 +77,6 @@ public class CandyMgtCouponBuildParam { ...@@ -74,7 +77,6 @@ public class CandyMgtCouponBuildParam {
private Integer eventType; private Integer eventType;
@ApiModelProperty(required = false, value = "`发放类型`为2-手机号时发放手机号以,分隔", example = "18510957291,17701223310") @ApiModelProperty(required = false, value = "`发放类型`为2-手机号时发放手机号以,分隔", example = "18510957291,17701223310")
private String eventLimit; private String eventLimit;
@NotNull(message = "券发放时间不能为空")
@Pattern(regexp = LnsRegex.Valid.DATETIME_FULL, message = "发放时间格式有误") @Pattern(regexp = LnsRegex.Valid.DATETIME_FULL, message = "发放时间格式有误")
@ApiModelProperty(required = true, value = "发放时间[yyyy-MM-dd HH:mm:ss](立即-当前时间|预约-点选时间)", example = "2021-08-26 00:00:00") @ApiModelProperty(required = true, value = "发放时间[yyyy-MM-dd HH:mm:ss](立即-当前时间|预约-点选时间)", example = "2021-08-26 00:00:00")
private String eventAt; private String eventAt;
......
...@@ -38,9 +38,9 @@ import java.util.stream.Collectors; ...@@ -38,9 +38,9 @@ import java.util.stream.Collectors;
@Api(tags = "登登登会员") @Api(tags = "登登登会员")
@Controller @Controller
@RequestMapping("adam/member/detail") @RequestMapping("adam/member")
public class AdamMemberAdminController extends BaseController { public class AdamMemberAdminController extends BaseController {
private final String prefix = "zhengzai/adam/member/detail"; private final String prefix = "zhengzai/adam/member";
@Autowired @Autowired
IAdamMemberAdminService adamMemberService; IAdamMemberAdminService adamMemberService;
@Autowired @Autowired
...@@ -54,11 +54,29 @@ public class AdamMemberAdminController extends BaseController { ...@@ -54,11 +54,29 @@ public class AdamMemberAdminController extends BaseController {
@Autowired @Autowired
ICandyCouponAdminService candyCouponAdminService; ICandyCouponAdminService candyCouponAdminService;
@RequiresPermissions("adam:member:detail:view")
@GetMapping() @GetMapping()
public String detailInfo(ModelMap mmap) { public String view() {
return prefix + "/member";
}
@RequiresPermissions("adam:member:view:list")
@PostMapping("list")
@ResponseBody
public TableDataInfo list() {
startPage();
return getDataTable(adamMemberService.list(
Wrappers.lambdaQuery(AdamMember.class).eq(AdamMember::getState, 1).select(
AdamMember::getMemberId, AdamMember::getIcon, AdamMember::getName, AdamMember::getTitle
)
));
}
@RequiresPermissions("adam:member:view:edit")
@GetMapping("info/{memberId}")
public String info(@PathVariable("memberId") String memberId, ModelMap mmap) {
AdamMember member = adamMemberService.getOne(Wrappers.lambdaQuery(AdamMember.class) AdamMember member = adamMemberService.getOne(Wrappers.lambdaQuery(AdamMember.class)
.eq(AdamMember::getState, 1) .eq(AdamMember::getState, 1)
.eq(AdamMember::getMemberId, memberId)
.select( .select(
AdamMember::getMemberId, AdamMember::getMemberId,
AdamMember::getName, AdamMember::getName,
...@@ -116,26 +134,26 @@ public class AdamMemberAdminController extends BaseController { ...@@ -116,26 +134,26 @@ public class AdamMemberAdminController extends BaseController {
} }
@ApiOperation(value = "会员设置:基础信息编辑") @ApiOperation(value = "会员设置:基础信息编辑")
@RequiresPermissions("adam:member:detail:edit") @RequiresPermissions("adam:member:edit:basic")
@PostMapping("edit") @PostMapping("edit_basic")
@ResponseBody @ResponseBody
public AjaxResult detailInfoEdit(@Validated AdamMemberBuildParam parameter) { public AjaxResult editBasic(@Validated AdamMemberBuildParam parameter) {
return this.toAjax(adamMemberService.edit(parameter)); return this.toAjax(adamMemberService.edit(parameter));
} }
@ApiOperation(value = "会员套餐:价格编辑") @ApiOperation(value = "会员套餐:价格编辑")
@RequiresPermissions("adam:member:detail:price:edit") @RequiresPermissions("adam:member:edit:price")
@PostMapping("price_edit") @PostMapping("edit_price")
@ResponseBody @ResponseBody
public AjaxResult detailPriceEdit(@Validated AdamMemberPriceBuildParam parameter) { public AjaxResult editPrice(@Validated AdamMemberPriceBuildParam parameter) {
return this.toAjax(adamMemberPriceAdminService.edit(parameter)); return this.toAjax(adamMemberPriceAdminService.edit(parameter));
} }
@ApiOperation(value = "会员套餐:权益编辑") @ApiOperation(value = "会员套餐:权益编辑")
@RequiresPermissions("adam:member:detail:rights:edit") @RequiresPermissions("adam:member:edit:rights")
@PostMapping("rights_edit") @PostMapping("edit_rights")
@ResponseBody @ResponseBody
public AjaxResult detailRightsEdit(@Validated AdamMemberRightsBuildParam parameter) { public AjaxResult editRights(@Validated AdamMemberRightsBuildParam parameter) {
if (null == parameter.getState() || parameter.getState() != 2) { if (null == parameter.getState() || parameter.getState() != 2) {
// 这里编辑包含新增、更新、删除分别对应state:1,1,2 // 这里编辑包含新增、更新、删除分别对应state:1,1,2
parameter.setState(1); parameter.setState(1);
...@@ -144,10 +162,10 @@ public class AdamMemberAdminController extends BaseController { ...@@ -144,10 +162,10 @@ public class AdamMemberAdminController extends BaseController {
} }
@ApiOperation(value = "会员套餐:券编辑") @ApiOperation(value = "会员套餐:券编辑")
@RequiresPermissions("adam:member:detail:coupon:edit") @RequiresPermissions("adam:member:edit:coupon")
@PostMapping("coupon_edit") @PostMapping("edit_coupon")
@ResponseBody @ResponseBody
public AjaxResult detailCouponEdit(@RequestBody @Validated CandyMemberCouponBuildParam parameter) { public AjaxResult editCoupon(@RequestBody @Validated CandyMemberCouponBuildParam parameter) {
Integer busiType = parameter.getBusiType();// 业务类别[0-全场|1-演出|2-商品|3-优先购] Integer busiType = parameter.getBusiType();// 业务类别[0-全场|1-演出|2-商品|3-优先购]
if (busiType > 0) { if (busiType > 0) {
if (CollectionUtils.isEmpty(parameter.getCouponRuleList())) { if (CollectionUtils.isEmpty(parameter.getCouponRuleList())) {
...@@ -191,14 +209,14 @@ public class AdamMemberAdminController extends BaseController { ...@@ -191,14 +209,14 @@ public class AdamMemberAdminController extends BaseController {
} }
@ApiOperation(value = "会员码:列表") @ApiOperation(value = "会员码:列表")
@RequiresPermissions("adam:member:detail:code:list") @RequiresPermissions("adam:member:view:list:code")
@PostMapping("code_list") @PostMapping("list_code")
@ResponseBody @ResponseBody
public TableDataInfo detailCodeList(AdamMemberCodeListParam parameter) { public TableDataInfo listCode(AdamMemberCodeListParam parameter) {
return getDataTable(detailCodeListQuery(parameter)); return getDataTable(codeListQuery(parameter));
} }
private List<AdamMemberCode> detailCodeListQuery(AdamMemberCodeListParam parameter) { private List<AdamMemberCode> codeListQuery(AdamMemberCodeListParam parameter) {
LambdaQueryWrapper<AdamMemberCode> queryWrapper = Wrappers.lambdaQuery(AdamMemberCode.class).orderByDesc(AdamMemberCode::getCreatedAt); LambdaQueryWrapper<AdamMemberCode> queryWrapper = Wrappers.lambdaQuery(AdamMemberCode.class).orderByDesc(AdamMemberCode::getCreatedAt);
queryWrapper.eq(AdamMemberCode::getMemberId, parameter.getMemberId()) queryWrapper.eq(AdamMemberCode::getMemberId, parameter.getMemberId())
.ne(AdamMemberCode::getState, 2) .ne(AdamMemberCode::getState, 2)
...@@ -211,11 +229,11 @@ public class AdamMemberAdminController extends BaseController { ...@@ -211,11 +229,11 @@ public class AdamMemberAdminController extends BaseController {
} }
@ApiOperation(value = "会员码:导出") @ApiOperation(value = "会员码:导出")
@RequiresPermissions("adam:member:detail:code:export") @RequiresPermissions("adam:member:export:code")
@PostMapping("code_export") @PostMapping("export_code")
@ResponseBody @ResponseBody
public AjaxResult detailCodeExport(AdamMemberCodeListParam parameter) { public AjaxResult exportCode(AdamMemberCodeListParam parameter) {
List<AdamMemberCode> list = detailCodeListQuery(parameter); List<AdamMemberCode> list = codeListQuery(parameter);
ExcelUtil<AdamMemberCodeExcelDto> excelUtil = new ExcelUtil<>(AdamMemberCodeExcelDto.class); ExcelUtil<AdamMemberCodeExcelDto> excelUtil = new ExcelUtil<>(AdamMemberCodeExcelDto.class);
List<AdamMemberCodeExcelDto> excelList = new ArrayList<>(); List<AdamMemberCodeExcelDto> excelList = new ArrayList<>();
...@@ -226,10 +244,10 @@ public class AdamMemberAdminController extends BaseController { ...@@ -226,10 +244,10 @@ public class AdamMemberAdminController extends BaseController {
} }
@ApiOperation(value = "会员码:生成") @ApiOperation(value = "会员码:生成")
@RequiresPermissions("adam:member:detail:code:gen") @RequiresPermissions("adam:member:gen:code")
@PostMapping("code_gen") @PostMapping("gen_code")
@ResponseBody @ResponseBody
public AjaxResult detailCodeGen(@Validated AdamMemberCodeGenParam parameter) { public AjaxResult genCode(@Validated AdamMemberCodeGenParam parameter) {
int count = adamMemberPriceAdminService.count( int count = adamMemberPriceAdminService.count(
Wrappers.lambdaQuery(AdamMemberPrice.class) Wrappers.lambdaQuery(AdamMemberPrice.class)
.eq(AdamMemberPrice::getMemberPriceId, parameter.getMemberPriceId()) .eq(AdamMemberPrice::getMemberPriceId, parameter.getMemberPriceId())
......
...@@ -73,103 +73,87 @@ public class CandyMgtCouponAdminController extends BaseController { ...@@ -73,103 +73,87 @@ public class CandyMgtCouponAdminController extends BaseController {
@PostMapping("add") @PostMapping("add")
@ResponseBody @ResponseBody
public AjaxResult addSave(@RequestBody @Validated CandyMgtCouponBuildParam buildParam) { public AjaxResult addSave(@RequestBody @Validated CandyMgtCouponBuildParam buildParam) {
BigDecimal discount = null, valFace = null, valOver = null, valMinus = null; switch (buildParam.getCouType()) {
Integer couType = buildParam.getCouType(),
validity = buildParam.getValidity(),
redeemValidity = buildParam.getRedeemValidity();
LocalDateTime nowTime = LocalDateTime.now(),
redeemStart = null, redeemStop = null, effectAt, expireAt,
eventAt = LocalDateTime.parse(buildParam.getEventAt(), DateTimeFormatter.ofPattern(DateUtils.YYYY_MM_DD_HH_MM_SS));
switch (couType) {// TODO: 2021/8/20 校验
case 1:// 代金券 case 1:// 代金券
valFace = buildParam.getValFace(); BigDecimal valFace = buildParam.getValFace();
if (null == valFace || valFace.compareTo(BigDecimal.ZERO) <= 0) {
return AjaxResult.warn("代金券金额无效");
}
buildParam.setDiscount(null);
buildParam.setValOver(null);
buildParam.setValMinus(null);
buildParam.setOverlay(0);
break; break;
case 2:// 满减券 case 2:// 满减券
valOver = buildParam.getValOver(); BigDecimal valOver = buildParam.getValOver();
valMinus = buildParam.getValMinus(); BigDecimal valMinus = buildParam.getValMinus();
if (null == valOver || valOver.compareTo(BigDecimal.ZERO) <= 0
|| null == valMinus || valMinus.compareTo(BigDecimal.ZERO) <= 0) {
return AjaxResult.warn("满减金额无效");
}
buildParam.setDiscount(null);
buildParam.setValFace(valMinus);
buildParam.setOverlay(0);
break; break;
case 3:// 兑换券 case 3:// 兑换券
redeemStart = eventAt.with(LocalTime.MIN); buildParam.setBindType(0);
redeemStop = eventAt.plusDays(redeemValidity).withHour(23).withMinute(59).withSecond(59); buildParam.setDiscount(null);
buildParam.setValFace(null);
buildParam.setValOver(null);
buildParam.setValMinus(null);
buildParam.setOverlay(0);
break; break;
case 4:// 折扣券 case 4:// 折扣券
discount = buildParam.getDiscount(); BigDecimal discount = buildParam.getDiscount();
if (null == discount || discount.compareTo(BigDecimal.ZERO) <= 0) {
return AjaxResult.warn("折扣配置无效");
}
buildParam.setValFace(null);
buildParam.setValOver(null);
buildParam.setValMinus(null);
break;
case 101:
if (null == buildParam.getOverlay()) {
return AjaxResult.warn("叠加限制配置无效");
}
buildParam.setDiscount(null);
buildParam.setValFace(null);
buildParam.setValOver(null);
buildParam.setValMinus(null);
break; break;
default: default:
logger.warn("Invalid operation[buildParam.couType={}]", couType); logger.warn("Invalid operation[buildParam.couType={}]", buildParam.getCouType());
return this.error(AjaxResult.Type.WARN, "券类型无效"); return this.error(AjaxResult.Type.WARN, "券类型无效");
} }
effectAt = eventAt.with(LocalTime.MIN);
expireAt = eventAt.plusDays(validity).withHour(23).withMinute(59).withSecond(59);
StringBuilder eventLimit = new StringBuilder(); if (buildParam.getBusiType() > 0) {// 校验适用范围
String operator = ShiroUtils.getLoginName(); List<CandyCouponRuleBuildParam> couponRuleList = buildParam.getCouponRuleList();
if (buildParam.getEventType() == 2) {// 指定用户手机号 if (CollectionUtils.isEmpty(couponRuleList)) {
String eventLimitStr = buildParam.getEventLimit().trim(); return AjaxResult.warn("请指定适用范围");
// TODO: 2021/8/20 正则校验手机号字符串
if (StringUtils.isEmpty(eventLimitStr)) {
return this.error(AjaxResult.Type.WARN, "请指定手机号");
} }
Set<String> eventLimitSet = Stream.of(eventLimitStr.split(",")).collect(Collectors.toSet()); CandyCouponRuleBuildParam couponRuleBuildParam = couponRuleList.get(0);
for (String l : eventLimitSet) { if (couponRuleBuildParam.getUseScope() != 100 && (
eventLimit.append(l).append(","); StringUtils.isEmpty(couponRuleBuildParam.getBusiId()) || StringUtils.isEmpty(couponRuleBuildParam.getBusiName())
)) {
return AjaxResult.warn("请指定具体适用内容");
} }
} else {
buildParam.setCouponRuleList(null);
} }
CandyCoupon initCoupon = new CandyCoupon(); if (0 == buildParam.getBindType()) {
initCoupon.setCouponId(IDGenerator.nextMilliId()); buildParam.setEventType(0);
initCoupon.setState(1); buildParam.setEventLimit(null);
initCoupon.setTitle(buildParam.getTitle()); if (null == buildParam.getRedeemValidity()) {
initCoupon.setLabel(buildParam.getLabel()); return AjaxResult.warn("兑换有效期无效");
initCoupon.setNotice(buildParam.getNotice());
initCoupon.setExclusive(0);
initCoupon.setBusiType(buildParam.getBusiType());
initCoupon.setCouType(couType);
initCoupon.setBindType(buildParam.getBindType());
initCoupon.setDiscount(discount);
initCoupon.setValFace(valFace);
initCoupon.setValOver(valOver);
initCoupon.setValMinus(valMinus);
initCoupon.setOverlay(buildParam.getOverlay());
initCoupon.setValidity(validity);
initCoupon.setRedeemValidity(redeemValidity);
initCoupon.setRedeemStart(redeemStart);
initCoupon.setRedeemStop(redeemStop);
initCoupon.setEffectAt(effectAt);
initCoupon.setExpireAt(expireAt);
initCoupon.setOperator(operator);
initCoupon.setCreatedAt(nowTime);
List<CandyCouponRuleBuildParam> couponRuleList = buildParam.getCouponRuleList();
List<CandyCouponRule> initCouponRuleList = new ArrayList<>();
if (!CollectionUtils.isEmpty(couponRuleList)) {
couponRuleList.forEach(r -> {
CandyCouponRule initCouponRule = new CandyCouponRule();
initCouponRule.setCruleId(IDGenerator.nextTimeId2());
initCouponRule.setCouponId(initCoupon.getCouponId());
initCouponRule.setUseScope(r.getUseScope());
initCouponRule.setBusiName(r.getBusiName());
initCouponRule.setBusiId(r.getBusiId());
initCouponRule.setState(1);
initCouponRuleList.add(initCouponRule);
});
} }
} else {
CandyMgtCoupon initMgtCoupon = new CandyMgtCoupon(); if (buildParam.getEventType() == 2) {// 指定用户手机号
initMgtCoupon.setMcouponId(IDGenerator.nextMilliId()); if (StringUtils.isEmpty(buildParam.getEventLimit().trim())) {
initMgtCoupon.setCouponId(initCoupon.getCouponId()); return AjaxResult.warn("请指定手机号");
initMgtCoupon.setState(0); }
initMgtCoupon.setEventAmt(buildParam.getEventAmt()); }
initMgtCoupon.setEventType(buildParam.getEventType()); }
initMgtCoupon.setEventLimit(eventLimit.toString()); return toAjax(candyMgtCouponAdminService.saveMgtCouponForCouponBuild(buildParam));
initMgtCoupon.setEventAt(eventAt);
initMgtCoupon.setOperator(operator);
initMgtCoupon.setCreatedAt(nowTime);
candyMgtCouponAdminService.saveMgtCouponInfo(initCoupon, initMgtCoupon, initCouponRuleList);
return toAjax(true);
} }
} }
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
} }
</style> </style>
<body class="gray-bg" style="font: 14px Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif !important;"> <body class="gray-bg" style="font: 14px Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif !important;">
<!--<input id="userId" name="userId" type="hidden" th:value="${user.userId}" />-->
<section class="section-content"> <section class="section-content">
<div class="row"> <div class="row">
<div class="col-sm-12 about"> <div class="col-sm-12 about">
...@@ -136,30 +135,6 @@ ...@@ -136,30 +135,6 @@
<th:block th:include="include :: footer" /> <th:block th:include="include :: footer" />
<script> <script>
function avatar() {
var url = ctx + 'system/user/profile/avatar';
top.layer.open({
type: 2,
area: [$(window).width() + 'px', $(window).height() + 'px'],
fix: false,
//不固定
maxmin: true,
shade: 0.3,
title: "修改头像",
content: url,
btn: ['确定', '关闭'],
// 弹层外区域关闭
shadeClose: true,
yes: function(index, layero) {
var iframeWin = layero.find('iframe')[0];
iframeWin.contentWindow.submitHandler(index, layero);
},
cancel: function(index) {
return true;
}
});
}
/*基础信息-修改*/ /*基础信息-修改*/
$("#form-member-edit").validate({ $("#form-member-edit").validate({
onkeyup: false, onkeyup: false,
......
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('会员卡列表')" />
<th:block th:include="include :: select2-css" />
</head>
<body class="gray-bg">
<div class="container-div">
<div class="row">
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: select2-js" />
<script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('adam:member:view:edit')}]];
var prefix = ctx + "adam/member";
$(function() {
var options = {
url: prefix + "/list",
updateUrl: prefix + "/info/{id}",
sortName: "memberId",
sortOrder: "asc",
modalName: "设置",
columns: [{
checkbox: true
},
{
field: 'memberId',
title: '会员卡ID'
},
{
field: 'name',
title: '会员卡名称',
},
{
field: 'title',
title: '会员卡标题',
align: 'center',
},
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.editTab(\'' + row.memberId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
return actions.join('');
}
}]
};
$.table.init(options);
});
</script>
</body>
</html>
\ No newline at end of file
package com.liquidnet.client.admin.zhengzai.candy.service; package com.liquidnet.client.admin.zhengzai.candy.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.candy.dto.admin.CandyMemberCouponBuildParam; import com.liquidnet.service.candy.dto.admin.*;
import com.liquidnet.service.candy.dto.admin.CandyMgtCouponInfoDto;
import com.liquidnet.service.candy.dto.admin.CandyMgtCouponListParam;
import com.liquidnet.service.candy.dto.admin.CandyMgtCouponMemberDto;
import com.liquidnet.service.candy.entity.CandyCoupon; import com.liquidnet.service.candy.entity.CandyCoupon;
import com.liquidnet.service.candy.entity.CandyCouponRule; import com.liquidnet.service.candy.entity.CandyCouponRule;
import com.liquidnet.service.candy.entity.CandyMgtCoupon; import com.liquidnet.service.candy.entity.CandyMgtCoupon;
...@@ -17,6 +14,8 @@ public interface ICandyMgtCouponAdminService extends IService<CandyMgtCoupon> { ...@@ -17,6 +14,8 @@ public interface ICandyMgtCouponAdminService extends IService<CandyMgtCoupon> {
boolean editMgtCouponForMemberRights(CandyMemberCouponBuildParam parameter); boolean editMgtCouponForMemberRights(CandyMemberCouponBuildParam parameter);
boolean saveMgtCouponForCouponBuild(CandyMgtCouponBuildParam parameter);
boolean saveMgtCouponInfo(CandyCoupon initCoupon, CandyMgtCoupon initMgtCoupon, List<CandyCouponRule> initCouponRuleList); boolean saveMgtCouponInfo(CandyCoupon initCoupon, CandyMgtCoupon initMgtCoupon, List<CandyCouponRule> initCouponRuleList);
boolean updateMgtCouponInfo(CandyCoupon updateCoupon, CandyMgtCoupon updateMgtCoupon, List<CandyCouponRule> initCouponRuleList); boolean updateMgtCouponInfo(CandyCoupon updateCoupon, CandyMgtCoupon updateMgtCoupon, List<CandyCouponRule> initCouponRuleList);
......
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
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.liquidnet.client.admin.common.utils.DateUtils;
import com.liquidnet.client.admin.common.utils.ShiroUtils; import com.liquidnet.client.admin.common.utils.ShiroUtils;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberPriceAdminService; import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberPriceAdminService;
import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponAdminService; import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponAdminService;
...@@ -23,12 +24,15 @@ import com.liquidnet.service.candy.entity.CandyMgtCoupon; ...@@ -23,12 +24,15 @@ import com.liquidnet.service.candy.entity.CandyMgtCoupon;
import com.liquidnet.service.candy.mapper.CandyCouponMapper; import com.liquidnet.service.candy.mapper.CandyCouponMapper;
import com.liquidnet.service.candy.mapper.CandyMgtCouponMapper; import com.liquidnet.service.candy.mapper.CandyMgtCouponMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -172,6 +176,67 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa ...@@ -172,6 +176,67 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa
return false; return false;
} }
@Override
public boolean saveMgtCouponForCouponBuild(CandyMgtCouponBuildParam parameter) {
String eventAtStr = parameter.getEventAt();
LocalDateTime nowTime = LocalDateTime.now();
LocalDateTime eventAt = StringUtils.isEmpty(eventAtStr.trim()) ? nowTime
: LocalDateTime.parse(eventAtStr, DateTimeFormatter.ofPattern(DateUtils.YYYY_MM_DD_HH_MM_SS));
CandyCoupon initCoupon = new CandyCoupon();
initCoupon.setCouponId(IDGenerator.nextMilliId());
initCoupon.setState(1);
initCoupon.setTitle(parameter.getTitle());
initCoupon.setLabel(parameter.getLabel());
initCoupon.setNotice(parameter.getNotice());
initCoupon.setExclusive(0);
initCoupon.setBusiType(parameter.getBusiType());
initCoupon.setCouType(parameter.getCouType());
initCoupon.setBindType(parameter.getBindType());
initCoupon.setDiscount(parameter.getDiscount());
initCoupon.setValFace(parameter.getValFace());
initCoupon.setValOver(parameter.getValOver());
initCoupon.setValMinus(parameter.getValMinus());
initCoupon.setOverlay(parameter.getOverlay());
initCoupon.setValidity(parameter.getValidity());
initCoupon.setRedeemValidity(parameter.getRedeemValidity());
initCoupon.setRedeemStart(eventAt.with(LocalTime.MIN));
initCoupon.setRedeemStop(eventAt.plusDays(parameter.getRedeemValidity()).withHour(23).withMinute(59).withSecond(59));
initCoupon.setEffectAt(eventAt.with(LocalTime.MIN));
initCoupon.setExpireAt(eventAt.plusDays(parameter.getValidity()).withHour(23).withMinute(59).withSecond(59));
initCoupon.setOperator(ShiroUtils.getLoginName());
initCoupon.setCreatedAt(nowTime);
List<CandyCouponRuleBuildParam> couponRuleList = parameter.getCouponRuleList();
List<CandyCouponRule> initCouponRuleList = new ArrayList<>();
if (!CollectionUtils.isEmpty(couponRuleList)) {
couponRuleList.forEach(r -> {
CandyCouponRule initCouponRule = new CandyCouponRule();
initCouponRule.setCruleId(IDGenerator.nextTimeId2());
initCouponRule.setCouponId(initCoupon.getCouponId());
initCouponRule.setUseScope(r.getUseScope());
initCouponRule.setBusiName(r.getBusiName());
initCouponRule.setBusiId(r.getBusiId());
initCouponRule.setState(1);
initCouponRuleList.add(initCouponRule);
});
}
CandyMgtCoupon initMgtCoupon = new CandyMgtCoupon();
initMgtCoupon.setMcouponId(IDGenerator.nextMilliId());
initMgtCoupon.setCouponId(initCoupon.getCouponId());
initMgtCoupon.setState(0);
initMgtCoupon.setEventAmt(parameter.getEventAmt());
initMgtCoupon.setEventType(parameter.getEventType());
initMgtCoupon.setEventLimit(parameter.getEventLimit());
initMgtCoupon.setEventAt(eventAt);
initMgtCoupon.setOperator(initCoupon.getOperator());
initMgtCoupon.setCreatedAt(nowTime);
return candyMgtCouponAdminService.saveMgtCouponInfo(initCoupon, initMgtCoupon, initCouponRuleList);
}
@Override @Override
@Transactional @Transactional
public boolean saveMgtCouponInfo(CandyCoupon initCoupon, CandyMgtCoupon initMgtCoupon, List<CandyCouponRule> initCouponRuleList) { public boolean saveMgtCouponInfo(CandyCoupon initCoupon, CandyMgtCoupon initMgtCoupon, List<CandyCouponRule> initCouponRuleList) {
......
...@@ -5,7 +5,7 @@ import lombok.Data; ...@@ -5,7 +5,7 @@ import lombok.Data;
@Data @Data
public class CandyMgtCouponListParam { public class CandyMgtCouponListParam {
/** /**
* 券类型[1-代金券|2-满减券|3-兑换券|4-折扣券] * 券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]
*/ */
private Integer couType; private Integer couType;
/** /**
......
...@@ -60,7 +60,7 @@ public class CandyCoupon implements Serializable { ...@@ -60,7 +60,7 @@ public class CandyCoupon implements Serializable {
private Integer busiType; private Integer busiType;
/** /**
* 券类型[1-代金券|2-满减券|3-兑换券|4-折扣券] * 券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]
*/ */
private Integer couType; private Integer couType;
......
...@@ -38,7 +38,7 @@ create table candy_coupon ...@@ -38,7 +38,7 @@ create table candy_coupon
notice varchar(200) comment '注意/须知', notice varchar(200) comment '注意/须知',
exclusive smallint comment '专享标识[0-常规|1-会员礼包]', exclusive smallint comment '专享标识[0-常规|1-会员礼包]',
busi_type smallint comment '业务类别[0-全场|1-演出|2-商品|3-优先购]', busi_type smallint comment '业务类别[0-全场|1-演出|2-商品|3-优先购]',
cou_type smallint comment '券类型[1-代金券|2-满减券|3-兑换券|4-折扣券]', cou_type smallint comment '券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]',
bind_type smallint comment '领取方式[0-用户输入兑换|1-发放至用户]', bind_type smallint comment '领取方式[0-用户输入兑换|1-发放至用户]',
discount decimal(8, 2) comment '折扣[8折即0.8]', discount decimal(8, 2) comment '折扣[8折即0.8]',
......
...@@ -260,7 +260,7 @@ public class CandyCouponServiceImpl implements ICandyCouponService { ...@@ -260,7 +260,7 @@ public class CandyCouponServiceImpl implements ICandyCouponService {
dto.setCouType(dto.getCouType()); dto.setCouType(dto.getCouType());
} }
vo.setCouType(dto.getCouType()); vo.setCouType(dto.getCouType());
switch (dto.getCouType()) {//券类型[1-代金券|2-满减券|3-兑换券|4-折扣券] switch (dto.getCouType()) {//券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]
case 1: case 1:
vo.setValue(dto.getValFace()); vo.setValue(dto.getValFace());
break; break;
......
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