This commit is contained in:
PQZ 2025-04-10 10:25:00 +08:00
commit 5dbab3d69c
14 changed files with 254 additions and 34 deletions

View File

@ -3,13 +3,17 @@ package com.ruoyi.busi.controller;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson2.JSONObject;
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.ruoyi.busi.domain.BusiNoticeForm;
import com.ruoyi.busi.query.AppNoticeQuery;
import com.ruoyi.busi.query.BusiNoticeQuery;
import com.ruoyi.busi.service.IBusiNoticeFormService;
import com.ruoyi.busi.vo.BusiNoticeVo;
import com.ruoyi.common.annotation.Anonymous;
import org.springframework.security.access.prepost.PreAuthorize;
@ -43,6 +47,8 @@ public class BusiNoticeController extends BaseController
{
@Autowired
private IBusiNoticeService busiNoticeService;
@Autowired
private IBusiNoticeFormService busiNoticeFormService;
/**
* 查询通告列表
@ -93,17 +99,19 @@ public class BusiNoticeController extends BaseController
/**
* 获取通告详细信息
*/
@PreAuthorize("@ss.hasPermi('busi:notice:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") String id)
{
return success(busiNoticeService.getById(id));
//通告信息
BusiNotice detail = busiNoticeService.getById(id);
//再获取报名动态表单
List<BusiNoticeForm> customForm = busiNoticeFormService.list(new LambdaQueryWrapper<BusiNoticeForm>()
.eq(BusiNoticeForm::getNoticeId,id).orderByAsc(BusiNoticeForm::getSort));
detail.setCustomForm(customForm.stream().map(BusiNoticeForm::getLabelTitle).collect(Collectors.toList()));
return success(detail);
}
/**
* 新增通告
*/
@PreAuthorize("@ss.hasPermi('busi:notice:add')")
@Log(title = "通告", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BusiNotice busiNotice)
@ -115,24 +123,22 @@ public class BusiNoticeController extends BaseController
/**
* 修改通告
*/
@PreAuthorize("@ss.hasPermi('busi:notice:edit')")
@Log(title = "通告", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BusiNotice busiNotice)
{
return toAjax(busiNoticeService.updateById(busiNotice));
busiNoticeService.updateByIdVo(busiNotice);
return success();
}
/**
* 删除通告
*/
@PreAuthorize("@ss.hasPermi('busi:notice:remove')")
@Log(title = "通告", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
List<String> list = new ArrayList<>(Arrays.asList(ids));
return toAjax(busiNoticeService.removeByIds(list));
busiNoticeService.removeByIdsVo(list);
return success();
}
/**

View File

@ -6,6 +6,7 @@ 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 com.ruoyi.busi.query.AppNoticeSign;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -28,7 +29,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
/**
* 通告报名Controller
*
*
* @author 朱春云
* @date 2025-03-17
*/
@ -109,4 +110,16 @@ public class BusiNoticeSignController extends BaseController
List<String> list = new ArrayList<>(Arrays.asList(ids));
return toAjax(busiNoticeSignService.removeByIds(list));
}
/**
* 用户通告报名
*/
@PostMapping("/userSign")
public AjaxResult userSign(@RequestBody AppNoticeSign appNoticeSign)
{
busiNoticeSignService.userSign(appNoticeSign);
return success();
}
}

View File

@ -2,6 +2,9 @@ package com.ruoyi.busi.domain;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.baomidou.mybatisplus.annotation.IdType;
@ -158,5 +161,10 @@ public class BusiNotice extends DlBaseEntity
* 对比后相似的通告id 逗号隔开
*/
private String similarityIds;
/**
* 自定义表单
*/
@TableField(exist = false)
private List<String> customForm;
}

View File

