crm功能开发

This commit is contained in:
13405411873 2025-06-20 15:20:08 +08:00
parent e00bc0c869
commit 4418f3cf8e
13 changed files with 229 additions and 48 deletions

View File

@ -71,7 +71,7 @@ public class PayApi {
*/
@ApiOperation(value = "统一下单-统一接口", notes = "统一下单-统一接口")
@GetMapping("/prepayment")
public PrepayWithRequestPaymentResponse transactions( String orderNo) {
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);
@ -86,27 +86,52 @@ public class PayApi {
.merchantSerialNumber(wechatPayConfig.getSerialNo())
.apiV3Key(wechatPayConfig.getApiV3Key())
.build();
// 构建service
JsapiServiceExtension service = new JsapiServiceExtension .Builder().config(config).build();
// request.setXxx(val)设置所需参数具体参数可见Request定义
PrepayRequest request = new PrepayRequest();
Amount amount = new Amount();
Payer payer = new Payer();
BigDecimal goodsPrice = memberOrder.getGoodsPrice();
// 金额单位为分
int totalInFen = goodsPrice.multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_UP).intValue();
amount.setTotal(totalInFen);
payer.setOpenid(user.getWxOpenId());
request.setAmount(amount);
request.setAppid(wechatPayConfig.getAppId());
request.setMchid(wechatPayConfig.getMchId());
request.setDescription("开通会员");
request.setNotifyUrl(wechatPayConfig.getNotifyUrl());
request.setOutTradeNo(orderNo);
request.setPayer(payer);
// 调用下单方法得到应答
// response包含了调起支付所需的所有参数可直接用于前端调起支付
return service.prepayWithRequestPayment(request);
if (type.equals("h5")){
// 构建service
JsapiServiceExtension service = new JsapiServiceExtension .Builder().config(config).build();
// request.setXxx(val)设置所需参数具体参数可见Request定义
PrepayRequest request = new PrepayRequest();
Amount amount = new Amount();
Payer payer = new Payer();
BigDecimal goodsPrice = memberOrder.getGoodsPrice();
// 金额单位为分
int totalInFen = goodsPrice.multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_UP).intValue();
amount.setTotal(totalInFen);
payer.setOpenid(user.getWxOpenId());
request.setAmount(amount);
request.setAppid(wechatPayConfig.getAppId());
request.setMchid(wechatPayConfig.getMchId());
request.setDescription("开通会员");
request.setNotifyUrl(wechatPayConfig.getNotifyUrl());
request.setOutTradeNo(orderNo);
request.setPayer(payer);
// 调用下单方法得到应答
// response包含了调起支付所需的所有参数可直接用于前端调起支付
return service.prepayWithRequestPayment(request);
}else {
// 构建service
JsapiServiceExtension service = new JsapiServiceExtension .Builder().config(config).build();
// request.setXxx(val)设置所需参数具体参数可见Request定义
PrepayRequest request = new PrepayRequest();
Amount amount = new Amount();
Payer payer = new Payer();
BigDecimal goodsPrice = memberOrder.getGoodsPrice();
// 金额单位为分
int totalInFen = goodsPrice.multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_UP).intValue();
amount.setTotal(totalInFen);
payer.setOpenid(user.getOpenId());
request.setAmount(amount);
request.setAppid(appConfig.getAppId());
request.setMchid(wechatPayConfig.getMchId());
request.setDescription("开通会员");
request.setNotifyUrl(wechatPayConfig.getNotifyUrl());
request.setOutTradeNo(orderNo);
request.setPayer(payer);
// 调用下单方法得到应答
// response包含了调起支付所需的所有参数可直接用于前端调起支付
return service.prepayWithRequestPayment(request);
}
}

View File

@ -52,6 +52,27 @@ public class MemberUserController extends BaseController {
return success(list);
}
/**
* 博主/通告主列表查询
*
* @param memberUser {@link MemberUserVO}
* @param pageNum 分页参数
* @param pageSize 分页参数
* @return com.ruoyi.common.core.domain.AjaxResult
* @author PQZ
* @date 14:58 2025/3/18
**/
@GetMapping("/crmList")
public AjaxResult crmList(MemberUserVO memberUser,
@RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
Page<MemberUserVO> page = new Page<>(pageNum, pageSize);
IPage<MemberUserVO> list = memberUserService.crmList(memberUser, page);
return success(list);
}
/**
* 获取会员详细信息
*

View File

@ -1,6 +1,9 @@
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;
@ -11,7 +14,7 @@ import com.ruoyi.common.core.domain.DlBaseEntity;
/**
* 会员开卡记录对象 dl_member_card
*
*
* @author pqz
* @date 2025-03-17
*/
@ -59,5 +62,9 @@ public class MemberCard extends DlBaseEntity
/** 关联订单id */
@Excel(name = "关联订单id")
private String orderId;
/** 商品价格 */
@Excel(name = "商品价格")
@TableField(exist = false)
private BigDecimal goodsPrice;
}

