Browse Source

推送消息接口

contract
15989082884@163.com 2 years ago
parent
commit
03e9e69b24
  1. 2
      src/main/java/com/qs/serve/modules/sys/entity/SysUser.java
  2. 5
      src/main/java/com/qs/serve/modules/third/PortalFormPushController.java
  3. 157
      src/main/java/com/qs/serve/modules/wx/controller/WxFormPushController.java
  4. 10
      src/main/java/com/qs/serve/modules/wx/controller/my/WxFormPushMyController.java
  5. 9
      src/main/java/com/qs/serve/modules/wx/entity/WxFormPush.java
  6. 15
      src/main/java/com/qs/serve/modules/wx/entity/bo/WxFormPushBo.java
  7. 51
      src/main/java/com/qs/serve/modules/wx/entity/bo/WxFormPushThirdBo.java

2
src/main/java/com/qs/serve/modules/sys/entity/SysUser.java

@ -65,7 +65,7 @@ public class SysUser implements Serializable {
private String deptId; private String deptId;
/** 职位ID */ /** 职位ID */
@Length(max = 64,message = "部门ID长度不能超过64字") @Length(max = 64,message = "职位ID长度不能超过64字")
private String positionId; private String positionId;
/** 超级管理标识【0->普通管理员;1->超级管理员】 */ /** 超级管理标识【0->普通管理员;1->超级管理员】 */

5
src/main/java/com/qs/serve/modules/third/PortalFormPushController.java

@ -12,7 +12,7 @@ import com.qs.serve.common.util.StringUtils;
import com.qs.serve.modules.wx.entity.WxFormPushType; import com.qs.serve.modules.wx.entity.WxFormPushType;
import com.qs.serve.modules.wx.entity.WxFormPushUser; import com.qs.serve.modules.wx.entity.WxFormPushUser;
import com.qs.serve.modules.wx.entity.WxUser; import com.qs.serve.modules.wx.entity.WxUser;
import com.qs.serve.modules.wx.entity.bo.WxFormPushBo; import com.qs.serve.modules.wx.entity.bo.WxFormPushThirdBo;
import com.qs.serve.modules.wx.entity.dto.sms.WxSmsNewForm; import com.qs.serve.modules.wx.entity.dto.sms.WxSmsNewForm;
import com.qs.serve.modules.wx.entity.vo.WxPushResultVo; import com.qs.serve.modules.wx.entity.vo.WxPushResultVo;
import com.qs.serve.modules.wx.service.*; import com.qs.serve.modules.wx.service.*;
@ -53,9 +53,10 @@ public class PortalFormPushController {
* @return * @return
*/ */
@PostMapping("/publish") @PostMapping("/publish")
public R<?> save(@RequestBody @Valid WxFormPushBo param, HttpServletRequest request){ public R<?> save(@RequestBody @Valid WxFormPushThirdBo param, HttpServletRequest request){
ThirdTokenUtil.checkToken(request); ThirdTokenUtil.checkToken(request);
WxFormPush entity = CopierUtil.copy(param,new WxFormPush()); WxFormPush entity = CopierUtil.copy(param,new WxFormPush());
entity.setStatus("1");
wxFormPushService.save(entity); wxFormPushService.save(entity);
WxFormPushType pushType = null; WxFormPushType pushType = null;
if(param.getTypeCode()!=null){ if(param.getTypeCode()!=null){

157
src/main/java/com/qs/serve/modules/wx/controller/WxFormPushController.java

@ -9,17 +9,23 @@ import com.qs.serve.common.model.enums.SystemModule;
import com.qs.serve.common.util.PageUtil; import com.qs.serve.common.util.PageUtil;
import com.qs.serve.common.util.CopierUtil; import com.qs.serve.common.util.CopierUtil;
import com.qs.serve.common.util.StringUtils; import com.qs.serve.common.util.StringUtils;
import com.qs.serve.modules.wx.entity.*;
import com.qs.serve.modules.wx.entity.dto.sms.WxSmsNewForm;
import com.qs.serve.modules.wx.entity.vo.WxPushResultVo;
import com.qs.serve.modules.wx.service.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import com.qs.serve.modules.wx.entity.bo.WxFormPushBo; import com.qs.serve.modules.wx.entity.bo.WxFormPushBo;
import com.qs.serve.modules.wx.entity.WxFormPush;
import com.qs.serve.modules.wx.service.WxFormPushService;
import javax.validation.Valid; import javax.validation.Valid;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* 微信 表单推送 * 微信 表单推送
@ -33,6 +39,12 @@ import java.util.List;
public class WxFormPushController { public class WxFormPushController {
private WxFormPushService wxFormPushService; private WxFormPushService wxFormPushService;
private WxFormPushUserService wxFormPushUserService;
private WxFormPushTypeService wxFormPushTypeService;
private WxUserService wxUserService;
private WxPushService wxPushService;
private WxAppService wxAppService;
/** /**
* 列表 * 列表
@ -40,7 +52,7 @@ public class WxFormPushController {
* @return * @return
*/ */
//@GetMapping("/list") //@GetMapping("/list")
@PreAuthorize("hasRole('wx:formPush:query')") // @PreAuthorize("hasRole('wx:formPush:query')")
public R<List<WxFormPush>> getList(WxFormPush param){ public R<List<WxFormPush>> getList(WxFormPush param){
LambdaQueryWrapper<WxFormPush> lqw = new LambdaQueryWrapper<>(param); LambdaQueryWrapper<WxFormPush> lqw = new LambdaQueryWrapper<>(param);
PageUtil.startPage(); PageUtil.startPage();
@ -70,6 +82,12 @@ public class WxFormPushController {
@SysLog(module = SystemModule.Verification, title = "表单推送", biz = BizType.QUERY) @SysLog(module = SystemModule.Verification, title = "表单推送", biz = BizType.QUERY)
public R<WxFormPush> getById(@PathVariable("id") String id){ public R<WxFormPush> getById(@PathVariable("id") String id){
WxFormPush wxFormPush = wxFormPushService.getById(id); WxFormPush wxFormPush = wxFormPushService.getById(id);
LambdaQueryWrapper<WxFormPushUser> userlqw = new LambdaQueryWrapper<>();
userlqw.eq(WxFormPushUser::getFormPushId,wxFormPush.getId());
List<WxFormPushUser> list = wxFormPushUserService.list(userlqw);
wxFormPush.setWxFormPushUserList(list);
return R.ok(wxFormPush); return R.ok(wxFormPush);
} }
@ -80,15 +98,77 @@ public class WxFormPushController {
* @param param * @param param
* @return * @return
*/ */
@PostMapping("/updateById") // @PostMapping("/updateById")
@SysLog(module = SystemModule.Verification, title = "表单推送", biz = BizType.UPDATE) @SysLog(module = SystemModule.Verification, title = "表单推送", biz = BizType.UPDATE)
@PreAuthorize("hasRole('wx:formPush:update')") // @PreAuthorize("hasRole('wx:formPush:update')")
public R<?> updateById(@RequestBody @Valid WxFormPushBo param){ public R<?> updateById(@RequestBody @Valid WxFormPushBo param){
WxFormPush entity = CopierUtil.copy(param,new WxFormPush()); WxFormPush entity = CopierUtil.copy(param,new WxFormPush());
boolean result = wxFormPushService.updateById(entity); boolean result = wxFormPushService.updateById(entity);
return R.isTrue(result); return R.isTrue(result);
} }
/**
* 发布
* @param param
* @return
*/
@PostMapping("/publishById")
@SysLog(module = SystemModule.Verification, title = "表单推送发布", biz = BizType.UPDATE)
// @PreAuthorize("hasRole('wx:formPush:update')")
public R<?> publishById(@RequestBody WxFormPushBo param){
String id = param.getId();
WxFormPush entity = wxFormPushService.getById(id);
if(entity.getId().equals("1")){
return R.error("已发布的消息不能再次发布");
}
entity.setStatus("1");
boolean result = wxFormPushService.updateById(entity);
LambdaQueryWrapper<WxFormPushUser> userlqw = new LambdaQueryWrapper<>();
userlqw.eq(WxFormPushUser::getFormPushId,entity.getId());
List<WxFormPushUser> list = wxFormPushUserService.list(userlqw);
List<String> userCodes = list.stream().map(a->a.getUserCode()).collect(Collectors.toList());
WxApp app = wxAppService.getOne(new LambdaQueryWrapper<>(),false);
LambdaQueryWrapper<WxUser> lqw = new LambdaQueryWrapper<>();
lqw.eq(WxUser::getAppId,app.getId());
lqw.in(WxUser::getSysUserCode,userCodes);
List<WxUser> wxUserList = wxUserService.list(lqw);
for (WxUser wxUser : wxUserList) {
if (wxUser.getOpenId().equals("0")) {
continue;
}
WxSmsNewForm wxSmsNewForm = new WxSmsNewForm();
wxSmsNewForm.setTitle(entity.getTitle());
wxSmsNewForm.setUserName(wxUser.getEmpName());
wxSmsNewForm.setBizType(entity.getBusinessType() == null ? "通知" : entity.getBusinessType());
wxSmsNewForm.setBitTime(LocalDateTime.now().toString().replace("T", " "));
wxSmsNewForm.setRemark(entity.getRemark());
wxPushService.sendWxMsg(wxUser, "表单通知", wxSmsNewForm, true, entity.getId());
}
return R.isTrue(result);
}
/**
* 撤消
* @param param
* @return
*/
@PostMapping("/unPublishById")
@SysLog(module = SystemModule.Verification, title = "撤消表单推送", biz = BizType.UPDATE)
// @PreAuthorize("hasRole('wx:formPush:update')")
public R<?> unPublishById(@RequestBody WxFormPushBo param){
String id = param.getId();
WxFormPush entity = wxFormPushService.getById(id);
entity.setStatus("0");
boolean result = wxFormPushService.updateById(entity);
LambdaQueryWrapper<WxFormPushUser> dellqw = new LambdaQueryWrapper<>();
dellqw.eq(WxFormPushUser::getFormPushId,entity.getId());
wxFormPushUserService.remove(dellqw);
return R.isTrue(result);
}
/** /**
* 新增 * 新增
* @param param * @param param
@ -96,10 +176,73 @@ public class WxFormPushController {
*/ */
@PostMapping("/save") @PostMapping("/save")
@SysLog(module = SystemModule.Verification, title = "表单推送", biz = BizType.INSERT) @SysLog(module = SystemModule.Verification, title = "表单推送", biz = BizType.INSERT)
@PreAuthorize("hasRole('wx:formPush:insert')") // @PreAuthorize("hasRole('wx:formPush:insert')")
public R<?> save(@RequestBody @Valid WxFormPushBo param){ public R<?> save(@RequestBody @Valid WxFormPushBo param){
WxFormPush entity = CopierUtil.copy(param,new WxFormPush()); WxFormPush entity = CopierUtil.copy(param,new WxFormPush());
boolean result = wxFormPushService.save(entity); WxFormPushType pushType = null;
if(param.getTypeId()!=null){
pushType = wxFormPushTypeService.getById(param.getTypeId());
entity.setTypeCode(pushType.getCode());
entity.setTypeName(pushType.getTitle());
}else{
return R.error("分类不存在");
}
boolean result;
if(null==entity.getId()) {
result = wxFormPushService.save(entity);
}else{
WxFormPush ori_entity = wxFormPushService.getById(entity.getId());
if(ori_entity.getStatus().equals("1")){
return R.error("已发布的消息不能更新");
}
result = wxFormPushService.updateById(entity);
}
//保存推送人员
List<String> userIds = param.getUserIds().stream().distinct().collect(Collectors.toList());
LambdaQueryWrapper<WxUser> lqw = new LambdaQueryWrapper<>();
WxApp app = wxAppService.getOne(new LambdaQueryWrapper<>(),false);
lqw.eq(WxUser::getAppId,app.getId());
lqw.in(WxUser::getSysUserId,userIds);
List<WxUser> wxUserList = wxUserService.list(lqw);
List<WxFormPushUser> pushUserList = new ArrayList<>();
for (WxUser wxUser : wxUserList) {
if(wxUser.getOpenId().equals("0")){
continue;
}
WxSmsNewForm wxSmsNewForm = new WxSmsNewForm();
wxSmsNewForm.setTitle(param.getTitle());
wxSmsNewForm.setUserName(wxUser.getEmpName());
wxSmsNewForm.setBizType(param.getBusinessType()==null?"通知":param.getBusinessType());
wxSmsNewForm.setBitTime(LocalDateTime.now().toString().replace("T"," "));
wxSmsNewForm.setRemark(param.getRemark());
if(param.getStatus().equals("1")) {
wxPushService.sendWxMsg(wxUser, "表单通知", wxSmsNewForm, true, entity.getId());
}
WxFormPushUser pushUser = new WxFormPushUser();
pushUser.setFormPushId(entity.getId());
pushUser.setFormTitle(entity.getTitle());
pushUser.setUserId(wxUser.getSysUserId());
pushUser.setUserCode(wxUser.getSysUserCode());
pushUser.setUserName(wxUser.getEmpName());
if(pushType!=null){
pushUser.setTypeId(pushType.getId());
pushUser.setTypeCode(pushType.getCode());
pushUser.setTypeName(pushType.getTitle());
}
pushUserList.add(pushUser);
}
pushUserList = pushUserList.stream().distinct().collect(Collectors.toList());
if(null==entity.getId()) {
wxFormPushUserService.saveBatch(pushUserList);
}else{
LambdaQueryWrapper<WxFormPushUser> dellqw = new LambdaQueryWrapper<>();
dellqw.eq(WxFormPushUser::getFormPushId,entity.getId());
wxFormPushUserService.remove(dellqw);
wxFormPushUserService.saveBatch(pushUserList);
}
return R.isTrue(result); return R.isTrue(result);
} }

10
src/main/java/com/qs/serve/modules/wx/controller/my/WxFormPushMyController.java

@ -85,6 +85,15 @@ public class WxFormPushMyController {
@GetMapping("/getById/{id}") @GetMapping("/getById/{id}")
@SysLog(module = SystemModule.Verification, title = "表单推送", biz = BizType.QUERY) @SysLog(module = SystemModule.Verification, title = "表单推送", biz = BizType.QUERY)
public R<WxFormPush> getById(@PathVariable("id") String id){ public R<WxFormPush> getById(@PathVariable("id") String id){
WxFormPush wxFormPush = wxFormPushService.getById(id);
if(wxFormPush.getStatus().equals(0)){
//未发布不能查询
wxFormPush.setId(null);
wxFormPush.setTitle(null);
wxFormPush.setFormContext(null);
wxFormPush.setFormContextValue(null);
return R.ok(wxFormPush);
}
LambdaQueryWrapper<WxFormPushUser> lqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<WxFormPushUser> lqw = new LambdaQueryWrapper<>();
lqw.eq(WxFormPushUser::getFormPushId,id); lqw.eq(WxFormPushUser::getFormPushId,id);
lqw.eq(WxFormPushUser::getUserId, AuthContextUtils.getSysUserId()); lqw.eq(WxFormPushUser::getUserId, AuthContextUtils.getSysUserId());
@ -92,7 +101,6 @@ public class WxFormPushMyController {
WxFormPushUser pushUser = new WxFormPushUser(); WxFormPushUser pushUser = new WxFormPushUser();
pushUser.setReadFlag(1); pushUser.setReadFlag(1);
wxFormPushUserService.update(pushUser,lqw); wxFormPushUserService.update(pushUser,lqw);
WxFormPush wxFormPush = wxFormPushService.getById(id);
return R.ok(wxFormPush); return R.ok(wxFormPush);
} }

9
src/main/java/com/qs/serve/modules/wx/entity/WxFormPush.java

@ -4,6 +4,7 @@ import java.time.LocalDate;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
@ -45,11 +46,16 @@ public class WxFormPush implements Serializable {
@TableField(condition = SqlCondition.LIKE) @TableField(condition = SqlCondition.LIKE)
private String typeName; private String typeName;
/** 业务类型,默认:通知 */
private String businessType;
/** 标题 */ /** 标题 */
@Length(max = 255,message = "标题长度不能超过255字") @Length(max = 255,message = "标题长度不能超过255字")
@TableField(condition = SqlCondition.LIKE) @TableField(condition = SqlCondition.LIKE)
private String title; private String title;
// @Length(message = "是否发布,保存并发布->1,保存草稿->0")
private String status;
/** 表单内容 */ /** 表单内容 */
private String formContext; private String formContext;
@ -94,6 +100,9 @@ public class WxFormPush implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private Integer readFlag; private Integer readFlag;
@TableField(exist = false)
private List<WxFormPushUser> wxFormPushUserList;
public static WxFormPush toNewObject(WxFormPush source){ public static WxFormPush toNewObject(WxFormPush source){
WxFormPush formPush = new WxFormPush(); WxFormPush formPush = new WxFormPush();
formPush.setId(source.getId()); formPush.setId(source.getId());

15
src/main/java/com/qs/serve/modules/wx/entity/bo/WxFormPushBo.java

@ -19,12 +19,11 @@ import java.util.List;
@Data @Data
public class WxFormPushBo implements Serializable { public class WxFormPushBo implements Serializable {
/** APPID */ private String id;
@NotNull(message = "appId不能为空")
private String appId;
@NotNull(message = "分类Id不能为空")
private String typeId;
/** 推送分类编码 */ /** 推送分类编码 */
private String typeCode;
/** 标题 */ /** 标题 */
@NotNull(message = "标题不能为空") @NotNull(message = "标题不能为空")
@ -44,8 +43,12 @@ public class WxFormPushBo implements Serializable {
private String remark; private String remark;
/** 工号列表 */ /** 工号列表 */
@NotNull(message = "工号列表不能为空") @NotNull(message = "人员ID不能为空")
private List<String> userCodes; private List<String> userIds;
//是否发布,保存并发布->1,保存草稿->0
@NotNull(message = "状态不能为空")
private String status;
} }

51
src/main/java/com/qs/serve/modules/wx/entity/bo/WxFormPushThirdBo.java

@ -0,0 +1,51 @@
package com.qs.serve.modules.wx.entity.bo;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
/**
* 表单推送 实体类
* @author YenHex
* @since 2023-04-19
*/
@Data
public class WxFormPushThirdBo implements Serializable {
private String id;
/** APPID */
@NotNull(message = "appId不能为空")
private String appId;
private String typeId;
/** 推送分类编码 */
private String typeCode;
/** 标题 */
@NotNull(message = "标题不能为空")
private String title;
/** 表单内容 */
@NotNull(message = "表单内容不能为空")
private String formContext;
/** 业务类型,默认:通知 */
private String businessType;
/** 表单值 */
private String formContextValue;
/** 备注 */
private String remark;
/** 工号列表 */
@NotNull(message = "工号列表不能为空")
private List<String> userCodes;
@NotNull(message = "是否发布,保存并发布->1,保存草稿->0")
private String status;
}
Loading…
Cancel
Save