diff --git a/src/main/java/com/qs/serve/modules/sys/entity/SysUser.java b/src/main/java/com/qs/serve/modules/sys/entity/SysUser.java index 8d3f82d4..c32f1de1 100644 --- a/src/main/java/com/qs/serve/modules/sys/entity/SysUser.java +++ b/src/main/java/com/qs/serve/modules/sys/entity/SysUser.java @@ -65,7 +65,7 @@ public class SysUser implements Serializable { private String deptId; /** 职位ID */ - @Length(max = 64,message = "部门ID长度不能超过64字") + @Length(max = 64,message = "职位ID长度不能超过64字") private String positionId; /** 超级管理标识【0->普通管理员;1->超级管理员】 */ diff --git a/src/main/java/com/qs/serve/modules/third/PortalFormPushController.java b/src/main/java/com/qs/serve/modules/third/PortalFormPushController.java index b5d14d0b..5223b921 100644 --- a/src/main/java/com/qs/serve/modules/third/PortalFormPushController.java +++ b/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.WxFormPushUser; 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.vo.WxPushResultVo; import com.qs.serve.modules.wx.service.*; @@ -53,9 +53,10 @@ public class PortalFormPushController { * @return */ @PostMapping("/publish") - public R save(@RequestBody @Valid WxFormPushBo param, HttpServletRequest request){ + public R save(@RequestBody @Valid WxFormPushThirdBo param, HttpServletRequest request){ ThirdTokenUtil.checkToken(request); WxFormPush entity = CopierUtil.copy(param,new WxFormPush()); + entity.setStatus("1"); wxFormPushService.save(entity); WxFormPushType pushType = null; if(param.getTypeCode()!=null){ diff --git a/src/main/java/com/qs/serve/modules/wx/controller/WxFormPushController.java b/src/main/java/com/qs/serve/modules/wx/controller/WxFormPushController.java index cebe1582..4c7fbd38 100644 --- a/src/main/java/com/qs/serve/modules/wx/controller/WxFormPushController.java +++ b/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.CopierUtil; 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.extern.slf4j.Slf4j; +import me.chanjar.weixin.mp.api.WxMpService; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; 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 java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * 微信 表单推送 @@ -33,6 +39,12 @@ import java.util.List; public class WxFormPushController { 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 */ //@GetMapping("/list") - @PreAuthorize("hasRole('wx:formPush:query')") +// @PreAuthorize("hasRole('wx:formPush:query')") public R> getList(WxFormPush param){ LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(param); PageUtil.startPage(); @@ -70,6 +82,12 @@ public class WxFormPushController { @SysLog(module = SystemModule.Verification, title = "表单推送", biz = BizType.QUERY) public R getById(@PathVariable("id") String id){ WxFormPush wxFormPush = wxFormPushService.getById(id); + + LambdaQueryWrapper userlqw = new LambdaQueryWrapper<>(); + userlqw.eq(WxFormPushUser::getFormPushId,wxFormPush.getId()); + List list = wxFormPushUserService.list(userlqw); + wxFormPush.setWxFormPushUserList(list); + return R.ok(wxFormPush); } @@ -80,15 +98,77 @@ public class WxFormPushController { * @param param * @return */ - @PostMapping("/updateById") +// @PostMapping("/updateById") @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){ WxFormPush entity = CopierUtil.copy(param,new WxFormPush()); boolean result = wxFormPushService.updateById(entity); 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 userlqw = new LambdaQueryWrapper<>(); + userlqw.eq(WxFormPushUser::getFormPushId,entity.getId()); + List list = wxFormPushUserService.list(userlqw); + + List userCodes = list.stream().map(a->a.getUserCode()).collect(Collectors.toList()); + WxApp app = wxAppService.getOne(new LambdaQueryWrapper<>(),false); + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(WxUser::getAppId,app.getId()); + lqw.in(WxUser::getSysUserCode,userCodes); + List 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 dellqw = new LambdaQueryWrapper<>(); + dellqw.eq(WxFormPushUser::getFormPushId,entity.getId()); + wxFormPushUserService.remove(dellqw); + return R.isTrue(result); + } + /** * 新增 * @param param @@ -96,10 +176,73 @@ public class WxFormPushController { */ @PostMapping("/save") @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){ 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 userIds = param.getUserIds().stream().distinct().collect(Collectors.toList()); + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + WxApp app = wxAppService.getOne(new LambdaQueryWrapper<>(),false); + lqw.eq(WxUser::getAppId,app.getId()); + lqw.in(WxUser::getSysUserId,userIds); + List wxUserList = wxUserService.list(lqw); + List 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 dellqw = new LambdaQueryWrapper<>(); + dellqw.eq(WxFormPushUser::getFormPushId,entity.getId()); + wxFormPushUserService.remove(dellqw); + wxFormPushUserService.saveBatch(pushUserList); + } + return R.isTrue(result); } diff --git a/src/main/java/com/qs/serve/modules/wx/controller/my/WxFormPushMyController.java b/src/main/java/com/qs/serve/modules/wx/controller/my/WxFormPushMyController.java index 2931834f..9a8901df 100644 --- a/src/main/java/com/qs/serve/modules/wx/controller/my/WxFormPushMyController.java +++ b/src/main/java/com/qs/serve/modules/wx/controller/my/WxFormPushMyController.java @@ -85,6 +85,15 @@ public class WxFormPushMyController { @GetMapping("/getById/{id}") @SysLog(module = SystemModule.Verification, title = "表单推送", biz = BizType.QUERY) public R 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 lqw = new LambdaQueryWrapper<>(); lqw.eq(WxFormPushUser::getFormPushId,id); lqw.eq(WxFormPushUser::getUserId, AuthContextUtils.getSysUserId()); @@ -92,7 +101,6 @@ public class WxFormPushMyController { WxFormPushUser pushUser = new WxFormPushUser(); pushUser.setReadFlag(1); wxFormPushUserService.update(pushUser,lqw); - WxFormPush wxFormPush = wxFormPushService.getById(id); return R.ok(wxFormPush); } diff --git a/src/main/java/com/qs/serve/modules/wx/entity/WxFormPush.java b/src/main/java/com/qs/serve/modules/wx/entity/WxFormPush.java index a0611b88..89b4c433 100644 --- a/src/main/java/com/qs/serve/modules/wx/entity/WxFormPush.java +++ b/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.math.BigDecimal; import java.time.LocalDateTime; +import java.util.List; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; @@ -45,11 +46,16 @@ public class WxFormPush implements Serializable { @TableField(condition = SqlCondition.LIKE) private String typeName; + /** 业务类型,默认:通知 */ + private String businessType; /** 标题 */ @Length(max = 255,message = "标题长度不能超过255字") @TableField(condition = SqlCondition.LIKE) private String title; +// @Length(message = "是否发布,保存并发布->1,保存草稿->0") + private String status; + /** 表单内容 */ private String formContext; @@ -94,6 +100,9 @@ public class WxFormPush implements Serializable { @TableField(exist = false) private Integer readFlag; + @TableField(exist = false) + private List wxFormPushUserList; + public static WxFormPush toNewObject(WxFormPush source){ WxFormPush formPush = new WxFormPush(); formPush.setId(source.getId()); diff --git a/src/main/java/com/qs/serve/modules/wx/entity/bo/WxFormPushBo.java b/src/main/java/com/qs/serve/modules/wx/entity/bo/WxFormPushBo.java index 284e3d08..9b219cc3 100644 --- a/src/main/java/com/qs/serve/modules/wx/entity/bo/WxFormPushBo.java +++ b/src/main/java/com/qs/serve/modules/wx/entity/bo/WxFormPushBo.java @@ -19,12 +19,11 @@ import java.util.List; @Data public class WxFormPushBo implements Serializable { - /** APPID */ - @NotNull(message = "appId不能为空") - private String appId; + private String id; + @NotNull(message = "分类Id不能为空") + private String typeId; /** 推送分类编码 */ - private String typeCode; /** 标题 */ @NotNull(message = "标题不能为空") @@ -44,8 +43,12 @@ public class WxFormPushBo implements Serializable { private String remark; /** 工号列表 */ - @NotNull(message = "工号列表不能为空") - private List userCodes; + @NotNull(message = "人员ID不能为空") + private List userIds; + + //是否发布,保存并发布->1,保存草稿->0 + @NotNull(message = "状态不能为空") + private String status; } diff --git a/src/main/java/com/qs/serve/modules/wx/entity/bo/WxFormPushThirdBo.java b/src/main/java/com/qs/serve/modules/wx/entity/bo/WxFormPushThirdBo.java new file mode 100644 index 00000000..80404015 --- /dev/null +++ b/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 userCodes; + + @NotNull(message = "是否发布,保存并发布->1,保存草稿->0") + private String status; + +} +