ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
@@ -53,4 +53,6 @@ String ACTIVITY_ING_DELETE = "只能删除未开始活动"; String COUPON_AUDIT_DOUBLE = "优惠券已被其他员工审核"; String COOPERATION_TIME_ERROR = "未在合作时间内"; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MgtActivityAgeDto.java
New file @@ -0,0 +1,24 @@ package com.ruoyi.system.api.domain.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @ClassName MgtActivityAgeDto * @Description TODO * @Author jqs * @Date 2023/6/20 9:45 * @Version 1.0 */ @Data public class MgtActivityAgeDto extends MgtBaseShopDto { @ApiModelProperty(value = "年龄分布1.<20 2.21-30 3.31-40 4.41-50 5.>50") private Integer ageType; @ApiModelProperty(value = "userIds",hidden = true) private List<Long> userIds; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MgtBaseBathDto.java
New file @@ -0,0 +1,18 @@ package com.ruoyi.system.api.domain.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @ClassName MgtBaseBathDto * @Description TODO * @Author jqs * @Date 2023/6/20 16:52 * @Version 1.0 */ @Data public class MgtBaseBathDto extends MgtBaseDto{ @ApiModelProperty(value = "请求对象id集合 多个用,隔开") private String ids; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MgtSimpleMemberVo.java
@@ -20,7 +20,7 @@ private String nickName; @ApiModelProperty(value = "用户姓名") private String userName; private String realName; @ApiModelProperty(value = "用户电话") private String userMobile; ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java
@@ -1,12 +1,9 @@ package com.ruoyi.system.api.factory; import com.ruoyi.common.core.domain.R; import com.ruoyi.system.api.domain.dto.AppMiniRegisterDto; import com.ruoyi.system.api.domain.dto.MgtUserIdByKeywordDto; import com.ruoyi.system.api.domain.dto.*; import com.ruoyi.system.api.domain.vo.*; import com.ruoyi.system.api.service.RemoteMemberService; import com.ruoyi.system.api.domain.dto.AppMemberBindingDto; import com.ruoyi.system.api.domain.dto.AppMemberGoodsTypeDto; import com.ruoyi.system.api.domain.poji.member.Member; import com.ruoyi.system.api.model.AppMiniLoginDto; import com.ruoyi.system.api.model.AppMiniLoginVo; @@ -86,7 +83,7 @@ } @Override public R<List<MgtSimpleMemberVo>> listSimpleVoByIds(String userIds) { public R<List<MgtSimpleMemberVo>> listSimpleVoByIds(MgtBaseBathDto mgtBaseBathDto) { return R.fail("获取用户列表失败:" + throwable.getMessage()); } @@ -99,6 +96,11 @@ public R<MgtBulletinBoardVo> boardMemberTotal() { return null; } @Override public R<List<Long>> listUserIdByAge(MgtActivityAgeDto mgtActivityAgeDto) { return R.fail("筛选userId年龄段失败:" + throwable.getMessage()); } }; } } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteShopFallbackFactory.java
@@ -1,6 +1,7 @@ package com.ruoyi.system.api.factory; import com.ruoyi.common.core.domain.R; import com.ruoyi.system.api.domain.dto.MgtBaseBathDto; import com.ruoyi.system.api.domain.dto.MgtShopIdByCodeDto; import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; import com.ruoyi.system.api.domain.vo.MgtShopIdByCodeVo; @@ -64,7 +65,7 @@ } @Override public R<List<MgtSimpleShopVo>> listShopSimpleVoByIds(String shopIds) { public R<List<MgtSimpleShopVo>> listShopSimpleVoByIds(MgtBaseBathDto mgtBaseBathDto) { return R.fail("获取商户列表失败:" + throwable.getMessage()); } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java
@@ -2,10 +2,7 @@ import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.system.api.domain.dto.AppMemberBindingDto; import com.ruoyi.system.api.domain.dto.AppMemberGoodsTypeDto; import com.ruoyi.system.api.domain.dto.AppMiniRegisterDto; 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.*; import com.ruoyi.system.api.factory.RemoteMemberFallbackFactory; @@ -107,7 +104,7 @@ * @return R<List<MgtSimpleMemberVo>> */ @PostMapping("/member/listSimpleVoByIds") public R<List<MgtSimpleMemberVo>> listSimpleVoByIds(@RequestBody String userIds); public R<List<MgtSimpleMemberVo>> listSimpleVoByIds(@RequestBody MgtBaseBathDto mgtBaseBathDto); /** * @description @@ -128,4 +125,14 @@ */ @PostMapping("/member/boardMemberTotal") public R<MgtBulletinBoardVo> boardMemberTotal(); /** * @description 筛选userId年龄段 * @author jqs * @date 2023/6/20 14:31 * @param mgtActivityAgeDto * @return R<List<Long>> */ @PostMapping("/listUserIdByAge") public R<List<Long>> listUserIdByAge(@RequestBody MgtActivityAgeDto mgtActivityAgeDto); } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteShopService.java
@@ -2,6 +2,7 @@ import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.system.api.domain.dto.MgtBaseBathDto; import com.ruoyi.system.api.domain.dto.MgtShopIdByCodeDto; import com.ruoyi.system.api.domain.poji.shop.Shop; import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; @@ -67,7 +68,7 @@ @PostMapping("/shop/listShopSimpleVoByIds") public R<List<MgtSimpleShopVo>> listShopSimpleVoByIds(@RequestBody String shopIds); public R<List<MgtSimpleShopVo>> listShopSimpleVoByIds(@RequestBody MgtBaseBathDto mgtBaseBathDto); /** * @description boardShopTotal ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsController.java
@@ -83,7 +83,7 @@ } @RequestMapping(value = "/deleteMgtGoods", method = RequestMethod.POST) @ApiOperation(value = "平台推荐商品") @ApiOperation(value = "删除商品") public R deleteMgtGoods(@RequestBody MgtBaseGetDto mgtBaseGetDto) { Long userId = SecurityUtils.getUserId(); mgtBaseGetDto.setUserId(userId); ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtGoodsPageVo.java
@@ -1,6 +1,5 @@ package com.ruoyi.goods.domain.vo; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -38,7 +37,7 @@ private String goodsPicture; @ApiModelProperty(value = "商品类型1周期2服务3体验4单品") private Integer goodsType; private String goodsType; @ApiModelProperty(value = "商品建议售价") private BigDecimal suggestSalesPrice;; ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java
@@ -19,6 +19,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.goods.service.activity.ActivityTotalService; import com.ruoyi.system.api.constant.AppErrorConstant; import com.ruoyi.system.api.domain.dto.MgtBaseBathDto; import com.ruoyi.system.api.domain.poji.activity.ActivityGoods; import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo; import com.ruoyi.system.api.service.RemoteShopService; @@ -170,7 +171,9 @@ //活动关联商户 if(activity.getShopFlag()==2&&StringUtils.isNotBlank(activity.getApplicableShop())){ String applicableShop = activity.getApplicableShop(); List<MgtSimpleShopVo> mgtSimpleShopVoList= remoteShopService.listShopSimpleVoByIds(applicableShop).getData(); MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(applicableShop); List<MgtSimpleShopVo> mgtSimpleShopVoList= remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData(); mgtActivityGetVo.setMgtSimpleShopVosList(mgtSimpleShopVoList); } //活动关联商品 ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml
@@ -377,7 +377,7 @@ </update> <select id="listGoodsByGoodsId" resultType="com.ruoyi.system.api.domain.poji.goods.Goods"> SELECT * FROM t_goods WHERE del_flag = 0 AND goods_id IN (#{goodsIds}) SELECT * FROM t_goods WHERE del_flag = 0 AND FIND_IN_SET(goods_id,#{goodsIds}) > 0 </select> <select id="pageMgtSelectGoods" resultType="com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo"> ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java
@@ -5,10 +5,7 @@ import com.ruoyi.member.service.member.MemberCouponService; import com.ruoyi.member.service.member.MemberService; import com.ruoyi.member.service.member.MemberSuggestService; import com.ruoyi.system.api.domain.dto.AppMemberBindingDto; import com.ruoyi.system.api.domain.dto.AppMemberGoodsTypeDto; import com.ruoyi.system.api.domain.dto.AppMiniRegisterDto; 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.*; import com.ruoyi.system.api.model.AppMiniLoginDto; @@ -171,13 +168,13 @@ * @description 通过ids获取用户简易返回 * @author jqs * @date 2023/6/16 11:05 * @param userIds * @param mgtBaseBathDto * @return R<List<MgtSimpleMemberVo>> */ @PostMapping("/listSimpleVoByIds") public R<List<MgtSimpleMemberVo>> listSimpleVoByIds(@RequestBody String userIds) public R<List<MgtSimpleMemberVo>> listSimpleVoByIds(@RequestBody MgtBaseBathDto mgtBaseBathDto) { List<MgtSimpleMemberVo> simpleMemberVoList = memberService.listSimpleVoByIds(userIds); List<MgtSimpleMemberVo> simpleMemberVoList = memberService.listSimpleVoByIds(mgtBaseBathDto.getIds()); return R.ok(simpleMemberVoList); } @@ -209,4 +206,17 @@ return R.ok(bulletinBoardVo); } /** * @description 筛选userId年龄段 * @author jqs * @date 2023/6/20 14:31 * @param mgtActivityAgeDto * @return R<List<Long>> */ @PostMapping("/listUserIdByAge") public R<List<Long>> listUserIdByAge(@RequestBody MgtActivityAgeDto mgtActivityAgeDto) { List<Long> userIdList = memberService.listUserIdByAge(mgtActivityAgeDto); return R.ok(userIdList); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/MgtTotalController.java
@@ -39,5 +39,4 @@ return R.ok(totalMemberTotalVo); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/member/MemberMapper.java
@@ -6,6 +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.MgtBaseShopDto; import com.ruoyi.system.api.domain.dto.MgtUserIdByKeywordDto; import com.ruoyi.system.api.domain.poji.member.Member; @@ -198,6 +199,16 @@ */ List<MgtMapTotalVo> getTotalMemberRankCustomerSource(@Param("param") MgtBaseShopDto mgtBaseShopDto); /** * @description * @author jqs * @date 2023/6/20 11:49 * @param mgtActivityAgeDto * @return List<Long> */ List<Long> listUserIdByAge(@Param("param")MgtActivityAgeDto mgtActivityAgeDto); } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -1044,4 +1044,20 @@ // 返回总会员数和不同类型会员数的统计结果 return mgtTotalMemberTotalVo; } /** * @description * @author jqs * @date 2023/6/20 11:42 * @param mgtActivityAgeDto * @return List<Long> */ @Override public List<Long> listUserIdByAge(MgtActivityAgeDto mgtActivityAgeDto){ List<Long> userIdList = memberMapper.listUserIdByAge(mgtActivityAgeDto); return userIdList; } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
@@ -233,4 +233,15 @@ * @return MgtTotalMemberTotalVo */ MgtTotalMemberTotalVo getTotalMemberTotal(MgtBaseShopDto mgtBaseShopDto); /** * @description * @author jqs * @date 2023/6/20 11:49 * @param mgtActivityAgeDto * @return List<Long> */ List<Long> listUserIdByAge(MgtActivityAgeDto mgtActivityAgeDto); } ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
@@ -304,7 +304,7 @@ tm.nick_name nickName, tm.mobile mobile FROM t_member tm WHERE tm.del_flag = 0 AND tm.user_id IN (#{userIds}) WHERE tm.del_flag = 0 AND FIND_IN_SET(tm.user_id, #{userIds}) > 0 </select> <select id="getUserIdByKeyword" resultType="java.lang.Long"> @@ -475,4 +475,33 @@ GROUP BY tm.customer_source ORDER BY SUM(tm.customer_source) DESC LIMIT 10 </select> <select id="listUserIdByAge" resultType="java.lang.Long"> SELECT user_id FROM t_member WHERE del_flag = 0 <if test="param.ageType != null and param.ageType ==1"> AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20 </if> <if test="param.ageType != null and param.ageType ==2"> AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 21 AND 30 </if> <if test="param.ageType != null and param.ageType ==3"> AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 31 AND 40 </if> <if test="param.ageType != null and param.ageType ==4"> AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 41 AND 50 </if> <if test="param.ageType != null and param.ageType ==5"> AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20 </if> <if test="param.userIds != null"> AND user_id IN <foreach collection="list" item="item" open="(" separator="," close=")"> #{param.userIds} </foreach> </if> </select> </mapper> ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtTotalController.java
@@ -2,8 +2,11 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.order.domain.vo.MgtTotalActivityTotalVo; import com.ruoyi.order.domain.vo.MgtTotalDataTotalVo; import com.ruoyi.order.domain.vo.MgtTotalOrderTotalVo; import com.ruoyi.order.service.order.OrderService; import com.ruoyi.system.api.domain.dto.MgtActivityAgeDto; import com.ruoyi.system.api.domain.dto.MgtBaseShopDto; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -30,7 +33,7 @@ private OrderService orderService; @RequestMapping(value = "/getTotalOrderTotal", method = RequestMethod.POST) @ApiOperation(value = "获取会员人数统计") @ApiOperation(value = "获取订单统计") public R<MgtTotalOrderTotalVo> getTotalOrderTotal(@RequestBody MgtBaseShopDto mgtBaseShopDto) { Long userId = SecurityUtils.getUserId(); mgtBaseShopDto.setUserId(userId); @@ -38,4 +41,30 @@ return R.ok(totalOrderTotalVo); } @RequestMapping(value = "/getTotalActivityTotal", method = RequestMethod.POST) @ApiOperation(value = "获取活动统计") public R<MgtTotalActivityTotalVo> getTotalActivityTotal(@RequestBody MgtBaseShopDto mgtBaseShopDto) { Long userId = SecurityUtils.getUserId(); mgtBaseShopDto.setUserId(userId); MgtTotalActivityTotalVo totalActivityTotal = orderService.getTotalActivityTotal(mgtBaseShopDto); return R.ok(totalActivityTotal); } @RequestMapping(value = "/getTotalActivityAgeRank", method = RequestMethod.POST) @ApiOperation(value = "获取活动年龄分布") public R<MgtTotalActivityTotalVo> getTotalActivityAgeRank(@RequestBody MgtActivityAgeDto mgtActivityAgeDto) { Long userId = SecurityUtils.getUserId(); mgtActivityAgeDto.setUserId(userId); MgtTotalActivityTotalVo totalActivityTotal = orderService.getTotalActivityAgeRank(mgtActivityAgeDto); return R.ok(totalActivityTotal); } @RequestMapping(value = "/getTotalDataTotal", method = RequestMethod.POST) @ApiOperation(value = "获取数据统计") public R<MgtTotalDataTotalVo> getTotalDataTotal(@RequestBody MgtBaseShopDto mgtBaseShopDto) { Long userId = SecurityUtils.getUserId(); mgtBaseShopDto.setUserId(userId); MgtTotalDataTotalVo totalDataTotalVo = orderService.getTotalDataTotal(mgtBaseShopDto); return R.ok(totalDataTotalVo); } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtMapTotalVo.java
@@ -24,4 +24,6 @@ @ApiModelProperty(value = "mapValueSecond") private BigDecimal mapValueSecond; @ApiModelProperty(value = "mapValueThird") private Integer mapValueThird; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtShopOrderPageVo.java
@@ -43,6 +43,9 @@ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; @ApiModelProperty("优惠金额") private BigDecimal discountMoney; @ApiModelProperty("应付金额") private BigDecimal receivableMoney; ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalActivityTotalVo.java
New file @@ -0,0 +1,78 @@ package com.ruoyi.order.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * @ClassName MgtTotalActivityTotalVo * @Description TODO * @Author jqs * @Date 2023/6/20 9:22 * @Version 1.0 */ @Data public class MgtTotalActivityTotalVo { @ApiModelProperty(value = "总订单数") private Integer orderTotal; @ApiModelProperty(value = "周期订单数") private Integer cycleTotal; @ApiModelProperty(value = "体验订单数") private Integer experienceTotal; @ApiModelProperty(value = "服务订单数") private Integer serviceTotal; @ApiModelProperty(value = "总订单金额") private BigDecimal orderMoney; @ApiModelProperty(value = "周期订单金额") private BigDecimal cycleMoney; @ApiModelProperty(value = "体验订单金额") private BigDecimal experienceMoney; @ApiModelProperty(value = "服务订单金额") private BigDecimal serviceMoney; @ApiModelProperty(value = "总人数") private Integer orderPerson; @ApiModelProperty(value = "周期人数") private Integer cyclePerson; @ApiModelProperty(value = "体验人数") private Integer experiencePerson; @ApiModelProperty(value = "服务人数") private Integer servicePerson; @ApiModelProperty(value = "订单数量key") private String[] orderTotalKey; @ApiModelProperty(value = "订单数量value") private Integer[] orderTotalValue; @ApiModelProperty(value = "订单数量value") private BigDecimal[] orderMoneyValue; @ApiModelProperty(value = "商品类型数量key") private String[] goodsTypeKey; @ApiModelProperty(value = "商品类型数量value") private Integer[] goodsTypeTotalValue; @ApiModelProperty(value = "商品类型金额value") private BigDecimal[] goodsTypeMoneyValue; @ApiModelProperty(value = "来源排行key") private String[] orderAgeKey; @ApiModelProperty(value = "来源排行value") private BigDecimal[] orderAgeValue; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MgtTotalDataTotalVo.java
New file @@ -0,0 +1,43 @@ package com.ruoyi.order.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @ClassName MgtTotalDataTotalVo * @Description TODO * @Author jqs * @Date 2023/6/20 14:56 * @Version 1.0 */ @Data public class MgtTotalDataTotalVo { @ApiModelProperty(value = "总人数") private Integer orderPerson; @ApiModelProperty(value = "体验人数") private Integer onlyExperiencePerson; @ApiModelProperty(value = "体验开单人数") private Integer experienceCyclePerson; @ApiModelProperty(value = "没体验开单人数") private Integer onlyCyclePerson; @ApiModelProperty(value = "续单人数") private Integer reorderPerson; @ApiModelProperty(value = "老客户回店人数") private Integer returnedPerson; @ApiModelProperty(value = "整体调理人数") private Integer cyclePerson; @ApiModelProperty(value = "单品人数") private Integer goodsPerson; @ApiModelProperty(value = "单品数量") private Integer goodsNumber; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
@@ -5,6 +5,7 @@ import com.ruoyi.order.domain.dto.*; import com.ruoyi.order.domain.pojo.order.Order; import com.ruoyi.order.domain.vo.*; import com.ruoyi.system.api.domain.dto.MgtActivityAgeDto; import com.ruoyi.system.api.domain.dto.MgtBaseShopDto; import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; import org.apache.ibatis.annotations.Param; @@ -139,7 +140,7 @@ MgtBulletinBoardVo boardOrderTotal(); /** * @description getTotalOrderTotal * @description getTotalOrderTotalOrderFrom * @param mgtBaseShopDto * @return MgtTotalOrderTotalVo * @author jqs34 @@ -148,7 +149,7 @@ MgtTotalOrderTotalVo getTotalOrderTotalOrderFrom(@Param("param") MgtBaseShopDto mgtBaseShopDto); /** * @description getTotalOrderTotal * @description getTotalOrderTotalGoodsType * @param mgtBaseShopDto * @return MgtTotalOrderTotalVo * @author jqs34 @@ -157,7 +158,7 @@ MgtTotalOrderTotalVo getTotalOrderTotalGoodsType(@Param("param") MgtBaseShopDto mgtBaseShopDto); /** * @description getTotalOrderTotal * @description listTotalOrderTotal * @param mgtBaseShopDto * @return List<MgtMapTotalVo> * @author jqs34 @@ -166,7 +167,7 @@ List<MgtMapTotalVo> listTotalOrderTotal(@Param("param") MgtBaseShopDto mgtBaseShopDto); /** * @description getTotalOrderTotal * @description listTotalOrderTotalGoodsType * @param mgtBaseShopDto * @return List<MgtMapTotalVo> * @author jqs34 @@ -176,7 +177,7 @@ /** * @description getTotalOrderTotal * @description listTotalOrderTotalGoodsRank * @param mgtBaseShopDto * @return List<MgtMapTotalVo> * @author jqs34 @@ -185,11 +186,86 @@ List<MgtMapTotalVo> listTotalOrderTotalGoodsRank(@Param("param") MgtBaseShopDto mgtBaseShopDto); /** * @description getTotalOrderTotal * @description listTotalOrderTotalOrderFrom * @param mgtBaseShopDto * @return List<MgtMapTotalVo> * @author jqs34 * @date 2023/6/19 22:48 */ List<MgtMapTotalVo> listTotalOrderTotalOrderFrom(@Param("param") MgtBaseShopDto mgtBaseShopDto); /** * @description getTotalActivityTotal * @author jqs * @date 2023/6/20 9:28 * @param mgtBaseShopDto * @return MgtTotalActivityTotalVo */ MgtTotalActivityTotalVo getTotalActivityTotal(@Param("param")MgtBaseShopDto mgtBaseShopDto); /** * @description listTotalActivityTotalGoodsType * @param mgtBaseShopDto * @return List<MgtMapTotalVo> * @author jqs34 * @date 2023/6/19 22:48 */ List<MgtMapTotalVo> listTotalActivityTotalGoodsType(@Param("param") MgtBaseShopDto mgtBaseShopDto); /** * @description listTotalActivityTotal * @param mgtBaseShopDto * @return List<MgtMapTotalVo> * @author jqs34 * @date 2023/6/19 22:48 */ List<MgtMapTotalVo> listTotalActivityTotal(@Param("param") MgtBaseShopDto mgtBaseShopDto); /** * @description * @author jqs * @date 2023/6/20 11:37 * @param mgtActivityAgeDto * @return List<Long> */ List<Long> getUserIdAgeRank(@Param("param") MgtActivityAgeDto mgtActivityAgeDto); /** * @description * @author jqs * @date 2023/6/20 9:57 * @param mgtActivityAgeDto * @return MgtTotalActivityTotalVo */ MgtTotalActivityTotalVo getTotalActivityAgeRank(@Param("param")MgtActivityAgeDto mgtActivityAgeDto); /** * @description * @author jqs * @date 2023/6/20 15:50 * @param mgtBaseShopDto * @return MgtTotalDataTotalVo */ MgtTotalDataTotalVo getTotalDataTotal(@Param("param")MgtBaseShopDto mgtBaseShopDto); /** * @description * @author jqs * @date 2023/6/20 18:16 * @param * @return Integer */ Integer getReorderPerson(@Param("param")MgtBaseShopDto mgtBaseShopDto); /** * @description * @author jqs * @date 2023/6/20 18:16 * @param * @return Integer */ Integer getReturnedPerson(@Param("param")MgtBaseShopDto mgtBaseShopDto); } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -982,7 +982,9 @@ // 将set中的shopId转换为逗号分隔的字符串 String joinedString = String.join(",", set); // 通过remoteShopService获取MgtSimpleShopVoList List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(joinedString).getData(); MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(joinedString); List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData(); // 将MgtSimpleShopVoList转换为Map<Long, MgtSimpleShopVo>,以便后续根据shopId获取对应的MgtSimpleShopVo Map<Long, MgtSimpleShopVo> map = simpleShopVoList.stream() .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); @@ -1043,16 +1045,22 @@ String shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList())); String userJoinedString = String.join(",", userIdSet.stream().map(Object::toString).collect(Collectors.toList())); // 从远程服务获取店铺和用户信息 List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(shopJoinedString).getData(); MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(shopJoinedString); List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData(); Map<Long, MgtSimpleShopVo> shopMap = simpleShopVoList.stream() .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(userJoinedString).getData(); mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(userJoinedString); List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream() .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); // 遍历列表,设置店铺名称、用户名称和未支付金额 for (MgtActivityOrderPageVo mgtActivityOrderPageVo : activityOrderPageVoList) { mgtActivityOrderPageVo.setShopName(shopMap.get(mgtActivityOrderPageVo.getShopId()).getShopName()); mgtActivityOrderPageVo.setUserName(userMap.get(mgtActivityOrderPageVo.getUserId()).getUserName()); if(userMap.get(mgtActivityOrderPageVo.getUserId())!=null){ mgtActivityOrderPageVo.setUserName(userMap.get(mgtActivityOrderPageVo.getUserId()).getNickName()); } BigDecimal unPaidMoney = mgtActivityOrderPageVo.getReceivableMoney().subtract(mgtActivityOrderPageVo.getPayMoney()); mgtActivityOrderPageVo.setUnPaidMoney(unPaidMoney == null ? zeroBig : unPaidMoney); } @@ -1149,20 +1157,35 @@ shopIdSet.add(mgtShopOrderPageVo.getShopId()); userIdSet.add(mgtShopOrderPageVo.getUserId()); } // 将店铺 ID 和用户 ID 转换为逗号分隔的字符串 String shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList())); String userJoinedString = String.join(",", userIdSet.stream().map(Object::toString).collect(Collectors.toList())); // 从远程服务获取店铺和用户信息 List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(shopJoinedString).getData(); Map<Long, MgtSimpleShopVo> shopMap = simpleShopVoList.stream() .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(userJoinedString).getData(); Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream() .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); Map<Long, MgtSimpleShopVo> shopMap = null; Map<Long, MgtSimpleMemberVo> userMap = null; if(shopIdSet!=null&&!shopIdSet.isEmpty()){ String shopJoinedString = String.join(",", shopIdSet.stream().map(Object::toString).collect(Collectors.toList())); MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(shopJoinedString); List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData(); shopMap = simpleShopVoList.stream() .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); } if(userIdSet!=null&&!userIdSet.isEmpty()){ String userJoinedString = String.join(",", userIdSet.stream().map(Object::toString).collect(Collectors.toList())); MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(userJoinedString); List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); userMap = simpleMemberVoList.stream() .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); } // 遍历列表,设置店铺名称、用户名称和未支付金额 for (MgtShopOrderPageVo mgtShopOrderPageVo : shopOrderPageVoList) { mgtShopOrderPageVo.setShopName(shopMap.get(mgtShopOrderPageVo.getShopId()).getShopName()); mgtShopOrderPageVo.setUserName(userMap.get(mgtShopOrderPageVo.getUserId()).getUserName()); if(shopMap!=null&&!shopMap.isEmpty()){ mgtShopOrderPageVo.setShopName(shopMap.get(mgtShopOrderPageVo.getShopId()).getShopName()); } if(userMap!=null&&!userMap.isEmpty()){ if(userMap.get(mgtShopOrderPageVo.getUserId())!=null){ mgtShopOrderPageVo.setUserName(userMap.get(mgtShopOrderPageVo.getUserId()).getNickName()); } } BigDecimal unPaidMoney = mgtShopOrderPageVo.getReceivableMoney().subtract(mgtShopOrderPageVo.getPayMoney()); mgtShopOrderPageVo.setUnPaidMoney(unPaidMoney == null ? zeroBig : unPaidMoney); } @@ -1348,4 +1371,102 @@ } return mgtTotalOrderTotalVo; } /** * @description * @author jqs * @date 2023/6/20 9:27 * @param mgtBaseShopDto * @return MgtTotalActivityTotalVo */ @Override public MgtTotalActivityTotalVo getTotalActivityTotal(MgtBaseShopDto mgtBaseShopDto){ //获取基础统计 MgtTotalActivityTotalVo totalActivityTotalVo = orderMapper.getTotalActivityTotal(mgtBaseShopDto); //获取商品分类销售数据 List<MgtMapTotalVo> mgtMapTotalVoGoodsType = orderMapper.listTotalActivityTotalGoodsType(mgtBaseShopDto); if (mgtMapTotalVoGoodsType != null && mgtMapTotalVoGoodsType.size() > 0) { String[] goodsTypeKey = new String[mgtMapTotalVoGoodsType.size()]; Integer[] goodsTypeTotalValue = new Integer[mgtMapTotalVoGoodsType.size()]; BigDecimal[] goodsTypeMoneyValue = new BigDecimal[mgtMapTotalVoGoodsType.size()]; // 遍历不同商品类型的会员数列表,设置商品类型数组和对应的会员数数组 for (int i = 0; i < mgtMapTotalVoGoodsType.size(); i++) { goodsTypeTotalValue[i] = mgtMapTotalVoGoodsType.get(i).getMapValueFirst(); goodsTypeMoneyValue[i] = mgtMapTotalVoGoodsType.get(i).getMapValueSecond(); if(mgtMapTotalVoGoodsType.get(i).getMapKey().equals("1")){ goodsTypeKey[i] = "周期"; totalActivityTotalVo.setCycleTotal(mgtMapTotalVoGoodsType.get(i).getMapValueFirst()); totalActivityTotalVo.setCycleMoney(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()); totalActivityTotalVo.setCyclePerson(mgtMapTotalVoGoodsType.get(i).getMapValueThird()); }else if(mgtMapTotalVoGoodsType.get(i).getMapKey().equals("2")){ goodsTypeKey[i] = "服务"; totalActivityTotalVo.setServiceTotal(mgtMapTotalVoGoodsType.get(i).getMapValueFirst()); totalActivityTotalVo.setServiceMoney(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()); totalActivityTotalVo.setServicePerson(mgtMapTotalVoGoodsType.get(i).getMapValueThird()); }else if(mgtMapTotalVoGoodsType.get(i).getMapKey().equals("3")){ goodsTypeKey[i] = "体验"; totalActivityTotalVo.setExperienceTotal(mgtMapTotalVoGoodsType.get(i).getMapValueFirst()); totalActivityTotalVo.setExperienceMoney(mgtMapTotalVoGoodsType.get(i).getMapValueSecond()); totalActivityTotalVo.setExperiencePerson(mgtMapTotalVoGoodsType.get(i).getMapValueThird()); }else if(mgtMapTotalVoGoodsType.get(i).getMapKey().equals("4")){ goodsTypeKey[i] = "单品"; } } totalActivityTotalVo.setGoodsTypeKey(goodsTypeKey); totalActivityTotalVo.setGoodsTypeTotalValue(goodsTypeTotalValue); totalActivityTotalVo.setGoodsTypeMoneyValue(goodsTypeMoneyValue); } //获取订单分布 List<MgtMapTotalVo> mgtMapTotalVos = orderMapper.listTotalActivityTotal(mgtBaseShopDto); if (mgtMapTotalVos != null && mgtMapTotalVos.size() > 0) { String[] orderTotalKey = new String[mgtMapTotalVos.size()]; Integer[] orderTotalValue = new Integer[mgtMapTotalVos.size()]; BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalVos.size()]; for (int i = 0; i < mgtMapTotalVos.size(); i++) { orderTotalKey[i] = mgtMapTotalVos.get(i).getMapKey(); orderTotalValue[i] = mgtMapTotalVos.get(i).getMapValueFirst(); orderMoneyValue[i] = mgtMapTotalVos.get(i).getMapValueSecond(); } totalActivityTotalVo.setOrderTotalKey(orderTotalKey); totalActivityTotalVo.setOrderTotalValue(orderTotalValue); totalActivityTotalVo.setOrderMoneyValue(orderMoneyValue); } return totalActivityTotalVo; } /** * @description * @author jqs * @date 2023/6/20 9:56 * @param mgtActivityAgeDto * @return MgtTotalActivityTotalVo */ @Override public MgtTotalActivityTotalVo getTotalActivityAgeRank(MgtActivityAgeDto mgtActivityAgeDto){ List<Long> userIds = orderMapper.getUserIdAgeRank(mgtActivityAgeDto); mgtActivityAgeDto.setUserIds(userIds); userIds = remoteMemberService.listUserIdByAge(mgtActivityAgeDto).getData(); mgtActivityAgeDto.setUserIds(userIds); MgtTotalActivityTotalVo totalActivityTotalVo = orderMapper.getTotalActivityAgeRank(mgtActivityAgeDto); return totalActivityTotalVo; } /** * @description * @author jqs * @date 2023/6/20 15:31 * @param mgtBaseShopDto * @return MgtTotalDataTotalVo */ @Override public MgtTotalDataTotalVo getTotalDataTotal(MgtBaseShopDto mgtBaseShopDto){ //获取人数统计 MgtTotalDataTotalVo mgtTotalDataTotalVo = orderMapper.getTotalDataTotal(mgtBaseShopDto); Integer reorderPerson = orderMapper.getReorderPerson(mgtBaseShopDto); mgtTotalDataTotalVo.setReorderPerson(reorderPerson); Integer returnedPerson = orderMapper.getReturnedPerson(mgtBaseShopDto); mgtTotalDataTotalVo.setReturnedPerson(returnedPerson); return mgtTotalDataTotalVo; } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -6,6 +6,7 @@ import com.ruoyi.order.domain.pojo.order.Order; import com.ruoyi.order.domain.vo.*; import com.ruoyi.system.api.domain.dto.AppBaseGetDto; import com.ruoyi.system.api.domain.dto.MgtActivityAgeDto; import com.ruoyi.system.api.domain.dto.MgtBaseShopDto; import com.ruoyi.system.api.domain.vo.AppOrderTotalVo; import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo; @@ -195,4 +196,32 @@ * @date 2023/6/19 22:23 */ MgtTotalOrderTotalVo getTotalOrderTotal(MgtBaseShopDto mgtBaseShopDto); /** * @description * @author jqs * @date 2023/6/20 9:28 * @param mgtBaseShopDto * @return MgtTotalActivityTotalVo */ MgtTotalActivityTotalVo getTotalActivityTotal(MgtBaseShopDto mgtBaseShopDto); /** * @description * @author jqs * @date 2023/6/20 9:57 * @param mgtActivityAgeDto * @return MgtTotalActivityTotalVo */ MgtTotalActivityTotalVo getTotalActivityAgeRank(MgtActivityAgeDto mgtActivityAgeDto); /** * @description * @author jqs * @date 2023/6/20 15:50 * @param mgtBaseShopDto * @return MgtTotalDataTotalVo */ MgtTotalDataTotalVo getTotalDataTotal(MgtBaseShopDto mgtBaseShopDto); } ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -418,9 +418,9 @@ toc.user_id userId, toc.activity_name activityName, tog.goods_name goodsName, tog.goods_price activityPrice, tog.buy_num buyNum, toc.order_money orderMoney, toc.discount_money discountMoney, toc.receivable_money receivableMoney, toc.create_time createTime, toc.pay_money payMoney, @@ -439,10 +439,10 @@ AND toc.shop_id = #{param.shopId} </if> <if test="param.shopIds != null and param.shopIds != ''"> AND toc.shop_id IN (#{param.shopIds}) AND FIND_IN_SET(toc.shop_id, #{param.shopIds}) > 0 </if> <if test="param.keyword != null and param.keyword != ''"> AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR toc.activity_name LIKE CONCAT('%',#{param.keyword},'%') OR toc.user_id IN (#{param.userIds})) AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR toc.activity_name LIKE CONCAT('%',#{param.keyword},'%') OR FIND_IN_SET(toc.user_id, #{param.userIds}) > 0) </if> <if test="param.verifyStartTime != null and param.verifyStartTime != ''"> AND toc.use_time >= #{param.verifyStartTime} @@ -479,10 +479,10 @@ AND toc.shop_id = #{param.shopId} </if> <if test="param.shopIds != null and param.shopIds != ''"> AND toc.shop_id IN (#{param.shopIds}) AND FIND_IN_SET(toc.shop_id, #{param.shopIds}) > 0 </if> <if test="param.keyword != null and param.keyword != ''"> AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR toc.activity_name LIKE CONCAT('%',#{param.keyword},'%') OR toc.user_id IN (#{param.userIds})) AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR toc.activity_name LIKE CONCAT('%',#{param.keyword},'%') OR FIND_IN_SET(toc.user_id, #{param.userIds}) > 0) </if> <if test="param.verifyStartTime != null and param.verifyStartTime != ''"> AND toc.use_time >= #{param.verifyStartTime} @@ -512,10 +512,10 @@ AND toc.shop_id = #{param.shopId} </if> <if test="param.shopIds != null and param.shopIds != ''"> AND toc.shop_id IN (#{param.shopIds}) AND FIND_IN_SET(toc.shop_id, #{param.shopIds}) > 0 </if> <if test="param.keyword != null and param.keyword != ''"> AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR toc.activity_name LIKE CONCAT('%',#{param.keyword},'%') OR toc.user_id IN (#{param.userIds})) AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR toc.activity_name LIKE CONCAT('%',#{param.keyword},'%') OR FIND_IN_SET(toc.user_id, #{param.userIds}) > 0) </if> <if test="param.verifyStartTime != null and param.verifyStartTime != ''"> AND toc.use_time >= #{param.verifyStartTime} @@ -551,10 +551,10 @@ AND toc.shop_id = #{param.shopId} </if> <if test="param.shopIds != null and param.shopIds != ''"> AND toc.shop_id IN (#{param.shopIds}) AND FIND_IN_SET(toc.shop_id, #{param.shopIds}) > 0 </if> <if test="param.keyword != null and param.keyword != ''"> AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR toc.activity_name LIKE CONCAT('%',#{param.keyword},'%') OR toc.user_id IN (#{param.userIds})) AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR toc.activity_name LIKE CONCAT('%',#{param.keyword},'%') OR FIND_IN_SET(toc.user_id, #{param.userIds}) > 0) </if> <if test="param.verifyStartTime != null and param.verifyStartTime != ''"> AND toc.use_time >= #{param.verifyStartTime} @@ -573,10 +573,11 @@ tog.goods_name goodsName, tog.buy_num buyNum, toc.order_money orderMoney, toc.discount_money discountMoney, toc.receivable_money receivableMoney, toc.create_time createTime, toc.pay_money payMoney, toc.shop_id shopName, toc.shop_id shopId, toc.use_time verifyTime, CASE toc.order_from WHEN 1 THEN '小程序' WHEN 3 THEN '线下创建' END orderFrom FROM t_order toc @@ -592,10 +593,10 @@ AND toc.shop_id = #{param.shopId} </if> <if test="param.shopIds != null and param.shopIds != ''"> AND toc.shop_id IN (#{param.shopIds}) AND FIND_IN_SET(toc.shop_id, #{param.shopIds}) > 0 </if> <if test="param.keyword != null and param.keyword != ''"> AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR toc.activity_name LIKE CONCAT('%',#{param.keyword},'%') OR toc.user_id IN (#{param.userIds})) AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR toc.activity_name LIKE CONCAT('%',#{param.keyword},'%') OR FIND_IN_SET(toc.user_id, #{param.userIds}) > 0) </if> <if test="param.verifyStartTime != null and param.verifyStartTime != ''"> AND toc.use_time >= #{param.verifyStartTime} @@ -736,4 +737,140 @@ GROUP BY toc.order_from ORDER BY SUM(toc.order_money) DESC LIMIT 10 </select> <select id="getTotalActivityTotal" resultType="com.ruoyi.order.domain.vo.MgtTotalActivityTotalVo"> SELECT COUNT(order_id) orderTotal, IFNULL(SUM(order_money),0) orderMoney, COUNT(DISTINCT user_id) orderPerson FROM t_order WHERE del_flag = 0 AND order_from = 2 <if test="param.shopId != null and param.shopId != ''"> AND shop_id = #{param.shopId} </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="listTotalActivityTotalGoodsType" resultType="com.ruoyi.order.domain.vo.MgtMapTotalVo"> SELECT tog.goods_type mapKey, COUNT(DISTINCT toc.order_id) AS mapValueFirst, IFNULL(SUM(tog.goods_total_money),0) AS mapValueSecond, COUNT(DISTINCT toc.user_id) AS mapValueThird, FROM t_order toc INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id WHERE toc.del_flag = 0 AND order_from = 2 <if test="param.shopId != null and param.shopId != ''"> AND toc.shop_id = #{param.shopId} </if> GROUP BY tog.goods_type </select> <select id="listTotalActivityTotal" resultType="com.ruoyi.order.domain.vo.MgtMapTotalVo"> SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS mapKey, COUNT(DISTINCT toc.user_id) AS mapValueFirst FROM t_order WHERE del_flag = 0 AND order_from = 2 AND create_time >= DATE_SUB(CURDATE(), INTERVAL 6 DAY) <if test="param.shopId != null and param.shopId != ''"> AND shop_id = #{param.shopId} </if> <if test="param.userIds != null"> AND user_id IN <foreach collection="list" item="item" open="(" separator="," close=")"> #{param.userIds} </foreach> </if> GROUP BY order_date ORDER BY order_date ASC </select> <select id="getUserIdAgeRank" resultType="java.lang.Long"> SELECT DISTINCT user_id FROM t_order WHERE del_flag = 0 AND order_from = 2 AND create_time >= DATE_SUB(CURDATE(), INTERVAL 6 DAY) <if test="param.shopId != null and param.shopId != ''"> AND shop_id = #{param.shopId} </if> </select> <select id="getTotalDataTotal" resultType="com.ruoyi.order.domain.vo.MgtTotalDataTotalVo"> SELECT COUNT(DISTINCT CASE WHEN goods_type_1_count > 0 AND goods_type_3_count = 0 THEN user_id ELSE NULL END) AS onlyCyclePerson, COUNT(DISTINCT CASE WHEN goods_type_1_count = 0 AND goods_type_3_count > 0 THEN user_id ELSE NULL END) AS onlyExperiencePerson, COUNT(DISTINCT CASE WHEN goods_type_1_count > 0 AND goods_type_3_count > 0 THEN user_id ELSE NULL END) AS experienceCyclePerson, COUNT(DISTINCT CASE WHEN goods_type_1_count > 0 THEN user_id ELSE NULL END) AS cyclePerson, COUNT(DISTINCT CASE WHEN goods_type_4_count > 0 THEN user_id ELSE NULL END) AS goodsPerson, SUM(goods_type_4_count) AS goodsNumber, COUNT(DISTINCT CASE WHEN goods_type_1_count > 0 AND goods_type_2_count > 0 AND goods_type_3_count > 0 AND goods_type_4_count > 0 THEN user_id ELSE NULL END) AS orderPerson FROM ( SELECT o.user_id, COUNT(DISTINCT CASE WHEN og.goods_type = 1 THEN og.goods_id ELSE NULL END) AS goods_type_1_count, COUNT(DISTINCT CASE WHEN og.goods_type = 2 THEN og.goods_id ELSE NULL END) AS goods_type_2_count, COUNT(DISTINCT CASE WHEN og.goods_type = 3 THEN og.goods_id ELSE NULL END) AS goods_type_3_count, COUNT(DISTINCT CASE WHEN og.goods_type = 4 THEN og.goods_id ELSE NULL END) AS goods_type_4_count FROM t_order o JOIN t_order_goods og ON o.order_id = og.order_id WHERE o.del_flag = 0 AND og.del_flag = 0 <if test="param.shopId != null and param.shopId != ''"> AND o.shop_id = #{param.shopId} </if> <if test="param.startDate!=null and param.startDate!=''"> AND o.create_time >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND o.create_time <= #{param.endDate} </if> GROUP BY o.user_id ) AS user_goods_type_counts </select> <select id="getReorderPerson" resultType="java.lang.Integer"> SELECT COUNT(DISTINCT user_id) FROM (SELECT t1.user_id, t1.pay_time, t2.pay_time as last_pay_time FROM t_order t1 INNER JOIN (SELECT toc.user_id, toc.pay_time FROM t_order toc INNER JOIN t_order_goods tog ON toc.order_id = tog.order_id WHERE toc.del_flag = 0 AND tog.goods_type = 1 <if test="param.shopId != null and param.shopId != ''"> AND toc.shop_id = #{param.shopId} </if> ORDER BY toc.pay_time DESC LIMIT 2) t2 ON t1.user_id = t2.user_id AND t1.pay_time < t2.pay_time WHERE t1.del_flag = 0 HAVING DATEDIFF(t2.pay_time, t1.pay_time) <= 30) AS temp </select> <select id="getReturnedPerson" resultType="java.lang.Integer"> SELECT COUNT(DISTINCT user_id) FROM (SELECT t1.user_id, t1.pay_time, t2.pay_time as last_pay_time FROM t_order t1 INNER JOIN (SELECT toc.user_id, toc.pay_time FROM t_order toc INNER JOIN t_order_goods tog ON toc.order_id = tog.order_id WHERE toc.del_flag = 0 AND tog.goods_type = 1 <if test="param.shopId != null and param.shopId != ''"> AND toc.shop_id = #{param.shopId} </if> ORDER BY toc.pay_time DESC LIMIT 2) t2 ON t1.user_id = t2.user_id AND t1.pay_time < t2.pay_time WHERE t1.del_flag = 0 HAVING DATEDIFF(t2.pay_time, t1.pay_time) > 30) AS temp </select> </mapper> ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
@@ -9,6 +9,7 @@ import com.ruoyi.shop.service.shop.ShopStaffService; import com.ruoyi.shop.service.shop.ShopSuggestService; import com.ruoyi.shop.service.task.ShopTaskService; import com.ruoyi.system.api.domain.dto.MgtBaseBathDto; import com.ruoyi.system.api.domain.dto.MgtShopIdByCodeDto; import com.ruoyi.system.api.domain.poji.shop.Shop; import com.ruoyi.system.api.domain.poji.sys.SysUser; @@ -134,9 +135,9 @@ } @PostMapping("/listShopSimpleVoByIds") public R<List<MgtSimpleShopVo>> listShopSimpleVoByIds(@RequestBody String shopIds) public R<List<MgtSimpleShopVo>> listShopSimpleVoByIds(@RequestBody MgtBaseBathDto mgtBaseBathDto) { List<MgtSimpleShopVo> mgtShopListSimpleVos = shopService.listShopSimpleVoByIds(shopIds); List<MgtSimpleShopVo> mgtShopListSimpleVos = shopService.listShopSimpleVoByIds(mgtBaseBathDto.getIds()); return R.ok(mgtShopListSimpleVos); } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/management/MgtShopController.java
@@ -92,6 +92,15 @@ return R.ok(); } @RequestMapping(value = "/terminateMgtCooperation", method = RequestMethod.POST) @ApiOperation(value = "终止合作") public R terminateMgtCooperation(@RequestBody MgtTerminateCooperationDto mgtTerminateCooperationDto) { Long userId = SecurityUtils.getUserId(); mgtTerminateCooperationDto.setUserId(userId); shopService.terminateMgtCooperation(mgtTerminateCooperationDto); return R.ok(); } @RequestMapping(value = "/changeMgtCooperationTime", method = RequestMethod.POST) @ApiOperation(value = "修改合作时间") public R changeMgtCooperationTime(@RequestBody MgtChangeCoopDto mgtChangeCoopDto) { ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MgtTerminateCooperationDto.java
New file @@ -0,0 +1,25 @@ package com.ruoyi.shop.domain.dto; import com.ruoyi.system.api.domain.dto.MgtBaseDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @ClassName MgtTerminateCooperationDto * @Description TODO * @Author jqs * @Date 2023/6/20 12:41 * @Version 1.0 */ @Data public class MgtTerminateCooperationDto extends MgtBaseDto { @ApiModelProperty(value = "商户id") private Long shopId; @ApiModelProperty("合作状态0终止1开启") private Integer cooperativeFlag; } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -271,6 +271,40 @@ } /** * @description 终止合作 * @author jqs * @date 2023/6/20 12:01 * @param mgtTerminateCooperationDto * @return void */ @Override public void terminateMgtCooperation(MgtTerminateCooperationDto mgtTerminateCooperationDto){ Shop shop = this.getById(mgtTerminateCooperationDto.getShopId()); if(mgtTerminateCooperationDto.getCooperativeFlag()==1){ /*Date coopStartDate = shop.getCooperationStartTime(); Date coopEndDate = shop.getCooperationEndTime(); Date nowTime = new Date(); //判断合作时间 没在时间内不能开启 if(coopStartDate.compareTo(nowTime)>0&&coopEndDate.compareTo(nowTime)<0){ throw new ServiceException(AppErrorConstant.COOPERATION_TIME_ERROR); }*/ shop.setCooperativeFlag(1); if(shop.getShopStatus()==2&&shop.getFrozenFlag()==0){ shop.setShopStatus(1); }else if(shop.getShopStatus()==2&&shop.getFrozenFlag()==1){ shop.setShopStatus(0); } }else{ shop.setCooperativeFlag(0); shop.setShopStatus(2); } shop.setUpdateTime(new Date()); shop.setUpdateUserId(mgtTerminateCooperationDto.getUserId()); this.saveOrUpdate(shop); } /** * 修改合作时间 * @param mgtChangeCoopDto */ ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java
@@ -44,6 +44,15 @@ void changeCooperationTime(MgtChangeCoopDto mgtChangeCoopDto); /** * @description 终止合作 * @author jqs * @date 2023/6/20 12:01 * @param mgtTerminateCooperationDto * @return void */ void terminateMgtCooperation(MgtTerminateCooperationDto mgtTerminateCooperationDto); /** * 分页获取商户 * @param page * @param mgtShopPageDto ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
@@ -482,7 +482,7 @@ shop_id, shop_name FROM t_shop WHERE del_flag = 0 AND shop_id IN (#{shopIds}) WHERE del_flag = 0 AND FIND_IN_SET(shop_id,#{shopIds}) > 0 </select> <select id="pageMgtShopByCityCode" resultType="com.ruoyi.system.api.domain.vo.MgtSimpleShopVo"> ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/RecommendCooperationMapper.xml
@@ -44,7 +44,7 @@ </select> <update id="allotRecommend"> UPDATE t_recommend_cooperation set allot_user_id = #{param.allotUserId} WHERE id IN (#{param.recommendIds}) UPDATE t_recommend_cooperation set allot_user_id = #{param.allotUserId} WHERE del_flag = 0 AND FIND_IN_SET(id, #{param.recommendIds}) > 0 </update> <select id="customTotal" resultType="java.lang.Integer">