后端 + 前端:优惠劵列表

pull/1/head
YunaiV 2019-04-05 22:27:57 +08:00
parent 2bcaaf2027
commit 7f024bec9d
17 changed files with 470 additions and 95 deletions

View File

@ -1,16 +1,15 @@
import {message} from 'antd'; import {message} from 'antd';
import { import {
addProductRecommend,
deleteProductRecommend, deleteProductRecommend,
queryProductRecommend,
updateProductRecommend, updateProductRecommend,
updateProductRecommendStatus, updateProductRecommendStatus,
addCouponCardTemplate, addCouponCardTemplate,
getCouponCardTemplatePage,
} from '../../services/promotion'; } from '../../services/promotion';
import PaginationHelper from '../../../helpers/PaginationHelper'; import PaginationHelper from '../../../helpers/PaginationHelper';
const SEARCH_PARAMS_DEFAULT = { const SEARCH_PARAMS_DEFAULT = {
type: 1, // type: 1,
}; };
export default { export default {
@ -40,7 +39,10 @@ export default {
}); });
// 请求 // 请求
const response = yield call(queryProductRecommend, payload); const response = yield call(getCouponCardTemplatePage, {
...payload,
type: 1
});
// 响应 // 响应
yield put({ yield put({
type: 'setAll', type: 'setAll',
@ -48,7 +50,7 @@ export default {
list: response.data.list, list: response.data.list,
pagination: PaginationHelper.formatPagination(response.data, payload), pagination: PaginationHelper.formatPagination(response.data, payload),
searchParams: { searchParams: {
type: payload.type // type: payload.type
} }
}, },
}); });

View File

