From 048ec0d0bee7792f7811a772711389c3e35fc340 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=98=A5=E4=BA=91?= <1994398261@qq.com> Date: Fri, 26 Sep 2025 16:22:24 +0800 Subject: [PATCH] =?UTF-8?q?crm=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/BusiNoticeServiceImpl.java | 66 +++- .../impl/BusiNoticeSignServiceImpl.java | 30 +- .../member/service/IMemberUserService.java | 2 + .../service/impl/MemberUserServiceImpl.java | 44 +++ .../mapper/busi/BusiNoticeMapper.xml | 340 +++++++++--------- .../mapper/busi/BusiSubscribeMapper.xml | 86 +++-- .../mapper/member/MemberUserMapper.xml | 57 ++- 7 files changed, 371 insertions(+), 254 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiNoticeServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiNoticeServiceImpl.java index 207f699..2d08b31 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiNoticeServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiNoticeServiceImpl.java @@ -101,7 +101,7 @@ public class BusiNoticeServiceImpl extends ServiceImpl{ try { item.setUserNickName(userService.selectUserById(item.getUserId()).getNickName()); - MemberUserVO memberUserVO = memberUserService.queryByUserId(item.getUserId(), "01"); + MemberUserVO memberUserVO = memberUserService.queryByUserIdEasy(item.getUserId(), "01"); item.setIdentityType(memberUserVO.getIdentityType()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(BusiNoticeSign::getNoticeId,item.getId()); @@ -158,7 +158,11 @@ public class BusiNoticeServiceImpl extends ServiceImpl queryWrapper =new LambdaQueryWrapper<>(); - queryWrapper.gt(BusiNotice::getEndDate, DateUtil.format(new Date(),"yyyy-MM-dd")).eq(BusiNotice::getApprovalStatus,1) - .ne(BusiNotice::getId,data.getId()); - List list = this.list(queryWrapper); //无问题数据直接审核通过 data.setApprovalStatus("1"); data.setApprovalUserId(null); data.setApprovalTime(new Date()); - //遍历 list的每条数据与data对比,如果两条数据相似度大于70% 提出预警 - for (BusiNotice busiNotice : list) { - if (StringUtils.isNotEmpty(data.getThirdUrl())&&StringUtils.isNotEmpty(busiNotice.getThirdUrl())){ - if (data.getThirdUrl().equals(busiNotice.getThirdUrl())){ - //title 和 detail 相似度大于70% 待审核 - data.setApprovalStatus("8"); - data.setSimilarityIds(Optional.ofNullable(data.getSimilarityIds()).orElse("")+busiNotice.getId()+","); - result.put("code",500); - result.put("msg","通告查重,下次早点上传哦!"); + if (data.getEndDate().before(new Date())){ + data.setApprovalStatus("8"); + result.put("code",500); + result.put("msg","截至时间不能早于当前时间!"); + } else if (StringUtils.isNotEmpty(data.getThirdUrl())){ + //如果以问号或eid=结尾驳回 + if (data.getThirdUrl().endsWith("eid=") || data.getThirdUrl().endsWith("?")){ + data.setApprovalStatus("8"); + result.put("code",500); + result.put("msg","第三方链接格式非法!"); + }else{ + //判断 内容重复度 是否大于70% + //先获取 当前系统中截止日期之前的 + LambdaQueryWrapper queryWrapper =new LambdaQueryWrapper<>(); + queryWrapper.gt(BusiNotice::getEndDate, DateUtil.format(new Date(),"yyyy-MM-dd")).eq(BusiNotice::getApprovalStatus,1).ne(BusiNotice::getId,data.getId()); + List list = this.list(queryWrapper); + //遍历 list的每条数据与data对比,如果两条数据相似度大于70% 提出预警 + for (BusiNotice busiNotice : list) { + //过滤掉换行和空格符 + if (StringUtils.isNotEmpty(data.getThirdUrl())&&StringUtils.isNotEmpty(busiNotice.getThirdUrl())){ + if (data.getThirdUrl().replaceAll("\\s*|\t|\r|\n","").equals(busiNotice.getThirdUrl().replaceAll("\\s*|\t|\r|\n",""))){ + //两条thirdurl相等 + data.setApprovalStatus("8"); + data.setSimilarityIds(Optional.ofNullable(data.getSimilarityIds()).orElse("")+busiNotice.getId()+","); + result.put("code",500); + result.put("msg","通告查重,下次早点上传哦!"); + }else if (busiNotice.getThirdUrl().replaceAll("\\s*|\t|\r|\n","").contains(data.getThirdUrl().replaceAll("\\s*|\t|\r|\n",""))||data.getThirdUrl().replaceAll("\\s*|\t|\r|\n","").contains(busiNotice.getThirdUrl().replaceAll("\\s*|\t|\r|\n",""))){ + //两条thirdurl存在包含情况 + data.setApprovalStatus("8"); + data.setSimilarityIds(Optional.ofNullable(data.getSimilarityIds()).orElse("")+busiNotice.getId()+","); + result.put("code",500); + result.put("msg","通告查重,下次早点上传哦!"); + }else if (isEidEqual(data.getThirdUrl().replaceAll("\\s*|\t|\r|\n",""),busiNotice.getThirdUrl().replaceAll("\\s*|\t|\r|\n",""))){ + //两条thirdurl都存在eid且eid相等 + data.setApprovalStatus("8"); + data.setSimilarityIds(Optional.ofNullable(data.getSimilarityIds()).orElse("")+busiNotice.getId()+","); + result.put("code",500); + result.put("msg","通告查重,下次早点上传哦!"); + } + if (data.getApprovalStatus().equals("8")){ + break; + } + } } } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiNoticeSignServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiNoticeSignServiceImpl.java index 4f71e18..39ad7fe 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiNoticeSignServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiNoticeSignServiceImpl.java @@ -15,11 +15,14 @@ import com.ruoyi.common.utils.DateUtils; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.member.domain.MemberPoints; import com.ruoyi.member.service.IMemberCardService; +import com.ruoyi.member.service.IMemberPointsService; import com.ruoyi.member.service.IMemberUserService; import com.ruoyi.member.vo.MemberUserVO; +import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysUserService; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +52,10 @@ public class BusiNoticeSignServiceImpl extends ServiceImpl queryListPage(BusiNoticeSign pageReqVO, Page page) { @@ -106,6 +113,27 @@ public class BusiNoticeSignServiceImpl extends ServiceImpl().eq(BusiNotice::getId, appNoticeSign.getNoticeId()).ge(BusiNotice::getCreateTime, DateUtils.getNowDate().getTime() - 86400000)) == 50) { + String point = sysConfigService.selectConfigByKey("goodNotice"); + if (StringUtils.isNotEmpty(point) && Integer.parseInt(point) > 0) { + MemberPoints memberPoints = new MemberPoints(); + memberPoints.setUserId(busiNotice.getUserId()); + memberPoints.setPoints(Integer.parseInt(point)); + memberPoints.setType("1"); + memberPoints.setTitle("发布优质通告:" + busiNotice.getTitle() + ",奖励" + Integer.parseInt(point) + "积分"); + memberPointsService.savePoints(memberPoints); + } + } + } + + }catch (Exception e){ + log.error("优质通告积分赠送失败",e); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberUserService.java b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberUserService.java index ce81724..4baaf16 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberUserService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/service/IMemberUserService.java @@ -64,6 +64,8 @@ public interface IMemberUserService extends IService { **/ MemberUserVO queryByUserId(Long userId,String userType); + MemberUserVO queryByUserIdEasy(Long userId,String userType); + /** * 微信授权登陆 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberUserServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberUserServiceImpl.java index 330ab65..ff7a546 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberUserServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/member/service/impl/MemberUserServiceImpl.java @@ -2,6 +2,7 @@ package com.ruoyi.member.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -28,11 +29,13 @@ import com.ruoyi.constant.DictConstants; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.member.domain.MemberCard; import com.ruoyi.member.domain.MemberOrder; +import com.ruoyi.member.domain.MemberPoints; import com.ruoyi.member.domain.MemberUser; import com.ruoyi.member.mapper.MemberUserMapper; import com.ruoyi.member.service.*; import com.ruoyi.member.vo.MemberUserVO; import com.ruoyi.system.mapper.SysUserMapper; +import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.system.service.ISysUserService; import org.springframework.beans.BeanUtils; @@ -88,6 +91,12 @@ public class MemberUserServiceImpl extends ServiceImpl 0) { + MemberPoints memberPoints = new MemberPoints(); + memberPoints.setUserId(inviteId); + memberPoints.setPoints(Integer.parseInt(point)); + memberPoints.setType("1"); + memberPoints.setTitle("邀请新用户:" + phone + ",得" + Integer.parseInt(point) + "积分"); + memberPointsService.savePoints(memberPoints); + } + } catch (Exception e) { + log.error("邀请用户积分异常", e); + } + } + } //插入用户扩展信息表数据 this.save(new MemberUser(DictConstants.USER_TYPE_TGZ,user,dlRightsConfig.getAddNotice())); this.save(new MemberUser(DictConstants.USER_TYPE_BZ,user,null)); diff --git a/ruoyi-admin/src/main/resources/mapper/busi/BusiNoticeMapper.xml b/ruoyi-admin/src/main/resources/mapper/busi/BusiNoticeMapper.xml index f9e8668..b3accf1 100644 --- a/ruoyi-admin/src/main/resources/mapper/busi/BusiNoticeMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/busi/BusiNoticeMapper.xml @@ -5,64 +5,67 @@ - select main.id, main.user_id, main.title, main.platform_code, main.province, main.city, main.fee_down, main.fee_up, main.is_self_price, main.gift_detail, main.gift_price, main.end_date, main.brand, main.is_show_brand, main.need_num, main.fans_down, main.fans_up, main.is_eligible, main.pic, main.collect, main.detail, main.images, main.blogger_types, main.is_show_tel, main.wechat, main.tel, main.group_image, main.is_use_coupon, main.approval_status, main.approval_user_id, main.approval_time, main.approval_remark, main.creator, main.create_time, main.updater, main.update_time, main.del_flag,main.is_platform_free,main.is_urgent,main.similarity_ids, bTable.title as platformName,main.third_url from dl_busi_notice main - left join dl_base_category bTable on main.platform_code = bTable.code - - left join sys_user uTable on uTable.user_id = main.user_id + left join dl_base_category bTable on main.platform_code = bTable.code and bTable.del_flag = 0 + + left join sys_user uTable on uTable.user_id = main.user_id and uTable.del_flag = '0' - main.del_flag = '0' - and main.id = #{entity.id} - and uTable.nick_name like concat('%', #{entity.userNickName}, '%') - and main.user_id = #{entity.userId} - and main.province = #{entity.province} - and main.city = #{entity.city} - and (main.third_url is not null and main.third_url != '') - and (main.third_url is null or main.third_url = '') - and (main.third_url like concat('%', #{entity.params.thirdUrl}, '%')) - and main.title like concat('%', #{entity.title}, '%') - and main.platform_code = #{entity.platformCode} - and main.is_urgent = #{entity.isUrgent} - and main.is_platform_free = #{entity.isPlatformFree} - + main.del_flag = 0 + and main.id = #{entity.id} + and uTable.nick_name like concat('%', #{entity.userNickName}, '%') + and main.user_id = #{entity.userId} + and main.province = #{entity.province} + and main.city = #{entity.city} + and (main.third_url is not null and main.third_url != '') + and (main.third_url is null or main.third_url = '') + and (main.third_url like concat('%', #{entity.params.thirdUrl}, '%')) + and main.title like concat('%', #{entity.title}, '%') + and main.platform_code = #{entity.platformCode} + and main.is_urgent = #{entity.isUrgent} + and main.is_platform_free = #{entity.isPlatformFree} + - and main.approval_status !='2' and main.end_date >= CURDATE() + and main.approval_status != '2' and main.end_date >= CURDATE() - and (main.approval_status ='2' or main.end_date < CURDATE()) + and (main.approval_status = '2' or main.end_date < CURDATE()) - and main.fee_down = ]]> #{entity.params.beginFeeDown} + and main.fee_down =]]> #{entity.params.beginFeeDown} - - and main.fee_down #{entity.params.endFeeDown} + + and main.fee_down #{entity.params.endFeeDown} - and main.fans_down = ]]> #{entity.params.beginFansDown} + and main.fans_down =]]> #{entity.params.beginFansDown} - - and main.fans_down #{entity.params.endFansDown} + + and main.fans_down #{entity.params.endFansDown} + + and main.brand like concat('%', #{entity.brand}, '%') + and main.pic = #{entity.pic} + and main.collect = #{entity.collect} + and main.blogger_types = #{entity.bloggerTypes} + and main.is_use_coupon = #{entity.isUseCoupon} + and main.approval_status = #{entity.approvalStatus} + + and main.create_time between #{entity.params.beginCreateTime} and #{entity.params.endCreateTime} - and main.brand like concat('%', #{entity.brand}, '%') - and main.pic = #{entity.pic} - and main.collect = #{entity.collect} - and main.blogger_types = #{entity.bloggerTypes} - and main.is_use_coupon = #{entity.isUseCoupon} - and main.approval_status = #{entity.approvalStatus} - and main.create_time between #{entity.params.beginCreateTime} and #{entity.params.endCreateTime} - order by FIELD(main.approval_status,0,1,9,2) asc, main.create_time desc + order by FIELD(main.approval_status,'0','1','9','2') asc, main.create_time desc + + + SELECT dbn.*, - -- dbnv.view_num AS viewNum, su.avatar, su.nick_name AS userNickName, - count(sign.id) as reportNum + (SELECT COUNT(1) FROM dl_busi_notice_sign sign + WHERE sign.notice_id = dbn.id AND sign.del_flag = 0) as reportNum FROM dl_busi_notice dbn - -- LEFT JOIN dl_busi_notice_view dbnv ON dbn.id = dbnv.id LEFT JOIN sys_user su ON dbn.user_id = su.user_id - left join dl_busi_notice_sign sign on sign.notice_id = dbn.id and sign.del_flag = 0 WHERE dbn.del_flag = 0 AND (dbn.approval_status = '1') @@ -266,78 +262,75 @@ order by dbns.create_time desc and dbn.platform_code IN - -- platform_code 包含it - #{it} - + #{it} + - and - - dbn.blogger_types like concat('%',#{it},'%') + and ( + + dbn.blogger_types like concat('%',#{it},'%') + ) and dbn.is_platform_free = #{entity.settleTypeCode} - and - - title like concat('%',#{it},'%') or detail like concat('%',#{it},'%') or brand like concat('%',#{it},'%') + and ( + + (title like concat('%',#{it},'%') or detail like concat('%',#{it},'%') or brand like concat('%',#{it},'%')) + ) - AND ( dbn.fans_up <=#{entity.fansUp} ) + AND dbn.fans_up <=#{entity.fansUp} - AND ( dbn.fans_up >=#{entity.fansDown} ) + AND dbn.fans_up >=#{entity.fansDown} - AND ( dbn.fee_up <=#{entity.feeUp} ) + AND dbn.fee_up <=#{entity.feeUp} - AND ( dbn.fee_down >=#{entity.feeDown} ) + AND dbn.fee_down >=#{entity.feeDown} and dbn.is_urgent = #{entity.isUrgent} and dbn.is_platform_free = #{entity.isPlatformFree} - group by dbn.id ORDER BY - - -- 默认正序排列 -- dbn.create_time DESC + + + - + + + diff --git a/ruoyi-admin/src/main/resources/mapper/busi/BusiSubscribeMapper.xml b/ruoyi-admin/src/main/resources/mapper/busi/BusiSubscribeMapper.xml index 9d64d09..9485dd4 100644 --- a/ruoyi-admin/src/main/resources/mapper/busi/BusiSubscribeMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/busi/BusiSubscribeMapper.xml @@ -19,45 +19,69 @@ diff --git a/ruoyi-admin/src/main/resources/mapper/member/MemberUserMapper.xml b/ruoyi-admin/src/main/resources/mapper/member/MemberUserMapper.xml index b1672c5..e389fe5 100644 --- a/ruoyi-admin/src/main/resources/mapper/member/MemberUserMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/member/MemberUserMapper.xml @@ -62,17 +62,10 @@ su.status AS status, su.avatar AS avatar, su.phonenumber AS phonenumber, - su_temp.nick_name AS inviteName, - GROUP_CONCAT(mc.card_name SEPARATOR ', ') AS memberCardName + su_temp.nick_name AS inviteName from dl_member_user main LEFT JOIN sys_user su ON main.user_id = su.user_id AND su.del_flag = 0 LEFT JOIN sys_user su_temp ON su.invite_id = su_temp.user_id AND su_temp.del_flag = 0 - LEFT JOIN dl_member_card mc - ON main.user_id = mc.user_id - AND mc.start_date <= CURDATE() - AND mc.end_date >= CURDATE() - AND mc.del_flag = 0 - AND mc.user_type = #{entity.userType} main.del_flag = 0 @@ -97,7 +90,7 @@ ORDER BY ${entity.params.orderBy} - ORDER BY mc.create_time desc + ORDER BY main.create_time desc @@ -157,29 +150,39 @@ su.avatar AS avatar, su.phonenumber AS phonenumber, su_temp.nick_name AS inviteName, - GROUP_CONCAT(mc.card_name SEPARATOR ', ') AS memberCardName, - sum(dmo2.goods_price) AS monthMoney, - sum(dmo.goods_price) AS allMoney, + mc.card_name AS memberCardName, + dmo2.monthMoney AS monthMoney, + dmo.allMoney AS allMoney, main.create_time from dl_member_user main LEFT JOIN sys_user su ON main.user_id = su.user_id AND su.del_flag = 0 LEFT JOIN sys_user su_temp ON su.invite_id = su_temp.user_id AND su_temp.del_flag = 0 LEFT JOIN ( - SELECT mc_inner.* - FROM dl_member_card mc_inner + SELECT mc1.user_id, mc1.card_name + FROM dl_member_card mc1 INNER JOIN ( - SELECT user_id, MAX(create_time) AS latest_time + SELECT user_id, MAX(create_time) as latest_time FROM dl_member_card WHERE del_flag = 0 AND user_type = #{entity.userType} GROUP BY user_id - ) latest ON mc_inner.user_id = latest.user_id AND mc_inner.create_time = latest.latest_time + ) mc2 ON mc1.user_id = mc2.user_id AND mc1.create_time = mc2.latest_time + WHERE mc1.start_date <= CURDATE() AND mc1.end_date >= CURDATE() ) mc ON main.user_id = mc.user_id - AND mc.start_date <= CURDATE() - AND mc.end_date >= CURDATE() - left join dl_member_order dmo on dmo.user_id = su.user_id and dmo.user_type = '02' and dmo.is_pay = 1 - left join dl_member_order dmo2 on dmo2.user_id = su.user_id and dmo2.user_type = '02' and dmo2.is_pay = 1 - and dmo.create_time =]]> DATE_FORMAT(CURDATE(), '%Y-%m-01') - and dmo.create_time LAST_DAY(CURDATE()) + LEFT JOIN ( + SELECT user_id, SUM(goods_price) AS allMoney + FROM dl_member_order + WHERE user_type = '02' AND is_pay = 1 + GROUP BY user_id + ) dmo ON dmo.user_id = su.user_id + LEFT JOIN ( + SELECT user_id, SUM(goods_price) AS monthMoney + FROM dl_member_order + WHERE user_type = '02' + AND is_pay = 1 + AND create_time >= DATE_FORMAT(CURDATE(), '%Y-%m-01') + AND create_time <= LAST_DAY(CURDATE()) + GROUP BY user_id + ) dmo2 ON dmo2.user_id = su.user_id main.del_flag = 0 @@ -196,25 +199,21 @@ and main.ttotal_num >= #{entity.params.minnum} and main.ttotal_num <= #{entity.params.maxnum} and mc.card_name = #{entity.params.isVip} - - GROUP BY main.user_id - having sum(dmo.goods_price)>0 + AND dmo.allMoney > 0 - having sum(dmo.goods_price) is null + AND (dmo.allMoney IS NULL OR dmo.allMoney = 0) ORDER BY ${entity.params.orderBy} - ORDER BY mc.create_time desc + ORDER BY mc.card_name IS NULL, main.create_time DESC - -