crm功能开发

This commit is contained in:
朱春云 2025-08-15 15:45:59 +08:00
parent 4418f3cf8e
commit 9409bbd6d2
48 changed files with 863 additions and 237 deletions

View File

@ -29,11 +29,9 @@ import com.wechat.pay.java.core.Config;
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
import com.wechat.pay.java.core.RSAPublicKeyConfig;
import com.wechat.pay.java.core.http.*;
import com.wechat.pay.java.service.payments.jsapi.JsapiService;
import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension;
import com.wechat.pay.java.service.payments.jsapi.model.*;
import com.wechat.pay.java.service.payments.nativepay.NativePayService;
import com.wechat.pay.java.service.partnerpayments.jsapi.JsapiServiceExtension;
import com.wechat.pay.java.service.partnerpayments.jsapi.model.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -71,7 +69,7 @@ public class PayApi {
*/
@ApiOperation(value = "统一下单-统一接口", notes = "统一下单-统一接口")
@GetMapping("/prepayment")
public PrepayWithRequestPaymentResponse transactions( String orderNo,String type) {
public PrepayWithRequestPaymentResponse transactions(String orderNo, String type) {
LambdaQueryWrapper<MemberOrder> queryWrapper =new LambdaQueryWrapper<>();
queryWrapper.eq(MemberOrder::getOrderNo,orderNo).last("limit 1");
MemberOrder memberOrder = memberOrderService.getOne(queryWrapper);
@ -79,7 +77,7 @@ public class PayApi {
// 使用微信支付公钥的RSA配置
Config config =
new RSAPublicKeyConfig.Builder()
.merchantId(wechatPayConfig.getMchId())
.merchantId(wechatPayConfig.getSpMchid())
.privateKeyFromPath(wechatPayConfig.getPrivateKeyPath())
.publicKeyFromPath(wechatPayConfig.getPublicKeyPath())
.publicKeyId(wechatPayConfig.getPublicKeyId())
@ -97,17 +95,19 @@ public class PayApi {
// 金额单位为分
int totalInFen = goodsPrice.multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_UP).intValue();
amount.setTotal(totalInFen);
payer.setOpenid(user.getWxOpenId());
payer.setSubOpenid(user.getWxOpenId());
request.setAmount(amount);
request.setAppid(wechatPayConfig.getAppId());
request.setMchid(wechatPayConfig.getMchId());
request.setSpAppid(wechatPayConfig.getSpAppid());
request.setSpMchid(wechatPayConfig.getSpMchid());
request.setSubAppid(wechatPayConfig.getAppId());
request.setSubMchid(wechatPayConfig.getMchId());
request.setDescription("开通会员");
request.setNotifyUrl(wechatPayConfig.getNotifyUrl());
request.setOutTradeNo(orderNo);
request.setPayer(payer);
// 调用下单方法得到应答
// response包含了调起支付所需的所有参数可直接用于前端调起支付
return service.prepayWithRequestPayment(request);
return service.prepayWithRequestPayment(request, appConfig.getAppId());
}else {
// 构建service
JsapiServiceExtension service = new JsapiServiceExtension .Builder().config(config).build();
@ -119,17 +119,19 @@ public class PayApi {
// 金额单位为分
int totalInFen = goodsPrice.multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_UP).intValue();
amount.setTotal(totalInFen);
payer.setOpenid(user.getOpenId());
payer.setSubOpenid(user.getOpenId());
request.setAmount(amount);
request.setAppid(appConfig.getAppId());
request.setMchid(wechatPayConfig.getMchId());
request.setSpAppid(wechatPayConfig.getSpAppid());
request.setSpMchid(wechatPayConfig.getSpMchid());
request.setSubAppid(appConfig.getAppId());
request.setSubMchid(wechatPayConfig.getMchId());
request.setDescription("开通会员");
request.setNotifyUrl(wechatPayConfig.getNotifyUrl());
request.setOutTradeNo(orderNo);
request.setPayer(payer);
// 调用下单方法得到应答
// response包含了调起支付所需的所有参数可直接用于前端调起支付
return service.prepayWithRequestPayment(request);
return service.prepayWithRequestPayment(request, appConfig.getAppId());
}
}

View File

@ -1,9 +1,14 @@
package com.ruoyi.api;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.api.domain.WeChatMessage;
import com.ruoyi.api.service.IWeChatMessageService;
import com.ruoyi.busi.domain.BusiNotice;
import com.ruoyi.busi.service.IBusiNoticeService;
import com.ruoyi.busi.utils.WeChatUtils;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.SecurityUtils;
import com.wechat.pay.java.core.http.HttpMethod;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@ -15,6 +20,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.concurrent.TimeUnit;
@RestController
@RequestMapping("/wxMsgApi")
@ -23,6 +29,10 @@ public class WxMsgApi {
private WeChatUtils weChatUtils;
@Resource
private IWeChatMessageService weChatMessageService;
@Autowired
private RedisCache redisCache;
@Autowired
IBusiNoticeService busiNoticeService;
/**
* 校验签名
@ -55,6 +65,14 @@ public class WxMsgApi {
}
@GetMapping("/saveSignInfo")
public void saveSignInfo(String signId) throws IOException {
Long userId = SecurityUtils.getUserId();
BusiNotice byId = busiNoticeService.getById(signId);
redisCache.setCacheObject("signInfo:" + userId, JSONObject.toJSONString(byId),10, TimeUnit.SECONDS);
}

View File

@ -1,5 +1,6 @@
package com.ruoyi.api.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.json.JSONArray;
import com.alibaba.fastjson2.JSON;
@ -10,7 +11,14 @@ import com.ruoyi.api.service.IWeChatMessageService;
import com.ruoyi.api.util.HttpUtils;
import com.ruoyi.api.util.MessageUtil;
import com.ruoyi.base.domain.BaseConfig;
import com.ruoyi.base.service.IBaseCategoryService;
import com.ruoyi.base.service.IBaseConfigService;
import com.ruoyi.busi.domain.BusiNotice;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
@ -27,6 +35,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@ -47,10 +56,15 @@ public class WeChatMessageServiceImpl implements IWeChatMessageService {
@Value("${wx-app.token}")
private String token;
@Autowired
private SysUserMapper sysUserService;
@Resource
private IBaseConfigService configService;
@Autowired
private RedisCache redisCache;
@Autowired
private IBaseCategoryService baseCategoryService;
/**发送消息url*/
private static String SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/custom/send";
@ -115,17 +129,33 @@ public class WeChatMessageServiceImpl implements IWeChatMessageService {
// 事件类型
String event = requestMap.get("Event");
StringBuilder contentMessage = new StringBuilder();
String contentStr = "嗨,欢迎加入通告快接,您想咨询那个问题,请点击选择";
SysUser sysUser = sysUserService.selectWxUserByOpenIdOrPhone(fromUserName, null, null, null);
if (sysUser != null&&null!=sysUser.getUserId()){
Object cacheObject = redisCache.getCacheObject("signInfo:" + sysUser.getUserId());
if (ObjectUtil.isNotEmpty(cacheObject)){
BusiNotice busiNotice = JSONObject.parseObject(cacheObject.toString(), BusiNotice.class);
String platformName = baseCategoryService.selectByCode(busiNotice.getPlatformCode()).get(0).getTitle();
String res="通告快接\n" +
""+platformName+"】【"+busiNotice.getTitle()+"\n" +
"招募人数:"+(busiNotice.getNeedNum()==null?"无上限":busiNotice.getNeedNum()+"\n") +
"通告明细:"+busiNotice.getDetail()+"\n" +
"三方报名链接:"+busiNotice.getThirdUrl()+"\n" +
"大量小红书、B站、抖音、快手、微博高质量通告\n";
contentMessage.append(res);
redisCache.deleteObject("signInfo:" + sysUser.getUserId());
}
}
// String tgzHtml = "https://www.ddtg.site/pages/mine/member/member-card?userType=01";
String bzHtml = "https://www.ddtg.site/pages/mine/member/member-card?userType=02";
String jzqHtml = "https://www.ddtg.site/pages/mine/coupon/my-coupon";
// String bzHtml = "https://www.ddtg.site/pages/mine/member/member-card?userType=02";
// String jzqHtml = "https://www.ddtg.site/pages/mine/coupon/my-coupon";
// String tgzStr = "<a href=\""+tgzHtml+"\">1、通告主卡</a>";
String bzStr = "<a href=\""+bzHtml+"\">1、博主VIP</a>";
String jzqStr = "<a href=\""+jzqHtml+"\">2、急招券</a>";
contentMessage.append(contentStr).append("\n")
// String bzStr = "<a href=\""+bzHtml+"\">1、博主VIP</a>";
// String jzqStr = "<a href=\""+jzqHtml+"\">2、急招券</a>";
// .append(tgzStr).append("\n")
.append(bzStr).append("\n")
.append(jzqStr).append("\n");
// .append(bzStr).append("\n")
// .append(jzqStr).append("\n");
if (msgType.equals("event")) {
sendCustomerTextMessage(fromUserName, contentMessage.toString(), getAccessToken());
} else if (msgType.equals("text")) {

View File

@ -34,13 +34,12 @@ import java.time.Instant;
import java.util.Base64;
import java.util.List;
import java.util.Objects;
import javax.annotation.Resource;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import com.ruoyi.payConfig.WechatPayConfig;
import okhttp3.Headers;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
@ -62,10 +61,6 @@ public class TransferToUser {
@Resource
private WechatPayConfig wechatPayConfig;
/**
* https://pay.weixin.qq.com/doc/v3/merchant/4012716434
@ -169,13 +164,13 @@ public class TransferToUser {
}
private String buildAuthorization(String method, String uri, String body) {
return Utility.buildAuthorization(wechatPayConfig.getMchId(), wechatPayConfig.getSerialNo(), Utility.loadPrivateKeyFromPath(wechatPayConfig.getPrivateKeyPath()), method, uri, body);
return Utility.buildAuthorization("1719491143", "52E1BDB97B3F01CA3687004D4C6FEBAC15DB58FB", Utility.loadPrivateKeyFromPath("/opt/cert/ownCert/apiclient_key.pem"), method, uri, body);
}
private Response sendHttpRequest(String uri, String body) throws IOException {
Request.Builder builder = new Request.Builder().url(host + uri);
builder.addHeader("Accept", "application/json");
builder.addHeader("Wechatpay-Serial", wechatPayConfig.getPublicKeyId());
builder.addHeader("Wechatpay-Serial", "PUB_KEY_ID_0117194911432025062300211538001004");
builder.addHeader("Authorization", buildAuthorization(method, uri, body));
builder.addHeader("Content-Type", "application/json");
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), body);
@ -200,7 +195,7 @@ public class TransferToUser {
if (response.code() >= 200 && response.code() < 300) {
// 2XX 成功继续验证应答签名
Headers headers = response.headers();
Utility.validateResponse(wechatPayConfig.getPublicKeyId(),Utility.loadPublicKeyFromPath(wechatPayConfig.getPublicKeyPath()) , headers, body);
Utility.validateResponse("PUB_KEY_ID_0117194911432025062300211538001004",Utility.loadPublicKeyFromPath("/opt/cert/ownCert/pub_key.pem") , headers, body);
return body;
}

View File

@ -0,0 +1,112 @@
package com.ruoyi.busi.controller;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.busi.domain.BusiTcInfo;
import com.ruoyi.busi.service.IBusiTcInfoService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 提成记录Controller
*
* @author 朱春云
* @date 2025-06-23
*/
@RestController
@RequestMapping("/busi/tcinfo")
public class BusiTcInfoController extends BaseController
{
@Autowired
private IBusiTcInfoService busiTcInfoService;
/**
* 查询提成记录列表
*/
@PreAuthorize("@ss.hasPermi('busi:tcinfo:list')")
@GetMapping("/list")
public AjaxResult list(BusiTcInfo busiTcInfo,
@RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize)
{
Page<BusiTcInfo> page = new Page<>(pageNum, pageSize);
IPage<BusiTcInfo> list = busiTcInfoService.queryListPage(busiTcInfo,page);
return success(list);
}
/**
* 导出提成记录列表
*/
@PreAuthorize("@ss.hasPermi('busi:tcinfo:export')")
@Log(title = "提成记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, BusiTcInfo busiTcInfo)
{
List<BusiTcInfo> list = busiTcInfoService.list();
ExcelUtil<BusiTcInfo> util = new ExcelUtil<BusiTcInfo>(BusiTcInfo.class);
util.exportExcel(response, list, "提成记录数据");
}
/**
* 获取提成记录详细信息
*/
@PreAuthorize("@ss.hasPermi('busi:tcinfo:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") String id)
{
return success(busiTcInfoService.getById(id));
}
/**
* 新增提成记录
*/
@PreAuthorize("@ss.hasPermi('busi:tcinfo:add')")
@Log(title = "提成记录", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BusiTcInfo busiTcInfo)
{
return toAjax(busiTcInfoService.save(busiTcInfo));
}
/**
* 修改提成记录
*/
@PreAuthorize("@ss.hasPermi('busi:tcinfo:edit')")
@Log(title = "提成记录", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BusiTcInfo busiTcInfo)
{
return toAjax(busiTcInfoService.updateById(busiTcInfo));
}
/**
* 删除提成记录
*/
@PreAuthorize("@ss.hasPermi('busi:tcinfo:remove')")
@Log(title = "提成记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
List<String> list = new ArrayList<>(Arrays.asList(ids));
return toAjax(busiTcInfoService.removeByIds(list));
}
}

View File

@ -88,7 +88,7 @@ public class BusiNoticeSign extends DlBaseEntity
/**
* 报价
*/
private BigDecimal price;
private String price;
@TableField(exist = false)
private String[] choosed={};
@TableField(exist = false)

View File

@ -0,0 +1,62 @@
package com.ruoyi.busi.domain;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableField;
import com.ruoyi.common.annotation.Excel;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import com.ruoyi.common.core.domain.DlBaseEntity;
/**
* 提成记录对象 busi_tc_info
*
* @author 朱春云
* @date 2025-06-23
*/
@TableName("busi_tc_info")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BusiTcInfo extends DlBaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键 */
@TableId(type = IdType.ASSIGN_UUID)
private String id;
/** 用户主键 */
@Excel(name = "用户主键")
private Long userId;
/** 来源用户id */
@Excel(name = "来源用户id")
private Long formUserId;
/** 部门主键 */
@Excel(name = "部门主键")
private Long deptId;
/** 提成信息 */
@Excel(name = "提成信息")
private String info;
/** 提成金额 */
@Excel(name = "提成金额")
private BigDecimal money;
/** 是否结算0否1是 */
private String isJs;
/**
* 提成用户名称
*/
@TableField(exist = false)
private String tcUserName;
}

View File

@ -0,0 +1,21 @@
package com.ruoyi.busi.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.busi.domain.BusiTcInfo;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 提成记录Mapper接口
*
* @author 朱春云
* @date 2025-06-23
*/
@Mapper
public interface BusiTcInfoMapper extends BaseMapper<BusiTcInfo>
{
IPage<BusiTcInfo> queryListPage(@Param("entity") BusiTcInfo entity, Page<BusiTcInfo> page);
}

View File

@ -12,6 +12,7 @@ import java.util.Date;
@Data
public class BusiNoticeQuery {
private String id;
private String thirdUrl;
/**发布者名称**/
private String userNickName;
/** 标题 */

View File

@ -0,0 +1,18 @@
package com.ruoyi.busi.service;
import java.util.List;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.busi.domain.BusiTcInfo;
/**
* 提成记录Service接口
*
* @author 朱春云
* @date 2025-06-23
*/
public interface IBusiTcInfoService extends IService<BusiTcInfo>
{
IPage<BusiTcInfo> queryListPage(BusiTcInfo pageReqVO, Page<BusiTcInfo> page);
}

View File

@ -13,16 +13,13 @@ import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.base.domain.BaseCategory;
import com.ruoyi.base.domain.BaseCity;
import com.ruoyi.base.service.IBaseCategoryService;
import com.ruoyi.base.service.IBaseCityService;
import com.ruoyi.busi.domain.*;
import com.ruoyi.busi.mapper.BusiNoticeSignMapper;
import com.ruoyi.busi.query.AppNoticeQuery;
import com.ruoyi.busi.service.IBusiNoticeFormService;
import com.ruoyi.busi.service.IBusiSubscribeService;
import com.ruoyi.busi.service.IBusiUserLoveService;
import com.ruoyi.busi.service.*;
import com.ruoyi.busi.vo.BusiNoticeVo;
import com.ruoyi.busi.vo.SubScribeQuery;
import com.ruoyi.busi.vo.SubscribeDataObj;
@ -38,7 +35,6 @@ import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.busi.query.BusiNoticeQuery;
import com.ruoyi.constant.DictConstants;
import com.ruoyi.member.domain.MemberPoints;
import com.ruoyi.member.domain.MemberUser;
import com.ruoyi.member.service.*;
@ -51,7 +47,6 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.busi.mapper.BusiNoticeMapper;
import com.ruoyi.busi.service.IBusiNoticeService;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@ -71,8 +66,7 @@ public class BusiNoticeServiceImpl extends ServiceImpl<BusiNoticeMapper,BusiNoti
private BusiNoticeMapper busiNoticeMapper;
@Autowired
private BusiNoticeSignMapper busiNoticeSignMapper;
@Autowired
private NoticeUtils noticeUtils;
@Autowired
private IBusiUserLoveService userLoveService;
@Autowired
@ -100,12 +94,24 @@ public class BusiNoticeServiceImpl extends ServiceImpl<BusiNoticeMapper,BusiNoti
@Autowired
private WxAppConfig wxAppConfig;
@Autowired
private ThreadPoolTaskExecutor executor;
@Override
public IPage<BusiNoticeVo> queryListPage(BusiNoticeQuery query, Page<BusiNotice> page) {
return busiNoticeMapper.queryListPage(query, page);
IPage<BusiNoticeVo> busiNoticeVoIPage = busiNoticeMapper.queryListPage(query, page);
busiNoticeVoIPage.getRecords().forEach(item->{
try {
item.setUserNickName(userService.selectUserById(item.getUserId()).getNickName());
MemberUserVO memberUserVO = memberUserService.queryByUserId(item.getUserId(), "01");
item.setIdentityType(memberUserVO.getIdentityType());
LambdaQueryWrapper<BusiNoticeSign> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(BusiNoticeSign::getNoticeId,item.getId());
item.setSignNum(busiNoticeSignMapper.selectCount(queryWrapper));
}catch (Exception ignored){
}
});
return busiNoticeVoIPage;
}
// 方法用于提取URL中的eid参数值
@ -148,31 +154,39 @@ public class BusiNoticeServiceImpl extends ServiceImpl<BusiNoticeMapper,BusiNoti
result.put("code",100);
result.put("msg","草稿数据暂存成功");
}else {
//无问题数据直接审核通过
data.setApprovalStatus("1");
data.setApprovalUserId(null);
data.setApprovalTime(new Date());
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<BusiNotice> queryWrapper =new LambdaQueryWrapper<>();
queryWrapper.gt(BusiNotice::getEndDate, DateUtil.format(new Date(),"yyyy-MM-dd")).eq(BusiNotice::getApprovalStatus,1);
List<BusiNotice> 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())){
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().contains(data.getThirdUrl())||data.getThirdUrl().contains(busiNotice.getThirdUrl())){
}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(),busiNotice.getThirdUrl())){
}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()+",");
@ -184,6 +198,8 @@ public class BusiNoticeServiceImpl extends ServiceImpl<BusiNoticeMapper,BusiNoti
}
}
}
}
}
if (StringUtils.isNotEmpty(data.getSimilarityIds())){
//删除结尾的最后一个逗号
data.setSimilarityIds(data.getSimilarityIds().substring(0, data.getSimilarityIds().length() - 1));
@ -199,6 +215,7 @@ public class BusiNoticeServiceImpl extends ServiceImpl<BusiNoticeMapper,BusiNoti
memberPoints.setUserId(SecurityUtils.getUserId());
memberPoints.setType("1");
memberPoints.setFromCode("fbgg");
memberPoints.setFormNotice(data.getId());
memberPointsService.savePoints(memberPoints);
}
//若是急招扣除对应急招券
@ -284,6 +301,7 @@ public class BusiNoticeServiceImpl extends ServiceImpl<BusiNoticeMapper,BusiNoti
memberPoints.setUserId(SecurityUtils.getUserId());
memberPoints.setType("1");
memberPoints.setFromCode("fbgg");
memberPoints.setFormNotice(data.getId());
memberPointsService.savePoints(memberPoints);
}
//若是急招扣除对应急招券
@ -343,6 +361,28 @@ public class BusiNoticeServiceImpl extends ServiceImpl<BusiNoticeMapper,BusiNoti
for (String id : ids) {
busiNoticeFormService.remove(new LambdaQueryWrapper<BusiNoticeForm>().eq(BusiNoticeForm::getNoticeId,id));
this.removeById(id);
//删除对应的积分
//先确定之前是否存在扣除记录
LambdaQueryWrapper<MemberPoints> count =new LambdaQueryWrapper<>();
count.eq(MemberPoints::getFormNotice,id).eq(MemberPoints::getType,"2");
if (memberPointsService.count(count)>0){
return;
}
LambdaQueryWrapper<MemberPoints> queryWrapper =new LambdaQueryWrapper<>();
queryWrapper.eq(MemberPoints::getFormNotice,id).eq(MemberPoints::getType,"1");
List<MemberPoints> list = memberPointsService.list(queryWrapper);
if (CollectionUtil.isNotEmpty(list)){
for (MemberPoints memberPoints : list) {
MemberPoints memberPointsRemove =new MemberPoints();
memberPointsRemove.setFormNotice(memberPoints.getFormNotice());
memberPointsRemove.setPoints(memberPoints.getPoints());
memberPointsRemove.setType("2");
memberPointsRemove.setTitle("通告违规扣除积分");
memberPointsRemove.setUserId(memberPoints.getUserId());
memberPointsService.savePoints(memberPointsRemove);
}
}
}
}
@ -398,11 +438,35 @@ public class BusiNoticeServiceImpl extends ServiceImpl<BusiNoticeMapper,BusiNoti
memberPoints.setUserId(data.getUserId());
memberPoints.setType("1");
memberPoints.setFromCode("fbgg");
memberPoints.setFormNotice(data.getId());
memberPointsService.savePoints(memberPoints);
}
}else {
//如果是关闭 关闭状态
data.setApprovalStatus("2");
//关闭需要扣除积分
//删除对应的积分
//先确定之前是否存在扣除记录
LambdaQueryWrapper<MemberPoints> count =new LambdaQueryWrapper<>();
count.eq(MemberPoints::getFormNotice,noticeId).eq(MemberPoints::getType,"2");
if (memberPointsService.count(count)>0){
return;
}
LambdaQueryWrapper<MemberPoints> queryWrapper =new LambdaQueryWrapper<>();
queryWrapper.eq(MemberPoints::getFormNotice,noticeId).eq(MemberPoints::getType,"1");
List<MemberPoints> list = memberPointsService.list(queryWrapper);
if (CollectionUtil.isNotEmpty(list)){
for (MemberPoints memberPoints : list) {
MemberPoints memberPointsRemove =new MemberPoints();
memberPointsRemove.setFormNotice(memberPoints.getFormNotice());
memberPointsRemove.setPoints(memberPoints.getPoints());
memberPointsRemove.setType("2");
memberPointsRemove.setTitle("通告违规扣除积分");
memberPointsRemove.setUserId(memberPoints.getUserId());
memberPointsService.savePoints(memberPointsRemove);
}
}
}
this.updateById(data);
}

