ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
@@ -67,4 +67,7 @@ String STAFF_MOBILE_DOUBLE = "手机号码已被注册"; String SHOP_USER_DOUBLE = "账号已经关联其他商户登录"; String COUPON_AUDIT_EDIT = "只能编辑审核拒绝的优惠券"; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MerTotalDto.java
New file @@ -0,0 +1,32 @@ package com.ruoyi.system.api.domain.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @ClassName MerTotalDto * @Description TODO * @Author jqs * @Date 2023/7/3 16:19 * @Version 1.0 */ @Data public class MerTotalDto extends MerBaseDto{ @ApiModelProperty(value = "开始日期") private String startDate; @ApiModelProperty(value = "结束日期") private String endDate; @ApiModelProperty(value = "全部经销商标记0否1是") private Integer shopAllFlag; @ApiModelProperty(value = "商品类型1周期2服务3体验4单品") private Integer goodsType; @ApiModelProperty(value = "商户id集合",hidden = true) private List<Long> shopIdList; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MerGoodsPriceListVo.java
New file @@ -0,0 +1,42 @@ package com.ruoyi.system.api.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * @ClassName MerGoodsPriceVo * @Description TODO * @Author jqs * @Date 2023/7/3 9:37 * @Version 1.0 */ @Data public class MerGoodsPriceListVo { @ApiModelProperty(value = "商品id") private String goodsId; @ApiModelProperty(value = "商品名称") private String goodsName; @ApiModelProperty(value = "商品编码") private String goodsNo; @ApiModelProperty(value = "商品类型1周期2服务3体验4单品") private String goodsType; @ApiModelProperty(value = "商品售价") private BigDecimal salesPrice; @ApiModelProperty(value = "商品建议售价") private BigDecimal suggestSalesPrice;; @ApiModelProperty(value = "商品简介") private String goodsIntroduction; @ApiModelProperty(value = "商品调理问题") private String goodsNurses; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteGoodsFallbackFactory.java
@@ -5,6 +5,7 @@ import com.ruoyi.system.api.domain.poji.goods.Goods; import com.ruoyi.system.api.domain.poji.goods.GoodsFile; import com.ruoyi.system.api.domain.poji.goods.ShopGoods; import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo; import com.ruoyi.system.api.service.RemoteGoodsService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -62,6 +63,11 @@ public R<List<Goods>> listGoodsByGoodsId(String goodsIds) { return R.fail("获取商品列表失败:" + throwable.getMessage()); } @Override public R<List<MerGoodsPriceListVo>> listGoodsPriceByGoodsId(String goodsIds) { return R.fail("获取商品列表失败:" + throwable.getMessage()); } }; } } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java
@@ -87,6 +87,11 @@ public R<MemberTaskSimpleVo> getLastMemberTask(Long userId) { return R.fail("获取最近会员任务失败:" + throwable.getMessage()); } @Override public R<List<Long>> listShopIdByShopId(Long shopId) { return R.fail("获取商户列表失败:" + throwable.getMessage()); } }; } } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteGoodsService.java
@@ -6,6 +6,7 @@ import com.ruoyi.system.api.domain.poji.goods.Goods; import com.ruoyi.system.api.domain.poji.goods.GoodsFile; import com.ruoyi.system.api.domain.poji.goods.ShopGoods; import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo; import com.ruoyi.system.api.factory.RemoteGoodsFallbackFactory; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -49,4 +50,15 @@ @PostMapping("/goods/listGoodsByGoodsId") public R<List<Goods>> listGoodsByGoodsId(@RequestBody String goodsIds); /** * @description 通过id获取商品价格列表 * @author jqs * @date 2023/7/3 10:01 * @param goodsIds * @return R<List<MerGoodsPriceListVo>> */ @PostMapping("/listGoodsPriceByGoodsId") public R<List<MerGoodsPriceListVo>> listGoodsPriceByGoodsId(@RequestBody String goodsIds); } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java
@@ -109,4 +109,13 @@ */ @PostMapping("/member/getLastMemberTask") public R<MemberTaskSimpleVo> getLastMemberTask(@RequestBody Long userId); /** * @description 获取商户下属代理商 * @author jqs * @date 2023/7/3 17:26 * @return R<List<Long>> */ @PostMapping("/listShopIdByShopId") public R<List<Long>> listShopIdByShopId(@RequestBody Long shopId); } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerGoodsController.java
@@ -5,8 +5,10 @@ import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.goods.domain.dto.MerGoodsPageDto; import com.ruoyi.goods.domain.dto.MerShopGoodsEditDto; import com.ruoyi.goods.domain.dto.MgtSelectGoodsPageDto; import com.ruoyi.goods.domain.vo.MerGoodsPageVo; import com.ruoyi.goods.service.goods.GoodsService; import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.RequestBody; @@ -52,4 +54,15 @@ goodsService.editMerShopGoods(merShopGoodsEditDto); return R.ok(); } @RequestMapping(value = "/pageMerSelectGoods", method = RequestMethod.POST) @ApiOperation(value = "分页获取商品选择列表") public R<Page<MgtSelectGoodsPageVo>> pageMerSelectGoods(@RequestBody MgtSelectGoodsPageDto mgtSelectGoodsPageDto) { Page<MgtSelectGoodsPageVo> page = new Page<>(); page.setSize(mgtSelectGoodsPageDto.getPageSize()); page.setCurrent(mgtSelectGoodsPageDto.getPageNum()); page.setOptimizeCountSql(false); List<MgtSelectGoodsPageVo> mgtSelectGoodsPageVos = goodsService.pageMgtSelectGoods(page,mgtSelectGoodsPageDto); return R.ok(page.setRecords(mgtSelectGoodsPageVos)); } } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/concole/GoodsController.java
@@ -8,6 +8,7 @@ import com.ruoyi.system.api.domain.poji.goods.Goods; import com.ruoyi.system.api.domain.poji.goods.GoodsFile; import com.ruoyi.system.api.domain.poji.goods.ShopGoods; import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -99,5 +100,17 @@ return R.ok(goodsList); } /** * @description 通过id获取商品价格列表 * @author jqs * @date 2023/7/3 10:01 * @param goodsIds * @return R<List<MerGoodsPriceListVo>> */ @PostMapping("/listGoodsPriceByGoodsId") public R<List<MerGoodsPriceListVo>> listGoodsPriceByGoodsId(@RequestBody String goodsIds) { List<MerGoodsPriceListVo> goodsPriceListVoList = goodsService.listGoodsPriceByGoodsId(goodsIds); return R.ok(goodsPriceListVoList); } } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/goods/GoodsMapper.java
@@ -5,6 +5,7 @@ import com.ruoyi.goods.domain.vo.*; import com.ruoyi.system.api.domain.poji.goods.Goods; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo; import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo; import org.apache.ibatis.annotations.Param; @@ -109,4 +110,13 @@ * @return List<MgtSelectGoodsPageVo> */ List<MgtSelectGoodsPageVo> pageMgtSelectGoods(Page page, @Param("param")MgtSelectGoodsPageDto mgtSelectGoodsPageDto); /** * @description 通过id获取商品列表 * @author jqs * @date 2023/7/3 10:00 * @param goodsIds * @return List<MerGoodsPriceListVo> */ List<MerGoodsPriceListVo> listGoodsPriceByGoodsId(@Param("goodsIds")String goodsIds); } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/goods/GoodsService.java
@@ -5,6 +5,7 @@ import com.ruoyi.goods.domain.vo.*; import com.ruoyi.system.api.domain.poji.goods.Goods; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo; import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo; import java.util.List; @@ -152,4 +153,13 @@ * @return List<MgtSelectGoodsPageVo> */ List<MgtSelectGoodsPageVo> pageMgtSelectGoods(Page page,MgtSelectGoodsPageDto mgtSelectGoodsPageDto); /** * @description 通过id获取商品列表 * @author jqs * @date 2023/7/3 9:58 * @param goodsIds * @return List<MerGoodsPriceListVo> */ List<MerGoodsPriceListVo> listGoodsPriceByGoodsId(String goodsIds); } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java
@@ -23,6 +23,7 @@ import com.ruoyi.system.api.domain.poji.goods.Goods; import com.ruoyi.system.api.domain.poji.goods.GoodsFile; import com.ruoyi.system.api.domain.poji.goods.ShopGoods; import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo; import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo; import com.ruoyi.system.api.service.RemoteConfigService; import org.springframework.stereotype.Service; @@ -466,4 +467,16 @@ public List<MgtSelectGoodsPageVo> pageMgtSelectGoods(Page page, MgtSelectGoodsPageDto mgtSelectGoodsPageDto){ return goodsMapper.pageMgtSelectGoods(page, mgtSelectGoodsPageDto); } /** * @description 通过id获取商品列表 * @author jqs * @date 2023/7/3 9:58 * @param goodsIds * @return List<MerGoodsPriceListVo> */ @Override public List<MerGoodsPriceListVo> listGoodsPriceByGoodsId(String goodsIds){ return goodsMapper.listGoodsPriceByGoodsId(goodsIds); } } ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml
@@ -391,13 +391,34 @@ t_goods WHERE del_flag = 0 <if test="param.goodsType != null and param.goodsType != ''"> AND tg.goods_type = #{param.goodsType} AND goods_type = #{param.goodsType} </if> <if test="param.goodsName != null and param.goodsName != ''"> AND tg.goods_name LIKE CONCAT('%',#{param.goodsName},'%') AND goods_name LIKE CONCAT('%',#{param.goodsName},'%') </if> <if test="param.goodsNo != null and param.goodsNo != ''"> AND tg.goods_no LIKE CONCAT('%',#{param.goodsNo},'%') AND goods_no LIKE CONCAT('%',#{param.goodsNo},'%') </if> </select> <select id="listGoodsPriceByGoodsId" resultType="com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo"> SELECT tg.goods_id goodsId, tg.goods_name goodsName, tg.goods_no goodsNo, CASE tg.goods_type WHEN 1 THEN "周期" WHEN 2 THEN "服务" WHEN 3 THEN "体验" WHEN 4 THEN "单品" END goodsType, IFNULL(tsg.sales_price,tg.sales_price) salesPrice, tg.sales_price suggestSalesPrice, tg.goods_introduction goodsIntroduction, tg.goods_nurses goodsNurses FROM t_goods tg LEFT JOIN t_shop_goods tsg ON tsg.goods_id = tg.goods_id AND tsg.del_flag = 0 AND tsg.shop_id = #{shopId} WHERE tg.del_flag = 0 AND FIND_IN_SET(tg.goods_id,#{goodsIds}) > 0 </select> </mapper> ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerBirthdayController.java
@@ -2,6 +2,8 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.member.domain.dto.MerBirthdayEditDto; import com.ruoyi.member.domain.vo.MerBirthdayEditInfoVo; import com.ruoyi.member.domain.vo.MerBirthdayGetVo; import com.ruoyi.member.service.birthday.BirthdayCardService; import com.ruoyi.system.api.domain.dto.MerBaseDto; @@ -47,4 +49,31 @@ MerBirthdayGetVo birthdayGetVo = birthdayCardService.getMerShopBirthdayCard(merBaseDto.getShopId()); return R.ok(birthdayGetVo); } @RequestMapping(value = "/getMerShopBCEditInfo", method = RequestMethod.POST) @ApiOperation(value = "商户获取生日卡编辑信息") public R<MerBirthdayEditInfoVo> getMerShopBCEditInfo(@RequestBody MerBaseDto merBaseDto) { Long userId = SecurityUtils.getUserId(); merBaseDto.setUserId(userId); MerBirthdayEditInfoVo shopBCEditInfo = birthdayCardService.getMerShopBCEditInfo(merBaseDto.getShopId()); return R.ok(shopBCEditInfo); } @RequestMapping(value = "/editMerBirthdayCard", method = RequestMethod.POST) @ApiOperation(value = "商户编辑生日卡") public R editMerBirthdayCard(@RequestBody MerBirthdayEditDto merBirthdayEditDto) { Long userId = SecurityUtils.getUserId(); merBirthdayEditDto.setUserId(userId); birthdayCardService.editMerBirthdayCard(merBirthdayEditDto); return R.ok(); } @RequestMapping(value = "/toggleMerBirthdayCard", method = RequestMethod.POST) @ApiOperation(value = "商户开关生日卡") public R toggleMerBirthdayCard(@RequestBody MerBirthdayEditDto merBirthdayEditDto) { Long userId = SecurityUtils.getUserId(); merBirthdayEditDto.setUserId(userId); birthdayCardService.toggleMerBirthdayCard(merBirthdayEditDto); return R.ok(); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerCouponController.java
@@ -3,10 +3,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.member.domain.dto.MerCouponEditDto; import com.ruoyi.member.domain.dto.MerCouponPageDto; import com.ruoyi.member.domain.dto.MgtCouponListDto; import com.ruoyi.member.domain.vo.MerCouponGetVo; import com.ruoyi.member.domain.vo.MerCouponPageVo; import com.ruoyi.member.domain.vo.MgtCouponGetVo; import com.ruoyi.member.domain.vo.MgtCouponSimpleListVo; import com.ruoyi.member.service.coupon.CouponService; import com.ruoyi.system.api.domain.dto.MerBaseGetDto; import com.ruoyi.system.api.domain.dto.MerPageDto; import com.ruoyi.system.api.domain.dto.MgtBaseGetDto; import io.swagger.annotations.Api; @@ -49,7 +53,7 @@ @RequestMapping(value = "/pageShopMerCoupon", method = RequestMethod.POST) @ApiOperation(value = "商户分页获取商户优惠券列表") public R<Page<MerCouponPageVo>> pageShopMerCoupon(@RequestBody MerPageDto merPageDto) { public R<Page<MerCouponPageVo>> pageShopMerCoupon(@RequestBody MerCouponPageDto merPageDto) { Long userId = SecurityUtils.getUserId(); merPageDto.setUserId(userId); Page<MerCouponPageVo> page = new Page<>(); @@ -67,4 +71,29 @@ MerCouponGetVo couponGetVo = couponService.getMerCouponVo(mgtBaseGetDto.getId()); return R.ok(couponGetVo); } @RequestMapping(value = "/editMerCoupon", method = RequestMethod.POST) @ApiOperation(value = "商户编辑优惠券") public R editMerCoupon(@RequestBody MerCouponEditDto merCouponEditDto) { Long userId = SecurityUtils.getUserId(); merCouponEditDto.setUserId(userId); couponService.editMerCoupon(merCouponEditDto); return R.ok(); } @RequestMapping(value = "/deleteMerCoupon", method = RequestMethod.POST) @ApiOperation(value = "商户删除优惠券") public R deleteMerCoupon(@RequestBody MerBaseGetDto merBaseGetDto) { Long userId = SecurityUtils.getUserId(); merBaseGetDto.setUserId(userId); couponService.deleteMerCoupon(merBaseGetDto); return R.ok(); } @RequestMapping(value = "/listMerCouponSimpleVo", method = RequestMethod.POST) @ApiOperation(value = "获取优惠券选择列表") public R<List<MgtCouponSimpleListVo>> listMgtCouponSimpleVo(@RequestBody MgtCouponListDto mgtCouponListDto) { List<MgtCouponSimpleListVo> mgtCouponSimpleListVoList = couponService.listMgtCouponSimpleVo(mgtCouponListDto); return R.ok(mgtCouponSimpleListVoList); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerTotalController.java
New file @@ -0,0 +1,70 @@ package com.ruoyi.member.controller.business; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.member.domain.vo.MerMemberFixedTotalVo; import com.ruoyi.member.domain.vo.MerMemberRecommendTotalVo; import com.ruoyi.member.domain.vo.MerMemberSourceTotalVo; import com.ruoyi.member.domain.vo.MerMemberTotalVo; import com.ruoyi.member.service.member.MemberService; import com.ruoyi.system.api.domain.dto.MerTotalDto; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; /** * @ClassName MerTotalController * @Description TODO * @Author jqs * @Date 2023/7/3 15:58 * @Version 1.0 */ @Api(value = "商户端会员统计相关接口", tags = "商户端会员统计相关接口", description = "商户端会员统计相关接口") @RestController @RequestMapping("/mer/total") public class MerTotalController { @Resource private MemberService memberService; @RequestMapping(value = "/getMerMemberTotal", method = RequestMethod.POST) @ApiOperation(value = "获取商户会员人数统计") public R<MerMemberTotalVo> getMerMemberTotal(@RequestBody MerTotalDto merTotalDto) { Long userId = SecurityUtils.getUserId(); merTotalDto.setUserId(userId); MerMemberTotalVo memberTotal = memberService.getMerMemberTotal(merTotalDto); return R.ok(memberTotal); } @RequestMapping(value = "/getMerMemberFixedTotal", method = RequestMethod.POST) @ApiOperation(value = "获取商户会员固定统计") public R<MerMemberFixedTotalVo> getMerMemberFixedTotal(@RequestBody MerTotalDto merTotalDto) { Long userId = SecurityUtils.getUserId(); merTotalDto.setUserId(userId); MerMemberFixedTotalVo merMemberFixedTotal = memberService.getMerMemberFixedTotal(merTotalDto); return R.ok(merMemberFixedTotal); } @RequestMapping(value = "/getMerMemberSourceTotal", method = RequestMethod.POST) @ApiOperation(value = "获取商户会员人数统计") public R<MerMemberSourceTotalVo> getMerMemberSourceTotal(@RequestBody MerTotalDto merTotalDto) { Long userId = SecurityUtils.getUserId(); merTotalDto.setUserId(userId); MerMemberSourceTotalVo memberTotal = memberService.getMerMemberSourceTotal(merTotalDto); return R.ok(memberTotal); } @RequestMapping(value = "/getMerMemberRecommendTotal", method = RequestMethod.POST) @ApiOperation(value = "获取商户会员人数统计") public R<MerMemberRecommendTotalVo> getMerMemberRecommendTotal(@RequestBody MerTotalDto merTotalDto) { Long userId = SecurityUtils.getUserId(); merTotalDto.setUserId(userId); MerMemberRecommendTotalVo memberTotal = memberService.getMerMemberRecommendTotal(merTotalDto); return R.ok(memberTotal); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtCouponController.java
@@ -96,7 +96,7 @@ } @RequestMapping(value = "/getMgtCouponAuditVo", method = RequestMethod.POST) @ApiOperation(value = "平台获取优惠券编辑信息") @ApiOperation(value = "平台获取优惠券审核信息") public R<MgtCouponAuditGetVo> getMgtCouponAuditVo(@RequestBody MgtBaseGetDto mgtBaseGetDto) { Long userId = SecurityUtils.getUserId(); mgtBaseGetDto.setUserId(userId); ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerBirthdayEditDto.java
New file @@ -0,0 +1,27 @@ package com.ruoyi.member.domain.dto; import com.ruoyi.system.api.domain.dto.MerBaseDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @ClassName MerBirthdayEditDto * @Description TODO * @Author jqs * @Date 2023/7/3 14:03 * @Version 1.0 */ @Data public class MerBirthdayEditDto extends MerBaseDto { @ApiModelProperty(value = "生日卡状态1开启2关闭") private Integer cardStatus; @ApiModelProperty(value = "礼品列表") private List<MgtBirthdayGiftDto> mgtBirthdayGiftDtoList; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerCouponEditDto.java
New file @@ -0,0 +1,75 @@ package com.ruoyi.member.domain.dto; import com.ruoyi.system.api.domain.dto.MerBaseDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.Date; import java.util.List; /** * @ClassName MerCouponEditDto * @Description TODO * @Author jqs * @Date 2023/7/3 9:16 * @Version 1.0 */ @Data public class MerCouponEditDto extends MerBaseDto { @ApiModelProperty(value = "优惠券id 新增不传") private String couponId; @ApiModelProperty("优惠券类型1.满减2.折扣3.代金4.商品") private Integer couponType; @ApiModelProperty("优惠券名称") private String couponName; @ApiModelProperty(value = "发送类型1.手动领取2.全部用户3.会员用户4非会员用户5自定义") private Integer sendType; @ApiModelProperty("发送时间类型1立即2定时") private Integer sendTimeType; @ApiModelProperty("发送时间") private Date sendTime; @ApiModelProperty(value = "使用范围1.全场2.指定商品") private Integer useScope; @ApiModelProperty(value = "有效期类型1.时间段2.领取之日起") private Integer validTimeType; @ApiModelProperty(value = "有效开始时间") private Date validStartTime; @ApiModelProperty(value = "有效截止时间") private Date validEndTime; @ApiModelProperty(value = "有效期") private Integer validDay; @ApiModelProperty(value = "门槛金额") private BigDecimal moneyThreshold; @ApiModelProperty(value = "折扣金额") private BigDecimal discountMoney; @ApiModelProperty(value = "折扣百分比") private BigDecimal discountPercent; @ApiModelProperty(value = "领取限制数量 0为不限") private Integer limitNumber; @ApiModelProperty(value = "选择商品id集合") private List<String> relGoodsIdList; @ApiModelProperty(value = "关联用户id集合") private List<Long> relUserIdList; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MerCouponPageDto.java
New file @@ -0,0 +1,22 @@ package com.ruoyi.member.domain.dto; import com.ruoyi.system.api.domain.dto.MerPageDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @ClassName MerCouponPageDto * @Description TODO * @Author jqs * @Date 2023/7/3 14:38 * @Version 1.0 */ @Data public class MerCouponPageDto extends MerPageDto { @ApiModelProperty(name = "审核状态1申请中2审核通过3审核拒绝") private Integer auditStatus; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/dto/MgtBirthdayEditDto.java
@@ -16,22 +16,22 @@ @Data public class MgtBirthdayEditDto extends MgtBaseDto { @ApiModelProperty(value = "生日卡id 新增不传") private Long cardId; @ApiModelProperty(value = "商户id 平台不传") private Long shopId; @ApiModelProperty(value = "生日卡状态1开启2关闭") private Integer cardStatus; @ApiModelProperty(value = "适用地区标记1全部2指定") @ApiModelProperty(value = "适用地区标记1全部2指定 商户不传") private Integer areaFlag; @ApiModelProperty(value = "适用地区code集合 多个用,隔开") @ApiModelProperty(value = "适用地区code集合 多个用,隔开 商户不传") private String designatedArea; @ApiModelProperty(value = "适用店铺标记1全部2指定") @ApiModelProperty(value = "适用店铺标记1全部2指定 商户不传") private Integer shopFlag; @ApiModelProperty(value = "适用店铺 多个用,隔开") @ApiModelProperty(value = "适用店铺 多个用,隔开 商户不传") private String applicableShop; @ApiModelProperty(value = "礼品列表") ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerBirthdayEditInfoVo.java
New file @@ -0,0 +1,31 @@ package com.ruoyi.member.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @ClassName MerBirthdayEditInfoVo * @Description TODO * @Author jqs * @Date 2023/7/3 10:56 * @Version 1.0 */ @Data public class MerBirthdayEditInfoVo { @ApiModelProperty(value = "生日卡id") private Long cardId; @ApiModelProperty(value = "生日卡状态1开启2关闭") private Integer cardStatus; @ApiModelProperty(value = "礼品列表") private List<MgtBirthdayGiftVo> mgtBirthdayGiftVoList; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerBirthdayGetVo.java
@@ -13,6 +13,9 @@ @Data public class MerBirthdayGetVo { @ApiModelProperty(value = "生日卡状态1开启2关闭") private Integer cardStatus; @ApiModelProperty(value = "礼品描述") private String giftDesc; ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponGetVo.java
@@ -1,6 +1,7 @@ package com.ruoyi.member.domain.vo; import com.ruoyi.system.api.domain.dto.MerBaseDto; import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -60,14 +61,12 @@ @ApiModelProperty(value = "折扣百分比") private BigDecimal discountPercent; @ApiModelProperty(value = "领取限制数量 0为不限") private Integer limitNumber; @ApiModelProperty(value = "选择商品集合") private List<MgtCouponGoodsListVo> relGoodsList; private List<MerGoodsPriceListVo> relGoodsList; @ApiModelProperty(value = "关联类型1.用户管理筛选2.活动管理筛选") private Integer relationType; @ApiModelProperty(value = "关联活动id") private String relationActivityId; @ApiModelProperty(value = "关联用户集合") private List<MgtCouponMemberListVo> relUserList; ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponGoodsListVo.java
New file @@ -0,0 +1,43 @@ package com.ruoyi.member.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * @ClassName MerCouponGoodsListVo * @Description TODO * @Author jqs * @Date 2023/7/3 9:29 * @Version 1.0 */ @Data public class MerCouponGoodsListVo { @ApiModelProperty(value = "商品id") private String goodsId; @ApiModelProperty(value = "商品名称") private String goodsName; @ApiModelProperty(value = "商品编码") private String goodsNo; @ApiModelProperty(value = "商品类型1周期2服务3体验4单品") private String goodsType; @ApiModelProperty(value = "商品售价") private BigDecimal salesPrice; @ApiModelProperty(value = "商品建议售价") private BigDecimal suggestSalesPrice;; @ApiModelProperty(value = "商品简介") private String goodsIntroduction; @ApiModelProperty(value = "商品调理问题") private String goodsNurses; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerCouponPageVo.java
@@ -68,4 +68,6 @@ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; @ApiModelProperty("拒绝理由") private String auditReason; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberFixedTotalVo.java
New file @@ -0,0 +1,44 @@ package com.ruoyi.member.domain.vo; import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @ClassName MerMemberFixedTotalVo * @Description TODO * @Author jqs * @Date 2023/7/3 16:31 * @Version 1.0 */ @Data public class MerMemberFixedTotalVo { @ApiModelProperty(value = "男人") private Integer manTotal; @ApiModelProperty(value = "女人") private Integer womenTotal; @ApiModelProperty(value = "会员年龄key") private String[] ageKey; @ApiModelProperty(value = "会员年龄value") private Integer[] ageValue; @ApiModelProperty(value = "会员调理") private List<MgtMapIntTotalVo> nurseTotalVos; @ApiModelProperty(value = "商品类型") private List<MgtMapIntTotalVo> goodsTypeTotalVos; @ApiModelProperty(value = "活跃度") private List<MgtMapIntTotalVo> activenessList; @ApiModelProperty(value = "消费排行") private List<MgtMapIntTotalVo> memberPayList; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberRecommendTotalVo.java
New file @@ -0,0 +1,23 @@ package com.ruoyi.member.domain.vo; import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @ClassName MerMemberRecommendTotalVo * @Description TODO * @Author jqs * @Date 2023/7/3 16:36 * @Version 1.0 */ @Data public class MerMemberRecommendTotalVo { @ApiModelProperty(value = "推荐榜单") private List<MgtMapIntTotalVo> recommendList; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberSourceTotalVo.java
New file @@ -0,0 +1,21 @@ package com.ruoyi.member.domain.vo; import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @ClassName MerMemberSourceTotalVo * @Description TODO * @Author jqs * @Date 2023/7/3 16:34 * @Version 1.0 */ @Data public class MerMemberSourceTotalVo { @ApiModelProperty(value = "来源渠道") private List<MgtMapIntTotalVo> customerSourceList; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/vo/MerMemberTotalVo.java
New file @@ -0,0 +1,39 @@ package com.ruoyi.member.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @ClassName MerMemberTotalVo * @Description TODO * @Author jqs * @Date 2023/7/3 16:23 * @Version 1.0 */ @Data public class MerMemberTotalVo { @ApiModelProperty(value = "总会员") private Integer memberTotal; @ApiModelProperty(value = "线上来源") private Integer onlineTotal; @ApiModelProperty(value = "线下来源") private Integer offlineTotal; @ApiModelProperty(value = "转介绍") private Integer introduceTotal; @ApiModelProperty(value = "周期会员") private Integer cycleTotal; @ApiModelProperty(value = "体验会员") private Integer experienceTotal; @ApiModelProperty(value = "服务会员") private Integer serviceTotal; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/coupon/CouponMapper.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.member.domain.dto.MerCouponPageDto; import com.ruoyi.member.domain.dto.MgtCouponAuditPageDto; import com.ruoyi.member.domain.dto.MgtCouponListDto; import com.ruoyi.member.domain.dto.MgtCouponPageDto; @@ -77,12 +78,12 @@ List<MerCouponPageVo> pagePlatformMerCoupon(Page page, @Param("param")MerPageDto merPageDto); /** * @description 平台获取优惠券列表 * @description 获取商户优惠券列表 * @author jqs * @date 2023/6/30 16:53 * @param page * @param merPageDto * @return List<MerCouponPageVo> */ List<MerCouponPageVo> pageShopMerCoupon(Page page, @Param("param")MerPageDto merPageDto); List<MerCouponPageVo> pageShopMerCoupon(Page page, @Param("param") MerCouponPageDto merPageDto); } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java
@@ -6,10 +6,7 @@ import com.ruoyi.member.domain.dto.MerMemberPageDto; import com.ruoyi.member.domain.dto.MgtMemberPageDto; import com.ruoyi.member.domain.vo.*; import com.ruoyi.system.api.domain.dto.MgtActivityAgeDto; import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto; import com.ruoyi.system.api.domain.dto.MgtBaseShopDto; import com.ruoyi.system.api.domain.dto.MgtUserIdByKeywordDto; import com.ruoyi.system.api.domain.dto.*; import com.ruoyi.system.api.domain.poji.member.Member; import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo; import com.ruoyi.system.api.domain.vo.MgtPlTotalMemberTotalVo; @@ -96,7 +93,7 @@ * @param sendType * @return List<Long> */ List<Long> listIdBySendType(@Param("sendType")Integer sendType); List<Long> listIdBySendType(@Param("sendType")Integer sendType,@Param("shopId")Long shopId); /** * @description 通过ids获取用户简易返回 @@ -212,6 +209,7 @@ List<Long> listUserIdByAge(@Param("param")MgtActivityAgeDto mgtActivityAgeDto); /** * @description 会员人数统计 * @author jqs @@ -294,6 +292,79 @@ * @return List<Long> */ List<Long> listUserIdByShopId(@Param("shopIdList")List<Long> shopIdList); /** * @description * @author jqs * @date 2023/7/3 18:29 * @param merTotalDto * @return MerMemberTotalVo */ MerMemberTotalVo getMerMemberTotal(@Param("param")MerTotalDto merTotalDto); /** * @description 会员年龄分布统计 * @author jqs * @date 2023/6/19 15:26 * @param * @return MgtTotalMemberTotalVo */ MgtAgeTotalVo getMerMemberTotalAge(@Param("param") MerTotalDto merTotalDto); /** * @description 会员调理问题人数统计 * @author jqs * @date 2023/6/19 15:26 * @param * @return MgtTotalMemberTotalVo */ List<MgtMapIntTotalVo> getMerMemberTotalNurse(@Param("param") MerTotalDto merTotalDto); /** * @description 会员商品类型人数统计 * @author jqs * @date 2023/6/19 15:26 * @param * @return MgtTotalMemberTotalVo */ List<MgtMapIntTotalVo> getMerMemberTotalGoodsType(@Param("param") MerTotalDto merTotalDto); /** * @description 会员活跃度统计 * @param merTotalDto * @return Integer * @author jqs34 * @date 2023/6/19 21:24 */ Integer getMerMemberTotalActiveness(@Param("param") MerTotalDto merTotalDto); /** * @description 会员消费次数排名 * @author jqs * @date 2023/6/19 15:26 * @param * @return MgtTotalMemberTotalVo */ List<MgtMapIntTotalVo> getMerMemberPayRank(@Param("param") MerTotalDto merTotalDto); /** * @description 会员来源排名计 * @author jqs * @date 2023/6/19 15:26 * @param * @return MgtTotalMemberTotalVo */ List<MgtMapIntTotalVo> getMerMemberCustomerSourceRank(@Param("param") MerTotalDto merTotalDto); /** * @description 会员推荐排名 * @author jqs * @date 2023/7/3 19:16 * @param merTotalDto * @return List<MgtMapIntTotalVo> */ List<MgtMapIntTotalVo> getMerMemberRecommendRank(@Param("param") MerTotalDto merTotalDto); } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/birthday/BirthdayCardService.java
@@ -1,9 +1,11 @@ package com.ruoyi.member.service.birthday; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.member.domain.dto.MerBirthdayEditDto; import com.ruoyi.member.domain.dto.MgtBirthdayEditDto; import com.ruoyi.member.domain.dto.MgtBirthdayGetDto; import com.ruoyi.member.domain.pojo.birthday.BirthdayCard; import com.ruoyi.member.domain.vo.MerBirthdayEditInfoVo; import com.ruoyi.member.domain.vo.MerBirthdayGetVo; import com.ruoyi.member.domain.vo.MgtBirthdayGetVo; @@ -52,4 +54,31 @@ * @return MerBirthdayGetVo */ MerBirthdayGetVo getMerShopBirthdayCard(Long shopId); /** * @description 获取商户生日卡详情 * @author jqs * @date 2023/7/3 10:58 * @param shopId * @return MerBirthdayGetVo */ MerBirthdayEditInfoVo getMerShopBCEditInfo(Long shopId); /** * @description 商户编辑生日卡 * @author jqs * @date 2023/7/3 14:15 * @param merBirthdayEditDto * @return void */ void editMerBirthdayCard(MerBirthdayEditDto merBirthdayEditDto); /** * @description 开关生日卡成功 * @author jqs * @date 2023/7/3 14:27 * @param merBirthdayEditDto * @return void */ void toggleMerBirthdayCard(MerBirthdayEditDto merBirthdayEditDto); } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/coupon/CouponService.java
@@ -5,6 +5,7 @@ import com.ruoyi.member.domain.pojo.coupon.Coupon; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.member.domain.vo.*; import com.ruoyi.system.api.domain.dto.MerBaseGetDto; import com.ruoyi.system.api.domain.dto.MerPageDto; import com.ruoyi.system.api.domain.dto.MgtBaseGetDto; @@ -124,12 +125,30 @@ List<MerCouponPageVo> pagePlatformMerCoupon(Page page, MerPageDto merPageDto); /** * @description 平台获取优惠券列表 * @description 获取商户优惠券列表 * @author jqs * @date 2023/6/30 16:53 * @param page * @param merPageDto * @return List<MerCouponPageVo> */ List<MerCouponPageVo> pageShopMerCoupon(Page page, MerPageDto merPageDto); List<MerCouponPageVo> pageShopMerCoupon(Page page, MerCouponPageDto merPageDto); /** * @description 商户编辑优惠券 * @author jqs * @date 2023/7/3 9:21 * @param merCouponEditDto * @return void */ void editMerCoupon(MerCouponEditDto merCouponEditDto); /** * @description 商户删除优惠券 * @author jqs * @date 2023/7/3 15:04 * @param merBaseGetDto * @return void */ void deleteMerCoupon(MerBaseGetDto merBaseGetDto); } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/birthday/BirthdayCardServiceImpl.java
@@ -2,11 +2,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.member.domain.dto.MerBirthdayEditDto; import com.ruoyi.member.domain.dto.MgtBirthdayEditDto; import com.ruoyi.member.domain.dto.MgtBirthdayGetDto; import com.ruoyi.member.domain.dto.MgtBirthdayGiftDto; import com.ruoyi.member.domain.pojo.birthday.BirthdayCard; import com.ruoyi.member.domain.pojo.birthday.BirthdayGift; import com.ruoyi.member.domain.vo.MerBirthdayEditInfoVo; import com.ruoyi.member.domain.vo.MerBirthdayGetVo; import com.ruoyi.member.domain.vo.MgtBirthdayGetVo; import com.ruoyi.member.domain.vo.MgtBirthdayGiftVo; @@ -47,57 +49,83 @@ */ @Override public void editMgtBirthdayCard(MgtBirthdayEditDto mgtBirthdayEditDto){ if(mgtBirthdayEditDto.getCardId()!=null){ BirthdayCard birthdayCardOld = this.getById(mgtBirthdayEditDto.getCardId()); // 创建查询包装器 LambdaQueryWrapper<BirthdayCard> queryWrapper = new LambdaQueryWrapper<>(); // 添加查询条件:删除标志为0 queryWrapper.eq(BirthdayCard::getDelFlag,0); // 如果店铺ID不为空,则添加查询条件:店铺ID if(mgtBirthdayEditDto.getShopId()!=null){ queryWrapper.eq(BirthdayCard::getShopId,mgtBirthdayEditDto.getShopId()); }else{ // 否则,添加查询条件:店铺ID为0 queryWrapper.eq(BirthdayCard::getShopId,0); } // 获取查询结果 BirthdayCard birthdayCardOld = this.getOne(queryWrapper,false); // 如果查询结果不为空,则进行更新操作 if (birthdayCardOld!=null) { // 设置删除标志为1 birthdayCardOld.setDelFlag(1); // 保存或更新数据 this.saveOrUpdate(birthdayCardOld); // 删除旧的生日卡的礼物 birthdayGiftService.deleteByCardId(birthdayCardOld.getCardId()); } // 创建新的生日卡 BirthdayCard birthdayCard = new BirthdayCard(); birthdayCard.setDelFlag(0); birthdayCard.setShopId(0L); birthdayCard.setCardStatus(mgtBirthdayEditDto.getCardStatus()); // 根据卡状态设置开启或关闭时间 if(mgtBirthdayEditDto.getCardStatus()==1){ birthdayCard.setOpenTime(new Date()); }else{ birthdayCard.setCloseTime(new Date()); } // 设置创建时间 birthdayCard.setCreateTime(new Date()); birthdayCard.setAreaFlag(mgtBirthdayEditDto.getAreaFlag()); if(mgtBirthdayEditDto.getAreaFlag()==2){ birthdayCard.setDesignatedArea(mgtBirthdayEditDto.getDesignatedArea()); }else{ birthdayCard.setDesignatedArea(null); // 如果店铺ID不为空,则进行相关设置 if(mgtBirthdayEditDto.getShopId()!=null){ birthdayCard.setAreaFlag(mgtBirthdayEditDto.getAreaFlag()); if(mgtBirthdayEditDto.getAreaFlag()==2){ birthdayCard.setDesignatedArea(mgtBirthdayEditDto.getDesignatedArea()); }else{ birthdayCard.setDesignatedArea(null); } birthdayCard.setShopFlag(mgtBirthdayEditDto.getShopFlag()); if(mgtBirthdayEditDto.getShopFlag()==2){ birthdayCard.setApplicableShop(mgtBirthdayEditDto.getApplicableShop()); }else{ birthdayCard.setApplicableShop(null); } } birthdayCard.setShopFlag(mgtBirthdayEditDto.getShopFlag()); if(mgtBirthdayEditDto.getShopFlag()==2){ birthdayCard.setApplicableShop(mgtBirthdayEditDto.getApplicableShop()); }else{ birthdayCard.setApplicableShop(null); } // 设置创建用户ID birthdayCard.setCreateUserId(mgtBirthdayEditDto.getUserId()); // 保存或更新数据 this.saveOrUpdate(birthdayCard); // 获取生日礼物列表 List<MgtBirthdayGiftDto> mgtBirthdayGiftDtoList = mgtBirthdayEditDto.getMgtBirthdayGiftDtoList(); List<BirthdayGift> birthdayGiftList = new ArrayList<>(); if(!mgtBirthdayGiftDtoList.isEmpty()){ mgtBirthdayGiftDtoList.forEach( dto->{ BirthdayGift birthdayGift = new BirthdayGift(); birthdayGift.setDelFlag(0); birthdayGift.setCardId(birthdayCard.getCardId()); birthdayGift.setGiftType(dto.getGiftType()); birthdayGift.setCouponId(dto.getCouponId()); birthdayGift.setCouponName(dto.getCouponName()); birthdayGift.setCouponNumber(dto.getCouponNumber()); birthdayGift.setGoodsId(dto.getGoodsId()); birthdayGift.setGoodsName(dto.getGoodsName()); birthdayGift.setGoodsNumber(dto.getGoodsNumber()); birthdayGift.setGiftName(dto.getGiftName()); birthdayGift.setGiftNumber(dto.getGiftNumber()); birthdayGift.setMoney(dto.getMoney()); birthdayGift.setWinningProbability(dto.getWinningProbability()); birthdayGiftList.add(birthdayGift); } ); // 如果生日礼物列表不为空,则进行相关设置 if(!mgtBirthdayGiftDtoList.isEmpty()) { mgtBirthdayGiftDtoList.forEach(dto -> { BirthdayGift birthdayGift = new BirthdayGift(); birthdayGift.setDelFlag(0); birthdayGift.setCardId(birthdayCard.getCardId()); birthdayGift.setGiftType(dto.getGiftType()); birthdayGift.setCouponId(dto.getCouponId()); birthdayGift.setCouponName(dto.getCouponName()); birthdayGift.setCouponNumber(dto.getCouponNumber()); birthdayGift.setGoodsId(dto.getGoodsId()); birthdayGift.setGoodsName(dto.getGoodsName()); birthdayGift.setGoodsNumber(dto.getGoodsNumber()); birthdayGift.setGiftName(dto.getGiftName()); birthdayGift.setGiftNumber(dto.getGiftNumber()); birthdayGift.setMoney(dto.getMoney()); birthdayGift.setWinningProbability(dto.getWinningProbability()); birthdayGiftList.add(birthdayGift); }); // 批量保存生日礼物 birthdayGiftService.saveBatch(birthdayGiftList); } } @@ -185,13 +213,15 @@ giftDesc = giftSj.toString(); birthdayGetVo.setGiftDesc(giftDesc); } }else{ birthdayGetVo.setCardStatus(2); } return birthdayGetVo; } /** * @description 获取平台生日卡 * @description 获取商户生日卡 * @author jqs * @date 2023/7/1 15:25 * @param @@ -242,7 +272,126 @@ giftDesc = giftSj.toString(); birthdayGetVo.setGiftDesc(giftDesc); } birthdayGetVo.setCardStatus(birthdayCard.getCardStatus()); }else{ birthdayGetVo.setCardStatus(2); } return birthdayGetVo; } /** * @description 获取商户生日卡详情 * @author jqs * @date 2023/7/3 10:58 * @param shopId * @return MerBirthdayGetVo */ @Override public MerBirthdayEditInfoVo getMerShopBCEditInfo(Long shopId){ MerBirthdayEditInfoVo merBirthdayEditInfoVo = new MerBirthdayEditInfoVo(); LambdaQueryWrapper<BirthdayCard> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(BirthdayCard::getDelFlag,0); queryWrapper.eq(BirthdayCard::getShopId,shopId); BirthdayCard birthdayCard = this.getOne(queryWrapper,false); if(birthdayCard!=null){ merBirthdayEditInfoVo.setCardId(birthdayCard.getCardId()); merBirthdayEditInfoVo.setCardStatus(birthdayCard.getCardStatus()); List<MgtBirthdayGiftVo> mgtBirthdayGiftVoList = birthdayGiftService.listGiftVoByCardId(birthdayCard.getCardId()); merBirthdayEditInfoVo.setMgtBirthdayGiftVoList(mgtBirthdayGiftVoList); } return merBirthdayEditInfoVo; } /** * @description 商户编辑生日卡 * @author jqs * @date 2023/7/3 14:15 * @param merBirthdayEditDto * @return void */ @Override public void editMerBirthdayCard(MerBirthdayEditDto merBirthdayEditDto){ // 创建查询包装器 LambdaQueryWrapper<BirthdayCard> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(BirthdayCard::getDelFlag,0); queryWrapper.eq(BirthdayCard::getShopId,merBirthdayEditDto.getShopId()); // 获取查询结果 BirthdayCard birthdayCardOld = this.getOne(queryWrapper,false); // 如果查询结果不为空,则进行更新操作 if (birthdayCardOld!=null) { // 设置删除标志为1 birthdayCardOld.setDelFlag(1); // 保存或更新数据 this.saveOrUpdate(birthdayCardOld); // 删除旧的生日卡的礼物 birthdayGiftService.deleteByCardId(birthdayCardOld.getCardId()); } // 创建新的生日卡 BirthdayCard birthdayCard = new BirthdayCard(); birthdayCard.setDelFlag(0); birthdayCard.setShopId(0L); birthdayCard.setCardStatus(merBirthdayEditDto.getCardStatus()); // 根据卡状态设置开启或关闭时间 if(merBirthdayEditDto.getCardStatus()==1){ birthdayCard.setOpenTime(new Date()); }else{ birthdayCard.setCloseTime(new Date()); } // 设置创建时间 birthdayCard.setCreateTime(new Date()); // 设置创建用户ID birthdayCard.setCreateUserId(merBirthdayEditDto.getUserId()); // 保存或更新数据 this.saveOrUpdate(birthdayCard); // 获取生日礼物列表 List<MgtBirthdayGiftDto> mgtBirthdayGiftDtoList = merBirthdayEditDto.getMgtBirthdayGiftDtoList(); List<BirthdayGift> birthdayGiftList = new ArrayList<>(); // 如果生日礼物列表不为空,则进行相关设置 if(!mgtBirthdayGiftDtoList.isEmpty()) { mgtBirthdayGiftDtoList.forEach(dto -> { BirthdayGift birthdayGift = new BirthdayGift(); birthdayGift.setDelFlag(0); birthdayGift.setCardId(birthdayCard.getCardId()); birthdayGift.setGiftType(dto.getGiftType()); birthdayGift.setCouponId(dto.getCouponId()); birthdayGift.setCouponName(dto.getCouponName()); birthdayGift.setCouponNumber(dto.getCouponNumber()); birthdayGift.setGoodsId(dto.getGoodsId()); birthdayGift.setGoodsName(dto.getGoodsName()); birthdayGift.setGoodsNumber(dto.getGoodsNumber()); birthdayGift.setGiftName(dto.getGiftName()); birthdayGift.setGiftNumber(dto.getGiftNumber()); birthdayGift.setMoney(dto.getMoney()); birthdayGift.setWinningProbability(dto.getWinningProbability()); birthdayGiftList.add(birthdayGift); }); // 批量保存生日礼物 birthdayGiftService.saveBatch(birthdayGiftList); } } /** * @description 开关生日卡成功 * @author jqs * @date 2023/7/3 14:27 * @param merBirthdayEditDto * @return void */ @Override public void toggleMerBirthdayCard(MerBirthdayEditDto merBirthdayEditDto){ // 创建查询包装器 LambdaQueryWrapper<BirthdayCard> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(BirthdayCard::getDelFlag,0); queryWrapper.eq(BirthdayCard::getShopId,merBirthdayEditDto.getShopId()); // 获取查询结果 BirthdayCard birthdayCard = this.getOne(queryWrapper,false); if(birthdayCard==null){ birthdayCard = new BirthdayCard(); birthdayCard.setDelFlag(0); birthdayCard.setCreateTime(new Date()); birthdayCard.setCreateUserId(merBirthdayEditDto.getUserId()); } birthdayCard.setCardStatus(merBirthdayEditDto.getCardStatus()); this.saveOrUpdate(birthdayCard); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
@@ -13,6 +13,7 @@ import com.ruoyi.member.domain.pojo.coupon.CouponRelGoods; import com.ruoyi.member.domain.pojo.coupon.CouponRelUser; import com.ruoyi.member.domain.pojo.coupon.CouponTotal; import com.ruoyi.system.api.domain.dto.MerBaseGetDto; import com.ruoyi.system.api.domain.dto.MerPageDto; import com.ruoyi.system.api.domain.poji.member.MemberCoupon; import com.ruoyi.member.domain.vo.*; @@ -26,6 +27,7 @@ import com.ruoyi.system.api.constant.AppErrorConstant; import com.ruoyi.system.api.domain.dto.MgtBaseGetDto; import com.ruoyi.system.api.domain.poji.goods.Goods; import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo; import com.ruoyi.system.api.service.RemoteActivityService; import com.ruoyi.system.api.service.RemoteGoodsService; import org.springframework.scheduling.annotation.Async; @@ -208,37 +210,9 @@ String relGoodsIds = coupon.getRelGoodsIds(); if(StringUtils.isNotBlank(relGoodsIds)){ //获取指定商品列表 List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(relGoodsIds).getData(); List<MerGoodsPriceListVo> goodsList = remoteGoodsService.listGoodsPriceByGoodsId(relGoodsIds).getData(); if(!goodsList.isEmpty()){ //转换为返回对象 List<MgtCouponGoodsListVo> relGoodsList = new ArrayList<>(); MgtCouponGoodsListVo mgtCouponGoodsListVo; for(Goods goods : goodsList){ mgtCouponGoodsListVo = new MgtCouponGoodsListVo(); mgtCouponGoodsListVo.setGoodsId(goods.getGoodsId()); mgtCouponGoodsListVo.setGoodsName(goods.getGoodsName()); mgtCouponGoodsListVo.setGoodsNo(goods.getGoodsNo()); //商品类型1周期2服务3体验4单品 switch (goods.getGoodsType()){ case 1: mgtCouponGoodsListVo.setGoodsType("周期"); break; case 2: mgtCouponGoodsListVo.setGoodsType("服务"); break; case 3: mgtCouponGoodsListVo.setGoodsType("体验"); break; case 4: mgtCouponGoodsListVo.setGoodsType("单品"); break; default: break; } mgtCouponGoodsListVo.setSalesPrice(goods.getSalesPrice()); relGoodsList.add(mgtCouponGoodsListVo); } merCouponGetVo.setRelGoodsList(relGoodsList); merCouponGetVo.setRelGoodsList(goodsList); } } } @@ -359,8 +333,12 @@ Date nowTime = new Date(); Integer sendType = coupon.getSendType(); List<Long> userIdList = new ArrayList<>(); Long shopId = null; if(coupon.getCouponFrom()==2 && sendType==3){ shopId = coupon.getShopId(); } if(sendType >= 2 && sendType <= 4){ userIdList = memberService.listIdBySendType(sendType); userIdList = memberService.listIdBySendType(sendType,shopId); }else if(sendType == 5){ //关联类型1.用户管理筛选2.活动管理筛选 if(coupon.getRelationType()==2){ @@ -691,7 +669,7 @@ } /** * @description 平台获取优惠券列表 * @description 获取商户优惠券列表 * @author jqs * @date 2023/6/30 16:53 * @param page @@ -699,7 +677,7 @@ * @return List<MerCouponPageVo> */ @Override public List<MerCouponPageVo> pageShopMerCoupon(Page page, MerPageDto merPageDto){ public List<MerCouponPageVo> pageShopMerCoupon(Page page, MerCouponPageDto merPageDto){ List<MerCouponPageVo> couponPageVoList = couponMapper.pageShopMerCoupon(page, merPageDto); //处理使用限制和有效期 if(couponPageVoList!=null&&!couponPageVoList.isEmpty()){ @@ -747,4 +725,111 @@ } return couponPageVoList; } /** * @description 商户编辑优惠券 * @author jqs * @date 2023/7/3 9:21 * @param merCouponEditDto * @return void */ @Override public void editMerCoupon(MerCouponEditDto merCouponEditDto){ //编辑优惠券 Coupon coupon; CouponTotal couponTotal; if(StringUtils.isNotBlank(merCouponEditDto.getCouponId())){ coupon = this.getById(merCouponEditDto.getCouponId()); if(coupon.getAuditStatus()!=3){ throw new ServiceException(AppErrorConstant.COUPON_AUDIT_EDIT); } couponRelUserService.deleteCouponRelByCouponId(coupon.getCouponId()); couponRelGoodsService.deleteCouponRelByCouponId(coupon.getCouponId()); coupon.setCouponStatus(1); }else{ coupon = new Coupon(); String couponId = IdUtils.simpleUUID(); coupon.setCouponId(couponId); coupon.setDelFlag(0); coupon.setShopId(merCouponEditDto.getShopId()); coupon.setCouponStatus(1); coupon.setCreateTime(new Date()); coupon.setCreateUserId(merCouponEditDto.getUserId()); coupon.setCouponFrom(2); //创建优惠券统计 couponTotal = new CouponTotal(); couponTotal.setCouponId(couponId); couponTotal.setSendCount(0); couponTotal.setSendUserCount(0); couponTotalService.save(couponTotal); } //优惠券赋值 coupon.setAuditStatus(1); coupon.setCouponType(merCouponEditDto.getCouponType()); coupon.setCouponName(merCouponEditDto.getCouponName()); coupon.setSendType(merCouponEditDto.getSendType()); coupon.setSendTimeType(merCouponEditDto.getSendTimeType()); coupon.setSendTime(merCouponEditDto.getSendTime()); coupon.setMoneyThreshold(merCouponEditDto.getMoneyThreshold()); coupon.setDiscountMoney(merCouponEditDto.getDiscountMoney()); coupon.setDiscountPercent(merCouponEditDto.getDiscountPercent()); coupon.setUseScope(merCouponEditDto.getUseScope()); coupon.setValidTimeType(merCouponEditDto.getValidTimeType()); coupon.setValidStartTime(merCouponEditDto.getValidStartTime()); coupon.setValidEndTime(merCouponEditDto.getValidEndTime()); coupon.setValidDay(merCouponEditDto.getValidDay()); coupon.setUpdateTime(new Date()); coupon.setUpdateUserId(merCouponEditDto.getUserId()); coupon.setRelationType(1); //判断是否指定商品 if(coupon.getUseScope()==2&&!merCouponEditDto.getRelGoodsIdList().isEmpty()){ List<String> relGoodsIdList = merCouponEditDto.getRelGoodsIdList(); List<CouponRelGoods> couponRelGoodsList = relGoodsIdList.stream() .map(str -> { CouponRelGoods couponRelGoods = new CouponRelGoods(); couponRelGoods.setDelFlag(0); couponRelGoods.setCouponId(coupon.getCouponId()); couponRelGoods.setGoodsId(str); return couponRelGoods; }) .collect(Collectors.toList()); couponRelGoodsService.saveBatch(couponRelGoodsList); String relGoodsIds = relGoodsIdList.stream().collect(Collectors.joining(",")); coupon.setRelGoodsIds(relGoodsIds); } //判断是否指定用户 List<Long> relUserIdList = null; if(coupon.getSendType()==5&&coupon.getRelationType()==1&&!merCouponEditDto.getRelUserIdList().isEmpty()){ relUserIdList = merCouponEditDto.getRelUserIdList(); List<CouponRelUser> couponRelUserList = relUserIdList.stream() .map(str -> { CouponRelUser couponRelUser = new CouponRelUser(); couponRelUser.setDelFlag(0); couponRelUser.setCouponId(coupon.getCouponId()); couponRelUser.setUserId(str); return couponRelUser; }) .collect(Collectors.toList()); couponRelUserService.saveBatch(couponRelUserList); } this.saveOrUpdate(coupon); } /** * @description 商户删除优惠券 * @author jqs * @date 2023/7/3 15:04 * @param merBaseGetDto * @return void */ @Override public void deleteMerCoupon(MerBaseGetDto merBaseGetDto){ Coupon coupon = this.getById(merBaseGetDto.getId()); coupon.setCouponStatus(-1); coupon.setDelFlag(1); coupon.setUpdateUserId(merBaseGetDto.getUserId()); coupon.setUpdateTime(new Date()); this.saveOrUpdate(coupon); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -1002,9 +1002,9 @@ * @date 2023/6/13 17:53 */ @Override public List<Long> listIdBySendType(Integer sendType) { public List<Long> listIdBySendType(Integer sendType,Long shopId) { //1.手动领取2.全部用户3.会员用户4非会员用户5自定义 return memberMapper.listIdBySendType(sendType); return memberMapper.listIdBySendType(sendType,shopId); } /** @@ -1360,4 +1360,130 @@ } memberTotalService.saveOrUpdate(memberTotal); } /** * @description 商户获取会员统计 * @author jqs * @date 2023/7/3 17:16 * @param merTotalDto * @return MerMemberTotalVo */ @Override public MerMemberTotalVo getMerMemberTotal(MerTotalDto merTotalDto){ if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){ List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); merTotalDto.setShopIdList(shopIdList); merTotalDto.setShopId(null); } MerMemberTotalVo merMemberTotalVo = memberMapper.getMerMemberTotal(merTotalDto); return merMemberTotalVo; } /** * @description 商户获取会员固定统计 * @author jqs * @date 2023/7/3 18:34 * @param merTotalDto * @return MerMemberFixedTotalVo */ @Override public MerMemberFixedTotalVo getMerMemberFixedTotal(MerTotalDto merTotalDto){ MerMemberFixedTotalVo memberFixedTotalVo = new MerMemberFixedTotalVo(); Date nowDay = DateUtils.getNowDate(); if(merTotalDto.getShopAllFlag()!=null&&merTotalDto.getShopAllFlag()==1){ List<Long> shopIdList = remoteShopService.listShopIdByShopId(merTotalDto.getShopId()).getData(); merTotalDto.setShopIdList(shopIdList); merTotalDto.setShopId(null); } MgtAgeTotalVo mgtAgeTotalVo = memberMapper.getMerMemberTotalAge(merTotalDto); // 年龄段数组 String[] ageKey = {"<20", "21-30", "31-40", "41-50", ">50"}; // 不同年龄段的会员数数组 Integer[] ageValue = {mgtAgeTotalVo.getTenAge(), mgtAgeTotalVo.getTwentyAge(), mgtAgeTotalVo.getThirtyAge(), mgtAgeTotalVo.getFortyAge(), mgtAgeTotalVo.getFiftyAge()}; // 设置年龄段数组和不同年龄段的会员数数组 memberFixedTotalVo.setAgeKey(ageKey); memberFixedTotalVo.setAgeValue(ageValue); // 获取不同护理类型的会员数 List<MgtMapIntTotalVo> nurseTotalVos = memberMapper.getMerMemberTotalNurse(merTotalDto); if (nurseTotalVos != null && nurseTotalVos.size() > 0) { nurseTotalVos = listRemoveNull(nurseTotalVos); memberFixedTotalVo.setNurseTotalVos(nurseTotalVos); } // 获取不同商品类型的会员数 List<MgtMapIntTotalVo> goodsTypeTotalVos = memberMapper.getMerMemberTotalGoodsType(merTotalDto); if (goodsTypeTotalVos != null && goodsTypeTotalVos.size() > 0) { goodsTypeTotalVos = listRemoveNull(goodsTypeTotalVos); memberFixedTotalVo.setGoodsTypeTotalVos(goodsTypeTotalVos); } // 获取不同活跃度的会员数 List<Activeness> activenessList = remoteConfigService.listActiveness().getData(); if (activenessList != null && !activenessList.isEmpty()) { Activeness activeness; String actStartDate; String actEndDate; Integer count; List<MgtMapIntTotalVo> MgtMapIntTotalVoList = new ArrayList<>(); MgtMapIntTotalVo MgtMapIntTotalVo; // 遍历不同活跃度列表,设置活跃度数组和对应的会员数数组 for (int i = 0; i < activenessList.size(); i++) { activeness = activenessList.get(i); actStartDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getEndDay())); actEndDate = DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.addDays(nowDay, activeness.getStartDay())); merTotalDto.setStartDate(actStartDate); merTotalDto.setEndDate(actEndDate); count = memberMapper.getMerMemberTotalActiveness(merTotalDto); MgtMapIntTotalVo = new MgtMapIntTotalVo(); MgtMapIntTotalVo.setMapKey(activeness.getActivenessName()); MgtMapIntTotalVo.setMapValue(count); MgtMapIntTotalVoList.add(MgtMapIntTotalVo); } memberFixedTotalVo.setActivenessList(MgtMapIntTotalVoList); } //获取会员消费排名 List<MgtMapIntTotalVo> memberPayList = memberMapper.getMerMemberPayRank(merTotalDto); if (memberPayList != null && memberPayList.size() > 0) { memberPayList = listRemoveNull(memberPayList); memberFixedTotalVo.setMemberPayList(memberPayList); } return memberFixedTotalVo; } /** * @description 商会获取会员来源统计 * @author jqs * @date 2023/7/3 19:09 * @param merTotalDto * @return MerMemberSourceTotalVo */ @Override public MerMemberSourceTotalVo getMerMemberSourceTotal(MerTotalDto merTotalDto){ MerMemberSourceTotalVo memberSourceTotalVo = new MerMemberSourceTotalVo(); //获取来源渠道排名 List<MgtMapIntTotalVo> customerSourceList = memberMapper.getMerMemberCustomerSourceRank(merTotalDto); if (customerSourceList != null && customerSourceList.size() > 0) { customerSourceList = listRemoveNull(customerSourceList); memberSourceTotalVo.setCustomerSourceList(customerSourceList); } return memberSourceTotalVo; } /** * @description 商会获取会员推荐排名 * @author jqs * @date 2023/7/3 19:14 * @param merTotalDto * @return MerMemberRecommendTotalVo */ @Override public MerMemberRecommendTotalVo getMerMemberRecommendTotal(MerTotalDto merTotalDto){ MerMemberRecommendTotalVo memberRecommendTotalVo = new MerMemberRecommendTotalVo(); //获取会员推荐排名 List<MgtMapIntTotalVo> recommendList = memberMapper.getMerMemberRecommendRank(merTotalDto); if (recommendList != null && recommendList.size() > 0) { recommendList = listRemoveNull(recommendList); memberRecommendTotalVo.setRecommendList(recommendList); } return memberRecommendTotalVo; } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
@@ -193,7 +193,7 @@ * @param sendType * @return List<Long> */ List<Long> listIdBySendType(Integer sendType); List<Long> listIdBySendType(Integer sendType,Long shopId); /** * @description 通过ids获取用户简易返回 @@ -276,4 +276,40 @@ * @return void */ void changeMemberTotal(MemberTotalChangeDto memberTotalChangeDto); /** * @description 商户获取会员统计 * @author jqs * @date 2023/7/3 17:16 * @param merTotalDto * @return MerMemberTotalVo */ MerMemberTotalVo getMerMemberTotal(MerTotalDto merTotalDto); /** * @description 商户获取会员固定统计 * @author jqs * @date 2023/7/3 18:34 * @param merTotalDto * @return MerMemberFixedTotalVo */ MerMemberFixedTotalVo getMerMemberFixedTotal(MerTotalDto merTotalDto); /** * @description 商会获取会员来源统计 * @author jqs * @date 2023/7/3 19:09 * @param merTotalDto * @return MerMemberSourceTotalVo */ MerMemberSourceTotalVo getMerMemberSourceTotal(MerTotalDto merTotalDto); /** * @description 商会获取会员推荐排名 * @author jqs * @date 2023/7/3 19:14 * @param merTotalDto * @return MerMemberRecommendTotalVo */ MerMemberRecommendTotalVo getMerMemberRecommendTotal(MerTotalDto merTotalDto); } ruoyi-modules/ruoyi-member/src/main/resources/mapper/coupon/CouponMapper.xml
@@ -330,10 +330,14 @@ tc.money_threshold moneyThreshold, tc.discount_money discountMoney, tc.discount_percent discountPercent, tc.create_time createTime tc.create_time createTime, tc.audit_reason auditReason FROM t_coupon tc LEFT JOIN t_coupon_total tct ON tc.coupon_id = tct.coupon_id WHERE tc.del_flag = 0 AND tc.coupon_status = 2 AND tc.coupon_from = 2 AND tc.shop_id = #{param.shopId} <if test="param.auditStatus != null and param.auditStatus != ''"> AND tc.audit_status = #{param.auditStatus} </if> </select> ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
@@ -320,6 +320,9 @@ <if test="sendType != null and sendType == 4"> AND tm.binding_flag = 0 </if> <if test="shopId != null and shopId != ''"> AND tm.relation_shop_id = #{shopId} </if> </select> <select id="listSimpleVoByIds" resultType="com.ruoyi.system.api.domain.vo.MgtSimpleMemberVo"> @@ -422,7 +425,7 @@ AND create_time <= #{param.endDate} </if> ) x WHERE member_nurse != '' WHERE member_nurse IS NOT NULL OR member_nurse != '' GROUP BY member_nurse </select> @@ -442,7 +445,7 @@ AND create_time <= #{param.endDate} </if> ) x WHERE goods_type != '' WHERE goods_type IS NOT NULL OR goods_type != '' GROUP BY goods_type </select> @@ -578,7 +581,7 @@ AND create_time <= #{param.endDate} </if> ) x WHERE member_nurse != '' WHERE member_nurse IS NOT NULL OR member_nurse != '' GROUP BY member_nurse </select> @@ -601,7 +604,7 @@ AND create_time <= #{param.endDate} </if> ) x WHERE goods_type != '' WHERE goods_type IS NOT NULL OR goods_type != '' GROUP BY goods_type </select> @@ -701,4 +704,207 @@ </foreach> </if> </select> <select id="getMerMemberTotal" resultType="com.ruoyi.member.domain.vo.MerMemberTotalVo"> SELECT COUNT(member_id) memberTotal, SUM(CASE WHEN customer_source = "小程序" THEN 1 ELSE 0 END) onlineTotal, SUM(CASE WHEN customer_source = "小程序" THEN 0 ELSE 1 END) offlineTotal, 0 introduceTotal, SUM(CASE WHEN goods_type LIKE "%周期%" THEN 1 ELSE 0 END) cycleTotal, SUM(CASE WHEN goods_type LIKE "%体验%" THEN 1 ELSE 0 END) experienceTotal, SUM(CASE WHEN goods_type LIKE "%服务%" THEN 1 ELSE 0 END) serviceTotal FROM t_member WHERE del_flag = 0 AND binding_flag = 1 <if test="param.shopId != null and param.shopId != ''"> AND relation_shop_id = #{param.shopId} </if> <if test="param.shopIdList != null and param.shopIdList.size() > 0"> AND relation_shop_id IN <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> #{item} </foreach> </if> <if test="param.startDate!=null and param.startDate!=''"> AND create_time >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND create_time <= #{param.endDate} </if> </select> <select id="getMerMemberTotalAge" resultType="com.ruoyi.member.domain.vo.MgtAgeTotalVo"> SELECT SUM(CASE WHEN gender = 0 THEN 1 ELSE 0 END) manTotal, SUM(CASE WHEN gender = 1 THEN 1 ELSE 0 END) womenTotal, SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20 THEN 1 ELSE 0 END) AS tenAge, SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 21 AND 30 THEN 1 ELSE 0 END) AS twentyAge, SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 31 AND 40 THEN 1 ELSE 0 END) AS ThirtyAge, SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 41 AND 50 THEN 1 ELSE 0 END) AS fortyAge, SUM(CASE WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) >= 51 THEN 1 ELSE 0 END) AS fiftyAge FROM t_member WHERE del_flag = 0 AND binding_flag = 1 <if test="param.shopId != null and param.shopId != ''"> AND relation_shop_id = #{param.shopId} </if> <if test="param.shopIdList != null and param.shopIdList.size() > 0"> AND relation_shop_id IN <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> #{item} </foreach> </if> <if test="param.startDate!=null and param.startDate!=''"> AND create_time >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND create_time <= #{param.endDate} </if> </select> <select id="getMerMemberTotalNurse" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo"> SELECT member_nurse mapKey, COUNT(*) mapValue FROM ( SELECT member_id, SUBSTRING_INDEX(SUBSTRING_INDEX(member_nurse, ',', numbers.n), ',', -1) member_nurse FROM (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10) numbers INNER JOIN t_member ON CHAR_LENGTH(member_nurse) - CHAR_LENGTH(REPLACE(member_nurse, ',', '')) >= numbers.n - 1 <if test="param.shopId != null and param.shopId != ''"> AND relation_shop_id = #{param.shopId} </if> <if test="param.shopIdList != null and param.shopIdList.size() > 0"> AND relation_shop_id IN <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> #{item} </foreach> </if> <if test="param.startDate!=null and param.startDate!=''"> AND create_time >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND create_time <= #{param.endDate} </if> ) x WHERE member_nurse IS NOT NULL OR member_nurse != '' GROUP BY member_nurse </select> <select id="getMerMemberTotalGoodsType" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo"> SELECT goods_type mapKey, COUNT(*) mapValue FROM ( SELECT member_id, SUBSTRING_INDEX(SUBSTRING_INDEX(goods_type, ',', numbers.n), ',', -1) goods_type FROM (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) numbers INNER JOIN t_member ON CHAR_LENGTH(goods_type) - CHAR_LENGTH(REPLACE(goods_type, ',', '')) >= numbers.n - 1 <if test="param.shopId != null and param.shopId != ''"> AND relation_shop_id = #{param.shopId} </if> <if test="param.shopIdList != null and param.shopIdList.size() > 0"> AND relation_shop_id IN <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> #{item} </foreach> </if> <if test="param.startDate!=null and param.startDate!=''"> AND create_time >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND create_time <= #{param.endDate} </if> ) x WHERE goods_type IS NOT NULL OR goods_type != '' GROUP BY goods_type </select> <select id="getMerMemberTotalActiveness" resultType="java.lang.Integer"> SELECT COUNT(tm.member_id) FROM t_member tm LEFT JOIN t_member_total tmt ON tm.member_id = tmt.member_id WHERE tm.del_Flag = 0 <if test="param.shopId != null and param.shopId != ''"> AND tm.relation_shop_id = #{param.shopId} </if> <if test="param.shopIdList != null and param.shopIdList.size() > 0"> AND tm.relation_shop_id IN <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> #{item} </foreach> </if> <if test="param.startDate!=null and param.startDate!=''"> AND tmt.last_pay_time >= #{actStartDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND tmt.last_pay_time <= #{actEndDate} </if> </select> <select id="getMerMemberPayRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo"> SELECT tm.nick_name mapKey, tmt.total_pay_count mapValue FROM t_member tm INNER JOIN t_member_total tmt ON tm.member_id = tmt.member_id WHERE tm.del_flag = 0 <if test="param.shopId != null and param.shopId != ''"> AND tm.relation_shop_id = #{param.shopId} </if> <if test="param.shopIdList != null and param.shopIdList.size() > 0"> AND tm.relation_shop_id IN <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> #{item} </foreach> </if> <if test="param.startDate!=null and param.startDate!=''"> AND tm.create_time >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND tm.create_time <= #{param.endDate} </if> ORDER BY tmt.total_pay_count DESC LIMIT 15 </select> <select id="getMerMemberCustomerSourceRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo"> SELECT tm.customer_source mapKey, COUNT(tm.user_id) mapValue FROM t_member tm WHERE tm.del_flag = 0 <if test="param.shopId != null and param.shopId != ''"> AND tm.relation_shop_id = #{param.shopId} </if> <if test="param.shopIdList != null and param.shopIdList.size() > 0"> AND tm.relation_shop_id IN <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> #{item} </foreach> </if> <if test="param.startDate!=null and param.startDate!=''"> AND tm.create_time >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND tm.create_time <= #{param.endDate} </if> GROUP BY tm.customer_source ORDER BY COUNT(tm.user_id) DESC LIMIT 15 </select> <select id="getMerMemberRecommendRank" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo"> SELECT tm.referrer mapKey, COUNT(tm.user_id) mapValue FROM t_member tm WHERE tm.del_flag = 0 <if test="param.shopId != null and param.shopId != ''"> AND tm.relation_shop_id = #{param.shopId} </if> <if test="param.shopIdList != null and param.shopIdList.size() > 0"> AND tm.relation_shop_id IN <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> #{item} </foreach> </if> <if test="param.startDate!=null and param.startDate!=''"> AND tm.create_time >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND tm.create_time <= #{param.endDate} </if> GROUP BY tm.referrer ORDER BY COUNT(tm.user_id) DESC LIMIT 15 </select> </mapper> ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderDistributionTotalVo.java
New file @@ -0,0 +1,28 @@ package com.ruoyi.order.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * @ClassName MerOrderDistributionTotalVo * @Description TODO * @Author jqs * @Date 2023/7/3 16:42 * @Version 1.0 */ @Data public class MerOrderDistributionTotalVo { @ApiModelProperty(value = "订单数量key") private String[] orderTotalKey; @ApiModelProperty(value = "订单数量value") private Integer[] orderTotalValue; @ApiModelProperty(value = "订单金额value") private BigDecimal[] orderMoneyValue; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderFromRankVo.java
New file @@ -0,0 +1,23 @@ package com.ruoyi.order.domain.vo; import com.ruoyi.system.api.domain.vo.MgtMapBigTotalVo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @ClassName MerOrderFromRankVo * @Description TODO * @Author jqs * @Date 2023/7/3 16:46 * @Version 1.0 */ @Data public class MerOrderFromRankVo { @ApiModelProperty(value = "来源排行") private List<MgtMapBigTotalVo> orderFromRankList; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderGoodsRankVo.java
New file @@ -0,0 +1,21 @@ package com.ruoyi.order.domain.vo; import com.ruoyi.system.api.domain.vo.MgtMapBigTotalVo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @ClassName MerOrderGoodsRankVo * @Description TODO * @Author jqs * @Date 2023/7/3 16:45 * @Version 1.0 */ @Data public class MerOrderGoodsRankVo { @ApiModelProperty(value = "商品排行") private List<MgtMapBigTotalVo> goodsRankList; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderTotalVo.java
New file @@ -0,0 +1,61 @@ package com.ruoyi.order.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * @ClassName MerOrderTotalVo * @Description TODO * @Author jqs * @Date 2023/7/3 16:38 * @Version 1.0 */ @Data public class MerOrderTotalVo { @ApiModelProperty(value = "总订单数") private Integer orderTotal; @ApiModelProperty(value = "线上订单数") private Integer onlineTotal; @ApiModelProperty(value = "线下订单数") private Integer offlineTotal; @ApiModelProperty(value = "活动订单数") private Integer activityTotal; @ApiModelProperty(value = "周期订单数") private Integer cycleTotal; @ApiModelProperty(value = "体验订单数") private Integer experienceTotal; @ApiModelProperty(value = "服务订单数") private Integer serviceTotal; @ApiModelProperty(value = "总订单金额") private BigDecimal orderMoney; @ApiModelProperty(value = "线上订单金额") private BigDecimal onlineMoney; @ApiModelProperty(value = "线下订单金额") private BigDecimal offlineMoney; @ApiModelProperty(value = "活动订单金额") private BigDecimal activityMoney; @ApiModelProperty(value = "周期订单金额") private BigDecimal cycleMoney; @ApiModelProperty(value = "体验订单金额") private BigDecimal experienceMoney; @ApiModelProperty(value = "服务订单金额") private BigDecimal serviceMoney; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderTypeTotalVo.java
New file @@ -0,0 +1,28 @@ package com.ruoyi.order.domain.vo; import com.ruoyi.system.api.domain.vo.MgtMapBigTotalVo; import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @ClassName MerOrderTypeTotalVo * @Description TODO * @Author jqs * @Date 2023/7/3 16:44 * @Version 1.0 */ @Data public class MerOrderTypeTotalVo { @ApiModelProperty(value = "商品类型数量") private List<MgtMapIntTotalVo> goodsTypeTotalList; @ApiModelProperty(value = "商品类型金额") private List<MgtMapBigTotalVo> goodsTypeMoneyList; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalOrderTotalVo.java
@@ -39,7 +39,7 @@ @ApiModelProperty(value = "服务订单数") private Integer serviceTotal; @ApiModelProperty(value = "总订单数") @ApiModelProperty(value = "总订单金额") private BigDecimal orderMoney; @ApiModelProperty(value = "线上订单金额") ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/business/MerShopController.java
@@ -12,19 +12,14 @@ import com.ruoyi.shop.domain.vo.MerShopCertificateListVo; import com.ruoyi.shop.domain.vo.MerShopSuggestVo; import com.ruoyi.shop.service.shop.*; import com.ruoyi.system.api.domain.dto.MerBaseDto; import com.ruoyi.system.api.domain.dto.MerBaseGetDto; import com.ruoyi.system.api.domain.dto.MerEditUserDto; import com.ruoyi.system.api.domain.dto.MerPageDto; import com.ruoyi.system.api.domain.dto.*; import com.ruoyi.system.api.domain.poji.shop.Shop; import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo; import com.ruoyi.system.api.domain.vo.MerStaffInfoVo; import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; @@ -147,4 +142,14 @@ shopSuggestService.suggest(merShopSuggestDto); return R.ok(); } @RequestMapping(value = "/listShopByShop", method = RequestMethod.POST) @ApiOperation(value = "获取商户下属代理商") public R<List<MgtSimpleShopVo>> listShopByShop(@RequestBody MerBaseDto merBaseDto) { List<MgtSimpleShopVo> mgtShopListSimpleVos = shopService.listShopByShop(merBaseDto.getShopId()); return R.ok(mgtShopListSimpleVos); } } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
@@ -220,4 +220,18 @@ return R.ok(taskSimpleVo); } /** * @description 获取商户下属代理商 * @author jqs * @date 2023/7/3 17:26 * @return R<List<Long>> */ @PostMapping("/listShopIdByShopId") public R<List<Long>> listShopIdByShopId(@RequestBody Long shopId) { List<Long> shopIdList = shopService.listShopIdByShopId(shopId); return R.ok(shopIdList); } } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -11,7 +11,6 @@ import com.ruoyi.common.core.utils.uuid.IdUtils; import com.ruoyi.common.security.utils.CodeFactoryUtil; import com.ruoyi.shop.domain.dto.*; import com.ruoyi.shop.domain.pojo.shop.ShopTotal; import com.ruoyi.shop.domain.pojo.shop.*; import com.ruoyi.shop.domain.pojo.task.ShopFile; import com.ruoyi.shop.domain.vo.*; @@ -960,4 +959,40 @@ mgtShopAuthCodeVo.setLegalValidationUrl(shopAuthentication.getLegalValidationUrl()); return mgtShopAuthCodeVo; } /** * @description 获取商户下属代理商 * @author jqs * @date 2023/7/3 17:27 * @param shopId * @return List<Long> */ @Override public List<Long> listShopIdByShopId(Long shopId){ List<Long> shopIds = shopMapper.selectList( new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag, 0).eq(Shop::getBelongShopId, shopId) ).stream().map(Shop::getShopId).collect(Collectors.toList()); return shopIds; } /** * @description 获取商户下属代理商 * @author jqs * @date 2023/7/3 18:18 * @param shopId * @return List<MgtSimpleShopVo> */ @Override public List<MgtSimpleShopVo> listShopByShop(Long shopId){ List<MgtSimpleShopVo> simpleShopVoList = shopMapper.selectList( new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag, 0).eq(Shop::getBelongShopId, shopId)). stream().map(shop->{ MgtSimpleShopVo simpleShopVo = new MgtSimpleShopVo(); simpleShopVo.setShopId(shop.getShopId()); simpleShopVo.setShopName(shop.getShopName()); return simpleShopVo; }).collect(Collectors.toList()); return simpleShopVoList; } } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskServiceImpl.java
@@ -187,4 +187,6 @@ public MemberTaskSimpleVo getLastMemberTask(Long userId){ return memberTaskMapper.getLastMemberTask(userId); } } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java
@@ -233,4 +233,22 @@ * @return MgtShopAuthCodeVo */ MgtShopAuthCodeVo getMgtShopAuthCode(String authId); /** * @description 获取商户下属代理商 * @author jqs * @date 2023/7/3 17:27 * @param shopId * @return List<Long> */ List<Long> listShopIdByShopId(Long shopId); /** * @description 获取商户下属代理商 * @author jqs * @date 2023/7/3 18:18 * @param shopId * @return List<MgtSimpleShopVo> */ List<MgtSimpleShopVo> listShopByShop(Long shopId); } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskService.java
@@ -58,4 +58,6 @@ * @return MemberTaskSimpleVo */ MemberTaskSimpleVo getLastMemberTask(Long userId); } ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
@@ -501,7 +501,7 @@ ts.shop_name shopName, ts.shopowner_name shopownerName, ts.shopowner_phone shopownerPhone, CASE tsa.main_mype CASE tsa.main_type WHEN 1 THEN '个人' WHEN 2 THEN '企业' END mainType, @@ -530,7 +530,7 @@ AND ts.shopowner_phone LIKE CONCAT('%',#{param.shopownerPhone},'%') </if> <if test="param.mainType!=null and param.mainType!=''"> AND tsa.main_mype = #{param.mainType} AND tsa.main_type = #{param.mainType} </if> <if test="param.auditStatus!=null"> AND tsa.audit_status = #{param.auditStatus}