33个文件已修改
16个文件已删除
2个文件已添加
| | |
| | | import com.ruoyi.common.core.annotation.Excel.ColumnType; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | |
| | | import java.util.Arrays; |
| | | import java.util.Date; |
| | | import java.util.StringJoiner; |
| | | |
| | | /** |
| | | * 操作日志记录表 oper_log |
| | |
| | | this.operParam = operParam; |
| | | } |
| | | |
| | | |
| | | public String getJsonResult() |
| | | { |
| | | return jsonResult; |
| | |
| | | public void setOperContent(String operContent) { |
| | | this.operContent = operContent; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return new StringJoiner(", ", SysOperLog.class.getSimpleName() + "[", "]") |
| | | .add("operId=" + operId) |
| | | .add("title='" + title + "'") |
| | | .add("businessType=" + businessType) |
| | | .add("businessTypes=" + Arrays.toString(businessTypes)) |
| | | .add("method='" + method + "'") |
| | | .add("requestMethod='" + requestMethod + "'") |
| | | .add("operatorType=" + operatorType) |
| | | .add("operName='" + operName + "'") |
| | | .add("deptName='" + deptName + "'") |
| | | .add("operUrl='" + operUrl + "'") |
| | | .add("operIp='" + operIp + "'") |
| | | .add("operParam='" + operParam + "'") |
| | | .add("jsonResult='" + jsonResult + "'") |
| | | .add("status=" + status) |
| | | .add("errorMsg='" + errorMsg + "'") |
| | | .add("operTime=" + operTime) |
| | | .add("costTime=" + costTime) |
| | | .add("operContent='" + operContent + "'") |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain.vo; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * @ClassName MerMemberTotalVo |
| | | * @Description TODO |
| | | * @Author jqs |
| | | * @Date 2023/8/29 16:55 |
| | | * @Version 1.0 |
| | | */ |
| | | @Data |
| | | public class MerMemberSimpleTotalVo { |
| | | |
| | | @ApiModelProperty(value = "次数剩余") |
| | | private Integer surpNumber; |
| | | |
| | | @ApiModelProperty(value = "消费次数") |
| | | private Integer userNumber; |
| | | |
| | | @ApiModelProperty(value = "消费总额") |
| | | private BigDecimal payMoney; |
| | | |
| | | @ApiModelProperty(value = "待支付金额") |
| | | private BigDecimal unpaidMoney; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain.vo; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @ClassName MgtUserTaskMsgVo |
| | | * @Description TODO |
| | | * @Author jqs |
| | | * @Date 2023/8/29 14:20 |
| | | * @Version 1.0 |
| | | */ |
| | | @Data |
| | | public class MgtUserTaskMsgVo { |
| | | |
| | | @ApiModelProperty(value="userId") |
| | | private Long userId; |
| | | |
| | | @ApiModelProperty(value="任务名") |
| | | private String taskTitle; |
| | | |
| | | |
| | | } |
| | |
| | | public R<AgencyTotalVo> getAgencyTotalVo(List<Long> shopIdList) { |
| | | return R.fail("获取区域统计失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<MerMemberSimpleTotalVo> getMerMemberSimpleTotalVo(MerBaseDto merBaseDto) { |
| | | return R.fail("获取商户会员订单统计失败:" + throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
| | |
| | | public R<List<Long>> listShopIdByCityCode(List<String> cityCodes) { |
| | | return R.fail("获取商户列表失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<MgtUserTaskMsgVo>> getTaskMsgList() { |
| | | return R.fail("获取任务通知列表失败:" + throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
| | |
| | | */ |
| | | @PostMapping("/order/getAgencyTotalVo") |
| | | public R<AgencyTotalVo> getAgencyTotalVo(@RequestBody List<Long> shopIdList); |
| | | |
| | | |
| | | /** |
| | | * @description 获取用户统计 |
| | | * @author jqs |
| | | * @date 2023/8/29 17:38 |
| | | * @param merBaseDto |
| | | * @return R<MerMemberSimpleTotalVo> |
| | | */ |
| | | @PostMapping("/order/getMerMemberSimpleTotalVo") |
| | | public R<MerMemberSimpleTotalVo> getMerMemberSimpleTotalVo(@RequestBody MerBaseDto merBaseDto); |
| | | } |
| | |
| | | |
| | | @PostMapping("/shop/listShopIdByCityCode") |
| | | R<List<Long>> listShopIdByCityCode(@RequestBody List<String> cityCodes); |
| | | |
| | | /** |
| | | * @description 获取今日任务通知 |
| | | * @author jqs |
| | | * @date 2023/8/29 15:05 |
| | | * @param |
| | | * @return R<List<MgtUserTaskMsgVo>> |
| | | */ |
| | | @PostMapping("/shop/getTaskMsgList") |
| | | R<List<MgtUserTaskMsgVo>> getTaskMsgList(); |
| | | } |
| | |
| | | { |
| | | throw new ServiceException(userResult.getMsg()); |
| | | } |
| | | if (401 == userResult.getCode()) |
| | | { |
| | | throw new ServiceException("商户已被冻结,请联系管理员",401); |
| | | } |
| | | QwH5LoginVo userInfo = userResult.getData(); |
| | | SysUser user = userInfo.getSysUser(); |
| | | String username = user.getUserName(); |
| | |
| | | package com.ruoyi.common.log.aspect; |
| | | |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.fasterxml.jackson.core.JsonProcessingException; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.ruoyi.common.core.utils.ServletUtils; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.core.utils.ip.IpUtils; |
| | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.Collection; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | |
| | | && (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod))) |
| | | { |
| | | String params = argsArrayToString(joinPoint.getArgs(), excludeParamNames); |
| | | operLog.setOperParam(StringUtils.substring(params, 0, 2000)); |
| | | if(operLog.getOperContent().equals("编辑商户")){ |
| | | // 将JSON字符串转换为Map |
| | | ObjectMapper objectMapper = new ObjectMapper(); |
| | | Map<String, String> jsonMap = new HashMap<>(); |
| | | try { |
| | | jsonMap = objectMapper.readValue(params, HashMap.class); |
| | | } catch (JsonProcessingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | // 从Map中删除指定的元素 |
| | | jsonMap.remove("shopDetail"); |
| | | // 将Map转换回JSON字符串 |
| | | try { |
| | | params = objectMapper.writeValueAsString(jsonMap); |
| | | } catch (JsonProcessingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | if(operLog.getOperContent().equals("编辑商品")){ |
| | | // 将JSON字符串转换为Map |
| | | ObjectMapper objectMapper = new ObjectMapper(); |
| | | Map<String, String> jsonMap = new HashMap<>(); |
| | | try { |
| | | jsonMap = objectMapper.readValue(params, HashMap.class); |
| | | } catch (JsonProcessingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | // 从Map中删除指定的元素 |
| | | jsonMap.remove("goodsDetail"); |
| | | // 将Map转换回JSON字符串 |
| | | try { |
| | | params = objectMapper.writeValueAsString(jsonMap); |
| | | } catch (JsonProcessingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | operLog.setOperParam(StringUtils.substring(params, 0, 5000)); |
| | | } |
| | | else |
| | | { |
| | |
| | | @Data |
| | | public class MgtGoodsPageVo { |
| | | |
| | | |
| | | @Excel(name = "商品图片", width = 30, sort = 1) |
| | | @ApiModelProperty(value = "商品id") |
| | | private String goodsId; |
| | | |
| | | @Excel(name = "商品名称", width = 30, sort = 1) |
| | | @Excel(name = "商品名称", width = 30, sort = 3) |
| | | @ApiModelProperty(value = "商品名称") |
| | | private String goodsName; |
| | | |
| | | @Excel(name = "商品简介", width = 30, sort = 2) |
| | | @Excel(name = "商品简介", width = 30, sort = 4) |
| | | @ApiModelProperty(value = "商品简介") |
| | | private String goodsIntroduction; |
| | | |
| | | @Excel(name = "商品分类", width = 30, sort = 3) |
| | | @Excel(name = "所属分类", width = 30, sort = 6) |
| | | @ApiModelProperty(value = "商品分类") |
| | | private String goodsClass; |
| | | |
| | | @Excel(name = "商品标签", width = 30, sort = 5) |
| | | @Excel(name = "标签", width = 30, sort = 7) |
| | | @ApiModelProperty(value = "商品标签") |
| | | private String goodsTags; |
| | | |
| | | @Excel(name = "商品图片", width = 30) |
| | | @Excel(name = "商品图片", width = 30, sort = 2) |
| | | @ApiModelProperty(value = "商品图片") |
| | | private String goodsPicture; |
| | | |
| | | @Excel(name = "商品类型", width = 30, sort = 4) |
| | | @Excel(name = "商品类型", width = 30, sort = 6) |
| | | @ApiModelProperty(value = "商品类型1周期2服务3体验4单品") |
| | | private String goodsType; |
| | | |
| | | @Excel(name = "商品建议售价", width = 30, sort = 6) |
| | | @Excel(name = "建议售价", width = 30, sort = 8) |
| | | @ApiModelProperty(value = "商品建议售价") |
| | | @JsonSerialize(using = ToStringSerializer.class) |
| | | private BigDecimal suggestSalesPrice;; |
| | | |
| | | @Excel(name = "最低售价", width = 30, sort = 7) |
| | | @Excel(name = "最低售价", width = 30, sort = 9) |
| | | @ApiModelProperty(value = "最低售价") |
| | | @JsonSerialize(using = ToStringSerializer.class) |
| | | private BigDecimal mininumPrice;; |
| | | |
| | | @Excel(name = "销量", width = 30, sort = 8) |
| | | @Excel(name = "销量", width = 30, sort = 10) |
| | | @ApiModelProperty(value = "销量") |
| | | private Integer buyNumCount; |
| | | |
| | | @Excel(name = "销售额", width = 30, sort = 9) |
| | | @Excel(name = "销售额", width = 30, sort = 11) |
| | | @ApiModelProperty(value = "销售额") |
| | | @JsonSerialize(using = ToStringSerializer.class) |
| | | private BigDecimal buyMoneyTotal; |
| | | |
| | | @Excel(name = "是否推荐", width = 30, sort = 10) |
| | | @Excel(name = "是否推荐", width = 30, sort = 12) |
| | | @ApiModelProperty(value = "是否推荐") |
| | | private String recommendFlag; |
| | | |
| | | @Excel(name = "商品状态", width = 30, sort = 11) |
| | | @Excel(name = "状态", width = 30, sort = 13) |
| | | @ApiModelProperty(value = "商品状态") |
| | | private String goodsStatus; |
| | | |
| | | @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", sort = 12) |
| | | @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", sort = 14) |
| | | @ApiModelProperty(value = "创建时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date createTime; |
| | |
| | | <if test="param.createEndTime!=null and param.createEndTime != ''"> |
| | | AND Date(ta.create_time) <= #{param.createEndTime} |
| | | </if> |
| | | ORDER BY ta.create_time DESC |
| | | </select> |
| | | |
| | | <select id="pageMgtActivityRecord" resultType="com.ruoyi.goods.domain.vo.MgtActivityRecordPageVo"> |
| | |
| | | <if test="param.orderFlag!=null and param.orderFlag == 0"> |
| | | AND order_id IS NULL |
| | | </if> |
| | | ORDER BY create_time DESC |
| | | </select> |
| | | |
| | | <select id="pagePlatformMerActivity" resultType="com.ruoyi.goods.domain.vo.MerActivityPageVo"> |
| | |
| | | LEFT JOIN t_goods_file tgf ON tg.goods_id = tgf.goods_id AND tgf.del_flag = 0 AND tgf.file_type = 1 |
| | | LEFT JOIN t_shop_goods tsg ON tg.goods_id = tsg.goods_id AND tsg.shop_id = #{shopId} |
| | | WHERE tsc.del_flag = 0 AND tg.del_flag = 0 AND tsc.shop_id = #{shopId} AND tsc.user_id = #{userId} AND tg.del_flag = 0 AND tg.goods_status = 1 |
| | | ORDER BY tg.create_time DESC |
| | | ORDER BY tsc.create_time DESC |
| | | </select> |
| | | |
| | | <update id="deleteByUserIdAndGoodsId"> |
| | |
| | | import com.ruoyi.member.domain.pojo.member.IntegralRecord; |
| | | import com.ruoyi.member.domain.pojo.member.MemberArchive; |
| | | import com.ruoyi.member.domain.pojo.member.MemberTotal; |
| | | import com.ruoyi.member.domain.vo.MerMemberTotalVo; |
| | | import com.ruoyi.member.domain.vo.*; |
| | | import com.ruoyi.member.mapper.member.MemberMapper; |
| | | import com.ruoyi.member.service.member.IntegralRecordService; |
| | |
| | | MemberTotal memberTotal = memberTotalService.getById(member.getMemberId()); |
| | | // 设置MerMemberInfoVo对象的属性值 |
| | | merMemberInfoVo.setSurpNumber(memberTotal.getUseableServiceCount()); |
| | | merMemberInfoVo.setUserNumber(memberTotal.getTotalPayCount()); |
| | | merMemberInfoVo.setPayMoney(memberTotal.getTotalPayMoney()); |
| | | // 创建MerBaseDto对象 |
| | | MerBaseDto merBaseDto = new MerBaseDto(); |
| | | // 设置MerBaseDto对象的属性值 |
| | | merBaseDto.setShopId(merBaseGetDto.getShopId()); |
| | | merBaseDto.setUserId(userId); |
| | | // 获取未支付订单金额 |
| | | BigDecimal unpaidMoney = remoteOrderService.getMemberUnpaidOrder(merBaseDto).getData(); |
| | | merMemberInfoVo.setUnpaidMoney(unpaidMoney); |
| | | MerMemberSimpleTotalVo memberSimpleTotalVo = remoteOrderService.getMerMemberSimpleTotalVo(merBaseDto).getData(); |
| | | merMemberInfoVo.setUserNumber(memberSimpleTotalVo.getUserNumber()); |
| | | merMemberInfoVo.setPayMoney(memberSimpleTotalVo.getPayMoney()); |
| | | merMemberInfoVo.setUnpaidMoney(memberSimpleTotalVo.getUnpaidMoney()); |
| | | // 获取最近的会员任务 |
| | | MemberTaskSimpleVo memberTaskSimpleVo = remoteShopService.getLastMemberTask(userId).getData(); |
| | | if (memberTaskSimpleVo != null) { |
| | |
| | | mgtShopIdByCodeDto.setShopCityCode(mgtBasePlatformDto.getShopCityCode()); |
| | | mgtShopIdByCodeDto.setShopAreaCode(mgtBasePlatformDto.getShopAreaCode()); |
| | | MgtShopIdByCodeVo mgtShopIdByCodeVo = remoteShopService.getShopIdByCode(mgtShopIdByCodeDto).getData(); |
| | | List<Long> list = new ArrayList<>(); |
| | | if (StringUtils.isNotBlank(mgtShopIdByCodeVo.getShopIds())) { |
| | | List<Long> list = Arrays.stream(mgtShopIdByCodeVo.getShopIds().split(",")) |
| | | list = Arrays.stream(mgtShopIdByCodeVo.getShopIds().split(",")) |
| | | .map(Long::valueOf) |
| | | .collect(Collectors.toList()); |
| | | mgtBasePlatformDto.setShopIdList(list); |
| | | } |
| | | mgtBasePlatformDto.setShopIdList(list); |
| | | } |
| | | //获取基础统计 |
| | | MgtPlTotalMemberTotalVo plTotalMemberTotalVo = memberMapper.getPlTotalMemberTotal(mgtBasePlatformDto); |
| | |
| | | } |
| | | MerMemberRecommendTotalVo memberRecommendTotalVo = new MerMemberRecommendTotalVo(); |
| | | //获取会员推荐排名 |
| | | List<MgtMapIntTotalVo> recommendList = memberMapper.getMerMemberRecommendRank(merTotalDto); |
| | | /*List<MgtMapIntTotalVo> recommendList = memberMapper.getMerMemberRecommendRank(merTotalDto); |
| | | if (recommendList != null && recommendList.size() > 0) { |
| | | recommendList = listRemoveNull(recommendList); |
| | | memberRecommendTotalVo.setRecommendList(recommendList); |
| | | } |
| | | }*/ |
| | | List<MgtMapIntTotalVo> recommendList = new ArrayList<>(); |
| | | memberRecommendTotalVo.setRecommendList(recommendList); |
| | | return memberRecommendTotalVo; |
| | | } |
| | | |
| | |
| | | <select id="pageMerMember" resultType="com.ruoyi.member.domain.vo.MerMemberPageVo"> |
| | | SELECT |
| | | tm.user_id userId, |
| | | tm.nick_name nickName, |
| | | tm.real_name nickName, |
| | | tm.avatar avatar, |
| | | CASE tm.gender WHEN 0 THEN '男' WHEN 1 THEN '女' ELSE '未知' END gender, |
| | | tm.mobile mobile, |
| | |
| | | FROM t_member tm |
| | | INNER JOIN t_member_total tmt ON tm.member_id = tmt.member_id |
| | | WHERE tm.del_flag = 0 AND binding_flag = 1 |
| | | <if test="param.shopIdList != null and shopIdList.size() > 0"> |
| | | <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.ageType !=null and param.ageType == 1"> |
| | | AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 1 AND 20 |
| | | AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 0 AND 20 |
| | | </if> |
| | | <if test="param.ageType !=null and param.ageType == 2"> |
| | | AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) BETWEEN 21 AND 31 |
| | |
| | | mgtBulletinBoardVo.setSalesTotal(mgtBulletinBoardVoOrder.getSalesTotal()); |
| | | mgtBulletinBoardVo.setUnUseOrderTotal(mgtBulletinBoardVoOrder.getUnUseOrderTotal()); |
| | | mgtBulletinBoardVo.setActivityOrderTotal(mgtBulletinBoardVoOrder.getActivityOrderTotal()); |
| | | mgtBulletinBoardVo.setActivityUserTotal(mgtBulletinBoardVoOrder.getActivityUserTotal()); |
| | | return R.ok(mgtBulletinBoardVo); |
| | | } |
| | | |
| | |
| | | AgencyTotalVo agencyTotalVo= orderService.getAgencyTotalVo(shopIdList); |
| | | return R.ok(agencyTotalVo); |
| | | } |
| | | |
| | | /** |
| | | * @description 获取用户统计 |
| | | * @author jqs |
| | | * @date 2023/8/29 17:38 |
| | | * @param merBaseDto |
| | | * @return R<MerMemberSimpleTotalVo> |
| | | */ |
| | | @PostMapping("/getMerMemberSimpleTotalVo") |
| | | public R<MerMemberSimpleTotalVo> getMerMemberSimpleTotalVo(@RequestBody MerBaseDto merBaseDto){ |
| | | MerMemberSimpleTotalVo memberSimpleTotalVo= orderService.getMerMemberSimpleTotalVo(merBaseDto); |
| | | return R.ok(memberSimpleTotalVo); |
| | | } |
| | | |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.controller.BaseController; |
| | | import com.ruoyi.common.redis.service.RedisService; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.order.domain.dto.*; |
| | | import com.ruoyi.order.domain.vo.*; |
| | |
| | | import com.ruoyi.system.api.domain.dto.AppMemberBindingDto; |
| | | import com.ruoyi.system.api.domain.poji.member.Member; |
| | | import com.ruoyi.system.api.model.LoginUser; |
| | | import com.ruoyi.system.api.service.RemoteConfigService; |
| | | import com.ruoyi.system.api.service.RemoteMemberService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | |
| | | @Resource |
| | | private OrderService orderService; |
| | | |
| | | @Resource |
| | | private RedisService redisService; |
| | | |
| | | @Resource |
| | | private RemoteConfigService remoteConfigService; |
| | | |
| | | |
| | | @RequestMapping(value = "/buyGoods", method = RequestMethod.POST) |
| | |
| | | @JsonSerialize(using = ToStringSerializer.class) |
| | | private BigDecimal totalOrderMoney; |
| | | |
| | | @ApiModelProperty(value = "总订金") |
| | | @JsonSerialize(using = ToStringSerializer.class) |
| | | private BigDecimal totalDepositMoney; |
| | | |
| | | @ApiModelProperty(value = "实收金额") |
| | | @JsonSerialize(using = ToStringSerializer.class) |
| | | private BigDecimal totalReceiveMoney; |
| | |
| | | * @return AgencyTotalVo |
| | | */ |
| | | AgencyTotalVo getAgencyTotalVo(@Param("shopIdList")List<Long> shopIdList); |
| | | |
| | | |
| | | /** |
| | | * @description 商户端会员订单统计 |
| | | * @author jqs |
| | | * @date 2023/8/29 17:39 |
| | | * @param merBaseDto |
| | | * @return MerMemberSimpleTotalVo |
| | | */ |
| | | MerMemberSimpleTotalVo getMerMemberSimpleTotalVo(@Param("param") MerBaseDto merBaseDto); |
| | | } |
| | |
| | | AgencyTotalVo agencyTotalVo = orderMapper.getAgencyTotalVo(shopIdList); |
| | | return agencyTotalVo; |
| | | } |
| | | |
| | | /** |
| | | * @description 商户端会员订单统计 |
| | | * @author jqs |
| | | * @date 2023/8/29 17:39 |
| | | * @param merBaseDto |
| | | * @return MerMemberSimpleTotalVo |
| | | */ |
| | | @Override |
| | | public MerMemberSimpleTotalVo getMerMemberSimpleTotalVo(MerBaseDto merBaseDto){ |
| | | return orderMapper.getMerMemberSimpleTotalVo(merBaseDto); |
| | | } |
| | | } |
| | |
| | | * @return |
| | | */ |
| | | Order getByOutTradeNo(String outTradeNo); |
| | | |
| | | /** |
| | | * @description 商户端会员订单统计 |
| | | * @author jqs |
| | | * @date 2023/8/29 17:39 |
| | | * @param merBaseDto |
| | | * @return MerMemberSimpleTotalVo |
| | | */ |
| | | MerMemberSimpleTotalVo getMerMemberSimpleTotalVo(MerBaseDto merBaseDto); |
| | | } |
| | |
| | | toc.order_from orderFrom, |
| | | CASE toc.order_from |
| | | WHEN 1 THEN "商城订单" |
| | | WHEN 2 THEN "秒杀活动订单" |
| | | WHEN 3 THEN "线下创建订单" |
| | | WHEN 2 THEN "秒杀订单" |
| | | WHEN 3 THEN "线下订单" |
| | | END orderFromDesc, |
| | | #{param.keyword} AS keyword |
| | | FROM t_order toc |
| | |
| | | |
| | | <select id="boardOrderTotal" resultType="com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo"> |
| | | SELECT |
| | | IFNULL(SUM(CASE WHEN order_status = 3 THEN pay_money ELSE 0 END),0) salesTotal, |
| | | IFNULL(SUM(CASE WHEN order_status = 3 THEN change_receivable_money ELSE 0 END),0) salesTotal, |
| | | IFNULL(SUM(CASE WHEN order_status = 2 THEN 1 ELSE 0 END),0) UnUseOrderTotal, |
| | | IFNULL(SUM(CASE WHEN order_from = 2 THEN 1 ELSE 0 END),0) activityOrderTotal |
| | | FROM t_order |
| | | WHERE del_flag = 0 |
| | | WHERE del_flag = 0 AND order_status IN (2,3) |
| | | </select> |
| | | |
| | | <select id="activityUserTotal" resultType="java.lang.Integer"> |
| | | SELECT |
| | | COUNT(DISTINCT user_id) |
| | | FROM t_order |
| | | WHERE del_flag = 0 AND order_from = 2 |
| | | WHERE del_flag = 0 AND order_from = 2 AND order_status IN (2,3) |
| | | </select> |
| | | |
| | | <select id="getTotalOrderTotalOrderFrom" resultType="com.ruoyi.order.domain.vo.MgtTotalOrderTotalVo"> |
| | |
| | | COUNT(order_id) AS mapValueFirst, |
| | | IFNULL(SUM(CASE WHEN pay_type = 1 THEN change_receivable_money WHEN pay_type = 2 THEN change_receivable_money + online_pay_money ELSE 0 END),0) AS mapValueSecond |
| | | FROM t_order |
| | | WHERE del_flag = 0 AND order_status IN (2,3) |
| | | WHERE del_flag = 0 AND order_status = 3 |
| | | <if test="param.shopId != null and param.shopId != ''"> |
| | | AND shop_id = #{param.shopId} |
| | | </if> |
| | |
| | | SELECT |
| | | CASE toc.order_from |
| | | WHEN 1 THEN "商城订单" |
| | | WHEN 2 THEN "秒杀活动订单" |
| | | WHEN 3 THEN "线下创建订单" |
| | | WHEN 2 THEN "秒杀订单" |
| | | WHEN 3 THEN "线下订单" |
| | | END mapKey, |
| | | IFNULL(SUM(CASE WHEN toc.pay_type = 1 THEN toc.change_receivable_money WHEN toc.pay_type = 2 THEN toc.change_receivable_money + toc.online_pay_money ELSE 0 END),0) mapValue |
| | | FROM t_order toc |
| | |
| | | SELECT |
| | | DATE_FORMAT(create_time, '%Y-%m-%d') AS mapKey, |
| | | COUNT(DISTINCT order_id) AS mapValueFirst, |
| | | SUM(order_money) AS mapValueSecond |
| | | IFNULL(SUM(CASE WHEN pay_type = 1 THEN change_receivable_money WHEN pay_type = 2 THEN change_receivable_money + online_pay_money ELSE 0 END),0) AS mapValueSecond |
| | | FROM t_order |
| | | WHERE del_flag = 0 AND order_from = 2 AND order_status IN (2,3) |
| | | WHERE del_flag = 0 AND order_from = 2 AND order_status = 3 |
| | | <if test="param.shopId != null and param.shopId != ''"> |
| | | AND shop_id = #{param.shopId} |
| | | </if> |
| | |
| | | SELECT |
| | | DATE_FORMAT(create_time, '%Y-%m-%d') AS mapKey, |
| | | COUNT(order_id) AS mapValueFirst, |
| | | IFNULL(SUM(receivable_money),0) AS mapValueSecond |
| | | IFNULL(SUM(CASE WHEN pay_type = 1 THEN change_receivable_money WHEN pay_type = 2 THEN change_receivable_money + online_pay_money ELSE 0 END),0) AS mapValueSecond |
| | | FROM |
| | | t_order |
| | | WHERE del_flag = 0 AND order_status = 3 |
| | |
| | | SELECT |
| | | CASE toc.order_from |
| | | WHEN 1 THEN "商城订单" |
| | | WHEN 2 THEN "秒杀活动订单" |
| | | WHEN 3 THEN "线下创建订单" |
| | | WHEN 2 THEN "秒杀订单" |
| | | WHEN 3 THEN "线下订单" |
| | | END mapKey, |
| | | IFNULL(SUM(toc.order_money),0) mapValue |
| | | FROM t_order toc |
| | |
| | | COUNT(DISTINCT CASE WHEN tog.goods_type = 3 THEN toc.user_id ELSE NULL END) servicePerson |
| | | FROM t_order toc |
| | | INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id |
| | | WHERE toc.del_flag = 0 AND toc.order_from = 2 AND toc.order_status IN (2,3) AND toc.new_member_flag = 1 |
| | | WHERE toc.del_flag = 0 AND toc.order_from = 2 AND toc.order_status = 3 AND toc.new_member_flag = 1 |
| | | <if test="param.shopIdList != null and param.shopIdList.size() > 0"> |
| | | AND toc.shop_id IN |
| | | <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> |
| | |
| | | SELECT |
| | | CASE toc.order_from |
| | | WHEN 1 THEN "商城订单" |
| | | WHEN 2 THEN "秒杀活动订单" |
| | | WHEN 3 THEN "线下创建订单" |
| | | WHEN 2 THEN "秒杀订单" |
| | | WHEN 3 THEN "线下订单" |
| | | END mapKey, |
| | | IFNULL(SUM(tog.goods_receivable_money),0) mapValue |
| | | FROM t_order toc |
| | |
| | | toc.user_id userId, |
| | | toc.order_money orderMoney, |
| | | toc.discount_money discountMoney, |
| | | toc.receivable_money receivableMoney, |
| | | toc.pay_money payMoney, |
| | | CASE toc.pay_type WHEN 1 THEN toc.order_money-toc.coupon_money WHEN 2 THEN toc.order_money-toc.coupon_money-toc.online_pay_money END receivableMoney, |
| | | toc.change_receivable_money payMoney, |
| | | CASE toc.order_from WHEN 1 THEN '小程序' WHEN 2 THEN CONCAT('秒杀活动(',toc.activity_name,')') WHEN 3 THEN '线下创建' END orderFrom, |
| | | CASE toc.order_status |
| | | WHEN 0 THEN "已取消" |
| | |
| | | WHEN 3 THEN "已完成" |
| | | END orderStatus |
| | | FROM t_order toc |
| | | WHERE toc.del_flag = 0 AND (toc.order_from = 1 OR toc.order_from = 3) |
| | | WHERE toc.del_flag = 0 |
| | | <if test="param.orderFrom != null"> |
| | | AND toc.order_from = #{param.orderFrom} |
| | | </if> |
| | |
| | | SUM(tog.goods_receivable_money) AS mapValueSecond |
| | | FROM t_order toc |
| | | INNER JOIN t_order_goods tog ON toc.order_id = tog.order_id |
| | | WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} AND toc.order_from = 2 AND toc.order_status IN (2,3) |
| | | WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} AND toc.order_from = 2 AND toc.order_status = 3 |
| | | <if test="param.goodsType !=null and param.goodsType != ''"> |
| | | AND tog.goods_type = #{param.goodsType} |
| | | </if> |
| | |
| | | COUNT(DISTINCT toc.user_id) AS mapValue |
| | | FROM t_order toc |
| | | INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id |
| | | WHERE toc.order_from = 2 AND toc.new_member_flag = 1 AND toc.order_status IN (2,3) AND toc.shop_id = #{param.shopId} |
| | | WHERE toc.order_from = 2 AND toc.new_member_flag = 1 AND toc.order_status = 3 AND toc.shop_id = #{param.shopId} |
| | | <if test="param.activityId !=null and param.activityId != ''"> |
| | | AND toc.activity_id = #{param.activityId} |
| | | </if> |
| | |
| | | COUNT(DISTINCT toc.user_id) AS mapValue |
| | | FROM t_order toc |
| | | INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id |
| | | WHERE toc.order_from = 2 AND toc.new_member_flag = 1 AND toc.order_status IN (2,3) |
| | | WHERE toc.order_from = 2 AND toc.new_member_flag = 1 AND toc.order_status = 3 |
| | | <if test="param.shopIdList != null and param.shopIdList.size() > 0"> |
| | | AND toc.shop_id IN |
| | | <foreach collection="param.shopIdList" item="item" open="(" separator="," close=")"> |
| | |
| | | WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} AND toc.order_from = 2 AND toc.order_status IN (2,3) |
| | | <if test="param.activityId !=null and param.activityId != ''"> |
| | | AND toc.activity_id = #{param.activityId} |
| | | </if> |
| | | <if test="param.goodsType !=null and param.goodsType != ''"> |
| | | AND tog.goods_type = #{param.goodsType} |
| | | </if> |
| | | <if test="param.userIdList !=null and param.userIdList.size()>0"> |
| | | AND toc.user_id IN |
| | |
| | | SELECT |
| | | COUNT(DISTINCT toc.order_id) orderTotal, |
| | | IFNULL(SUM(toc.order_money),0) totalOrderMoney, |
| | | IFNULL(SUM(toc.change_receivable_money),0) totalReceiveMoney |
| | | IFNULL(SUM(toc.change_receivable_money),0) totalReceiveMoney, |
| | | IFNULL(SUM(CASE WHEN toc.pay_type = 2 THEN toc.online_pay_money ELSE 0 END),0) totalDepositMoney |
| | | FROM t_order toc |
| | | WHERE toc.del_flag = 0 AND (toc.order_from = 1 OR toc.order_from = 3) |
| | | WHERE toc.del_flag = 0 |
| | | <if test="param.orderFrom != null"> |
| | | AND toc.order_from = #{param.orderFrom} |
| | | </if> |
| | |
| | | </foreach> |
| | | </select> |
| | | |
| | | <select id="getMerMemberSimpleTotalVo" resultType="com.ruoyi.system.api.domain.vo.MerMemberSimpleTotalVo"> |
| | | SELECT |
| | | COUNT(DISTINCT toc.order_id) userNumber, |
| | | IFNULL(SUM(toc.change_receivable_money),0) payMoney, |
| | | IFNULL(SUM(CASE WHEN toc.close_flag = 0 THEN toc.change_receivable_money - (CASE toc.pay_type WHEN 1 THEN toc.pay_money WHEN 2 THEN IFNULL(toc.offline_pay_money,0) END) ELSE 0 END),0) unpaidMoney |
| | | FROM t_order toc |
| | | WHERE toc.del_flag = 0 AND toc.user_id = #{param.userId} AND toc.shop_id = #{param.shopId} AND toc.order_status IN (2,3) |
| | | </select> |
| | | </mapper> |
| | |
| | | tsrd.consumer_goods_name consumerGoodsName, |
| | | tusr.service_type serviceType, |
| | | tusr.create_time createTime, |
| | | tsrd.service_num serviceNum, |
| | | 1 serviceNum, |
| | | tsrd.surp_num surpNum |
| | | FROM t_user_service_record tusr |
| | | LEFT JOIN t_service_record_detail tsrd ON tsrd.record_id = tusr.id |
| | |
| | | <artifactId>weixin-java-pay</artifactId> |
| | | <version>4.5.0</version> |
| | | </dependency> |
| | | |
| | | <!-- 微信支付 --> |
| | | <dependency> |
| | | <groupId>com.github.wechatpay-apiv3</groupId> |
| | | <artifactId>wechatpay-apache-httpclient</artifactId> |
| | |
| | | if(shop.getFrozenFlag()==1){ |
| | | String userKey = SecurityUtils.getUserKey(); |
| | | redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY+userKey); |
| | | throw new ServiceException("商户已被冻结",401); |
| | | throw new ServiceException("商户已被冻结,请联系管理员",401); |
| | | } |
| | | // 构造登录返回信息 |
| | | QwH5LoginVo qwH5LoginVo = new QwH5LoginVo(); |
| | |
| | | return R.ok(); |
| | | } |
| | | |
| | | /** |
| | | * @description 获取今日任务通知列表 |
| | | * @author jqs |
| | | * @date 2023/8/29 15:03 |
| | | * @param |
| | | * @return R<List<MgtUserTaskMsgVo>> |
| | | */ |
| | | @PostMapping("/getTaskMsgList") |
| | | R<List<MgtUserTaskMsgVo>> getTaskMsgList(){ |
| | | List<MgtUserTaskMsgVo> userTaskMsgVoList = shopService.getTaskMsgList(); |
| | | return R.ok(userTaskMsgVoList); |
| | | } |
| | | |
| | | } |
| | |
| | | import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; |
| | | import com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo; |
| | | import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo; |
| | | import com.ruoyi.system.api.domain.vo.MgtUserTaskMsgVo; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | |
| | | * @return List<Long> |
| | | */ |
| | | List<Long> listShopIdByCityCode(List<String> cityCodes); |
| | | |
| | | /** |
| | | * @description |
| | | * @author jqs |
| | | * @date 2023/8/29 14:36 |
| | | * @param |
| | | * @return List<MgtUserTaskMsgVo> |
| | | */ |
| | | List<MgtUserTaskMsgVo> getTaskMsgList(); |
| | | } |
| | |
| | | if(shop.getFrozenFlag()==1){ |
| | | String userKey = SecurityUtils.getUserKey(); |
| | | redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY+userKey); |
| | | throw new ServiceException("商户已被冻结",401); |
| | | throw new ServiceException("商户已被冻结,请联系管理员",401); |
| | | } |
| | | merHomeShopTotalVo.setShopType(shop.getShopType()); |
| | | MerHomeShopTotalVo orderVo = remoteOrderService.getMerHomeTotal(merHomeShopTotalVo).getData(); |
| | |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * @description |
| | | * @author jqs |
| | | * @date 2023/8/29 14:33 |
| | | * @param |
| | | * @return List<MgtUserTaskMsgVo> |
| | | */ |
| | | @Override |
| | | public List<MgtUserTaskMsgVo> getTaskMsgList(){ |
| | | return shopMapper.getTaskMsgList(); |
| | | } |
| | | |
| | | } |
| | |
| | | if(taskFileList!=null&&!taskFileList.isEmpty()){ |
| | | taskFileService.saveBatch(taskFileList); |
| | | } |
| | | agencyTaskRecordService.saveOrUpdate(agencyTaskRecord); |
| | | } |
| | | //创建新任务 |
| | | if(StringUtils.isNotBlank(merFollowAgencyTaskDto.getNextTaskDate())){ |
| | |
| | | if(taskFileList!=null&&!taskFileList.isEmpty()){ |
| | | taskFileService.saveBatch(taskFileList); |
| | | } |
| | | |
| | | } |
| | | // 判断下一个任务日期是否为空,并处理 |
| | | if (StringUtils.isNotBlank(merFollowMemberTaskDto.getNextTaskDate())) { |
| | |
| | | import com.ruoyi.system.api.domain.dto.MgtShopIdByCodeDto; |
| | | import com.ruoyi.system.api.domain.poji.member.Member; |
| | | import com.ruoyi.system.api.domain.poji.shop.Shop; |
| | | import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo; |
| | | import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; |
| | | import com.ruoyi.system.api.domain.vo.MgtShopIdByCodeVo; |
| | | import com.ruoyi.system.api.domain.vo.MgtSimpleShopVo; |
| | | import com.ruoyi.system.api.domain.vo.*; |
| | | |
| | | import java.util.List; |
| | | |
| | |
| | | * @return void |
| | | */ |
| | | ProfitSharingReceiverResult addProfitSharingReceiver(ProfitSharingReceiverRequest request); |
| | | |
| | | /** |
| | | * @description |
| | | * @author jqs |
| | | * @date 2023/8/29 14:36 |
| | | * @param |
| | | * @return List<MgtUserTaskMsgVo> |
| | | */ |
| | | List<MgtUserTaskMsgVo> getTaskMsgList(); |
| | | } |
| | |
| | | #{id} |
| | | </foreach> |
| | | </select> |
| | | |
| | | <select id="getTaskMsgList" resultType="com.ruoyi.system.api.domain.vo.MgtUserTaskMsgVo"> |
| | | SELECT |
| | | ts.belong_user_id userId, |
| | | CONCAT('[', GROUP_CONCAT(tst.task_title SEPARATOR '],['), ']') taskTitles |
| | | FROM t_shop_task tst |
| | | INNER JOIN t_shop ts ON tst.shop_id = ts.shop_id |
| | | WHERE tst.del_flag = 0 AND tst.task_status = 1 AND tst.task_date = CURRENT_DATE |
| | | GROUP BY userId |
| | | </select> |
| | | </mapper> |
| | |
| | | return wxService; |
| | | } |
| | | |
| | | |
| | | @Bean |
| | | public WxCryptUtil wxCryptUtil() { |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 定时同步企业微信部门 |
| | | */ |
| | | @Scheduled(cron="0 35 8 * * ?") |
| | | private void timingSendTaskMessage(){ |
| | | if(schedulerUtils.getSchedulerRun()) { |
| | | log.info("定时发送通知任务任务开始执行"); |
| | | sysWxCpService.sendTaskMessage(); |
| | | } |
| | | } |
| | | } |
| | |
| | | package com.ruoyi.system.service.impl.staff; |
| | | |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.system.api.domain.poji.sys.SysDept; |
| | | import com.ruoyi.system.api.domain.vo.MgtUserTaskMsgVo; |
| | | import com.ruoyi.system.api.service.RemoteShopService; |
| | | import com.ruoyi.system.domain.pojo.staff.SysStaff; |
| | | import com.ruoyi.system.service.staff.SysStaffService; |
| | | import com.ruoyi.system.service.staff.SysWxCpService; |
| | | import com.ruoyi.system.service.sys.ISysDeptService; |
| | | import lombok.extern.log4j.Log4j2; |
| | |
| | | import me.chanjar.weixin.cp.api.WxCpDepartmentService; |
| | | import me.chanjar.weixin.cp.api.WxCpService; |
| | | import me.chanjar.weixin.cp.bean.WxCpDepart; |
| | | import me.chanjar.weixin.cp.bean.message.WxCpMessage; |
| | | import me.chanjar.weixin.cp.bean.message.WxCpMessageSendResult; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | |
| | | private WxCpService wxCpService; |
| | | |
| | | @Resource |
| | | private RemoteShopService remoteShopService; |
| | | |
| | | @Resource |
| | | private ISysDeptService sysDeptService; |
| | | |
| | | @Resource |
| | | private SysStaffService sysStaffService; |
| | | /** |
| | | * @description |
| | | * @author jqs |
| | |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @description 企业微信消息推送 |
| | | * @author jqs |
| | | * @date 2023/8/29 11:05 |
| | | * @return void |
| | | */ |
| | | @Override |
| | | public void sendTaskMessage(){ |
| | | List<MgtUserTaskMsgVo> userTaskMsgVoList = remoteShopService.getTaskMsgList().getData(); |
| | | WxCpMessage message; |
| | | SysStaff sysStaff; |
| | | if(userTaskMsgVoList!=null&&!userTaskMsgVoList.isEmpty()){ |
| | | for(MgtUserTaskMsgVo mgtUserTaskMsgVo : userTaskMsgVoList){ |
| | | sysStaff = sysStaffService.getByUserId(mgtUserTaskMsgVo.getUserId()); |
| | | if(sysStaff!=null&& StringUtils.isNotBlank(sysStaff.getWxUserId())){ |
| | | message = new WxCpMessage(); |
| | | message.setAgentId(1000024); |
| | | message.setToUser(sysStaff.getWxUserId()); |
| | | message.setMsgType("text"); |
| | | message.setContent(mgtUserTaskMsgVo.getTaskTitle()+"今日需要任务跟进,请注意!"); |
| | | try { |
| | | WxCpMessageSendResult result = wxCpService.getMessageService().send(message); |
| | | System.out.println(result); |
| | | } catch (WxErrorException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | * @return void |
| | | */ |
| | | void syncDepartment(); |
| | | |
| | | /** |
| | | * @description 企业微信消息推送 |
| | | * @author jqs |
| | | * @date 2023/8/29 11:05 |
| | | * @return void |
| | | */ |
| | | void sendTaskMessage(); |
| | | } |
| | |
| | | |
| | | |
| | | import com.ruoyi.system.service.staff.SysWxCpService; |
| | | import org.junit.Test; |
| | | import org.junit.runner.RunWith; |
| | | import org.springframework.boot.test.context.SpringBootTest; |
| | | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; |
| | |
| | | @Resource |
| | | private SysWxCpService sysWxCpService; |
| | | |
| | | @Test |
| | | /*@Test |
| | | public void main() { |
| | | sysWxCpService.syncDepartment(); |
| | | } |
| | | }*/ |
| | | } |