View File

@ -99,7 +99,7 @@ public class BusiNoticeSignServiceImpl extends ServiceImpl<BusiNoticeSignMapper,
busiNoticeSign.setStatus("01");
busiNoticeSign.setFormData(JSONArray.toJSONString(appNoticeSign.getCustomForm()));
busiNoticeSign.setCardId(cardInfo.getString("id"));
busiNoticeSign.setPrice(cardInfo.getBigDecimal("price"));
busiNoticeSign.setPrice(cardInfo.getString("price"));
busiNoticeSign.setRemark(cardInfo.getString("remark"));
busiNoticeSign.setTel(cardInfo.getString("tel"));
busiNoticeSign.setIsSuper(appNoticeSign.getIsSuper());

View File

@ -0,0 +1,51 @@
package com.ruoyi.busi.service.impl;
import java.util.List;
import java.util.Set;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
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.system.service.ISysRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.busi.mapper.BusiTcInfoMapper;
import com.ruoyi.busi.domain.BusiTcInfo;
import com.ruoyi.busi.service.IBusiTcInfoService;
/**
* 提成记录Service业务层处理
*
* @author 朱春云
* @date 2025-06-23
*/
@Service
public class BusiTcInfoServiceImpl extends ServiceImpl<BusiTcInfoMapper,BusiTcInfo> implements IBusiTcInfoService
{
@Autowired
private BusiTcInfoMapper busiTcInfoMapper;
@Autowired
private ISysRoleService roleService;
@Override
public IPage<BusiTcInfo> queryListPage(BusiTcInfo pageReqVO, Page<BusiTcInfo> page) {
LoginUser loginUser = SecurityUtils.getLoginUser();
SysUser user = loginUser.getUser();
// 管理员拥有所有权限
if (!user.isAdmin()) {
Set<String> strings = roleService.selectRolePermissionByUserId(user.getUserId());
//销售经理
if (strings.contains("xsjl")){
pageReqVO.setDeptId(user.getDeptId());
}else if (strings.contains("xsry")){
//销售人员
pageReqVO.setUserId(user.getUserId());
}
}
return busiTcInfoMapper.queryListPage(pageReqVO, page);
}
}