@ -32,7 +32,14 @@ const SelectOption = Select.Option;
const { TreeNode } = Tree; const { TreeNode } = Tree;
const RangePicker = DatePicker.RangePicker; const RangePicker = DatePicker.RangePicker;
const status = ['未知', '正常', '禁用']; const status = ['未知', '正常', '禁用'];
const types = ['未知', '新品推荐', '热卖推荐']; const rangeType = {
10: '所有可用',
20: '部分商品可用',
21: '部分商品不可用',
30: '部分分类可用',
31: '部分分类不可用'};
const preferentialType = ['未知', '代金卷', '折扣卷'];
const dateType = ['未知', '固定日期', '领取日期'];
// 列表 // 列表
function List ({ dataSource, loading, pagination, searchParams, dispatch, function List ({ dataSource, loading, pagination, searchParams, dispatch,
@ -44,7 +51,7 @@ function List ({ dataSource, loading, pagination, searchParams, dispatch,
content: `${record.productSpuId}`, content: `${record.productSpuId}`,
onOk() { onOk() {
dispatch({ dispatch({
type: 'productRecommendList/updateStatus', type: 'couponCardTemplateList/updateStatus',
payload: { payload: {
id: record.id, id: record.id,
status: record.status === 1 ? 2 : 1, status: record.status === 1 ? 2 : 1,
@ -55,48 +62,91 @@ function List ({ dataSource, loading, pagination, searchParams, dispatch,
}); });
} }
function handleDelete(record) { // function handleDelete(record) {
Modal.confirm({ // Modal.confirm({
title: `确认删除?`, // title: `确认删除?`,
content: `${record.productSpuId}`, // content: `${record.productSpuId}`,
onOk() { // onOk() {
dispatch({ // dispatch({
type: 'productRecommendList/delete', // type: 'couponCardTemplateList/delete',
payload: { // payload: {
id: record.id, // id: record.id,
}, // },
}); // });
}, // },
onCancel() {}, // onCancel() {},
}); // });
} // }
const columns = [ const columns = [
{ {
title: '推荐类型', title: '名称',
dataIndex: 'type', dataIndex: 'title',
},
{
title: '类型',
dataIndex: 'preferentialType',
render(val) { render(val) {
return <span>{types[val]}</span>; // TODO 芋艿此处要改 return <span>{preferentialType[val]}</span>;
}, },
}, },
{ {
title: '商品', title: '优惠内容',
dataIndex: 'productSpuId', render(val, record) {
let content;
// priceAvailable;
if (record.priceAvailable === 0) {
content = '无门槛,';
} else {
content = '满 ' + record.priceAvailable / 100 + ' 元,';
}
if (record.preferentialType === 1) {
content += '减 ' + record.priceOff / 100 + ' 元';
} else {
content += '打' + record.percentOff / 100.0 + '折';
if (record.discountPriceLimit) {
content += ', 最多减 ' + record.discountPriceLimit / 100 + ' 元';
}
}
return content;
}
}, },
{ {
title: '排序值', title: '可使用商品',
dataIndex: 'sort', dataIndex: 'rangeType',
render: val => <span>{rangeType[val]}</span>,
},
{
title: '有效期',
render(val, record) {
let content = dateType[record.dateType] + ' ';
// priceAvailable;
if (record.dateType === 1) {
content += moment(new Date(record.validStartTime)).format('YYYY-MM-DD')
+ '~' + moment(new Date(record.validEndTime)).format('YYYY-MM-DD');
} else if (record.dateType === 2) {
content += record.fixedStartTerm + '-' + record.fixedEndTerm + ' 天';
}
return content;
}
},
{
title: '已领取/剩余',
// 已使用 TODO 芋艿
// 支付金额(元) TODO 芋艿
// 客单价(元) TODO 芋艿
render(val, record) {
return `${record.statFetchNum} / ` + (record.total - record.statFetchNum);
}
}, },
{ {
title: '状态', title: '状态',
dataIndex: 'status', dataIndex: 'status',
render(val) { render: val => <span>{status[val]}</span>,
return <span>{status[val]}</span>; // TODO 芋艿此处要改
},
}, },
{ {
title: '备注', title: '使用说明',
dataIndex: 'memo', dataIndex: 'description',
}, },
{ {
title: '创建时间', title: '创建时间',
@ -105,7 +155,7 @@ function List ({ dataSource, loading, pagination, searchParams, dispatch,
}, },
{ {
title: '操作', title: '操作',
width: 360, width: 120,
render: (text, record) => { render: (text, record) => {
const statusText = record.status === 1 ? '禁用' : '开启'; // TODO 芋艿,此处要改 const statusText = record.status === 1 ? '禁用' : '开启'; // TODO 芋艿,此处要改
return ( return (
@ -115,15 +165,15 @@ function List ({ dataSource, loading, pagination, searchParams, dispatch,
<a className={styles.tableDelete} onClick={() => handleStatus(record)}> <a className={styles.tableDelete} onClick={() => handleStatus(record)}>
{statusText} {statusText}
</a> </a>
{ {/*{*/}
record.status === 2 ? {/* record.status === 2 ?*/}
<span> {/* <span>*/}
<Divider type="vertical" /> {/* <Divider type="vertical" />*/}
<a className={styles.tableDelete} onClick={() => handleDelete(record)}> {/* <a className={styles.tableDelete} onClick={() => handleDelete(record)}>*/}
删除 {/* 删除*/}
</a> {/* </a>*/}
</span> : null {/* </span> : null*/}
} {/*}*/}
</Fragment> </Fragment>
); );
}, },
@ -132,7 +182,7 @@ function List ({ dataSource, loading, pagination, searchParams, dispatch,
function onPageChange(page) { // 翻页 function onPageChange(page) { // 翻页
dispatch({ dispatch({
type: 'productRecommendList/query', type: 'couponCardTemplateList/query',
payload: { payload: {
pageNo: page.current, pageNo: page.current,
pageSize: page.pageSize, pageSize: page.pageSize,
@ -164,7 +214,7 @@ const SearchForm = Form.create()(props => {
function search() { function search() {
dispatch({ dispatch({
type: 'productRecommendList/query', type: 'couponCardTemplateList/query',
payload: { payload: {
...PaginationHelper.defaultPayload, ...PaginationHelper.defaultPayload,
...form.getFieldsValue() ...form.getFieldsValue()
@ -369,7 +419,7 @@ const AddOrUpdateForm = Form.create()(props => {
initialValue: formVals.dateType, initialValue: formVals.dateType,
})( })(
<Select placeholder="请选择" style={{ maxWidth: 200, width: '100%' }} onChange={onDateTypeChange}> <Select placeholder="请选择" style={{ maxWidth: 200, width: '100%' }} onChange={onDateTypeChange}>
<SelectOption value="1">固定日期</SelectOption> <SelectOption value="1"></SelectOption>
<SelectOption value="2">领取日期</SelectOption> <SelectOption value="2">领取日期</SelectOption>
</Select> </Select>
)} )}
@ -452,10 +502,10 @@ const AddOrUpdateForm = Form.create()(props => {
); );
}); });
@connect(({ productRecommendList }) => ({ @connect(({ couponCardTemplateList }) => ({
// list: productRecommend.list, // list: productRecommend.list,
// pagination: productRecommend.pagination, // pagination: productRecommend.pagination,
...productRecommendList, ...couponCardTemplateList,
})) }))
// 主界面 // 主界面
@ -465,7 +515,7 @@ class CouponCardTemplateLists extends PureComponent {
componentDidMount() { componentDidMount() {
const { dispatch } = this.props; const { dispatch } = this.props;
dispatch({ dispatch({
type: 'productRecommendList/query', type: 'couponCardTemplateList/query',
payload: { payload: {
...PaginationHelper.defaultPayload ...PaginationHelper.defaultPayload
}, },
@ -475,7 +525,7 @@ class CouponCardTemplateLists extends PureComponent {
handleModalVisible = (modalVisible, modalType, record) => { handleModalVisible = (modalVisible, modalType, record) => {
const { dispatch } = this.props; const { dispatch } = this.props;
dispatch({ dispatch({
type: 'productRecommendList/setAll', type: 'couponCardTemplateList/setAll',
payload: { payload: {
modalVisible, modalVisible,
modalType, modalType,

View File

@ -67,6 +67,12 @@ export async function deleteProductRecommend(params) {
// coupon // coupon
export async function getCouponCardTemplatePage(params) {
return request(`/promotion-api/admins/coupon/template/page?${stringify(params)}`, {
method: 'GET',
});
}
export async function addCouponCardTemplate(params) { export async function addCouponCardTemplate(params) {
return request(`/promotion-api/admins/coupon/template/add_card?${stringify(params)}`, { return request(`/promotion-api/admins/coupon/template/add_card?${stringify(params)}`, {
method: 'POST', method: 'POST',

View File

@ -4,8 +4,11 @@ import cn.iocoder.common.framework.util.DateUtil;
import cn.iocoder.common.framework.vo.CommonResult; import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.promotion.api.CouponService; import cn.iocoder.mall.promotion.api.CouponService;
import cn.iocoder.mall.promotion.api.bo.CouponTemplateBO; import cn.iocoder.mall.promotion.api.bo.CouponTemplateBO;
import cn.iocoder.mall.promotion.api.bo.CouponTemplatePageBO;
import cn.iocoder.mall.promotion.api.dto.CouponCardTemplateAddDTO; import cn.iocoder.mall.promotion.api.dto.CouponCardTemplateAddDTO;
import cn.iocoder.mall.promotion.api.dto.CouponTemplatePageDTO;
import cn.iocoder.mall.promotion.application.convert.CouponTemplateConvert; import cn.iocoder.mall.promotion.application.convert.CouponTemplateConvert;
import cn.iocoder.mall.promotion.application.vo.admins.AdminsCouponTemplatePageVO;
import cn.iocoder.mall.promotion.application.vo.admins.AdminsCouponTemplateVO; import cn.iocoder.mall.promotion.application.vo.admins.AdminsCouponTemplateVO;
import com.alibaba.dubbo.config.annotation.Reference; import com.alibaba.dubbo.config.annotation.Reference;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -13,10 +16,7 @@ import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date; import java.util.Date;
@ -30,6 +30,25 @@ public class AdminsCouponTemplateController {
// ========== 优惠劵(码)模板 ========== // ========== 优惠劵(码)模板 ==========
@GetMapping("/template/page")
@ApiOperation(value = "Banner 分页")
@ApiImplicitParams({
@ApiImplicitParam(name = "title", value = "标题,模糊匹配", example = "活动 A"),
@ApiImplicitParam(name = "pageNo", value = "页码,从 1 开始", example = "1"),
@ApiImplicitParam(name = "pageSize", value = "每页条数", required = true, example = "10"),
})
public CommonResult<AdminsCouponTemplatePageVO> page(@RequestParam(value = "type", required = false) Integer type,
@RequestParam(value = "title", required = false) String title,
@RequestParam(value = "status", required = false) Integer status,
@RequestParam(value = "preferentialType", required = false) Integer preferentialType,
@RequestParam(value = "pageNo", defaultValue = "0") Integer pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
CommonResult<CouponTemplatePageBO> result = couponService.getCouponTemplatePage(new CouponTemplatePageDTO()
.setType(type).setTitle(title).setStatus(status).setPreferentialType(preferentialType)
.setPageNo(pageNo).setPageSize(pageSize));
return CouponTemplateConvert.INSTANCE.convert(result);
}
@PostMapping("/template/add_card") @PostMapping("/template/add_card")
@ApiOperation(value = "创建优惠劵模板") @ApiOperation(value = "创建优惠劵模板")
@ApiImplicitParams({ @ApiImplicitParams({

View File

@ -2,26 +2,34 @@ package cn.iocoder.mall.promotion.application.convert;
import cn.iocoder.common.framework.vo.CommonResult; import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.promotion.api.bo.CouponTemplateBO; import cn.iocoder.mall.promotion.api.bo.CouponTemplateBO;
import cn.iocoder.mall.promotion.api.bo.CouponTemplatePageBO;
import cn.iocoder.mall.promotion.application.vo.admins.AdminsCouponTemplatePageVO;
import cn.iocoder.mall.promotion.application.vo.admins.AdminsCouponTemplateVO; import cn.iocoder.mall.promotion.application.vo.admins.AdminsCouponTemplateVO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mappings; import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper @Mapper
public interface CouponTemplateConvert { public interface CouponTemplateConvert {
CouponTemplateConvert INSTANCE = Mappers.getMapper(CouponTemplateConvert.class); CouponTemplateConvert INSTANCE = Mappers.getMapper(CouponTemplateConvert.class);
@Mappings({}) @Mappings({})
AdminsCouponTemplateVO convert(CouponTemplateBO bannerBO); AdminsCouponTemplateVO convert(CouponTemplateBO template);
@Mappings({}) @Mappings({})
CommonResult<AdminsCouponTemplateVO> convert2(CommonResult<CouponTemplateBO> result); CommonResult<AdminsCouponTemplateVO> convert2(CommonResult<CouponTemplateBO> result);
// @Mappings({}) @Mappings({})
// CommonResult<AdminsCouponTemplatePageVO> convert(CommonResult<CouponTemplatePageBO> result); CommonResult<AdminsCouponTemplatePageVO> convert(CommonResult<CouponTemplatePageBO> result);
@Mappings({})
List<AdminsCouponTemplateVO> convertList(List<CouponTemplateBO> templates);
// //
// @Mappings({}) // @Mappings({})
// List<UsersCouponTemplateVO> convertList(List<CouponTemplateBO> banners); // List<UsersCouponTemplateVO> convertList2(List<CouponTemplateBO> banners);
} }

View File

@ -0,0 +1,34 @@
package cn.iocoder.mall.promotion.application.vo.admins;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
@ApiModel("优惠劵(码)分页 VO")
public class AdminsCouponTemplatePageVO {
@ApiModelProperty(value = "优惠劵(码)数组")
private List<AdminsCouponTemplateVO> list;
@ApiModelProperty(value = "优惠劵(码)总数")
private Integer total;
public List<AdminsCouponTemplateVO> getList() {
return list;
}
public AdminsCouponTemplatePageVO setList(List<AdminsCouponTemplateVO> list) {
this.list = list;
return this;
}
public Integer getTotal() {
return total;
}
public AdminsCouponTemplatePageVO setTotal(Integer total) {
this.total = total;
return this;
}
}

View File

@ -49,7 +49,7 @@ public class AdminsCouponTemplateVO {
@ApiModelProperty(value = "固定日期-生效结束时间") @ApiModelProperty(value = "固定日期-生效结束时间")
private Date validEndTime; private Date validEndTime;
@ApiModelProperty(value = "领取日期-开始天数", example = "例如0-当天1-次天") @ApiModelProperty(value = "领取日期-开始天数", example = "例如0-当天1-次天")
private Integer fixedBeginTerm; private Integer fixedStartTerm;
@ApiModelProperty(value = "领取日期-结束天数") @ApiModelProperty(value = "领取日期-结束天数")
private Integer fixedEndTerm; private Integer fixedEndTerm;
// ========== 使用规则 END ========== // ========== 使用规则 END ==========
@ -190,12 +190,12 @@ public class AdminsCouponTemplateVO {
return this; return this;
} }
public Integer getFixedBeginTerm() { public Integer getFixedStartTerm() {
return fixedBeginTerm; return fixedStartTerm;
} }
public AdminsCouponTemplateVO setFixedBeginTerm(Integer fixedBeginTerm) { public AdminsCouponTemplateVO setFixedStartTerm(Integer fixedStartTerm) {
this.fixedBeginTerm = fixedBeginTerm; this.fixedStartTerm = fixedStartTerm;
return this; return this;
} }
@ -261,4 +261,13 @@ public class AdminsCouponTemplateVO {
this.createTime = createTime; this.createTime = createTime;
return this; return this;
} }
public Integer getTotal() {
return total;
}
public AdminsCouponTemplateVO setTotal(Integer total) {
this.total = total;
return this;
}
} }

View File

@ -0,0 +1,122 @@
package cn.iocoder.mall.promotion.application.convert;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.promotion.api.bo.BannerBO;
import cn.iocoder.mall.promotion.api.bo.BannerPageBO;
import cn.iocoder.mall.promotion.application.vo.admins.AdminsBannerPageVO;
import cn.iocoder.mall.promotion.application.vo.admins.AdminsBannerVO;
import cn.iocoder.mall.promotion.application.vo.users.UsersBannerVO;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Generated;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2019-04-05T22:26:04+0800",
comments = "version: 1.3.0.Final, compiler: javac, environment: Java 11.0.1 (Oracle Corporation)"
)
public class BannerConvertImpl implements BannerConvert {
@Override
public AdminsBannerVO convert(BannerBO bannerBO) {
if ( bannerBO == null ) {
return null;
}
AdminsBannerVO adminsBannerVO = new AdminsBannerVO();
adminsBannerVO.setId( bannerBO.getId() );
adminsBannerVO.setTitle( bannerBO.getTitle() );
adminsBannerVO.setUrl( bannerBO.getUrl() );
adminsBannerVO.setSort( bannerBO.getSort() );
adminsBannerVO.setStatus( bannerBO.getStatus() );
adminsBannerVO.setMemo( bannerBO.getMemo() );
adminsBannerVO.setCreateTime( bannerBO.getCreateTime() );
adminsBannerVO.setPicUrl( bannerBO.getPicUrl() );
return adminsBannerVO;
}
@Override
public CommonResult<AdminsBannerVO> convert2(CommonResult<BannerBO> result) {
if ( result == null ) {
return null;
}
CommonResult<AdminsBannerVO> commonResult = new CommonResult<AdminsBannerVO>();
commonResult.setCode( result.getCode() );
commonResult.setMessage( result.getMessage() );
commonResult.setData( convert( result.getData() ) );
return commonResult;
}
@Override
public CommonResult<AdminsBannerPageVO> convert(CommonResult<BannerPageBO> result) {
if ( result == null ) {
return null;
}
CommonResult<AdminsBannerPageVO> commonResult = new CommonResult<AdminsBannerPageVO>();
commonResult.setCode( result.getCode() );
commonResult.setMessage( result.getMessage() );
commonResult.setData( bannerPageBOToAdminsBannerPageVO( result.getData() ) );
return commonResult;
}
@Override
public List<UsersBannerVO> convertList(List<BannerBO> banners) {
if ( banners == null ) {
return null;
}
List<UsersBannerVO> list = new ArrayList<UsersBannerVO>( banners.size() );
for ( BannerBO bannerBO : banners ) {
list.add( bannerBOToUsersBannerVO( bannerBO ) );
}
return list;
}
protected List<AdminsBannerVO> bannerBOListToAdminsBannerVOList(List<BannerBO> list) {
if ( list == null ) {
return null;
}
List<AdminsBannerVO> list1 = new ArrayList<AdminsBannerVO>( list.size() );
for ( BannerBO bannerBO : list ) {
list1.add( convert( bannerBO ) );
}
return list1;
}
protected AdminsBannerPageVO bannerPageBOToAdminsBannerPageVO(BannerPageBO bannerPageBO) {
if ( bannerPageBO == null ) {
return null;
}
AdminsBannerPageVO adminsBannerPageVO = new AdminsBannerPageVO();
adminsBannerPageVO.setList( bannerBOListToAdminsBannerVOList( bannerPageBO.getList() ) );
adminsBannerPageVO.setTotal( bannerPageBO.getTotal() );
return adminsBannerPageVO;
}
protected UsersBannerVO bannerBOToUsersBannerVO(BannerBO bannerBO) {
if ( bannerBO == null ) {
return null;
}
UsersBannerVO usersBannerVO = new UsersBannerVO();
usersBannerVO.setUrl( bannerBO.getUrl() );
usersBannerVO.setPicUrl( bannerBO.getPicUrl() );
return usersBannerVO;
}
}

View File

@ -81,7 +81,7 @@ public class CouponTemplateBO {
* *
* *
* 1- * 1-
* 2- {@link #fixedBeginTerm} N * 2- {@link #fixedStartTerm} N
*/ */
private Integer dateType; private Integer dateType;
/** /**
@ -97,7 +97,7 @@ public class CouponTemplateBO {
* *
* 0-1- * 0-1-
*/ */
private Integer fixedBeginTerm; private Integer fixedStartTerm;
/** /**
* - * -
*/ */
@ -323,12 +323,12 @@ public class CouponTemplateBO {
return this; return this;
} }
public Integer getFixedBeginTerm() { public Integer getFixedStartTerm() {
return fixedBeginTerm; return fixedStartTerm;
} }
public CouponTemplateBO setFixedBeginTerm(Integer fixedBeginTerm) { public CouponTemplateBO setFixedStartTerm(Integer fixedStartTerm) {
this.fixedBeginTerm = fixedBeginTerm; this.fixedStartTerm = fixedStartTerm;
return this; return this;
} }

View File

@ -1,5 +1,33 @@
package cn.iocoder.mall.promotion.api.bo; package cn.iocoder.mall.promotion.api.bo;
import java.util.List;
public class CouponTemplatePageBO { public class CouponTemplatePageBO {
/**
*
*/
private List<CouponTemplateBO> list;
/**
*
*/
private Integer total;
public CouponTemplatePageBO setList(List<CouponTemplateBO> list) {
this.list = list;
return this;
}
public CouponTemplatePageBO setTotal(Integer total) {
this.total = total;
return this;
}
public List<CouponTemplateBO> getList() {
return list;
}
public Integer getTotal() {
return total;
}
} }

View File

@ -6,7 +6,7 @@ public enum CouponTemplateStatusEnum {
ENABLE(1, "开启中"), ENABLE(1, "开启中"),
DISABLE(2, "禁用中"), DISABLE(2, "禁用中"),
EXPIRE(3, "已过期"), // EXPIRE(3, "已过期"), TODO 芋艿,暂时不考虑过期的
; ;
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CouponTemplateStatusEnum::getValue).toArray(); public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CouponTemplateStatusEnum::getValue).toArray();

View File

@ -1,10 +1,16 @@
package cn.iocoder.mall.promotion.api.dto; package cn.iocoder.mall.promotion.api.dto;
import javax.validation.constraints.NotNull;
/** /**
* DTO * DTO
*/ */
public class CouponTemplatePageDTO { public class CouponTemplatePageDTO {
/**
*
*/
private Integer type;
/** /**
* *
*/ */
@ -18,4 +24,62 @@ public class CouponTemplatePageDTO {
*/ */
private Integer preferentialType; private Integer preferentialType;
@NotNull(message = "页码不能为空")
private Integer pageNo;
@NotNull(message = "每页条数不能为空")
private Integer pageSize;
public Integer getType() {
return type;
}
public CouponTemplatePageDTO setType(Integer type) {
this.type = type;
return this;
}
public String getTitle() {
return title;
}
public CouponTemplatePageDTO setTitle(String title) {
this.title = title;
return this;
}
public Integer getStatus() {
return status;
}
public CouponTemplatePageDTO setStatus(Integer status) {
this.status = status;
return this;
}
public Integer getPreferentialType() {
return preferentialType;
}
public CouponTemplatePageDTO setPreferentialType(Integer preferentialType) {
this.preferentialType = preferentialType;
return this;
}
public Integer getPageNo() {
return pageNo;
}
public CouponTemplatePageDTO setPageNo(Integer pageNo) {
this.pageNo = pageNo;
return this;
}
public Integer getPageSize() {
return pageSize;
}
public CouponTemplatePageDTO setPageSize(Integer pageSize) {
this.pageSize = pageSize;
return this;
}
} }

View File

@ -8,6 +8,8 @@ import org.mapstruct.Mapper;
import org.mapstruct.Mappings; import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper @Mapper
public interface CouponTemplateConvert { public interface CouponTemplateConvert {
@ -16,8 +18,8 @@ public interface CouponTemplateConvert {
// @Mappings({}) // @Mappings({})
// CouponTemplateBO convertToBO(CouponTemplateDO banner); // CouponTemplateBO convertToBO(CouponTemplateDO banner);
// //
// @Mappings({}) @Mappings({})
// List<CouponTemplateBO> convertToBO(List<CouponTemplateDO> bannerList); List<CouponTemplateBO> convertToBO(List<CouponTemplateDO> templateList);
@Mappings({}) @Mappings({})
CouponTemplateDO convert(CouponCodeTemplateAddDTO template); CouponTemplateDO convert(CouponCodeTemplateAddDTO template);

View File

@ -11,13 +11,15 @@ public interface CouponTemplateMapper {
CouponTemplateDO selectById(@Param("id") Integer id); CouponTemplateDO selectById(@Param("id") Integer id);
List<CouponTemplateDO> selectListByPage(@Param("title") String title, List<CouponTemplateDO> selectListByPage(@Param("type") Integer type,
@Param("title") String title,
@Param("status") Integer status, @Param("status") Integer status,
@Param("preferentialType") Integer preferentialType, @Param("preferentialType") Integer preferentialType,
@Param("offset") Integer offset, @Param("offset") Integer offset,
@Param("limit") Integer limit); @Param("limit") Integer limit);
Integer selectCountByPage(@Param("title") String title, Integer selectCountByPage(@Param("type") Integer type,
@Param("title") String title,
@Param("status") Integer status, @Param("status") Integer status,
@Param("preferentialType") Integer preferentialType); @Param("preferentialType") Integer preferentialType);

View File

@ -120,7 +120,7 @@ public class CouponTemplateDO extends BaseDO {
* *
* *
* 1- * 1-
* 2- {@link #fixedTerm} N * 2- {@link #fixedStartTerm} N
*/ */
private Integer dateType; private Integer dateType;
/** /**
@ -131,16 +131,16 @@ public class CouponTemplateDO extends BaseDO {
* - * -
*/ */
private Date validEndTime; private Date validEndTime;
// /** /**
// * 领取日期-开始天数 * -
// * *
// * 例如0-当天1-次天 * 0-1-
// */ */
// private Integer fixedBeginTerm; private Integer fixedStartTerm;
/** /**
* - * -
*/ */
private Integer fixedTerm; private Integer fixedEndTerm;
// /** // /**
// * 是否到期前4天发送提醒 // * 是否到期前4天发送提醒
// * // *
@ -335,12 +335,21 @@ public class CouponTemplateDO extends BaseDO {
return this; return this;
} }
public Integer getFixedTerm() { public Integer getFixedStartTerm() {
return fixedTerm; return fixedStartTerm;
} }
public CouponTemplateDO setFixedTerm(Integer fixedTerm) { public CouponTemplateDO setFixedStartTerm(Integer fixedStartTerm) {
this.fixedTerm = fixedTerm; this.fixedStartTerm = fixedStartTerm;
return this;
}
public Integer getFixedEndTerm() {
return fixedEndTerm;
}
public CouponTemplateDO setFixedEndTerm(Integer fixedEndTerm) {
this.fixedEndTerm = fixedEndTerm;
return this; return this;
} }

View File

@ -28,7 +28,18 @@ public class CouponServiceImpl implements CouponService {
@Override @Override
public CommonResult<CouponTemplatePageBO> getCouponTemplatePage(CouponTemplatePageDTO couponTemplatePageDTO) { public CommonResult<CouponTemplatePageBO> getCouponTemplatePage(CouponTemplatePageDTO couponTemplatePageDTO) {
return null; CouponTemplatePageBO couponTemplatePageBO = new CouponTemplatePageBO();
// 查询分页数据
int offset = (couponTemplatePageDTO.getPageNo() - 1) * couponTemplatePageDTO.getPageSize();
couponTemplatePageBO.setList(CouponTemplateConvert.INSTANCE.convertToBO(couponTemplateMapper.selectListByPage(
couponTemplatePageDTO.getType(), couponTemplatePageDTO.getTitle(),
couponTemplatePageDTO.getStatus(), couponTemplatePageDTO.getPreferentialType(),
offset, couponTemplatePageDTO.getPageSize())));
// 查询分页总数
couponTemplatePageBO.setTotal(couponTemplateMapper.selectCountByPage(
couponTemplatePageDTO.getType(), couponTemplatePageDTO.getTitle(),
couponTemplatePageDTO.getStatus(), couponTemplatePageDTO.getPreferentialType()));
return CommonResult.success(couponTemplatePageBO);
} }
@Override @Override

View File

@ -5,7 +5,7 @@
<sql id="FIELDS"> <sql id="FIELDS">
id, title, description, type, code_type, id, title, description, type, code_type,
status, quota, total, price_available, range_type, status, quota, total, price_available, range_type,
range_values, date_type, valid_start_time, valid_end_time, fixed_term, range_values, date_type, valid_start_time, valid_end_time, fixed_start_term, fixed_end_term,
preferential_type, percent_off, price_off, discount_price_limit, stat_fetch_num, preferential_type, percent_off, price_off, discount_price_limit, stat_fetch_num,
create_time create_time
</sql> </sql>
@ -39,8 +39,11 @@
<include refid="FIELDS" /> <include refid="FIELDS" />
FROM coupon_template FROM coupon_template
<where> <where>
<if test="type != null">
AND type = #{type}
</if>
<if test="title != null"> <if test="title != null">
title LIKE "%"#{title}"%" AND title LIKE "%"#{title}"%"
</if> </if>
<if test="status != null"> <if test="status != null">
AND status = #{status} AND status = #{status}
@ -57,8 +60,11 @@
COUNT(1) COUNT(1)
FROM coupon_template FROM coupon_template
<where> <where>
<if test="type != null">
AND type = #{type}
</if>
<if test="title != null"> <if test="title != null">
title LIKE "%"#{title}"%" AND title LIKE "%"#{title}"%"
</if> </if>
<if test="status != null"> <if test="status != null">
AND status = #{status} AND status = #{status}
@ -73,13 +79,13 @@
INSERT INTO coupon_template ( INSERT INTO coupon_template (
title, description, type, code_type, title, description, type, code_type,
status, quota, total, price_available, range_type, status, quota, total, price_available, range_type,
range_values, date_type, valid_start_time, valid_end_time, fixed_term, range_values, date_type, valid_start_time, valid_end_time, fixed_start_term, fixed_end_term,
preferential_type, percent_off, price_off, discount_price_limit, stat_fetch_num, preferential_type, percent_off, price_off, discount_price_limit, stat_fetch_num,
create_time create_time
) VALUES ( ) VALUES (
#{title}, #{description}, #{type}, #{codeType}, #{title}, #{description}, #{type}, #{codeType},
#{status}, #{quota}, #{total}, #{priceAvailable}, #{rangeType}, #{status}, #{quota}, #{total}, #{priceAvailable}, #{rangeType},
#{rangeValues}, #{dateType}, #{validStartTime}, #{validEndTime}, #{fixedTerm}, #{rangeValues}, #{dateType}, #{validStartTime}, #{validEndTime}, #{fixedStartTerm}, #{fixedEndTerm}
#{preferentialType}, #{percentOff}, #{priceOff}, #{discountPriceLimit}, #{statFetchNum}, #{preferentialType}, #{percentOff}, #{priceOff}, #{discountPriceLimit}, #{statFetchNum},
#{createTime} #{createTime}
) )
@ -121,8 +127,11 @@
<if test="validEndTime != null"> <if test="validEndTime != null">
valid_end_time = #{validEndTime}, valid_end_time = #{validEndTime},
</if> </if>
<if test="fixedTerm != null"> <if test="fixedStartTerm != null">
fixed_term = #{fixedTerm}, fixed_start_term = #{fixedStartTerm},
</if>
<if test="fixedEndTerm != null">
fixed_end_term = #{fixedEndTerm},
</if> </if>
<if test="preferentialType != null"> <if test="preferentialType != null">
preferential_type = #{preferentialType}, preferential_type = #{preferentialType},