View File

@ -8,7 +8,7 @@ import org.apache.ibatis.annotations.Param;
/**
* 会员开卡记录Mapper接口
*
*
* @author pqz
* @date 2025-03-17
*/
@ -31,4 +31,6 @@ public interface MemberCardMapper extends BaseMapper<MemberCard>
* @date 14:14 2025/4/25
**/
List<MemberCard> selectMemberCardList(@Param("userId")Long userId,@Param("userType")String userType,@Param("nowDate")String nowDate);
List<MemberCard> listByUserId(@Param("userId")Long userId,@Param("userType")String userType);
}

View File

@ -30,6 +30,9 @@ public interface MemberUserMapper extends BaseMapper<MemberUser> {
**/
IPage<MemberUserVO> queryListPage(@Param("entity") MemberUserVO entity, Page<MemberUserVO> page);
IPage<MemberUserVO> crmList(@Param("entity") MemberUserVO entity, Page<MemberUserVO> page);
/**
* 通过userId和用户类型查询用户信息
*

View File

@ -28,6 +28,10 @@ public interface IMemberUserService extends IService<MemberUser> {
**/
IPage<MemberUserVO> queryListPage(MemberUserVO pageReqVO, Page<MemberUserVO> page);
IPage<MemberUserVO> crmList(MemberUserVO pageReqVO, Page<MemberUserVO> page);
/**
* 根据用户表id获取通告主信息
*
@ -96,9 +100,9 @@ public interface IMemberUserService extends IService<MemberUser> {
/**
* 发布通告数量统计
* @author PQZ
* @date 15:20 2025/6/16
* @date 15:20 2025/6/16
* @param userId 用户id
**/
void setTotalNum(Long userId);
}
}

View File