View File

@ -44,5 +44,7 @@ public class BusiNoticeVo extends BusiNotice {
private String signId;
//报名卡片名称
private String cardName;
private String identityType;
private Integer signNum;
}

View File

@ -48,10 +48,28 @@ public class MemberPointsController extends BaseController {
return success(list);
}
/**
* 分页查询积分变动明细
*
* @param pageNum 分页参数
* @param pageSize 分页参数
* @return com.ruoyi.common.core.domain.AjaxResult
* @author PQZ
* @date 15:24 2025/3/29
**/
@GetMapping("/adminList")
public AjaxResult adminList(MemberPoints memberPoints,
@RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
Page<MemberPoints> page = new Page<>(pageNum, pageSize);
IPage<MemberPoints> list = memberPointsService.adminList(memberPoints, page);
return success(list);
}
/**
* 查询在途订单
* @author PQZ
* @date 14:36 2025/4/29
* @date 14:36 2025/4/29
* @return com.ruoyi.common.core.domain.AjaxResult
**/
@GetMapping("/getOnWayOrder")

View File

@ -1,6 +1,8 @@
package com.ruoyi.member.domain;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.baomidou.mybatisplus.annotation.IdType;
@ -11,7 +13,7 @@ import com.ruoyi.common.core.domain.DlBaseEntity;
/**
* 通告主认证申请对象 dl_member_apply
*
*
* @author pqz
* @date 2025-03-17
*/
@ -73,5 +75,7 @@ public class MemberApply extends DlBaseEntity
@Excel(name = "审核备注")
private String approvalRemark;
private String applyJson;
@TableField(exist = false)
private String tel;
}

View File

@ -77,7 +77,7 @@ public class MemberBusiCard extends DlBaseEntity
/** 商单自报价 */
@Excel(name = "商单自报价")
private BigDecimal price;
private String price;
/** 所在领域/合作方式/是否为平台品牌合作人等 */
@Excel(name = "所在领域/合作方式/是否为平台品牌合作人等")

View File

@ -2,6 +2,8 @@ package com.ruoyi.member.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.baomidou.mybatisplus.annotation.IdType;
@ -12,7 +14,7 @@ import com.ruoyi.common.core.domain.DlBaseEntity;
/**
* 订单对象 dl_member_order
*
*
* @author pqz
* @date 2025-03-17
*/
@ -116,5 +118,7 @@ public class MemberOrder extends DlBaseEntity
/** 备注(保留字段) */
@Excel(name = "备注", readConverterExp = "保=留字段")
private String remark;
@TableField(exist = false)
private String userPhone;
}

View File

@ -1,5 +1,6 @@
package com.ruoyi.member.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.ruoyi.common.annotation.Excel;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
@ -9,7 +10,7 @@ import com.ruoyi.common.core.domain.DlBaseEntity;
/**
* 博主积分变动明细对象 dl_member_points
*
*
* @author pqz
* @date 2025-03-17
*/
@ -59,5 +60,10 @@ public class MemberPoints extends DlBaseEntity
/** 备注 */
@Excel(name = "备注")
private String remark;
//来源通告id
private String formNotice;
@TableField(exist = false)
private String nickName;
}

View File

