crm功能开发
This commit is contained in:
parent
e00bc0c869
commit
4418f3cf8e
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员详细信息
|
||||
*
|
||||
|
@ -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;
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
|
@ -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和用户类型查询用户信息
|
||||
*
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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--;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
|
@ -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!=''">
|
||||
|
@ -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>
|
||||
|
@ -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 >= #{entity.params.minnum} </if>
|
||||
<if test="entity.params.maxnum != null"> and main.ttotal_num <= #{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 <= CURDATE()
|
||||
AND mc.end_date >= 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 >= #{entity.params.minnum} </if>
|
||||
<if test="entity.params.maxnum != null"> and main.ttotal_num <= #{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>
|
||||
|
Loading…
Reference in New Issue
Block a user