@ -1,27 +1,29 @@
package com.ruoyi.busi.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
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;
import org.apache.ibatis.type.JdbcType;
import java.io.Serializable;
import java.util.Date;
/**
* 通告自定义报名单对象 dl_busi_notice_form
*
*
* @author 朱春云
* @date 2025-03-17
*/
@TableName("dl_busi_notice_form")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BusiNoticeForm extends DlBaseEntity
{
public class BusiNoticeForm implements Serializable {
private static final long serialVersionUID = 1L;
/** 唯一主键 */
@ -40,4 +42,13 @@ public class BusiNoticeForm extends DlBaseEntity
@Excel(name = "排序")
private Integer sort;
/** 创建者 */
@TableField(fill = FieldFill.INSERT, jdbcType = JdbcType.VARCHAR)
private String creator;
/** 创建时间 */
@TableField(fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
}

View File

@ -7,9 +7,11 @@ import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import com.ruoyi.common.core.domain.DlBaseEntity;
import java.math.BigDecimal;
/**
* 通告报名对象 dl_busi_notice_sign
*
*
* @author 朱春云
* @date 2025-03-17
*/
@ -69,9 +71,21 @@ public class BusiNoticeSign extends DlBaseEntity
/** 已发布的文章链接 */
@Excel(name = "已发布的文章链接")
private String articleRef;
/**
* 动态表单json
*/
private String formData;
/** 备注 */
@Excel(name = "备注")
/** 附言 */
@Excel(name = "附言")
private String remark;
/**
* 报名卡片
*/
private String cardId;
/**
* 报价
*/
private BigDecimal price;
}

View File

@ -10,7 +10,7 @@ import com.ruoyi.common.core.domain.DlBaseEntity;
/**
* 通告报名名片对象 dl_busi_notice_sign_card
*
*
* @author 朱春云
* @date 2025-03-17
*/
@ -43,5 +43,7 @@ public class BusiNoticeSignCard extends DlBaseEntity
/** 默认报价 */
@Excel(name = "默认报价")
private BigDecimal price;
/** 附言 */
@Excel(name = "附言")
private String remark;
}

View File

@ -0,0 +1,31 @@
package com.ruoyi.busi.query;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.util.List;
@Data
public class AppNoticeSign {
/**
* 通告id
*/
private String noticeId;
/**
* 动态表单json
*/
private JSONArray customForm;
/**
* cardIds
*/
private List<JSONObject> cardList;
/**
* 收货地址id
*/
private String addressId;
/** 是否超级报名 */
private String isSuper;
}

View File

@ -41,6 +41,13 @@ public interface IBusiNoticeService extends IService<BusiNotice>
* @param data 保存参数
*/
void saveVo(BusiNotice data);
/**
* 更新
* @param data 保存参数
*/
void updateByIdVo(BusiNotice data);
void removeByIdsVo(List<String> ids);
/**
* 发布或者下架
* @param noticeId 通告主键

View File

@ -5,14 +5,16 @@ 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.BusiNoticeSign;
import com.ruoyi.busi.query.AppNoticeSign;
/**
* 通告报名Service接口
*
*
* @author 朱春云
* @date 2025-03-17
*/
public interface IBusiNoticeSignService extends IService<BusiNoticeSign>
{
IPage<BusiNoticeSign> queryListPage(BusiNoticeSign pageReqVO, Page<BusiNoticeSign> page);
void userSign(AppNoticeSign appNoticeSign);
}

View File