@ -80,13 +80,16 @@ public class MemberApplyServiceImpl extends ServiceImpl<MemberApplyMapper, Membe
memberApply.setApprovalTime(nowDate);
memberApply.setApprovalUserName(sysUser.getNickName());
updateById(memberApply);
//通过userId更新会员表身份类型
LambdaUpdateWrapper<MemberUser> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(MemberUser::getUserId, memberApply.getUserId())
.eq(DlBaseEntity::getDelFlag, 0)
.eq(MemberUser::getUserType, "01")
.set(MemberUser::getIdentityType, memberApply.getIdentityType());
memberUserService.update(lambdaUpdateWrapper);
if (memberApply.getApprovalStatus().equals("1")) {
//通过userId更新会员表身份类型
LambdaUpdateWrapper<MemberUser> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(MemberUser::getUserId, memberApply.getUserId())
.eq(DlBaseEntity::getDelFlag, 0)
.eq(MemberUser::getUserType, "01")
.set(MemberUser::getIdentityType, memberApply.getIdentityType());
memberUserService.update(lambdaUpdateWrapper);
}
}
/**

View File

@ -18,6 +18,7 @@ import com.ruoyi.member.mapper.MemberBusiCardMapper;
import com.ruoyi.member.query.MemberBusiCardQuery;
import com.ruoyi.member.service.IMemberBusiCardService;
import com.ruoyi.member.vo.MemberBusiCardVO;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -45,6 +46,8 @@ public class MemberBusiCardServiceImpl extends ServiceImpl<MemberBusiCardMapper,
private IBusiNoticeService noticeService;
@Autowired
private ISysUserService userService;
@Autowired
private ISysConfigService configService;
/**
* 分页查询博主名片信息
@ -134,7 +137,8 @@ public class MemberBusiCardServiceImpl extends ServiceImpl<MemberBusiCardMapper,
List<BaseCategory> list = categoryService.selectByCode(memberBusiCard.getPlatformCode());
memberBusiCard.setPlatformName(list.get(0).getTitle());
//设置用户审核状态
memberBusiCard.setApprovalStatus("0");
String status = configService.selectConfigByKey("isPass");
memberBusiCard.setApprovalStatus(status);
saveOrUpdate(memberBusiCard);
}
/**
@ -163,7 +167,7 @@ public class MemberBusiCardServiceImpl extends ServiceImpl<MemberBusiCardMapper,
//获取通告的粉丝限制
//获取通告的粉丝限制
for (MemberBusiCardVO re : resList) {
if ((null != busiNotice.getFansUp() &&re.getFansNum() > busiNotice.getFansUp())||(null !=busiNotice.getFansDown() && re.getFansNum() < busiNotice.getFansDown()) ) {
if (((null != busiNotice.getFansUp()&&0 != busiNotice.getFansUp()) &&re.getFansNum() > busiNotice.getFansUp())||(null !=busiNotice.getFansDown() && re.getFansNum() < busiNotice.getFansDown()) ) {
re.setCanUse("0");
canUseNum--;
}

View File

@ -64,14 +64,8 @@ public class MemberCardServiceImpl extends ServiceImpl<MemberCardMapper, MemberC
**/
@Override
public List<MemberCard> listByUserId(Long userId, String userType) {
//查询列表
LambdaUpdateWrapper<MemberCard> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper
.eq(DlBaseEntity::getDelFlag, 0)
.eq(MemberCard::getUserId, userId)
.eq(MemberCard::getUserType, userType)
.orderByDesc(DlBaseEntity::getCreateTime);
return list(lambdaUpdateWrapper);
return baseMapper.listByUserId(userId, userType);
}
/**

View File

@ -137,6 +137,45 @@ public class MemberUserServiceImpl extends ServiceImpl<MemberUserMapper, MemberU
return rtnPage;
}
@Override
public IPage<MemberUserVO> crmList(MemberUserVO pageReqVO, Page<MemberUserVO> page) {
LoginUser loginUser = SecurityUtils.getLoginUser();
SysUser user = loginUser.getUser();
// 管理员拥有所有权限
if (!user.isAdmin()) {
Set<String> strings = roleService.selectRolePermissionByUserId(user.getUserId());
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;
}
/**
* 根据用户表id获取通告主信息
*
@ -178,6 +217,8 @@ public class MemberUserServiceImpl extends ServiceImpl<MemberUserMapper, MemberU
result.setAddresses(addressService.listByUserId(userId));
//会员开通记录
result.setCards(cardService.listByUserId(userId, "02"));
//获取会员开卡记录
return result;
}
@ -255,6 +296,7 @@ public class MemberUserServiceImpl extends ServiceImpl<MemberUserMapper, MemberU
user.setNickName("微信用户");
user.setOpenId(openid);
user.setPhonenumber(phone);
user.setPassword(SecurityUtils.encryptPassword("123456"));
user.setSex("2");
user.setCreateTime(DateUtils.getNowDate());
user.setUnionId(unionid);

View File

@ -66,13 +66,13 @@ order by dbns.create_time desc
<select id="queryAppListPage" 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,
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
<if test="entity.userId!=null and entity.userId!=''">

View File

@ -56,6 +56,18 @@
ORDER BY dmc.end_date DESC
</select>
<select id="listByUserId" resultType="com.ruoyi.member.domain.MemberCard">
SELECT
dmc.*,orderInfo.goods_price
FROM
dl_member_card dmc
LEFT JOIN dl_base_card dbc ON dmc.card_id = dbc.id
left join dl_member_order orderInfo on orderInfo.id = dmc.order_id
WHERE dmc.user_id = #{userId}
AND dmc.user_type = #{userType}
AND dmc.del_flag = 0
ORDER BY dmc.end_date DESC
</select>
</mapper>
</mapper>

View File

@ -84,9 +84,19 @@
<if test="entity.nickName != null and entity.nickName != '' ">and su.nick_name like concat('%',#{entity.nickName},'%') </if>
<if test="entity.userId != null "> and su.invite_id = #{entity.userId}</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>
</where>
GROUP BY main.user_id
ORDER BY mc.create_time desc
<choose>
<when test="entity.params.orderBy != null and entity.params.orderBy != ''">
ORDER BY ${entity.params.orderBy}
</when>
<otherwise>
ORDER BY mc.create_time desc
</otherwise>
</choose>
</select>
<select id="queryByUserId" resultType="com.ruoyi.member.vo.MemberUserVO">
select main.id AS id,
@ -126,6 +136,60 @@
and main.user_type = #{userType}
GROUP BY main.user_id
</select>
<select id="crmList" resultType="com.ruoyi.member.vo.MemberUserVO">
select main.id AS id,
main.user_type AS userType,
main.identity_type AS identityType,
main.user_id AS userId,
main.tel AS tel,
main.tremaining AS tremaining,
main.ttotal_num AS ttotalNum,
main.tfans_num AS tfansNum,
main.topen_disturb AS topenDisturb,
main.trecipient_name AS trecipientName,
main.trecipient_image AS trecipientImage,
main.bpoints AS bpoints,
su.nick_name AS nickName,
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,
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
AND mc.start_date &lt;= CURDATE()
AND mc.end_date &gt;= CURDATE()
AND mc.del_flag = 0
AND mc.user_type = #{entity.userType}
<where>
main.del_flag = 0
<if test="entity.userType != null and entity.userType != ''">
and main.user_type = #{entity.userType}
</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>
<if test="entity.userId != null "> and su.invite_id = #{entity.userId}</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>
</where>
GROUP BY main.user_id
<choose>
<when test="entity.params.orderBy != null and entity.params.orderBy != ''">
ORDER BY ${entity.params.orderBy}
</when>
<otherwise>
ORDER BY mc.create_time desc
</otherwise>
</choose>
</select>
</mapper>