@ -1,5 +1,6 @@
package com.ruoyi.member.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.ruoyi.common.annotation.Excel;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
@ -80,6 +81,8 @@ public class MemberUser extends DlBaseEntity
* 判断是否领过0否1是
*/
private String isGetGift;
@TableField(exist = false)
private Long deptId;
public MemberUser (String userType, SysUser user,Integer addNotice){

View File

@ -26,4 +26,6 @@ public interface MemberPointsMapper extends BaseMapper<MemberPoints> {
* @date 15:25 2025/3/29
**/
IPage<MemberPoints> queryListPage(@Param("userId") Long userId, Page<MemberPoints> page);
IPage<MemberPoints> adminList(@Param("memberPoints") MemberPoints memberPoints, Page<MemberPoints> page);
}

View File

@ -25,6 +25,9 @@ public interface IMemberPointsService extends IService<MemberPoints> {
* @date 15:24 2025/3/29
**/
IPage<MemberPoints> queryListPage(Long userId, Page<MemberPoints> page);
IPage<MemberPoints> adminList(MemberPoints memberPoints, Page<MemberPoints> page);
/**
* 新增积分变动记录
@ -43,8 +46,11 @@ public interface IMemberPointsService extends IService<MemberPoints> {
* @author PQZ
* @date 16:11 2025/3/31
**/
double getBloggerBalance(Long userId);
double getBloggerCanUseBalance(Long userId);
/**
* 积分提现
* @author PQZ

View File

@ -139,6 +139,7 @@ public class MemberBusiCardServiceImpl extends ServiceImpl<MemberBusiCardMapper,
//设置用户审核状态
String status = configService.selectConfigByKey("isPass");
memberBusiCard.setApprovalStatus(status);
memberBusiCard.setApprovalTime(new Date());
saveOrUpdate(memberBusiCard);
}
/**

View File

@ -131,7 +131,8 @@ public class MemberCardServiceImpl extends ServiceImpl<MemberCardMapper, MemberC
.eq(MemberCard::getUserId, userId)
.eq(DlBaseEntity::getDelFlag, 0)
.lt(MemberCard::getStartDate, time)
.ge(MemberCard::getEndDate, time);
.ge(MemberCard::getEndDate, time)
.orderByDesc(MemberCard::getEndDate);
return list(lambdaQueryWrapper);
}

View File

@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.busi.domain.BusiTcInfo;
import com.ruoyi.busi.service.IBusiTcInfoService;
import com.ruoyi.common.core.domain.DlBaseEntity;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
@ -27,7 +29,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.Set;
@ -53,6 +57,8 @@ public class MemberOrderServiceImpl extends ServiceImpl<MemberOrderMapper, Membe
private ISysUserService userService;
@Autowired
private ISysRoleService roleService;
@Autowired
private IBusiTcInfoService tcInfoService;
/**
@ -104,11 +110,12 @@ public class MemberOrderServiceImpl extends ServiceImpl<MemberOrderMapper, Membe
/*3、处理订单表数据*/
memberOrder.setPayTime(new Date());
memberOrder.setIsPay(1);
memberOrder.setPayWay("02");
memberOrder.setPayWay("01");
updateById(memberOrder);
SysUser sysUser = userService.selectUserById(memberOrder.getUserId());
String tc = sysConfigService.selectConfigByKey("tc");
double v = Double.parseDouble(tc);
try {
if (ObjectUtil.isNotEmpty(sysUser.getInviteId())&&v>0){
double points = memberOrder.getGoodsPrice().doubleValue()*v;
//如果审核通过
@ -116,8 +123,50 @@ public class MemberOrderServiceImpl extends ServiceImpl<MemberOrderMapper, Membe
memberPoints.setUserId(sysUser.getInviteId());
memberPoints.setPoints(points);
memberPoints.setType("1");
memberPoints.setTitle("邀请用户消费"+memberOrder.getGoodsPrice()+"元,得"+points*10+"积分");
memberPoints.setTitle("邀请用户:"+sysUser.getNickName()+"消费"+memberOrder.getGoodsPrice()+"元,得"+points+"积分");
memberPointsService.savePoints(memberPoints);
SysUser sysUser1 = userService.selectUserById(sysUser.getInviteId());
//插入提成记录表
BusiTcInfo tcInfo =new BusiTcInfo();
tcInfo.setUserId(sysUser.getInviteId());
tcInfo.setInfo("邀请用户"+sysUser.getNickName()+"消费"+memberOrder.getGoodsPrice()+"元,提成"+points*v/10+"");
tcInfo.setMoney(BigDecimal.valueOf(points*v/10));
tcInfo.setIsJs("1");
tcInfo.setFormUserId(memberOrder.getUserId());
tcInfo.setDeptId(sysUser1.getDeptId());
tcInfoService.save(tcInfo);
//获取当前部门的销售总监
List<SysUser> xsjl = userService.getUserByRole("xsjl", sysUser.getDeptId());
if (ObjectUtil.isNotEmpty(xsjl)){
for (SysUser xsInfo : xsjl) {
//先判断是否已存在提成记录
LambdaQueryWrapper<BusiTcInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(BusiTcInfo::getUserId, xsInfo.getUserId()).eq(BusiTcInfo::getFormUserId,sysUser1.getUserId());
if (tcInfoService.count(queryWrapper)>0){
continue;
}
double points1 = memberOrder.getGoodsPrice().doubleValue();
//如果审核通过
MemberPoints memberPoints1 =new MemberPoints();
memberPoints1.setUserId(xsInfo.getUserId());
memberPoints1.setPoints(points1);
memberPoints1.setType("1");
memberPoints1.setTitle("销售:"+sysUser1.getNickName()+"邀请的用户"+sysUser.getNickName()+"消费"+memberOrder.getGoodsPrice()+"元,得"+points1+"积分");
memberPointsService.savePoints(memberPoints1);
//插入提成记录表
BusiTcInfo tcInfo2 =new BusiTcInfo();
tcInfo2.setUserId(xsInfo.getUserId());
tcInfo2.setInfo("销售:"+sysUser1.getNickName()+"邀请的用户"+sysUser.getNickName()+"消费"+memberOrder.getGoodsPrice()+"元,提成"+points/10+"");
tcInfo2.setMoney(BigDecimal.valueOf(points1/10));
tcInfo2.setIsJs("0");
tcInfo2.setFormUserId(sysUser1.getUserId());
tcInfo2.setDeptId(sysUser1.getDeptId());
tcInfoService.save(tcInfo2);
}
}
}
}catch (Exception e) {
e.printStackTrace();
}
}

View File

@ -16,8 +16,11 @@ import io.lettuce.core.LMoveArgs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
/**
* 博主积分变动明细Service业务层处理
@ -47,6 +50,11 @@ public class MemberPointsServiceImpl extends ServiceImpl<MemberPointsMapper, Mem
return memberPointsMapper.queryListPage(userId,page);
}
@Override
public IPage<MemberPoints> adminList(MemberPoints memberPoints, Page<MemberPoints> page) {
return memberPointsMapper.adminList(memberPoints,page);
}
/**
* 新增积分变动记录
*
@ -110,6 +118,36 @@ public class MemberPointsServiceImpl extends ServiceImpl<MemberPointsMapper, Mem
}
}
/**
* 获取积分
*
* @param userId 用户id
* @return java.lang.Integer
* @author PQZ
* @date 16:11 2025/3/31
**/
@Override
public double getBloggerCanUseBalance(Long userId) {
LambdaQueryWrapper<MemberPoints> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper
.eq(MemberPoints::getUserId,userId)
.eq(MemberPoints::getStatus,"01")
.and(wrapper -> wrapper.eq(MemberPoints::getType,"1").lt(MemberPoints::getCreateTime, new Date(System.currentTimeMillis() - 86400000L)).or().eq(MemberPoints::getType,"2"))
.orderByDesc(DlBaseEntity::getCreateTime);
List<MemberPoints> list = list(lambdaQueryWrapper);
if (list.isEmpty()){
return 0;
} else {
//获取记录中 type等于1的最新数据
MemberPoints memberPoints = list.stream().filter(wrapper -> "1".equals(wrapper.getType())).max(Comparator.comparing(DlBaseEntity::getCreateTime)).get();
//在获取在最新一条记录createtime后 type等于2的全部数据
List<MemberPoints> memberPointsList = list.stream().filter(wrapper -> "2".equals(wrapper.getType())).filter(wrapper -> wrapper.getCreateTime().after(memberPoints.getCreateTime())).collect(Collectors.toList());
//计算出可提现的积分
return memberPoints.getBalance() - memberPointsList.stream().mapToDouble(MemberPoints::getPoints).sum();
}
}
/**
* 积分提现
*
@ -129,7 +167,7 @@ public class MemberPointsServiceImpl extends ServiceImpl<MemberPointsMapper, Mem
throw new Exception("存在未处理完成的提现订单");
}
double nowBalance = getBloggerBalance(userId);
double nowBalance = getBloggerCanUseBalance(userId);
if (memberPoints.getPoints()>nowBalance){
throw new Exception("当前用户积分余额为"+nowBalance+"您已超出提现额度");
}

View File

@ -144,36 +144,15 @@ public class MemberUserServiceImpl extends ServiceImpl<MemberUserMapper, MemberU
// 管理员拥有所有权限
if (!user.isAdmin()) {
Set<String> strings = roleService.selectRolePermissionByUserId(user.getUserId());
if (strings.contains("xsry")){
//销售经理
if (strings.contains("xsjl")){
pageReqVO.setDeptId(user.getDeptId());
}else if (strings.contains("xsry")){
//销售人员
pageReqVO.setUserId(user.getUserId());
}
}
//当前日期--年月日
String today= DateUtil.today();
//截取年月
String yearMonth = today.substring(0, Math.min(today.length(), 7));
IPage<MemberUserVO> rtnPage=memberUserMapper.crmList(pageReqVO, page);
LambdaQueryWrapper<MemberOrder> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MemberOrder::getIsPay,1);
for (MemberUserVO item: rtnPage.getRecords()){
BigDecimal monthMoney = BigDecimal.valueOf(0);
BigDecimal allMoney = BigDecimal.valueOf(0);
queryWrapper.eq(MemberOrder::getUserId,item.getUserId());
List<MemberOrder> orderList = orderService.list(queryWrapper);
for (MemberOrder order:orderList){
String payTimeStr =DateUtil.formatDate(order.getPayTime());
//截取年月
String orderYearMonth = payTimeStr.substring(0, Math.min(payTimeStr.length(), 7));
if(orderYearMonth.equals(yearMonth)){
//本月的订单
monthMoney =monthMoney.add(order.getGoodsPrice());
}
allMoney = allMoney.add(order.getGoodsPrice());
}
item.setMonthMoney(monthMoney);
item.setAllMoney(allMoney);
}
return rtnPage;
return memberUserMapper.crmList(pageReqVO, page);
}
/**
@ -243,6 +222,7 @@ public class MemberUserServiceImpl extends ServiceImpl<MemberUserMapper, MemberU
}
//积分
result.setPointsBalance(pointsService.getBloggerBalance(userId));
result.setCanUseBalance(pointsService.getBloggerCanUseBalance(userId));
if ("02".equals(userType)) {
//报名
Integer report = cardService.getCardRightsValue(userId, "02", "report");

View File

@ -37,6 +37,7 @@ public class MemberUserVO extends MemberUser {
List<MemberAddress> addresses;
/**积分*/
double pointsBalance;
double canUseBalance;
/**报名次数*/
int report;
/**剩余通告券*/
@ -59,5 +60,6 @@ public class MemberUserVO extends MemberUser {
BigDecimal monthMoney;
/**所有订单总额*/
BigDecimal allMoney;
private String xsName;
}

View File

@ -43,7 +43,11 @@ public class WechatPayConfig {
/**
* 服务商商户号
*/
private String slMchId;
private String spMchid;
/**
* 服务商appid
*/
private String spAppid;
/**
* APIv2密钥
*/

View File

@ -1,25 +1,25 @@
-----BEGIN CERTIFICATE-----
MIIEKDCCAxCgAwIBAgIUf82w5y1qkoATNhrLd/o/DcvTcOMwDQYJKoZIhvcNAQEL
MIIEKzCCAxOgAwIBAgIUOeQZBRJeVE9sjSAlUPhbxCEuhTEwDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMjUwNDE1MDg0NzI0WhcNMzAwNDE0MDg0NzI0WjCBgTETMBEGA1UEAwwK
MTcxMjQ0NzkzNjEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMS0wKwYDVQQL
DCTljJfkuqzkuIPnhrnmlofljJbkvKDlqpLmnInpmZDlhazlj7gxCzAJBgNVBAYT
AkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBALsVQ6m/EtMwVx9RoDaDz8HzoaEZdcASfWFIxAykoCn6hdW/DUfVpb+Y
l+OIWWGWh1VcFDBWwJpUQ11tzCgKxCNgdaBS2RwW/iPy+vIxtvXdtxPJitxgQRGG
md5gMq/q081zy0Zlm7nkTFdtGtD71OWg7jesBeRSBpvGBF5xgSDTlbJkGOklWoWe
2bIIzf3icGav3ALwfrloMlzrQ3aHy/5mJgHOfho5q0lNR1AABX7STNKruRGf+MbX
0cMsRIuaSBfAU2lKbbWENPBNumUtdR8j3YmF3H+VDdoOiPyVUiNsRbtJCeTTBtTi
d8N+jaaWBci1EM80IeICdhFx1kKbjy8CAwEAAaOBuTCBtjAJBgNVHRMEAjAAMAsG
A1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDovL2V2Y2Eu
aXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJDMDRC
MDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJFMTJCMjdB
OUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IBAQCdlC6D
IF0H8rS/iuExBpHSUr+mGKyIE+M7v0WTH3BkusaFRURtVQ0YpDnUouINFjCtusqb
vOz7DXO0gKrqAcx/24bJhEJITJZSZPKA6KhCOJ1WINa/MRZexUOiSPuWmi8BgXZT
J4AZGkw5yGI7cpWEowKlJuTsO4ziQEhb3rwkbvlP3lcCAcXQpOWIIdDtKzEb3Mp4
wrCge+LrxokMyhRKtt0wXpgnrwVGcekVO/dFDI+VLVie4f1tQQtvamDPeeG4pcI2
FWmmQk1tqFULQG1gZaYGkvl2wbkg19z1DT6rKitxhxllLihlM0Za10z1H4BgYfzA
E1sxNDrd3dGWFXLl
Q0EwHhcNMjUwNjIxMDYwODEyWhcNMzAwNjIwMDYwODEyWjCBhDETMBEGA1UEAwwK
MTcxOTEzNTE2NzEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTAwLgYDVQQL
DCflsbHkuJzor7ror7rkupHova/ku7bnp5HmioDmnInpmZDlhazlj7gxCzAJBgNV
BAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAN7jDaUdCm3Lfl49VG4Sh0OaYyI19/7DO2G2dQB/SWtpw1a9w3vK
GE0WqU7LIRi20Qh8CWsALA3aZcNJxgOnF3rDWxoRd0CFWOcsRVNE7qnM8kq0n404
s450lZCEeKCBcGr2VVfphX4LiuC95yZ/3DSgr/OWDiSYplljDDWRLs9tj8Cw6my3
VFuXZGkZ8WxT6aVgyrL08Cvrcc1eBXW3UXwqw8l+HkVD6Wx68OlyGPkrp57ifjf9
SLKT3K1JA2khQfReAV2bSAr9v66RmWbNoaUhCRFN2N/N65RSpf4UY0qUvuXScNIY
z3CA6G0c/sfySZXCGbqc5iIPlo9dTf46sUUCAwEAAaOBuTCBtjAJBgNVHRMEAjAA
MAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDovL2V2
Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJD
MDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJFMTJC
MjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IBAQBn
rN7Ofk8uywG7p4lQMESKz0sD8qn9zCUnawUfUTd5NlEZKKj56cVuus+s3y8oZHgk
POonCnA5rPomDWyUHZcgELc9bg9o7uwQPBghoXXVsl9D/ilCnj4FAgklZB+l7JwA
7nR7OZtr8kYl5vaBLkToJbrLswZ0r5O1xP8aeTOJQyIluTaV6BLSWRGrNEgWvUiG
TblKPUY1meCLbVkp+fDMBv7OIat0aqiyuuXPOfRurRiYawYhEj+n16FjlMoytDE8
YTTNIuLfOBr1YCuWZGxl9jIxL3/geOkVB3B/wa/AFIUWkyUK+pqWqSf2MizguZNw
wY7F84k6q3BD6evtqVSX
-----END CERTIFICATE-----

View File

@ -1,28 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQC7FUOpvxLTMFcf
UaA2g8/B86GhGXXAEn1hSMQMpKAp+oXVvw1H1aW/mJfjiFlhlodVXBQwVsCaVENd
bcwoCsQjYHWgUtkcFv4j8vryMbb13bcTyYrcYEERhpneYDKv6tPNc8tGZZu55ExX
bRrQ+9TloO43rAXkUgabxgRecYEg05WyZBjpJVqFntmyCM394nBmr9wC8H65aDJc
60N2h8v+ZiYBzn4aOatJTUdQAAV+0kzSq7kRn/jG19HDLESLmkgXwFNpSm21hDTw
TbplLXUfI92Jhdx/lQ3aDoj8lVIjbEW7SQnk0wbU4nfDfo2mlgXItRDPNCHiAnYR
cdZCm48vAgMBAAECggEBAIo57eJvYNNVNinXv45H2ast/U/wZcXiY20LvH6y6/vY
NCZ3oLJgsrRbZG4jAhdOhvOUsv38OxZMB/Hx/BPh0IVq8b3hOLS+cEvTbYKhJNOI
W4ptMQIexDTUxL8/SHQeBxwX4CtFS8gPXDCEVnnud6CqRRgxK7FEwck6h2PYbVX4
e4575fqrPEQHA4raKQB/boUBLK2KxyXbomT1vU2Xehzlu/1Lcc3PMuKcXtTWNg0K
tvUcVdfI36BVde79TIiauultEIai0ZXVj1NUG/9CA2iHyzSGmVtTyWqQQQDEz5Ph
RdRhYCvPARoTEfw7AX0ShCM6trLkZjcTIM68gkuJdWECgYEA3CagoLXpUM08cySW
GzswCP/p06Pe/4NBGLronKj6+k2x32zFVEfZnv++CfdPAXd9d8iXqElRvLFceAsu
NbcxsbtPYKG5eBsc2qS7f5hVSjubiycJATqfR6JlFv+hHYG42snY10qfdzsJpJ8T
SKh7SJeZ54o9wlKqbkaV3ucUpIcCgYEA2Ywlp46INLzsn1LOzn3sV6pcwII33YEl
3JZz3OQWzrpGMuC/HCH9aazh3ZLyc6NXpRFAR5329mLgKKTOIT0yp0c4S3EQ8/M/
nwUEDye/GrVJjsT7mqoXbSylVZpVfg/4M4SAZ3xbL7aANMtMcCS67J3ByulmHEAh
DvDiyplKEhkCgYEAjQZ5kzm00jwG40OmnJ8XsEwvf5HUAh4Uj0D8TY6556nprdRB
vDGiqIXvOPchtzDSQO9Qp08Aez2qnIOdAG/v94ij2qT+6H+FxlIMgjoVOM5iX4uL
6yugaQUQeOEcVoiI4C65J4D4EirRjJESi1LSVrg2sOoPkfHel3HEA9xHjvUCgYEA
nCCinYADbKXxw94wIa3pwni3nElYQpX/UDKB8JOZcr/oxXbacRxLvF2gs95UNn2R
1xtsYHmT1fvcGA8/CEfdZIQOeMYqfomirUNySFYkJszYf6gLUlKkAWw7NBZRKOnZ
HVAIvzxWTQXTORB2ST1zEYGepTugVsIHd6uVeAVPTXECgYEA2sgzcVHf38EFf16V
x8OfYalGBazfnTXxZUMji4DBaiaA0luH+cmEm21bEVnJkINs8pySrSP8IiGr01r3
ieMkVZVdA8PulxPTKTGnnIuLEsQzdulD01A2i0f3mNxjyLUltBUX56SO7Sc8/Zoq
lENhDpQlP41ahoLE8X9Ti0uxpsw=
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDe4w2lHQpty35e
PVRuEodDmmMiNff+wzthtnUAf0lracNWvcN7yhhNFqlOyyEYttEIfAlrACwN2mXD
ScYDpxd6w1saEXdAhVjnLEVTRO6pzPJKtJ+NOLOOdJWQhHiggXBq9lVX6YV+C4rg
vecmf9w0oK/zlg4kmKZZYww1kS7PbY/AsOpst1Rbl2RpGfFsU+mlYMqy9PAr63HN
XgV1t1F8KsPJfh5FQ+lsevDpchj5K6ee4n43/Uiyk9ytSQNpIUH0XgFdm0gK/b+u
kZlmzaGlIQkRTdjfzeuUUqX+FGNKlL7l0nDSGM9wgOhtHP7H8kmVwhm6nOYiD5aP
XU3+OrFFAgMBAAECggEAc4Qd2Eta0li7H8CNd5bmv+TOKDbsVv98UUItFZrixGbG
NLiZDhlJyvpJuWqRtqtZXxpaDzjBnFRqlXIwzEfXZWrGVpZixe/WiclqDKQXRa3Q
jWNbpeeTN+u4cHQXyKgNSYJt7Og8pXz590y09kEiMaxuRMKqhdEPthgdhc2/AwV/
9obD/wbEW3NRbyPrSs3nf3d3GsegYvZM95W2rXme3rmkqqlkb+cA6Z1s+oJ5o5t5
PcCxHYexVfR6mYmwcmCEhU5ALfHV1VXcOxiE1yehlgj5uwfBN/nj0+0/4VgxYM3E
nBrdoseOcdtUTPdofa6IsPxotdz2Nvg6qVTTm7a4qQKBgQDv3PDAOfgmFvT+kWP1
V3Kph9ouThCIcoq60tGobId2qUwlByiz16vgMtZniBvJMQeyQlW8gdRSv+XUOwNs
QQnYE5o4wc9UTSz/zf+ZXRiNFZVlJ415NjJtEOx48Ea9RdBf1GSGw6eXHjRyh9cZ
sp1UEm6IqcP6ZMDmlBSJrFtvjwKBgQDt4b2F4RXzY0g0OyDLicTZVMeLgm55KQKI
mOEfOVSpoo3Mamg8GKRBPDAKhM9mLlVGGmf0ayGRaGDR/9QhHMddSujLPrr3K2PQ
UM4OFtklhXjMt9ShkVCjgYlzSza8/7GQRS6XPjuMNk7i4K18nO3OOA3eBBjosfA0
/zjupKun6wKBgQCzCrFuWxb+n446Yx5A6Qh+wRg8DitLHmytbWXwGSq4iUB8Ny7L
p0X1cR0XZMKQ2BdNmTRUJHjvV6xfUbmJWbbWYjNxAEIZRA49129d8966mQzN18tD
WhAj10kcMQYsi+sxTOHIskzrgTFW+Ey4Mto7AhMd0dKmmgRfWNNHvK73wwKBgQCp
NQ6ToYT0qGVeycRNI4VDNjvub2vXgSVNNrnDdQtU0szcX8AfJ0QHJyHhCZFhVInR
oMzbHi01ejKMjdY9a3QgVz15/PgPAu0v65p2iSgSuXsw235DItNiSq0TtqeMDrEm
Nx+p81l2Jdc9KKYe4p2BN3wdtXpmYtPDTtwXXEjB2wKBgQDaduFtoJ1JFC0JJCOc
NDrRGWnQWjTQr1m0OP7JuqukaycYarvjRcIR+DQwLJgHjstWCk/KMFmrE1FV8TEa
JN++vl+HEUq8nOcx2255rW8rCqgpiZSXtObxiVTOEmoBg7qeLMRvztZLtJFKYwkd
E+Cy8kKPOqamaKvc6pAHeYGPlA==
-----END PRIVATE KEY-----

View File

@ -14,9 +14,9 @@ spring:
slave:
# 从数据源开关/默认关闭
enabled: false
url:
username:
password:
url:
username:
password:
# 初始连接数
initialSize: 5
# 最小连接池数量
@ -40,7 +40,7 @@ spring:
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
webStatFilter:
webStatFilter:
enabled: true
statViewServlet:
enabled: true
@ -59,4 +59,4 @@ spring:
merge-sql: true
wall:
config:
multi-statement-allow: true
multi-statement-allow: true

View File

@ -16,7 +16,7 @@ ruoyi:
# 开发环境配置
server:
# 服务器的HTTP端口默认为8080
port: 8099
port: 8088
servlet:
# 应用的访问路径
context-path: /
@ -153,8 +153,10 @@ wx-app:
wxpay:
#微信公众号appid
appId: wx7d10b0fa4886a583
sp_appid: wx28b337a18b54e5ef
sp_mchid: 1719135167
#商户号
mchId: 1712447936
mchId: 1719491143
#商户密匙v2
mchKey: ab94673dd0cca78abd0a453d0aac9f98
# APIv3密钥
@ -164,9 +166,9 @@ wxpay:
# 微信支付V3-url前缀
baseUrl: https://api.mch.weixin.qq.com/v3
# 支付通知回调, pjm6m9.natappfree.cc 为内网穿透地址
notifyUrl: https://3w823u8516.vicp.fun/noticeApi/payApi/payNotify
notifyUrl: https://www.ddtg.site/noticeApi/payApi/payNotify
# 转账通知回调, pjm6m9.natappfree.cc 为内网穿透地址
zhuanNotifyUrl: https://3w823u8516.vicp.fun/noticeApi/payApi/zhuanNotify
zhuanNotifyUrl: https://www.ddtg.site/noticeApi/payApi/zhuanNotify
# 退款通知回调, pjm6m9.natappfree.cc 为内网穿透地址
refundNotifyUrl: https://www.ddtg.site/notice/notify/refundNotify
# 密钥路径,resources根目录下
@ -174,8 +176,8 @@ wxpay:
privateCertPath: D:/任务平台项目/dl_admin/ruoyi-admin/src/main/resources/apiclient_cert.pem
publicKeyPath: D:/任务平台项目/dl_admin/ruoyi-admin/src/main/resources/pub_key.pem
#商户证书序列号
serialNo: 7FCDB0E72D6A928013361ACB77FA3F0DCBD370E3
publicKeyId: PUB_KEY_ID_0117124479362025041500321584003200
serialNo: 39E41905125E544F6C8D202550F85BC4212E8531
publicKeyId: PUB_KEY_ID_0117191351672025070400381681000800
wxAppSecret: 1515e5d055e8dabf5b30faad14ccbc8d
# 普通用户权益值

View File

@ -9,25 +9,37 @@
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,
uTable.nick_name as userNickName,auditTable.nick_name as approvalUserName,ifnull(noticeView.view_num,0) as viewNum,
bTable.title as platformName
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 sys_user uTable on main.user_id = uTable.user_id
left join sys_user auditTable on main.approval_user_id = auditTable.user_id
left join dl_base_category bTable on main.platform_code = bTable.code
left join dl_busi_notice_view noticeView on noticeView.id = main.id
<if test="entity.userNickName != null ">
left join sys_user uTable on uTable.user_id = main.user_id
</if>
<where>
main.del_flag = '0' and main.approval_status != 8
main.del_flag = '0'
<if test="entity.id != null "> and main.id = #{entity.id}</if>
<if test="entity.userNickName != null "> and uTable.nick_name like concat('%', #{entity.userNickName}, '%')</if>
<if test="entity.userId != null "> and main.user_id = #{entity.userId}</if>
<if test="entity.province != null "> and main.province = #{entity.province}</if>
<if test="entity.city != null "> and main.city = #{entity.city}</if>
<if test="entity.thirdUrl != null and entity.thirdUrl == '01' "> and (main.third_url is not null and main.third_url != '')</if>
<if test="entity.thirdUrl != null and entity.thirdUrl == '02' "> and (main.third_url is null or main.third_url = '')</if>
<if test="entity.params.thirdUrl != null and entity.params.thirdUrl != '' "> and (main.third_url like concat('%', #{entity.params.thirdUrl}, '%'))</if>
<if test="entity.title != null and entity.title != ''"> and main.title like concat('%', #{entity.title}, '%')</if>
<if test="entity.platformCode != null and entity.platformCode != ''"> and main.platform_code = #{entity.platformCode}</if>
<if test="entity.isUrgent != null and entity.isUrgent != ''"> and main.is_urgent = #{entity.isUrgent}</if>
<if test="entity.isPlatformFree != null and entity.isPlatformFree != ''"> and main.is_platform_free = #{entity.isPlatformFree}</if>
<if test="entity.params.isRuning != null ">
<choose>
<when test="entity.params.isRuning=='01'">
and main.approval_status !='2' and main.end_date &gt;= CURDATE()
</when>
<when test="entity.params.isRuning=='02'">
and (main.approval_status ='2' or main.end_date &lt; CURDATE())
</when>
</choose>
</if>
<if test="entity.params.beginFeeDown != null and entity.params.beginFeeDown != ''">
and main.fee_down <![CDATA[>= ]]> #{entity.params.beginFeeDown}
</if>
@ -180,13 +192,13 @@ order by dbns.create_time desc
<select id="appFootprintList" resultType="com.ruoyi.busi.vo.BusiNoticeVo">
SELECT
dbn.*,
dbnv.view_num AS viewNum,
-- dbnv.view_num AS viewNum,
su.avatar,
su.nick_name AS userNickName,
count(sign.id) as reportNum
FROM
dl_busi_notice dbn
LEFT JOIN dl_busi_notice_view dbnv ON dbn.id = dbnv.id
-- LEFT JOIN dl_busi_notice_view dbnv ON dbn.id = dbnv.id
inner join dl_member_footprint footprint on footprint.notice_id = dbn.id and footprint.user_id = #{entity.userId}
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
@ -238,13 +250,13 @@ order by dbns.create_time desc
<select id="subscribeList" resultType="com.ruoyi.busi.vo.BusiNoticeVo">
SELECT
dbn.*,
dbnv.view_num AS viewNum,
-- dbnv.view_num AS viewNum,
su.avatar,
su.nick_name AS userNickName,
count(sign.id) as reportNum
FROM
dl_busi_notice dbn
LEFT JOIN dl_busi_notice_view dbnv ON dbn.id = dbnv.id
-- 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
@ -299,13 +311,13 @@ order by dbns.create_time desc
<select id="loveList" resultType="com.ruoyi.busi.vo.BusiNoticeVo">
SELECT
dbn.*,
dbnv.view_num AS viewNum,
-- dbnv.view_num AS viewNum,
su.avatar,
su.nick_name AS userNickName,
count(sign.id) as reportNum
FROM
dl_busi_notice dbn
LEFT JOIN dl_busi_notice_view dbnv ON dbn.id = dbnv.id
-- LEFT JOIN dl_busi_notice_view dbnv ON dbn.id = dbnv.id
LEFT JOIN sys_user su ON dbn.user_id = su.user_id
inner join dl_busi_user_love love on dbn.user_id = love.love_user_id and love.user_id = #{entity.userId}
left join dl_busi_notice_sign sign on sign.notice_id = dbn.id and sign.del_flag = 0
@ -320,7 +332,7 @@ order by dbns.create_time desc
<select id="myNoticeList" resultType="com.ruoyi.busi.vo.BusiNoticeVo">
SELECT
dbn.*,
dbnv.view_num AS viewNum,
-- dbnv.view_num AS viewNum,
su.avatar,
su.nick_name AS userNickName,
count(sign.id) as reportNum,
@ -336,7 +348,7 @@ order by dbns.create_time desc
mySign.id as signId
FROM
dl_busi_notice dbn
LEFT JOIN dl_busi_notice_view dbnv ON dbn.id = dbnv.id
-- 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
inner join dl_busi_notice_sign mySign on dbn.id = mySign.notice_id and dbn.del_flag = 0 and mySign.user_id = #{entity.userId}
@ -369,7 +381,7 @@ order by dbns.create_time desc
<select id="myPublishNoticeList" resultType="com.ruoyi.busi.vo.BusiNoticeVo">
SELECT
dbn.*,
dbnv.view_num AS viewNum,
-- dbnv.view_num AS viewNum,
su.avatar,
su.nick_name AS userNickName,
count(sign.id) as reportNum,
@ -383,7 +395,7 @@ order by dbns.create_time desc
END AS reportStatusText
FROM
dl_busi_notice dbn
LEFT JOIN dl_busi_notice_view dbnv ON dbn.id = dbnv.id
-- 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

View File

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.busi.mapper.BusiTcInfoMapper">
<resultMap type="com.ruoyi.busi.domain.BusiTcInfo" id="BusiTcInfoResult">
<result property="id" column="id" />
<result property="userId" column="user_id" />
<result property="formUserId" column="form_user_id" />
<result property="deptId" column="dept_id" />
<result property="info" column="info" />
<result property="money" column="money" />
<result property="isJs" column="is_js" />
<result property="creator" column="creator" />
<result property="createTime" column="create_time" />
<result property="updater" column="updater" />
<result property="updateTime" column="update_time" />
<result property="delFlag" column="del_flag" />
</resultMap>
<sql id="selectBusiTcInfoVo">
select id, user_id, form_user_id, dept_id, info, money, is_js, creator, create_time, updater, update_time, del_flag from busi_tc_info
</sql>
<select id="queryListPage" parameterType="com.ruoyi.busi.domain.BusiTcInfo" resultMap="BusiTcInfoResult">
select main.*,su.nick_name tcUserName
from busi_tc_info main
left join sys_user su on main.user_id = su.user_id
<where>
<if test="entity.userId != null "> and user_id = #{entity.userId}</if>
<if test="entity.tcUserName != null "> and su.nick_name = #{entity.tcUserName}</if>
<if test="entity.deptId != null "> and main.dept_id = #{entity.deptId}</if>
<if test="entity.info != null and entity.info != ''"> and info = #{entity.info}</if>
<if test="entity.params.beginMoney != null and entity.params.beginMoney != '' and entity.params.endMoney != null and entity.params.endMoney != ''"> and money between #{entity.params.beginMoney} and #{entity.params.endMoney}</if>
<if test="entity.params.beginCreateTime != null and entity.params.beginCreateTime != '' and entity.params.endCreateTime != null and entity.params.endCreateTime != ''"> and main.create_time between #{entity.params.beginCreateTime} and #{entity.params.endCreateTime}</if>
</where>
order by main.create_time desc
</select>
</mapper>

View File

@ -22,18 +22,21 @@
<result property="updater" column="updater" />
<result property="updateTime" column="update_time" />
<result property="delFlag" column="del_flag" />
<result property="tel" column="tel" />
</resultMap>
<sql id="selectMemberApplyVo">
select id, user_id, nickname, identity_type, content, remark, images, approval_status, approval_user_id, approval_time, approval_remark,approval_user_name, creator, create_time, updater, update_time, del_flag from dl_member_apply
</sql>
<select id="queryListPage" parameterType="MemberApply" resultMap="MemberApplyResult">
<include refid="selectMemberApplyVo"/>
select main.*,su.phonenumber tel from dl_member_apply main
left join sys_user su on main.user_id = su.user_id
<where>
del_flag=0
main.del_flag=0
<if test="entity.nickname != null and entity.nickname != ''"> and nickname like concat('%', #{entity.nickname}, '%')</if>
<if test="entity.identityType != null and entity.identityType != ''"> and identity_type = #{entity.identityType}</if>
<if test="entity.tel != null "> and su.phonenumber like concat('%', #{entity.tel}, '%')</if>
<if test="entity.approvalTime != null "> and approval_time = #{entity.approvalTime}</if>
<if test="entity.startTime != null and entity.endTime != null"> and create_time between #{entity.startTime} and #{entity.endTime}</if>
<if test="entity.approvalStatus == 10"> and approval_status != 0</if>
@ -46,4 +49,4 @@
</select>
</mapper>
</mapper>

View File

@ -39,6 +39,7 @@
<where>
del_flag = 0
<if test="entity.nickname != null and entity.nickname != ''"> and nickname like concat('%', #{entity.nickname}, '%')</if>
<if test="entity.tel != null and entity.tel != ''"> and tel like concat('%', #{entity.tel}, '%')</if>
<if test="entity.platformName != null and entity.platformName != ''"> and platform_name like concat('%', #{entity.platformName}, '%')</if>
<if test="entity.accountName != null and entity.accountName != ''"> and account_name like concat('%', #{entity.accountName}, '%')</if>
<if test="entity.approvalStatus == 10"> and approval_status != 0</if>
@ -60,4 +61,4 @@
WHERE
main.del_flag = 0 and main.id = #{id}
</select>
</mapper>
</mapper>

View File

@ -31,6 +31,7 @@
<result property="updater" column="updater" />
<result property="updateTime" column="update_time" />
<result property="delFlag" column="del_flag" />
<result property="userPhone" column="userPhone" />
</resultMap>
<sql id="selectMemberOrderVo">
@ -42,7 +43,7 @@
<select id="queryListPage" parameterType="MemberOrder" resultMap="MemberOrderResult">
select main.id, main.user_id, main.user_type, su.nick_name as nickname, main.order_no, main.order_type, main.goods_id, main.goods_num, main.goods_price, main.pay_time,
main.content, main.pay_way, main.is_pay, main.is_refund, main.refund_user_id, main.refund_way, main.refund_no, main.refund_apply_time, main.refund_receive_time,
main.refund_reason, main.remark, main.creator, main.create_time, main.updater, main.update_time, main.del_flag
main.refund_reason, main.remark, main.creator, main.create_time, main.updater, main.update_time, main.del_flag,su.phonenumber as userPhone
from dl_member_order main
left join sys_user su on su.user_id = main.user_id
<where>

View File

@ -32,4 +32,23 @@
</where>
order by create_time desc
</select>
</mapper>
<select id="adminList" resultType="com.ruoyi.member.domain.MemberPoints">
select points.*,su.nick_name as nickName
from dl_member_points points
left join sys_user su on points.user_id = su.user_id
<where>
points.del_flag = 0 and points.status = '01'
<if test="memberPoints.nickName !=null and memberPoints.nickName !=''">
and su.nick_name like concat('%',#{memberPoints.nickName},'%')
</if>
<if test="memberPoints.type !=null and memberPoints.type !=''">
and points.type = #{memberPoints.type}
</if>
<if test="memberPoints.params.beginCreateTime != null and memberPoints.params.beginCreateTime != '' and memberPoints.params.endCreateTime != null and memberPoints.params.endCreateTime != ''">
and points.create_time between #{memberPoints.params.beginCreateTime} and #{memberPoints.params.endCreateTime}
</if>
</where>
order by points.create_time desc
</select>
</mapper>

View File

@ -77,8 +77,12 @@
main.del_flag = 0
<if test="entity.userType != null and entity.userType != ''">
and main.user_type = #{entity.userType}
<if test="entity.userType == '01'">
AND main.identity_type is not null
</if>
<if test="entity.identityType != null and entity.identityType != ''">and main.identity_type =
</if>
<if test="entity.identityType != null and entity.identityType != ''">
and main.identity_type =
#{entity.identityType}
</if>
<if test="entity.nickName != null and entity.nickName != '' ">and su.nick_name like concat('%',#{entity.nickName},'%') </if>
@ -119,11 +123,10 @@
su.avatar AS avatar,
su.user_name AS userName,
su.phonenumber AS phonenumber,
GROUP_CONCAT(mc.card_name SEPARATOR ', ') AS memberCardName
from dl_member_user main
LEFT JOIN sys_user su ON main.user_id = su.user_id AND su.del_flag = 0
left join (select dict_value,dict_label from sys_dict_data where dict_type = 'dl_identity_type') sdd on main.identity_type = sdd.dict_value
left join (select dict_value,dict_label from sys_dict_data where dict_type = 'dl_identity_type') sdd on main.identity_type = sdd.dict_value
LEFT JOIN dl_member_card mc ON
main.user_id = mc.user_id
AND mc.start_date &lt;= CURDATE()
@ -155,16 +158,28 @@
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,
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 dl_member_card mc
ON main.user_id = mc.user_id
LEFT JOIN (
SELECT mc_inner.*
FROM dl_member_card mc_inner
INNER JOIN (
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
) mc ON main.user_id = mc.user_id
AND mc.start_date &lt;= CURDATE()
AND mc.end_date &gt;= CURDATE()
AND mc.del_flag = 0
AND mc.user_type = #{entity.userType}
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 <![CDATA[>=]]> DATE_FORMAT(CURDATE(), '%Y-%m-01')
and dmo.create_time <![CDATA[<=]]> LAST_DAY(CURDATE())
<where>
main.del_flag = 0
<if test="entity.userType != null and entity.userType != ''">
@ -174,12 +189,22 @@
#{entity.identityType}
</if>
<if test="entity.nickName != null and entity.nickName != '' ">and su.nick_name like concat('%',#{entity.nickName},'%') </if>
<if test="entity.xsName != null and entity.xsName != '' ">and su_temp.nick_name like concat('%',#{entity.xsName},'%') </if>
<if test="entity.userId != null "> and su.invite_id = #{entity.userId}</if>
<if test="entity.deptId != null "> and su_temp.dept_id = #{entity.deptId}</if>
<if test="entity.tel != null and entity.tel !='' "> and main.tel like CONCAT('%',#{entity.tel},'%') </if>
<if test="entity.params.minnum != null"> and main.ttotal_num &gt;= #{entity.params.minnum} </if>
<if test="entity.params.maxnum != null"> and main.ttotal_num &lt;= #{entity.params.maxnum} </if>
<if test="entity.params.isVip != null and entity.params.isVip != ''"> and mc.card_name = #{entity.params.isVip} </if>
</where>
GROUP BY main.user_id
<if test="entity.params.isXf != null and entity.params.isXf == '01'">
having sum(dmo.goods_price)>0
</if>
<if test="entity.params.isXf != null and entity.params.isXf == '02'">
having sum(dmo.goods_price) is null
</if>
<choose>
<when test="entity.params.orderBy != null and entity.params.orderBy != ''">
ORDER BY ${entity.params.orderBy}

View File

@ -1,9 +1,9 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnyLw8B8x3B+jWpCxiSeU
L+7NjFjx34Q44zlyRq6RXnz9xMFJXZq7HLv4YA9GcKyniF6aq7TvelKV8NUE8Ogd
fdOEZr2Gc/W15nz1RAo5Fu2K9q9IsZlQ4pM+HT9oqu4qVCrsPZEPbr11szQZjqtf
WdpZhRmiFzQRui0V0xzOQcd0GhicVhN5uMOekFqTALCq9JcWUl6Ti0fF4I4wH4kZ
iZVEkPTcXQACEUWRCH7hbRvluF1dEr87I/hdp98C1lo1UzQWHimVmFD8t0wHgnyO
qgSog353Hu59zkPB6qdraNNAvvOScOD8S/U57Nc4NXPXHOua1ZekwbE7lw/AvOcJ
zQIDAQAB
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA08i56HxnYH8rqaELK/JA
dAUK1HFz+PKdrNtF3jxR3mYeMjjZ32TOjDRpG0eG3ZE2fVzdKqdfNP3ti1cSt1p2
2QCG9Ch91/MuQvCOzaBOh9o3+++H3zGUVy9++0MwjbYwlL0SdYydkgcrZL7FWktC
m1Jf+nDOFg8UStQK3BBK6LkzN123MeTTNrcdYZlSfG11rbdmU3MaBVsF52tH4rz0
1V+DRhIT3c3p9eH5qvaOYe/1Al1x9JO9NuqPtiotU0bH1mR6/pewXvvIYizkrAeB
A/HTmv2y5nH9gzGUUBn+jZ+hODQID98T5H61wfPY/3hGCjYPPM1JAPU5Pu+peBCc
8wIDAQAB
-----END PUBLIC KEY-----

View File

@ -22,6 +22,7 @@ public abstract class RepeatSubmitInterceptor implements HandlerInterceptor
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
{
if (handler instanceof HandlerMethod)
{
HandlerMethod handlerMethod = (HandlerMethod) handler;

View File

@ -5,6 +5,9 @@ import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
@ -18,7 +21,7 @@ import com.ruoyi.framework.web.service.TokenService;
/**
* token过滤器 验证token有效性
*
*
* @author ruoyi
*/
@Component
@ -26,14 +29,21 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
{
@Autowired
private TokenService tokenService;
@Autowired
private ISysUserService sysUserService;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException
{
LoginUser loginUser = tokenService.getLoginUser(request);
if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication()))
{
SysUser sysUser = sysUserService.selectUserById(loginUser.getUserId());
if (!sysUser.getStatus().equals("0")){
return;
}
tokenService.verifyToken(loginUser);
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));

View File

@ -131,5 +131,6 @@ public interface SysUserMapper
* @return
*/
public SysUser selectWxUserByOpenIdOrPhone(@Param("openId") String openId,@Param("phone") String phone,@Param("wxOpenId") String wxOpenId,@Param("unionId") String unionId);
List<SysUser> getUserByRole(@Param("role") String role,@Param("deptId") Long deptId);
}

View File

@ -5,14 +5,14 @@ import com.ruoyi.common.core.domain.entity.SysUser;
/**
* 用户 业务层
*
*
* @author ruoyi
*/
public interface ISysUserService
{
/**
* 根据条件分页查询用户列表
*
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@ -20,7 +20,7 @@ public interface ISysUserService
/**
* 根据条件分页查询已分配用户角色列表
*
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@ -28,7 +28,7 @@ public interface ISysUserService
/**
* 根据条件分页查询未分配用户角色列表
*
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@ -36,7 +36,7 @@ public interface ISysUserService
/**
* 通过用户名查询用户
*
*
* @param userName 用户名
* @return 用户对象信息
*/
@ -44,7 +44,7 @@ public interface ISysUserService
/**
* 通过用户ID查询用户
*
*
* @param userId 用户ID
* @return 用户对象信息
*/
@ -52,7 +52,7 @@ public interface ISysUserService
/**
* 根据用户ID查询用户所属角色组
*
*
* @param userName 用户名
* @return 结果
*/
@ -60,7 +60,7 @@ public interface ISysUserService
/**
* 根据用户ID查询用户所属岗位组
*
*
* @param userName 用户名
* @return 结果
*/
@ -68,7 +68,7 @@ public interface ISysUserService
/**
* 校验用户名称是否唯一
*
*
* @param user 用户信息
* @return 结果
*/
@ -92,21 +92,21 @@ public interface ISysUserService
/**
* 校验用户是否允许操作
*
*
* @param user 用户信息
*/
public void checkUserAllowed(SysUser user);
/**
* 校验用户是否有数据权限
*
*
* @param userId 用户id
*/
public void checkUserDataScope(Long userId);
/**
* 新增用户信息
*
*
* @param user 用户信息
* @return 结果
*/
@ -114,7 +114,7 @@ public interface ISysUserService
/**
* 注册用户信息
*
*
* @param user 用户信息
* @return 结果
*/
@ -122,7 +122,7 @@ public interface ISysUserService
/**
* 修改用户信息
*
*
* @param user 用户信息
* @return 结果
*/
@ -130,7 +130,7 @@ public interface ISysUserService
/**
* 用户授权角色
*
*
* @param userId 用户ID
* @param roleIds 角色组
*/
@ -138,7 +138,7 @@ public interface ISysUserService
/**
* 修改用户状态
*
*
* @param user 用户信息
* @return 结果
*/
@ -146,7 +146,7 @@ public interface ISysUserService
/**
* 修改用户基本信息
*
*
* @param user 用户信息
* @return 结果
*/
@ -154,7 +154,7 @@ public interface ISysUserService
/**
* 修改用户头像
*
*
* @param userName 用户名
* @param avatar 头像地址
* @return 结果
@ -163,7 +163,7 @@ public interface ISysUserService
/**
* 重置用户密码
*
*
* @param user 用户信息
* @return 结果
*/
@ -171,7 +171,7 @@ public interface ISysUserService
/**
* 重置用户密码
*
*
* @param userName 用户名
* @param password 密码
* @return 结果
@ -180,7 +180,7 @@ public interface ISysUserService
/**
* 通过用户ID删除用户
*
*
* @param userId 用户ID
* @return 结果
*/
@ -188,7 +188,7 @@ public interface ISysUserService
/**
* 批量删除用户信息
*
*
* @param userIds 需要删除的用户ID
* @return 结果
*/
@ -196,11 +196,12 @@ public interface ISysUserService
/**
* 导入用户数据
*
*
* @param userList 用户数据列表
* @param isUpdateSupport 是否更新支持如果已存在则进行更新数据
* @param operName 操作用户
* @return 结果
*/
public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName);
List<SysUser> getUserByRole(String role, Long deptId);
}

View File

@ -33,7 +33,7 @@ import com.ruoyi.system.service.ISysUserService;
/**
* 用户 业务层处理
*
*
* @author ruoyi
*/
@Service
@ -67,7 +67,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 根据条件分页查询用户列表
*
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@ -80,7 +80,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 根据条件分页查询已分配用户角色列表
*
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@ -93,7 +93,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 根据条件分页查询未分配用户角色列表
*
*
* @param user 用户信息
* @return 用户信息集合信息
*/
@ -106,7 +106,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 通过用户名查询用户
*
*
* @param userName 用户名
* @return 用户对象信息
*/
@ -118,7 +118,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 通过用户ID查询用户
*
*
* @param userId 用户ID
* @return 用户对象信息
*/
@ -130,7 +130,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 查询用户所属角色组
*
*
* @param userName 用户名
* @return 结果
*/
@ -147,7 +147,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 查询用户所属岗位组
*
*
* @param userName 用户名
* @return 结果
*/
@ -164,7 +164,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 校验用户名称是否唯一
*
*
* @param user 用户信息
* @return 结果
*/
@ -218,7 +218,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 校验用户是否允许操作
*
*
* @param user 用户信息
*/
@Override
@ -232,7 +232,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 校验用户是否有数据权限
*
*
* @param userId 用户id
*/
@Override
@ -252,7 +252,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 新增保存用户信息
*
*
* @param user 用户信息
* @return 结果
*/
@ -271,7 +271,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 注册用户信息
*
*
* @param user 用户信息
* @return 结果
*/
@ -283,7 +283,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 修改保存用户信息
*
*
* @param user 用户信息
* @return 结果
*/
@ -305,7 +305,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 用户授权角色
*
*
* @param userId 用户ID
* @param roleIds 角色组
*/
@ -319,7 +319,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 修改用户状态
*
*
* @param user 用户信息
* @return 结果
*/
@ -331,7 +331,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 修改用户基本信息
*
*
* @param user 用户信息
* @return 结果
*/
@ -343,7 +343,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 修改用户头像
*
*
* @param userName 用户名
* @param avatar 头像地址
* @return 结果
@ -356,7 +356,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 重置用户密码
*
*
* @param user 用户信息
* @return 结果
*/
@ -368,7 +368,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 重置用户密码
*
*
* @param userName 用户名
* @param password 密码
* @return 结果
@ -381,7 +381,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 新增用户角色信息
*
*
* @param user 用户对象
*/
public void insertUserRole(SysUser user)
@ -391,7 +391,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 新增用户岗位信息
*
*
* @param user 用户对象
*/
public void insertUserPost(SysUser user)
@ -414,7 +414,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 新增用户角色信息
*
*
* @param userId 用户ID
* @param roleIds 角色组
*/
@ -437,7 +437,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 通过用户ID删除用户
*
*
* @param userId 用户ID
* @return 结果
*/
@ -454,7 +454,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 批量删除用户信息
*
*
* @param userIds 需要删除的用户ID
* @return 结果
*/
@ -476,7 +476,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 导入用户数据
*
*
* @param userList 用户数据列表
* @param isUpdateSupport 是否更新支持如果已存在则进行更新数据
* @param operName 操作用户
@ -547,4 +547,10 @@ public class SysUserServiceImpl implements ISysUserService
}
return successMsg.toString();
}
@Override
public List<SysUser> getUserByRole(String role, Long deptId) {
return userMapper.getUserByRole(role, deptId);
}
}

View File

@ -249,4 +249,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and u.user_name = #{phone}
</if>
</select>
<select id="getUserByRole" resultType="com.ruoyi.common.core.domain.entity.SysUser">
select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status,u.open_id,u.wx_open_id,u.union_id,u.invite_id
,u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader
from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
left join sys_user_role ur on u.user_id = ur.user_id
left join sys_role r on ur.role_id = r.role_id
where u.del_flag = '0' and r.role_key = #{role} and d.dept_id = #{deptId}
</select>
</mapper>