@ -2,16 +2,16 @@ package com.ruoyi.busi.service.impl;
import java.util.*;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.base.domain.BaseCategory;
import com.ruoyi.base.service.IBaseCategoryService;
import com.ruoyi.busi.domain.BusiNoticeSign;
import com.ruoyi.busi.domain.BusiSubscribe;
import com.ruoyi.busi.domain.BusiUserLove;
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.vo.BusiNoticeVo;
@ -40,8 +40,8 @@ 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.BusiNoticeMapper;
import com.ruoyi.busi.domain.BusiNotice;
import com.ruoyi.busi.service.IBusiNoticeService;
import org.springframework.transaction.annotation.Transactional;
/**
* 通告Service业务层处理
@ -70,6 +70,9 @@ public class BusiNoticeServiceImpl extends ServiceImpl<BusiNoticeMapper,BusiNoti
private ISysDictDataService dictDataService;
@Autowired
private IBusiSubscribeService subscribeService;
@Autowired
private IBusiNoticeFormService busiNoticeFormService;
@Override
public IPage<BusiNoticeVo> queryListPage(BusiNoticeQuery query, Page<BusiNotice> page) {
@ -81,6 +84,7 @@ public class BusiNoticeServiceImpl extends ServiceImpl<BusiNoticeMapper,BusiNoti
* @param data 通告对象
*/
@Override
@Transactional
public void saveVo(BusiNotice data) {
//获取当前登录用户
data.setUserId(SecurityUtils.getUserId());
@ -113,10 +117,83 @@ public class BusiNoticeServiceImpl extends ServiceImpl<BusiNoticeMapper,BusiNoti
}
this.save(data);
}
//保存表单数据
if (CollectionUtil.isNotEmpty(data.getCustomForm())){
int sort = 1;
for (String title : data.getCustomForm()) {
BusiNoticeForm noticeForm = new BusiNoticeForm();
noticeForm.setNoticeId(data.getId());
noticeForm.setLabelTitle(title);
noticeForm.setSort(sort++);
busiNoticeFormService.save(noticeForm);
}
}
}
@Override
@Transactional
public void updateByIdVo(BusiNotice data) {
//获取当前登录用户
data.setUserId(SecurityUtils.getUserId());
if (StringUtils.isNotEmpty(data.getApprovalStatus())&&data.getApprovalStatus().equals("8")){
//草稿数据直接保存
this.updateById(data);
}else {
//判断 内容重复度 是否大于70%
//先获取 当前系统中截止日期之前的
LambdaQueryWrapper<BusiNotice> queryWrapper =new LambdaQueryWrapper<>();
queryWrapper.gt(BusiNotice::getEndDate, DateUtil.format(new Date(),"yyyy-MM-dd")).eq(BusiNotice::getApprovalStatus,1)
.ne(BusiNotice::getId,data.getId());
List<BusiNotice> list = this.list(queryWrapper);
//无问题数据直接审核通过
data.setApprovalStatus("1");
data.setApprovalUserId(null);
data.setApprovalTime(new Date());
//遍历 list的每条数据与data对比如果两条数据相似度大于70% 提出预警
for (BusiNotice busiNotice : list) {
double v1 = NoticeUtils.computeJaccardSimilarity(data.getTitle(), busiNotice.getTitle());
double v2 = NoticeUtils.computeJaccardSimilarity(data.getDetail(), busiNotice.getDetail());
if (v1>=0.7&&v2>=0.7){
//title detail 相似度大于70% 待审核
data.setApprovalStatus("0");
data.setSimilarityIds(Optional.ofNullable(data.getSimilarityIds()).orElse("")+busiNotice.getId()+",");
}
}
if (StringUtils.isNotEmpty(data.getSimilarityIds())){
//删除结尾的最后一个逗号
data.setSimilarityIds(data.getSimilarityIds().substring(0, data.getSimilarityIds().length() - 1));
}
this.updateById(data);
}
//先删除表单数据
busiNoticeFormService.remove(new LambdaQueryWrapper<BusiNoticeForm>().eq(BusiNoticeForm::getNoticeId,data.getId()));
//保存表单数据
if (CollectionUtil.isNotEmpty(data.getCustomForm())){
int sort = 1;
for (String title : data.getCustomForm()) {
BusiNoticeForm noticeForm = new BusiNoticeForm();
noticeForm.setNoticeId(data.getId());
noticeForm.setLabelTitle(title);
noticeForm.setSort(sort++);
busiNoticeFormService.save(noticeForm);
}
}
}
@Override
@Transactional
public void removeByIdsVo(List<String> ids) {
for (String id : ids) {
busiNoticeFormService.remove(new LambdaQueryWrapper<BusiNoticeForm>().eq(BusiNoticeForm::getNoticeId,id));
this.removeById(id);
}
}
/**
* 查询博主报名的通告
*
@ -283,6 +360,10 @@ public class BusiNoticeServiceImpl extends ServiceImpl<BusiNoticeMapper,BusiNoti
JSONObject res =new JSONObject();
//通告信息
BusiNoticeVo detail = busiNoticeMapper.selectByIdVo(noticeId);
//再获取报名动态表单
List<BusiNoticeForm> customForm = busiNoticeFormService.list(new LambdaQueryWrapper<BusiNoticeForm>()
.eq(BusiNoticeForm::getNoticeId,noticeId).orderByAsc(BusiNoticeForm::getSort));
detail.setCustomForm(customForm.stream().map(BusiNoticeForm::getLabelTitle).collect(Collectors.toList()));
res.put("noticeDetail",detail);
//通告主信息
SysUser userDetail = userService.selectUserById(detail.getUserId());

View File

@ -1,9 +1,15 @@
package com.ruoyi.busi.service.impl;
import java.util.List;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.busi.query.AppNoticeSign;
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -13,7 +19,7 @@ import com.ruoyi.busi.service.IBusiNoticeSignService;
/**
* 通告报名Service业务层处理
*
*
* @author 朱春云
* @date 2025-03-17
*/
@ -27,4 +33,29 @@ public class BusiNoticeSignServiceImpl extends ServiceImpl<BusiNoticeSignMapper,
public IPage<BusiNoticeSign> queryListPage(BusiNoticeSign pageReqVO, Page<BusiNoticeSign> page) {
return busiNoticeSignMapper.queryListPage(pageReqVO, page);
}
/**
* 用户报名
* @param appNoticeSign 报名实体
*/
@Override
public void userSign(AppNoticeSign appNoticeSign) {
LoginUser loginUser = SecurityUtils.getLoginUser();
for (JSONObject cardInfo : appNoticeSign.getCardList()) {
BusiNoticeSign busiNoticeSign =new BusiNoticeSign();
busiNoticeSign.setNoticeId(appNoticeSign.getNoticeId());
busiNoticeSign.setUserId(loginUser.getUserId());
busiNoticeSign.setNickname(loginUser.getUser().getNickName());
busiNoticeSign.setAvatar(loginUser.getUser().getAvatar());
busiNoticeSign.setStatus("0");
busiNoticeSign.setFormData(JSONArray.toJSONString(appNoticeSign.getCustomForm()));
busiNoticeSign.setCardId(cardInfo.getString("id"));
busiNoticeSign.setPrice(cardInfo.getBigDecimal("price"));
busiNoticeSign.setRemark(cardInfo.getString("remark"));
busiNoticeSign.setTel(cardInfo.getString("tel"));
busiNoticeSign.setIsSuper(appNoticeSign.getIsSuper());
busiNoticeSign.setAddrId(appNoticeSign.getAddressId());
busiNoticeSignMapper.insert(busiNoticeSign);
}
}
}

View File

@ -4,6 +4,8 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@ -25,7 +27,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
/**
* 会员开卡记录Controller
*
*
* @author pqz
* @date 2025-03-17
*/
@ -104,4 +106,15 @@ public class MemberCardController extends BaseController
List<String> list = new ArrayList<>(Arrays.asList(ids));
return toAjax(memberCardService.removeByIds(list));
}
/**
* 查询当前用户的权益信息
*/
@GetMapping("/selectMemberRights")
public AjaxResult selectMemberRights()
{
return success( memberCardService.selectMemberRights(SecurityUtils.getUserId(),null));
}
}

View File

@ -24,6 +24,7 @@ public interface IMemberAddressService extends IService<MemberAddress> {
**/
List<MemberAddress> listByUserId(Long userId);
/**
* 保存博主地址信息
*

View File

@ -117,7 +117,7 @@ order by dbns.create_time desc
</when>
<otherwise>
-- 默认正序排列 --
dbn.create_time ASC
dbn.create_time DESC
</otherwise>
</choose>