diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/WechatAccountConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/WechatAccountConfig.java index 9fa392be..e914780a 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/config/WechatAccountConfig.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/WechatAccountConfig.java @@ -1,33 +1,66 @@ package com.ruoyi.common.config; -import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; -import java.util.Map; /** * Created by tao. * Date: 2023/3/21 15:02 * 描述: */ -@Data @Component -//从配置文件里获取 @ConfigurationProperties(prefix = "wechat") public class WechatAccountConfig { /** * 公众平台id */ - private String mpAppId; + private static String mpAppId; /** * 公众平台密钥 */ - private String mpAppSecret; + private static String mpAppSecret; /** - * 微信模版id + * 公众号Token */ - private Map templateId; + private static String myToken; + + /** + * AccessToken + */ + private static String myAccessToken; + + public static String getMpAppId() { + return mpAppId; + } + + public void setMpAppId(String mpAppId) { + WechatAccountConfig.mpAppId = mpAppId; + } + + public static String getMpAppSecret() { + return mpAppSecret; + } + + public void setMpAppSecret(String mpAppSecret) { + WechatAccountConfig.mpAppSecret = mpAppSecret; + } + + public static String getMyToken() { + return myToken; + } + + public void setMyToken(String myToken) { + WechatAccountConfig.myToken = myToken; + } + + public static String getMyAccessToken() { + return myAccessToken; + } + + public void setMyAccessToken(String myAccessToken) { + WechatAccountConfig.myAccessToken = myAccessToken; + } } \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/WechatMpConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/WechatMpConfig.java index 84f7fd1d..990dfc17 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/config/WechatMpConfig.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/WechatMpConfig.java @@ -45,6 +45,8 @@ public class WechatMpConfig { WxMpInMemoryConfigStorage wxMpConfigStorage = new WxMpInMemoryConfigStorage(); wxMpConfigStorage.setAppId(accountConfig.getMpAppId()); wxMpConfigStorage.setSecret(accountConfig.getMpAppSecret()); + wxMpConfigStorage.setToken(accountConfig.getMyToken()); + wxMpConfigStorage.setAccessToken(accountConfig.getMyAccessToken()); return wxMpConfigStorage; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java index 38f01c98..abd2e53e 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java @@ -46,4 +46,39 @@ public class CacheConstants * yanzhu系统应用注册 redis key */ public static final String YANZHU_SYSTEM_CONFIG = "yanzhu_system_config:"; + + /** + * 微信公众号模板消息 redis key + */ + public static final String WX_MPMESSAGE_KEY = "wx.mpmessage.key::"; + + /** + * 微信消息推送openId + */ + public static final String WX_MPMESSAGE_OPENID = "wx.mpmessage.openId::"; + + /** + * 微信消息推送通知人名称 + */ + public static final String WX_MPMESSAGE_UNAME = "wx.mpmessage.uname::"; + + /** + * 微信消息推送项目名称 + */ + public static final String WX_MPMESSAGE_PNAME = "wx.mpmessage.pname::"; + + /** + * 微信消息推送单位名称 + */ + public static final String WX_MPMESSAGE_DNAME = "wx.mpmessage.dname::"; + + /** + * 微信消息推送项目总监 + */ + public static final String WX_MPMESSAGE_P_SUP = "wx.mpmessage.p.sup::"; + + /** + * 微信消息推送项目甲代 + */ + public static final String WX_MPMESSAGE_P_MAG = "wx.mpmessage.p.mag::"; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/MessageTypeEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/MessageTypeEnum.java new file mode 100644 index 00000000..2b2bbb2e --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/MessageTypeEnum.java @@ -0,0 +1,43 @@ +package com.ruoyi.common.enums; + +/** + * 模板消息枚举 + * + * @author JiangYuQi + */ +public enum MessageTypeEnum { + + AQYHZG("10", "安全隐患整改"), + ZLYHZG("20", "质量隐患整改"), + CSCLSP("30", "实测实量审批"), + JPYSSP("40", "举牌验收审批"), + CLFYSP("50", "材料封样审批"), + QYFSSP("60", "取样复试审批"); + + private final String code; + private final String name; + + MessageTypeEnum(String code, String name) + { + this.code = code; + this.name = name; + } + + public String getCode() + { + return code; + } + + public String getName() + { + return name; + } + + public static String getYHPCLX(Long infoType){ + if(infoType==0){ + return MessageTypeEnum.AQYHZG.code; + }else{ + return MessageTypeEnum.ZLYHZG.code; + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/TemplateMessageEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/TemplateMessageEnum.java new file mode 100644 index 00000000..2db78c47 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/TemplateMessageEnum.java @@ -0,0 +1,32 @@ +package com.ruoyi.common.enums; + +/** + * 模板消息枚举 + * + * @author JiangYuQi + */ +public enum TemplateMessageEnum { + + TROUBLE_DEFAULT("f3saBGJCnUAjXHw1KooxEUuRGv-a_8MG9dXfQvkRTBE", "隐患整改通知"), + APPLY_DEFAULT("KY7oAHgqFxUSaE3ByxFJfv_0U3LnSWfgUCwV-CZyEdo", "系统流程审批提醒"); + + private final String id; + private final String name; + + TemplateMessageEnum(String id, String name) + { + this.id = id; + this.name = name; + } + + public String getId() + { + return id; + } + + public String getName() + { + return name; + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOpenid.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOpenid.java new file mode 100644 index 00000000..1316a0d5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOpenid.java @@ -0,0 +1,152 @@ +package com.ruoyi.system.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 用户绑定小程序openId对象 sys_user_openid + * + * @author ruoyi + * @date 2024-04-01 + */ +public class SysUserOpenid extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long id; + + /** 小程序openId */ + @Excel(name = "小程序openId") + private String openId; + + /** 公众号openId(消息) */ + @Excel(name = "公众号openId", readConverterExp = "消=息") + private String msgOpenId; + + /** 用户Id */ + @Excel(name = "用户Id") + private String userId; + + /** 用户登录名 */ + @Excel(name = "用户登录名") + private String loginName; + + /** 小程序昵称 */ + @Excel(name = "小程序昵称") + private String nickname; + + /** 删除状态(0:未删除;1:删除) */ + @Excel(name = "删除状态", readConverterExp = "0=:未删除;1:删除") + private Long isDel; + + /** 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date creatTime; + + /** 唯一应用id */ + @Excel(name = "唯一应用id") + private String unionid; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setOpenId(String openId) + { + this.openId = openId; + } + + public String getOpenId() + { + return openId; + } + public void setMsgOpenId(String msgOpenId) + { + this.msgOpenId = msgOpenId; + } + + public String getMsgOpenId() + { + return msgOpenId; + } + public void setUserId(String userId) + { + this.userId = userId; + } + + public String getUserId() + { + return userId; + } + public void setLoginName(String loginName) + { + this.loginName = loginName; + } + + public String getLoginName() + { + return loginName; + } + public void setNickname(String nickname) + { + this.nickname = nickname; + } + + public String getNickname() + { + return nickname; + } + public void setIsDel(Long isDel) + { + this.isDel = isDel; + } + + public Long getIsDel() + { + return isDel; + } + public void setCreatTime(Date creatTime) + { + this.creatTime = creatTime; + } + + public Date getCreatTime() + { + return creatTime; + } + public void setUnionid(String unionid) + { + this.unionid = unionid; + } + + public String getUnionid() + { + return unionid; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("openId", getOpenId()) + .append("msgOpenId", getMsgOpenId()) + .append("userId", getUserId()) + .append("loginName", getLoginName()) + .append("nickname", getNickname()) + .append("isDel", getIsDel()) + .append("creatTime", getCreatTime()) + .append("unionid", getUnionid()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserOpenidMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserOpenidMapper.java new file mode 100644 index 00000000..270823c0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserOpenidMapper.java @@ -0,0 +1,85 @@ +package com.ruoyi.system.mapper; + +import java.util.List; +import com.ruoyi.system.domain.SysUserOpenid; + +/** + * 用户绑定小程序openIdMapper接口 + * + * @author ruoyi + * @date 2024-04-01 + */ +public interface SysUserOpenidMapper +{ + /** + * 查询用户绑定小程序openId + * + * @param id 用户绑定小程序openId主键 + * @return 用户绑定小程序openId + */ + public SysUserOpenid selectSysUserOpenidById(Long id); + + /** + * 查询用户绑定小程序openId列表 + * + * @param sysUserOpenid 用户绑定小程序openId + * @return 用户绑定小程序openId集合 + */ + public List selectSysUserOpenidList(SysUserOpenid sysUserOpenid); + + /** + * 查询用户绑定小程序openId列表 + * + * @param userName 用户登录名 + * @return 用户绑定小程序openId集合 + */ + public List findSysUserOpenidsByUser(String userName); + + /** + * 查询用户绑定小程序openId列表[项目总监] + * + * @param proId 项目信息 + * @return 用户绑定小程序openId集合 + */ + public List findMsgProSupUsers(Long proId); + + /** + * 查询用户绑定小程序openId列表[项目甲代] + * + * @param proId 项目信息 + * @return 用户绑定小程序openId集合 + */ + public List findMsgProMagUsers(Long proId); + + /** + * 新增用户绑定小程序openId + * + * @param sysUserOpenid 用户绑定小程序openId + * @return 结果 + */ + public int insertSysUserOpenid(SysUserOpenid sysUserOpenid); + + /** + * 修改用户绑定小程序openId + * + * @param sysUserOpenid 用户绑定小程序openId + * @return 结果 + */ + public int updateSysUserOpenid(SysUserOpenid sysUserOpenid); + + /** + * 删除用户绑定小程序openId + * + * @param id 用户绑定小程序openId主键 + * @return 结果 + */ + public int deleteSysUserOpenidById(Long id); + + /** + * 批量删除用户绑定小程序openId + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSysUserOpenidByIds(Long[] ids); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOpenidService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOpenidService.java new file mode 100644 index 00000000..b59245c5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOpenidService.java @@ -0,0 +1,61 @@ +package com.ruoyi.system.service; + +import java.util.List; +import com.ruoyi.system.domain.SysUserOpenid; + +/** + * 用户绑定小程序openIdService接口 + * + * @author ruoyi + * @date 2024-04-01 + */ +public interface ISysUserOpenidService +{ + /** + * 查询用户绑定小程序openId + * + * @param id 用户绑定小程序openId主键 + * @return 用户绑定小程序openId + */ + public SysUserOpenid selectSysUserOpenidById(Long id); + + /** + * 查询用户绑定小程序openId列表 + * + * @param sysUserOpenid 用户绑定小程序openId + * @return 用户绑定小程序openId集合 + */ + public List selectSysUserOpenidList(SysUserOpenid sysUserOpenid); + + /** + * 新增用户绑定小程序openId + * + * @param sysUserOpenid 用户绑定小程序openId + * @return 结果 + */ + public int insertSysUserOpenid(SysUserOpenid sysUserOpenid); + + /** + * 修改用户绑定小程序openId + * + * @param sysUserOpenid 用户绑定小程序openId + * @return 结果 + */ + public int updateSysUserOpenid(SysUserOpenid sysUserOpenid); + + /** + * 批量删除用户绑定小程序openId + * + * @param ids 需要删除的用户绑定小程序openId主键集合 + * @return 结果 + */ + public int deleteSysUserOpenidByIds(Long[] ids); + + /** + * 删除用户绑定小程序openId信息 + * + * @param id 用户绑定小程序openId主键 + * @return 结果 + */ + public int deleteSysUserOpenidById(Long id); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOpenidServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOpenidServiceImpl.java new file mode 100644 index 00000000..9cf4e9cb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOpenidServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.system.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.system.mapper.SysUserOpenidMapper; +import com.ruoyi.system.domain.SysUserOpenid; +import com.ruoyi.system.service.ISysUserOpenidService; +import com.ruoyi.common.utils.SecurityUtils; +/** + * 用户绑定小程序openIdService业务层处理 + * + * @author ruoyi + * @date 2024-04-01 + */ +@Service +public class SysUserOpenidServiceImpl implements ISysUserOpenidService +{ + @Autowired + private SysUserOpenidMapper sysUserOpenidMapper; + + /** + * 查询用户绑定小程序openId + * + * @param id 用户绑定小程序openId主键 + * @return 用户绑定小程序openId + */ + @Override + public SysUserOpenid selectSysUserOpenidById(Long id) + { + return sysUserOpenidMapper.selectSysUserOpenidById(id); + } + + /** + * 查询用户绑定小程序openId列表 + * + * @param sysUserOpenid 用户绑定小程序openId + * @return 用户绑定小程序openId + */ + @Override + public List selectSysUserOpenidList(SysUserOpenid sysUserOpenid) + { + return sysUserOpenidMapper.selectSysUserOpenidList(sysUserOpenid); + } + + /** + * 新增用户绑定小程序openId + * + * @param sysUserOpenid 用户绑定小程序openId + * @return 结果 + */ + @Override + public int insertSysUserOpenid(SysUserOpenid sysUserOpenid) + { + return sysUserOpenidMapper.insertSysUserOpenid(sysUserOpenid); + } + + /** + * 修改用户绑定小程序openId + * + * @param sysUserOpenid 用户绑定小程序openId + * @return 结果 + */ + @Override + public int updateSysUserOpenid(SysUserOpenid sysUserOpenid) + { + return sysUserOpenidMapper.updateSysUserOpenid(sysUserOpenid); + } + + /** + * 批量删除用户绑定小程序openId + * + * @param ids 需要删除的用户绑定小程序openId主键 + * @return 结果 + */ + @Override + public int deleteSysUserOpenidByIds(Long[] ids) + { + return sysUserOpenidMapper.deleteSysUserOpenidByIds(ids); + } + + /** + * 删除用户绑定小程序openId信息 + * + * @param id 用户绑定小程序openId主键 + * @return 结果 + */ + @Override + public int deleteSysUserOpenidById(Long id) + { + return sysUserOpenidMapper.deleteSysUserOpenidById(id); + } +} diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index 7ff6bd99..d9bf3ec5 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -130,7 +130,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where u.user_name = #{userName} and u.del_flag = '0' - + + + + + + and openId = #{openId} + and msgOpenId = #{msgOpenId} + and userId = #{userId} + and loginName = #{loginName} + and isDel = #{isDel} + and unionid = #{unionid} + + + + + + + + + + + + + insert into sys_user_openid + + openId, + msgOpenId, + userId, + loginName, + nickname, + isDel, + creatTime, + unionid, + + + #{openId}, + #{msgOpenId}, + #{userId}, + #{loginName}, + #{nickname}, + #{isDel}, + #{creatTime}, + #{unionid}, + + + + + update sys_user_openid + + openId = #{openId}, + msgOpenId = #{msgOpenId}, + userId = #{userId}, + loginName = #{loginName}, + nickname = #{nickname}, + isDel = #{isDel}, + creatTime = #{creatTime}, + unionid = #{unionid}, + + where id = #{id} + + + + delete from sys_user_openid where id = #{id} + + + + delete from sys_user_openid where id in + + #{id} + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/wxsetting/wxAuth/index.vue b/ruoyi-ui/src/views/wxsetting/wxAuth/index.vue index 5f565d69..3358eacc 100644 --- a/ruoyi-ui/src/views/wxsetting/wxAuth/index.vue +++ b/ruoyi-ui/src/views/wxsetting/wxAuth/index.vue @@ -8,7 +8,7 @@ export default { name: "build", data() { return { - userOpenId:"", + uId:null, show: true, dialogVisible: false, bindPhoneVo: { @@ -19,10 +19,7 @@ export default { }, watch: {}, created() { - this.userOpenId = this.$route.query.userOpenId; - console.log("userOpenId====>",userOpenId); - let qs = this.getQueryString('userOpenId'); - console.log("getQueryString====>",qs); + this.uId=this.getQueryString('userOpenId') || ''; this.wechatLogin(); }, methods: { @@ -32,14 +29,12 @@ export default { // token === '' && openId != '' 只要这种情况,未绑定账号 if(openId != '') { // 绑定账号 - this.bindPhoneVo.openId = openId - this.dialogVisible = false - console.log("dialogVisible===>"); + console.log("dialogVisible===>",openId,this.uId); } else { // 如果绑定了,返回成功 console.log("我要去登录了===>"); let _baseUrl = "https://szgc.jhncidg.com"; - window.location = _baseUrl + '/jhapi/wxAuth/authorize?returnUrl=' + _baseUrl + "/#/wxAuth" + window.location = _baseUrl + '/jhapi/wxAuth/authorize?returnUrl=' + _baseUrl + "/#/wxAuth?uid="+this.uId } }, saveBind() { diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectCheckDetectionServiceImpl.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectCheckDetectionServiceImpl.java index 8f9cca36..ac32c669 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectCheckDetectionServiceImpl.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectCheckDetectionServiceImpl.java @@ -10,6 +10,7 @@ import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.yanzhu.jh.project.domain.SurProjectAuditinfo; import com.yanzhu.jh.project.mapper.SurProjectAuditinfoMapper; +import com.yanzhu.jh.wxsetting.service.impl.WxMessageImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.yanzhu.jh.project.mapper.SurProjectCheckDetectionMapper; @@ -25,7 +26,7 @@ import org.springframework.transaction.annotation.Transactional; * @date 2023-08-31 */ @Service -public class SurProjectCheckDetectionServiceImpl implements ISurProjectCheckDetectionService +public class SurProjectCheckDetectionServiceImpl extends WxMessageImpl implements ISurProjectCheckDetectionService { @Autowired private SurProjectAuditinfoMapper surProjectAuditinfoMapper; @@ -73,7 +74,12 @@ public class SurProjectCheckDetectionServiceImpl implements ISurProjectCheckDete surProjectCheckDetection.setCreateBy(SecurityUtils.getUsername()); } surProjectCheckDetection.setCreateTime(DateUtils.getNowDate()); - return surProjectCheckDetectionMapper.insertSurProjectCheckDetection(surProjectCheckDetection); + int res = surProjectCheckDetectionMapper.insertSurProjectCheckDetection(surProjectCheckDetection); + + if(res>0){ + super.send(surProjectCheckDetection); + } + return res; } /** @@ -87,6 +93,17 @@ public class SurProjectCheckDetectionServiceImpl implements ISurProjectCheckDete public int updateSurProjectCheckDetection(SurProjectCheckDetection surProjectCheckDetection) { + //修改人和修改时间为登记检测结果信息,审批合格或不合格时不修改这个字段 + if(PublicStateEnum.AUDITINFO_DSH.getCode().equals(surProjectCheckDetection.getApproveStatus())){ + // 非提交时保存最后修改人 + if(surProjectCheckDetection.getUpdateBy()==null){ + surProjectCheckDetection.setUpdateBy(SecurityUtils.getUsername()); + } + surProjectCheckDetection.setUpdateTime(new Date()); + } + + int res = surProjectCheckDetectionMapper.updateSurProjectCheckDetection(surProjectCheckDetection); + //操作日志 if(StringUtils.isNotBlank(surProjectCheckDetection.getApproveStatus())){ SurProjectAuditinfo surProjectAuditinfo = new SurProjectAuditinfo(); @@ -99,18 +116,15 @@ public class SurProjectCheckDetectionServiceImpl implements ISurProjectCheckDete surProjectAuditinfo.setCreateBy(surProjectCheckDetection.getUpdateBy()); surProjectAuditinfo.setCreateTime(new Date()); surProjectAuditinfoMapper.insertSurProjectAuditinfo(surProjectAuditinfo); - } - //修改人和修改时间为登记检测结果信息,审批合格或不合格时不修改这个字段 - if(PublicStateEnum.AUDITINFO_DSH.getCode().equals(surProjectCheckDetection.getApproveStatus())){ - // 非提交时保存最后修改人 - if(surProjectCheckDetection.getUpdateBy()==null){ - surProjectCheckDetection.setUpdateBy(SecurityUtils.getUsername()); + //推送代办消息 + if(res>0){ + surProjectCheckDetection = surProjectCheckDetectionMapper.selectSurProjectCheckDetectionById(surProjectCheckDetection.getId()); + super.send(surProjectCheckDetection); } - surProjectCheckDetection.setUpdateTime(new Date()); } - return surProjectCheckDetectionMapper.updateSurProjectCheckDetection(surProjectCheckDetection); + return res; } /** diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectCheckingServiceImpl.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectCheckingServiceImpl.java index 75e65663..7f376b67 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectCheckingServiceImpl.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectCheckingServiceImpl.java @@ -11,6 +11,7 @@ import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.yanzhu.jh.project.domain.SurProjectAuditinfo; import com.yanzhu.jh.project.mapper.SurProjectAuditinfoMapper; +import com.yanzhu.jh.wxsetting.service.impl.WxMessageImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.yanzhu.jh.project.mapper.SurProjectCheckingMapper; @@ -26,7 +27,7 @@ import org.springframework.transaction.annotation.Transactional; * @date 2023-08-18 */ @Service -public class SurProjectCheckingServiceImpl implements ISurProjectCheckingService +public class SurProjectCheckingServiceImpl extends WxMessageImpl implements ISurProjectCheckingService { @Autowired private SurProjectAuditinfoMapper surProjectAuditinfoMapper; @@ -157,6 +158,9 @@ public class SurProjectCheckingServiceImpl implements ISurProjectCheckingService surProjectAuditinfoMapper.insertSurProjectAuditinfo(surProjectAuditinfo); } + if(res>0){ + super.send(surProjectChecking); + } return res; } @@ -177,6 +181,7 @@ public class SurProjectCheckingServiceImpl implements ISurProjectCheckingService surProjectChecking.setUpdateBy(SecurityUtils.getUsername()); } surProjectChecking.setUpdateTime(DateUtils.getNowDate()); + int res = surProjectCheckingMapper.updateSurProjectChecking(surProjectChecking); //操作日志 if(StringUtils.isNotBlank(surProjectChecking.getApproveStatus())){ @@ -190,9 +195,15 @@ public class SurProjectCheckingServiceImpl implements ISurProjectCheckingService surProjectAuditinfo.setCreateBy(surProjectChecking.getUpdateBy()); surProjectAuditinfo.setCreateTime(new Date()); surProjectAuditinfoMapper.insertSurProjectAuditinfo(surProjectAuditinfo); + + //推送代办消息 + if(res>0){ + surProjectChecking = surProjectCheckingMapper.selectSurProjectCheckingById(surProjectChecking.getId()); + super.send(surProjectChecking); + } } - return surProjectCheckingMapper.updateSurProjectChecking(surProjectChecking); + return res; } /** diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectMaterialSealServiceImpl.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectMaterialSealServiceImpl.java index da034a5e..7d0f8104 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectMaterialSealServiceImpl.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectMaterialSealServiceImpl.java @@ -10,6 +10,7 @@ import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.yanzhu.jh.project.domain.SurProjectAuditinfo; import com.yanzhu.jh.project.mapper.SurProjectAuditinfoMapper; +import com.yanzhu.jh.wxsetting.service.impl.WxMessageImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.yanzhu.jh.project.mapper.SurProjectMaterialSealMapper; @@ -25,7 +26,7 @@ import org.springframework.transaction.annotation.Transactional; * @date 2023-08-22 */ @Service -public class SurProjectMaterialSealServiceImpl implements ISurProjectMaterialSealService +public class SurProjectMaterialSealServiceImpl extends WxMessageImpl implements ISurProjectMaterialSealService { @Autowired @@ -116,6 +117,9 @@ public class SurProjectMaterialSealServiceImpl implements ISurProjectMaterialSea surProjectAuditinfoMapper.insertSurProjectAuditinfo(surProjectAuditinfo); } + if(res>0){ + super.send(surProjectMaterialSeal); + } return res; } @@ -136,6 +140,7 @@ public class SurProjectMaterialSealServiceImpl implements ISurProjectMaterialSea surProjectMaterialSeal.setMainImage(surProjectMaterialSeal.getImageUrls().split(",")[0]); } surProjectMaterialSeal.setUpdateTime(DateUtils.getNowDate()); + int res = surProjectMaterialSealMapper.updateSurProjectMaterialSeal(surProjectMaterialSeal); //操作日志 if(StringUtils.isNotBlank(surProjectMaterialSeal.getApproveStatus())){ @@ -149,9 +154,14 @@ public class SurProjectMaterialSealServiceImpl implements ISurProjectMaterialSea surProjectAuditinfo.setCreateBy(surProjectMaterialSeal.getUpdateBy()); surProjectAuditinfo.setCreateTime(new Date()); surProjectAuditinfoMapper.insertSurProjectAuditinfo(surProjectAuditinfo); - } - return surProjectMaterialSealMapper.updateSurProjectMaterialSeal(surProjectMaterialSeal); + //推送代办消息 + if(res>0){ + surProjectMaterialSeal = surProjectMaterialSealMapper.selectSurProjectMaterialSealById(surProjectMaterialSeal.getId()); + super.send(surProjectMaterialSeal); + } + } + return res; } /** diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectMeasureServiceImpl.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectMeasureServiceImpl.java index 892065d7..75ac54b4 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectMeasureServiceImpl.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectMeasureServiceImpl.java @@ -10,6 +10,7 @@ import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.yanzhu.jh.project.domain.SurProjectAuditinfo; import com.yanzhu.jh.project.mapper.SurProjectAuditinfoMapper; +import com.yanzhu.jh.wxsetting.service.impl.WxMessageImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.yanzhu.jh.project.mapper.SurProjectMeasureMapper; @@ -25,7 +26,7 @@ import org.springframework.transaction.annotation.Transactional; * @date 2023-08-22 */ @Service -public class SurProjectMeasureServiceImpl implements ISurProjectMeasureService +public class SurProjectMeasureServiceImpl extends WxMessageImpl implements ISurProjectMeasureService { @Autowired private SurProjectAuditinfoMapper surProjectAuditinfoMapper; @@ -115,6 +116,9 @@ public class SurProjectMeasureServiceImpl implements ISurProjectMeasureService surProjectAuditinfoMapper.insertSurProjectAuditinfo(surProjectAuditinfo); } + if(res>0){ + super.send(surProjectMeasure); + } return res; } @@ -135,6 +139,7 @@ public class SurProjectMeasureServiceImpl implements ISurProjectMeasureService surProjectMeasure.setMainImage(surProjectMeasure.getImageUrls().split(",")[0]); } surProjectMeasure.setUpdateTime(DateUtils.getNowDate()); + int res = surProjectMeasureMapper.updateSurProjectMeasure(surProjectMeasure); //操作日志 if(StringUtils.isNotBlank(surProjectMeasure.getApproveStatus())){ @@ -148,9 +153,14 @@ public class SurProjectMeasureServiceImpl implements ISurProjectMeasureService surProjectAuditinfo.setCreateBy(surProjectMeasure.getUpdateBy()); surProjectAuditinfo.setCreateTime(new Date()); surProjectAuditinfoMapper.insertSurProjectAuditinfo(surProjectAuditinfo); - } - return surProjectMeasureMapper.updateSurProjectMeasure(surProjectMeasure); + //推送代办消息 + if(res>0){ + surProjectMeasure = surProjectMeasureMapper.selectSurProjectMeasureById(surProjectMeasure.getId()); + super.send(surProjectMeasure); + } + } + return res; } /** diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/trouble/service/impl/SmzSspProblemmodifyDraftServiceImpl.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/trouble/service/impl/SmzSspProblemmodifyDraftServiceImpl.java index 4da16e7a..2a148fdb 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/trouble/service/impl/SmzSspProblemmodifyDraftServiceImpl.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/trouble/service/impl/SmzSspProblemmodifyDraftServiceImpl.java @@ -21,6 +21,7 @@ import com.yanzhu.jh.trouble.domain.SmzSspFileinfo; import com.yanzhu.jh.trouble.domain.SmzSspProblemmodify; import com.yanzhu.jh.trouble.mapper.SmzSspAuditinfoMapper; import com.yanzhu.jh.trouble.mapper.SmzSspProblemmodifyMapper; +import com.yanzhu.jh.wxsetting.service.impl.WxMessageImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.yanzhu.jh.trouble.mapper.SmzSspProblemmodifyDraftMapper; @@ -36,7 +37,7 @@ import org.springframework.transaction.annotation.Transactional; * @date 2023-10-15 */ @Service -public class SmzSspProblemmodifyDraftServiceImpl implements ISmzSspProblemmodifyDraftService +public class SmzSspProblemmodifyDraftServiceImpl extends WxMessageImpl implements ISmzSspProblemmodifyDraftService { @Autowired private SysDeptMapper deptMapper; @@ -113,7 +114,8 @@ public class SmzSspProblemmodifyDraftServiceImpl implements ISmzSspProblemmodify insert.setMarksPicture(urls.get(0)); insert.setProblemType("1"); insert.setRoleType(Convert.toLong(roleType)); - count.addAndGet(smzSspProblemmodifyDraftMapper.insertSmzSspProblemmodifyDraft(insert)); + int res = smzSspProblemmodifyDraftMapper.insertSmzSspProblemmodifyDraft(insert); + count.addAndGet(res); } return count.intValue(); } @@ -127,7 +129,7 @@ public class SmzSspProblemmodifyDraftServiceImpl implements ISmzSspProblemmodify @Override @Transactional public int batchUpdateSmzSspProblemmodifyDraft(List smzSspProblemmodifyList) { - int res = 0; + AtomicInteger count = new AtomicInteger(); for(SmzSspProblemmodify smzSspProblemmodify:smzSspProblemmodifyList){ if(smzSspProblemmodify.getId()!=null){ //删除草稿 @@ -143,17 +145,22 @@ public class SmzSspProblemmodifyDraftServiceImpl implements ISmzSspProblemmodify SurProject surProject = surProjectMapper.selectSurProjectById(smzSspProblemmodify.getProjectId()); smzSspProblemmodify.setProblemArea(surProject.getProjectName()); } - smzSspProblemmodifyMapper.insertSmzSspProblemmodify(smzSspProblemmodify); - SmzSspAuditinfo smzSspAuditinfo = new SmzSspAuditinfo(); - smzSspAuditinfo.setMainId(smzSspProblemmodify.getId()); - smzSspAuditinfo.setProcessState("1"); - smzSspAuditinfo.setCreateUser(smzSspProblemmodify.getCreateUser()); - smzSspAuditinfo.setCreateTime(new Date()); - res = smzSspAuditinfoMapper.insertSmzSspAuditinfo(smzSspAuditinfo); - smzSspAuditinfo.setFileUrls(smzSspProblemmodify.getSmarkUrl()); - insertSmzSspFileinfo(smzSspAuditinfo); + int res = smzSspProblemmodifyMapper.insertSmzSspProblemmodify(smzSspProblemmodify); + if(res>0){ + SmzSspAuditinfo smzSspAuditinfo = new SmzSspAuditinfo(); + smzSspAuditinfo.setMainId(smzSspProblemmodify.getId()); + smzSspAuditinfo.setProcessState("1"); + smzSspAuditinfo.setCreateUser(smzSspProblemmodify.getCreateUser()); + smzSspAuditinfo.setCreateTime(new Date()); + smzSspAuditinfoMapper.insertSmzSspAuditinfo(smzSspAuditinfo); + smzSspAuditinfo.setFileUrls(smzSspProblemmodify.getSmarkUrl()); + insertSmzSspFileinfo(smzSspAuditinfo); + + super.send(smzSspProblemmodify); + } + count.addAndGet(res); } - return res; + return count.intValue(); } /** @@ -219,15 +226,19 @@ public class SmzSspProblemmodifyDraftServiceImpl implements ISmzSspProblemmodify if(smzSspProblemmodify.getRoleType()==null || smzSspProblemmodify.getRoleType()<1){ smzSspProblemmodify.setRoleType(Convert.toInt(getRoleType(smzSspProblemmodify.getProjectId(),smzSspProblemmodify.getCreateUser()))); } - smzSspProblemmodifyMapper.insertSmzSspProblemmodify(smzSspProblemmodify); - SmzSspAuditinfo smzSspAuditinfo = new SmzSspAuditinfo(); - smzSspAuditinfo.setMainId(smzSspProblemmodify.getId()); - smzSspAuditinfo.setProcessState("1"); - smzSspAuditinfo.setCreateUser(smzSspProblemmodify.getCreateUser()); - smzSspAuditinfo.setCreateTime(new Date()); - int res = smzSspAuditinfoMapper.insertSmzSspAuditinfo(smzSspAuditinfo); - smzSspAuditinfo.setFileUrls(smzSspProblemmodify.getSmarkUrl()); - insertSmzSspFileinfo(smzSspAuditinfo); + int res = smzSspProblemmodifyMapper.insertSmzSspProblemmodify(smzSspProblemmodify); + if(res>0){ + SmzSspAuditinfo smzSspAuditinfo = new SmzSspAuditinfo(); + smzSspAuditinfo.setMainId(smzSspProblemmodify.getId()); + smzSspAuditinfo.setProcessState("1"); + smzSspAuditinfo.setCreateUser(smzSspProblemmodify.getCreateUser()); + smzSspAuditinfo.setCreateTime(new Date()); + smzSspAuditinfoMapper.insertSmzSspAuditinfo(smzSspAuditinfo); + smzSspAuditinfo.setFileUrls(smzSspProblemmodify.getSmarkUrl()); + insertSmzSspFileinfo(smzSspAuditinfo); + + super.send(smzSspProblemmodify); + } return res; } diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/trouble/service/impl/SmzSspProblemmodifyServiceImpl.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/trouble/service/impl/SmzSspProblemmodifyServiceImpl.java index 188b4757..f5e85687 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/trouble/service/impl/SmzSspProblemmodifyServiceImpl.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/trouble/service/impl/SmzSspProblemmodifyServiceImpl.java @@ -17,6 +17,7 @@ import com.yanzhu.jh.trouble.domain.SmzSspAuditinfo; import com.yanzhu.jh.trouble.domain.SmzSspFileinfo; import com.yanzhu.jh.trouble.domain.where.SmzSspProblemmodifyWhere; import com.yanzhu.jh.trouble.mapper.SmzSspAuditinfoMapper; +import com.yanzhu.jh.wxsetting.service.impl.WxMessageImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.yanzhu.jh.trouble.mapper.SmzSspProblemmodifyMapper; @@ -31,7 +32,7 @@ import org.springframework.transaction.annotation.Transactional; * @date 2023-07-28 */ @Service -public class SmzSspProblemmodifyServiceImpl implements ISmzSspProblemmodifyService +public class SmzSspProblemmodifyServiceImpl extends WxMessageImpl implements ISmzSspProblemmodifyService { @Autowired private SysDeptMapper deptMapper; @@ -162,15 +163,20 @@ public class SmzSspProblemmodifyServiceImpl implements ISmzSspProblemmodifyServi } smzSspProblemmodify.setRoleType(Convert.toInt(roleType)); smzSspProblemmodify.setCreateTime(DateUtils.getNowDate()); - smzSspProblemmodifyMapper.insertSmzSspProblemmodify(smzSspProblemmodify); - SmzSspAuditinfo smzSspAuditinfo = new SmzSspAuditinfo(); - smzSspAuditinfo.setMainId(smzSspProblemmodify.getId()); - smzSspAuditinfo.setProcessState("1"); - smzSspAuditinfo.setCreateUser(smzSspProblemmodify.getCreateUser()); - smzSspAuditinfo.setCreateTime(new Date()); - int res = smzSspAuditinfoMapper.insertSmzSspAuditinfo(smzSspAuditinfo); - smzSspAuditinfo.setFileUrls(smzSspProblemmodify.getSmarkUrl()); - insertSmzSspFileinfo(smzSspAuditinfo); + int res = smzSspProblemmodifyMapper.insertSmzSspProblemmodify(smzSspProblemmodify); + if(res>0){ + SmzSspAuditinfo smzSspAuditinfo = new SmzSspAuditinfo(); + smzSspAuditinfo.setMainId(smzSspProblemmodify.getId()); + smzSspAuditinfo.setProcessState("1"); + smzSspAuditinfo.setCreateUser(smzSspProblemmodify.getCreateUser()); + smzSspAuditinfo.setCreateTime(new Date()); + smzSspAuditinfoMapper.insertSmzSspAuditinfo(smzSspAuditinfo); + smzSspAuditinfo.setFileUrls(smzSspProblemmodify.getSmarkUrl()); + insertSmzSspFileinfo(smzSspAuditinfo); + + super.send(smzSspProblemmodify); + } + return res; } @@ -184,7 +190,12 @@ public class SmzSspProblemmodifyServiceImpl implements ISmzSspProblemmodifyServi public int updateSmzSspProblemmodify(SmzSspProblemmodify smzSspProblemmodify) { smzSspProblemmodify.setUpdateTime(DateUtils.getNowDate()); - return smzSspProblemmodifyMapper.updateSmzSspProblemmodify(smzSspProblemmodify); + int res = smzSspProblemmodifyMapper.updateSmzSspProblemmodify(smzSspProblemmodify); + + if(res>0){ + super.send(smzSspProblemmodify); + } + return res; } /** diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/controller/WxAuthController.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/controller/WxAuthController.java index 4dd222c5..1f20eb56 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/controller/WxAuthController.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/controller/WxAuthController.java @@ -1,7 +1,11 @@ package com.yanzhu.jh.wxsetting.controller; +import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.redis.RedisCache; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.api.WxConsts; import me.chanjar.weixin.common.exception.WxErrorException; @@ -9,9 +13,10 @@ import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken; import me.chanjar.weixin.mp.bean.result.WxMpUser; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; -import java.io.UnsupportedEncodingException; +import javax.servlet.http.HttpServletResponse; import java.net.URLEncoder; /** @@ -21,27 +26,55 @@ import java.net.URLEncoder; * @date 2023-08-24 */ @Slf4j -@RestController +@Controller @RequestMapping("/wxAuth") public class WxAuthController extends BaseController { + @Autowired + private RedisCache redisCache; + @Autowired private WxMpService wxMpService; + @Anonymous @GetMapping("/auth") @ResponseBody public String auth(@RequestParam(value = "echostr", defaultValue = "没有获取到") String echostr) { return echostr; } + @Anonymous + @ResponseBody + @GetMapping("/getWxAccessToken") + public AjaxResult getWxAccessToken(){ + try { + return success(wxMpService.getAccessToken()); + }catch (Exception e){ + return error(e.getMessage()); + } + } + + @Anonymous + @ResponseBody + @GetMapping("/deleteTestCache") + public AjaxResult deleteTestCache(){ + redisCache.deleteObject(CacheConstants.WX_MPMESSAGE_UNAME+"*"); + redisCache.deleteObject(CacheConstants.WX_MPMESSAGE_PNAME+"*"); + redisCache.deleteObject(CacheConstants.WX_MPMESSAGE_DNAME+"*"); + redisCache.deleteObject(CacheConstants.WX_MPMESSAGE_P_SUP+"*"); + redisCache.deleteObject(CacheConstants.WX_MPMESSAGE_P_MAG+"*"); + return success(); + } + /** * @author :tao * @param: : * @return: 重定向到获取用户信息的类 * 微信授权登录 */ + @Anonymous @GetMapping("/authorize") - public String authorize(@RequestParam(value = "returnUrl", defaultValue = "https://szgc.jhncidg.com/jhapi/") String returnUrl) throws UnsupportedEncodingException { + public void authorize(@RequestParam(value = "returnUrl", defaultValue = "https://szgc.jhncidg.com/jhapi/") String returnUrl, HttpServletResponse response) throws Exception { log.info("【微信网页授权】进来了,参数={}", returnUrl); //1. 配置 //2. 调用方法 @@ -53,7 +86,7 @@ public class WxAuthController extends BaseController { */ String redirectUrl = wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAUTH2_SCOPE_USER_INFO, URLEncoder.encode(returnUrl, "utf-8")); log.info("【微信网页授权】获取code,result={}", redirectUrl); - return "redirect:" + redirectUrl; + response.sendRedirect(redirectUrl); } /** @@ -62,9 +95,10 @@ public class WxAuthController extends BaseController { * @return: 重定向 * 获取用户信息类,最后重定向到指定url */ + @Anonymous @GetMapping("/userInfo") - public String userInfo(@RequestParam("code") String code, - @RequestParam("state") String returnUrl) throws WxErrorException { + public void userInfo(@RequestParam("code") String code, + @RequestParam("state") String returnUrl,HttpServletResponse response) throws Exception { /*当用户同意授权后,会回调所设置的url并把authorization code传过来, 然后用这个code获得access token,其中也包含用户的openid等信息*/ WxMpOAuth2AccessToken wxMpOAuth2AccessToken = new WxMpOAuth2AccessToken(); @@ -86,7 +120,7 @@ public class WxAuthController extends BaseController { //注意拼接参数,第一个参数需要加问号,之后参数使用&拼接的问题 //return "redirect:" + returnUrl + "/#/?openid=" + openId; - return "redirect:" + returnUrl + "&openid=" + openId; + response.sendRedirect(returnUrl + "&openid=" + openId); } } diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/controller/WxBindingController.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/controller/WxBindingController.java deleted file mode 100644 index b3f5fe99..00000000 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/controller/WxBindingController.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.yanzhu.jh.wxsetting.controller; - -import com.ruoyi.common.config.RuoYiConfig; -import com.ruoyi.common.core.controller.BaseController; -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.api.WxConsts; -import me.chanjar.weixin.common.exception.WxErrorException; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken; -import me.chanjar.weixin.mp.bean.result.WxMpUser; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; - -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; - -/** - * 微信openId绑定 - * - * @author JiangYuQi - * @date 2023-08-24 - */ -@Slf4j -@Controller -@RequestMapping("/wxAuth") -public class WxBindingController extends BaseController { - - @Autowired - private WxMpService wxMpService; - - @GetMapping("/auth") - @ResponseBody - public String auth(@RequestParam(value = "echostr", defaultValue = "没有获取到") String echostr) { - return echostr; - } - - /** - * @author :tao - * @param: : - * @return: 重定向到获取用户信息的类 - * 微信授权登录 - */ - @GetMapping("/authorize") - public String authorize(@RequestParam(value = "returnUrl", defaultValue = "https://szgc.jhncidg.com/jhapi/") String returnUrl) throws UnsupportedEncodingException { - log.info("【微信网页授权】进来了,参数={}", returnUrl); - //1. 配置 - //2. 调用方法 - String url = RuoYiConfig.getProjectUrl() + "wxAuth/userInfo"; - /* - * 相当于这种形式 - * URLEncoder.decode(returnUrl,"UTF-8" - * https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect - */ - String redirectUrl = wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAUTH2_SCOPE_USER_INFO, URLEncoder.encode(returnUrl, "utf-8")); - log.info("【微信网页授权】获取code,result={}", redirectUrl); - return "redirect:" + redirectUrl; - } - - /** - * @author :tao - * @param: : - * @return: 重定向 - * 获取用户信息类,最后重定向到指定url - */ - @GetMapping("/userInfo") - public String userInfo(@RequestParam("code") String code, - @RequestParam("state") String returnUrl) throws WxErrorException { - /*当用户同意授权后,会回调所设置的url并把authorization code传过来, - 然后用这个code获得access token,其中也包含用户的openid等信息*/ - WxMpOAuth2AccessToken wxMpOAuth2AccessToken = new WxMpOAuth2AccessToken(); - try { - //获取access token - wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code); - log.info("【AccessToken:】{}", wxMpOAuth2AccessToken.getAccessToken()); - } catch (WxErrorException e) { - log.error("【微信网页授权】{}", e); - } - - // 拿到openid - String openId = wxMpOAuth2AccessToken.getOpenId(); - log.info("【openid:】{}", openId); - log.info("【我是前端要回调的地址:】{}", returnUrl + "&openid=" + openId); - // 顺便获取一下用户信息 - WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, "zh_CN"); - log.info("【用户信息:】{}", wxMpUser.toString()); - - //注意拼接参数,第一个参数需要加问号,之后参数使用&拼接的问题 - //return "redirect:" + returnUrl + "/#/?openid=" + openId; - return "redirect:" + returnUrl + "&openid=" + openId; - } - -} diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/domain/WxMpTemplate.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/domain/WxMpTemplate.java new file mode 100644 index 00000000..bf6c17ef --- /dev/null +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/domain/WxMpTemplate.java @@ -0,0 +1,52 @@ +package com.yanzhu.jh.wxsetting.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +@NoArgsConstructor +@AllArgsConstructor +@Data +@Accessors(chain = true) +@Builder +public class WxMpTemplate implements Serializable { + + private static final long serialVersionUID = 337800069603349L; + + private Long id; + + /** + * key + */ + private String keyName; + + /** + * 描述 + */ + private String description; + + /** + * 模板id + */ + private String templateId; + + /** + * 跳转url + */ + private String url; + + /** + * 公众号模板 + */ + private String wxMpTemplateDataJson; + + /** + * 模板状态 + */ + private Integer status; +} + diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/domain/WxMpTemplateData.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/domain/WxMpTemplateData.java new file mode 100644 index 00000000..7f287624 --- /dev/null +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/domain/WxMpTemplateData.java @@ -0,0 +1,24 @@ +package com.yanzhu.jh.wxsetting.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +@NoArgsConstructor +@AllArgsConstructor +@Data +@Accessors(chain = true) +@Builder +public class WxMpTemplateData implements Serializable { + + private String name; + + private String value; + + private String color; +} + diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/domain/WxMpTemplateMsgConfig.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/domain/WxMpTemplateMsgConfig.java new file mode 100644 index 00000000..8d89b850 --- /dev/null +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/domain/WxMpTemplateMsgConfig.java @@ -0,0 +1,45 @@ +package com.yanzhu.jh.wxsetting.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +@NoArgsConstructor +@AllArgsConstructor +@Data +@Accessors(chain = true) +@Builder +public class WxMpTemplateMsgConfig implements Serializable { + + private static final long serialVersionUID = 5063374783759519418L; + + /** + * 接收者openid. + */ + private String toUser; + + /** + * 模板ID. + */ + private String templateId; + + /** + * 模板跳转链接. + *
+    * url和miniprogram都是非必填字段,若都不传则模板无跳转;若都传,会优先跳转至小程序。
+    * 开发者可根据实际需要选择其中一种跳转方式即可。当用户的微信客户端版本不支持跳小程序时,将会跳转至url。
+    * 
+ */ + private String url; + + /** + * 跳小程序所需数据,不需跳小程序可不用传该数据. + * + * @see #url + */ + private me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage.MiniProgram miniProgram; +} diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/service/impl/WxMessageImpl.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/service/impl/WxMessageImpl.java new file mode 100644 index 00000000..1cc0f651 --- /dev/null +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/service/impl/WxMessageImpl.java @@ -0,0 +1,653 @@ +package com.yanzhu.jh.wxsetting.service.impl; + +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.core.domain.entity.SysDept; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.enums.MessageTypeEnum; +import com.ruoyi.common.enums.PublicStateEnum; +import com.ruoyi.common.enums.TemplateMessageEnum; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.DictUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysUserOpenid; +import com.ruoyi.system.mapper.SysDeptMapper; +import com.ruoyi.system.mapper.SysUserMapper; +import com.ruoyi.system.mapper.SysUserOpenidMapper; +import com.yanzhu.jh.project.domain.*; +import com.yanzhu.jh.project.mapper.SurProjectMapper; +import com.yanzhu.jh.trouble.domain.SmzSspProblemmodify; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * 逻辑处理完毕 + * 这里使用Async修饰为异步方法 + * JiangYuQi + */ +@Slf4j +public class WxMessageImpl{ + + @Autowired + private WxMpService wxMpService; + + @Autowired + private SysDeptMapper sysDeptMapper; + + @Autowired + private SysUserMapper sysUserMapper; + + @Autowired + private SurProjectMapper surProjectMapper; + + @Autowired + private SysUserOpenidMapper sysUserOpenidMapper; + + @Async + public void send(SmzSspProblemmodify smzSspProblemmodify){ + List list = new ArrayList<>(); + WxMpTemplateMessage mpTemplateMessage; + Long state = smzSspProblemmodify.getCheckState(); + /** + * 提交隐患通知整改人 + */ + if(state==0){ + //通知整改人 + mpTemplateMessage = new WxMpTemplateMessage(); + mpTemplateMessage.setToUser(this.getMsgId(smzSspProblemmodify.getLordSentUser())); + mpTemplateMessage.setTemplateId(TemplateMessageEnum.TROUBLE_DEFAULT.getId()); + //模板数据 + List datas = new ArrayList<>(); + WxMpTemplateData data = new WxMpTemplateData(); + data.setValue(this.getMsgProName(smzSspProblemmodify.getProjectId())); + datas.add(data); + data.setValue(DateUtils.getTime()); + datas.add(data); + data.setValue(this.getMsgName(smzSspProblemmodify.getCreateUser())); + datas.add(data); + data.setValue(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,smzSspProblemmodify.getNickedTime())); + datas.add(data); + String typeName = smzSspProblemmodify.getInfoType()==0?"安全隐患":"安全隐患"; + data.setValue(typeName+"-"+ DictUtils.getDictLabel(smzSspProblemmodify.getInfoType()==0?"ssp_aqyhlx":"ssp_zlyhlx",smzSspProblemmodify.getDangerType())); + datas.add(data); + //TODO:这里缺少小程序跳转连接... + mpTemplateMessage.setData(datas); + list.add(mpTemplateMessage); + + //通知抄送人 + mpTemplateMessage = new WxMpTemplateMessage(); + mpTemplateMessage.setToUser(this.getMsgId(smzSspProblemmodify.getCopySendUser())); + mpTemplateMessage.setTemplateId(TemplateMessageEnum.TROUBLE_DEFAULT.getId()); + //模板数据 + datas = new ArrayList<>(); + data.setValue(this.getMsgProName(smzSspProblemmodify.getProjectId())); + datas.add(data); + data.setValue(DateUtils.getTime()); + datas.add(data); + data.setValue(this.getMsgName(smzSspProblemmodify.getCreateUser())); + datas.add(data); + data.setValue(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,smzSspProblemmodify.getNickedTime())); + datas.add(data); + data.setValue(typeName+"-"+ DictUtils.getDictLabel(smzSspProblemmodify.getInfoType()==0?"ssp_aqyhlx":"ssp_zlyhlx",smzSspProblemmodify.getDangerType())); + datas.add(data); + mpTemplateMessage.setData(datas); + list.add(mpTemplateMessage); + } else if(state==1){ + //通知复检人 + mpTemplateMessage = new WxMpTemplateMessage(); + mpTemplateMessage.setToUser(this.getMsgId(smzSspProblemmodify.getRecheckSendUser())); + mpTemplateMessage.setTemplateId(TemplateMessageEnum.TROUBLE_DEFAULT.getId()); + //模板数据 + List datas = new ArrayList<>(); + WxMpTemplateData data = new WxMpTemplateData(); + data.setValue(this.getMsgProName(smzSspProblemmodify.getProjectId())); + datas.add(data); + data.setValue(DateUtils.getTime()); + datas.add(data); + data.setValue(this.getMsgName(smzSspProblemmodify.getCreateUser())); + datas.add(data); + data.setValue(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,smzSspProblemmodify.getNickedTime())); + datas.add(data); + String typeName = smzSspProblemmodify.getInfoType()==0?"安全隐患":"安全隐患"; + data.setValue(typeName+"-"+ DictUtils.getDictLabel(smzSspProblemmodify.getInfoType()==0?"ssp_aqyhlx":"ssp_zlyhlx",smzSspProblemmodify.getDangerType())); + datas.add(data); + //TODO:这里缺少小程序跳转连接... + mpTemplateMessage.setData(datas); + list.add(mpTemplateMessage); + + } else if(state==3){ + + } else if(state==4){ + //通知提交人 + } + this.send(list, MessageTypeEnum.getYHPCLX(smzSspProblemmodify.getInfoType())); + } + + /** + * 举牌验收操作时推送信息 + * @param surProjectChecking + */ + @Async + public void send(SurProjectChecking surProjectChecking){ + List list = new ArrayList<>(); + String stateStr = surProjectChecking.getApproveStatus(); + if(Objects.equals(PublicStateEnum.AUDITINFO_DSH.getCode(),stateStr)){ + /** + * 监理审批待审批 + */ + String supMsgId = this.getMsgId(surProjectChecking.getSuperviseUser()); + //模板数据 + WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() + .toUser(supMsgId) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectChecking.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", "待"+surProjectChecking.getSuperviseUserName()+"审批")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectChecking.getCreateBy())+"["+this.getMsgDepName(surProjectChecking.getDeptId())+"]")); + list.add(templateMessage); + + /** + * 抄送项目甲代 + */ + templateMessage = WxMpTemplateMessage.builder() + .toUser(this.getMsgProMagUsers(surProjectChecking.getProjectId())) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectChecking.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", "待"+surProjectChecking.getSuperviseUserName()+"审批")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectChecking.getCreateBy())+"["+this.getMsgDepName(surProjectChecking.getDeptId())+"]")); + list.add(templateMessage); + + /** + * 抄送项目总监 + * 非审批人时推送消息 + */ + String _supMsgId = this.getMsgProSupUsers(surProjectChecking.getProjectId()); + if(StringUtils.isEmpty(_supMsgId)){ + _supMsgId = ""; + } + if(!Objects.equals(supMsgId,_supMsgId)){ + templateMessage = WxMpTemplateMessage.builder() + .toUser(_supMsgId) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectChecking.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", "待"+surProjectChecking.getSuperviseUserName()+"审批")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectChecking.getCreateBy())+"["+this.getMsgDepName(surProjectChecking.getDeptId())+"]")); + list.add(templateMessage); + } + }else if(Objects.equals(PublicStateEnum.AUDITINFO_SHTG.getCode(),stateStr)){ + /** + * 审批通过 + * 通知提交人审核通过 + */ + WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() + .toUser(this.getMsgId(surProjectChecking.getCreateBy())) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectChecking.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", surProjectChecking.getSuperviseUserName()+"审批通过")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectChecking.getCreateBy())+"["+this.getMsgDepName(surProjectChecking.getDeptId())+"]")); + list.add(templateMessage); + }else{ + /** + * 审批驳回 + * 通知提交人审核驳回 + */ + WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() + .toUser(this.getMsgId(surProjectChecking.getCreateBy())) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectChecking.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", surProjectChecking.getSuperviseUserName()+"审批驳回")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectChecking.getCreateBy())+"["+this.getMsgDepName(surProjectChecking.getDeptId())+"]")); + list.add(templateMessage); + } + this.send(list,MessageTypeEnum.JPYSSP.getCode()); + } + + /** + * 实测实量操作时推送信息 + * @param surProjectMeasure + */ + @Async + public void send(SurProjectMeasure surProjectMeasure){ + List list = new ArrayList<>(); + String stateStr = surProjectMeasure.getApproveStatus(); + if(Objects.equals(PublicStateEnum.AUDITINFO_DSH.getCode(),stateStr)){ + /** + * 监理审批待审批 + */ + String supMsgId = this.getMsgId(surProjectMeasure.getSuperviseUser()); + //模板数据 + WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() + .toUser(supMsgId) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectMeasure.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", "待"+surProjectMeasure.getSuperviseUserName()+"审批")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectMeasure.getCreateBy())+"["+this.getMsgDepName(surProjectMeasure.getDeptId())+"]")); + list.add(templateMessage); + + /** + * 抄送项目甲代 + */ + templateMessage = WxMpTemplateMessage.builder() + .toUser(this.getMsgProMagUsers(surProjectMeasure.getProjectId())) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectMeasure.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", "待"+surProjectMeasure.getSuperviseUserName()+"审批")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectMeasure.getCreateBy())+"["+this.getMsgDepName(surProjectMeasure.getDeptId())+"]")); + list.add(templateMessage); + + /** + * 抄送项目总监 + * 非审批人时推送消息 + */ + String _supMsgId = this.getMsgProSupUsers(surProjectMeasure.getProjectId()); + if(StringUtils.isEmpty(_supMsgId)){ + _supMsgId = ""; + } + if(!Objects.equals(supMsgId,_supMsgId)){ + templateMessage = WxMpTemplateMessage.builder() + .toUser(_supMsgId) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectMeasure.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", "待"+surProjectMeasure.getSuperviseUserName()+"审批")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectMeasure.getCreateBy())+"["+this.getMsgDepName(surProjectMeasure.getDeptId())+"]")); + list.add(templateMessage); + } + }else if(Objects.equals(PublicStateEnum.AUDITINFO_SHTG.getCode(),stateStr)){ + /** + * 审批通过 + * 通知提交人审核通过 + */ + WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() + .toUser(this.getMsgId(surProjectMeasure.getCreateBy())) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectMeasure.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", surProjectMeasure.getSuperviseUserName()+"审批通过")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectMeasure.getCreateBy())+"["+this.getMsgDepName(surProjectMeasure.getDeptId())+"]")); + list.add(templateMessage); + }else{ + /** + * 审批驳回 + * 通知提交人审核驳回 + */ + WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() + .toUser(this.getMsgId(surProjectMeasure.getCreateBy())) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectMeasure.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", surProjectMeasure.getSuperviseUserName()+"审批驳回")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectMeasure.getCreateBy())+"["+this.getMsgDepName(surProjectMeasure.getDeptId())+"]")); + list.add(templateMessage); + } + this.send(list,MessageTypeEnum.JPYSSP.getCode()); + } + + /** + * 材料封样操作时推送信息 + * @param surProjectMaterialSeal + */ + @Async + public void send(SurProjectMaterialSeal surProjectMaterialSeal){ + List list = new ArrayList<>(); + String stateStr = surProjectMaterialSeal.getApproveStatus(); + if(Objects.equals(PublicStateEnum.AUDITINFO_DSH.getCode(),stateStr)){ + /** + * 监理审批待审批 + */ + String supMsgId = this.getMsgId(surProjectMaterialSeal.getWitnessUser()); + //模板数据 + WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() + .toUser(supMsgId) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectMaterialSeal.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", surProjectMaterialSeal.getWitnessUserName()+"审批")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectMaterialSeal.getCreateBy())+"["+this.getMsgDepName(surProjectMaterialSeal.getDeptId())+"]")); + list.add(templateMessage); + + /** + * 抄送项目甲代 + */ + templateMessage = WxMpTemplateMessage.builder() + .toUser(this.getMsgProMagUsers(surProjectMaterialSeal.getProjectId())) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectMaterialSeal.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", surProjectMaterialSeal.getWitnessUserName()+"审批")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectMaterialSeal.getCreateBy())+"["+this.getMsgDepName(surProjectMaterialSeal.getDeptId())+"]")); + list.add(templateMessage); + + /** + * 抄送项目总监 + * 非审批人时推送消息 + */ + String _supMsgId = this.getMsgProSupUsers(surProjectMaterialSeal.getProjectId()); + if(StringUtils.isEmpty(_supMsgId)){ + _supMsgId = ""; + } + if(!Objects.equals(supMsgId,_supMsgId)){ + templateMessage = WxMpTemplateMessage.builder() + .toUser(_supMsgId) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectMaterialSeal.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", surProjectMaterialSeal.getWitnessUserName()+"审批")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectMaterialSeal.getCreateBy())+"["+this.getMsgDepName(surProjectMaterialSeal.getDeptId())+"]")); + list.add(templateMessage); + } + }else if(Objects.equals(PublicStateEnum.AUDITINFO_SHTG.getCode(),stateStr)){ + /** + * 审批通过 + * 通知提交人审核通过 + */ + WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() + .toUser(this.getMsgId(surProjectMaterialSeal.getCreateBy())) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectMaterialSeal.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", surProjectMaterialSeal.getWitnessUserName()+"审批通过")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectMaterialSeal.getCreateBy())+"["+this.getMsgDepName(surProjectMaterialSeal.getDeptId())+"]")); + list.add(templateMessage); + }else{ + /** + * 审批驳回 + * 通知提交人审核驳回 + */ + WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() + .toUser(this.getMsgId(surProjectMaterialSeal.getCreateBy())) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectMaterialSeal.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", surProjectMaterialSeal.getWitnessUserName()+"审批驳回")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectMaterialSeal.getCreateBy())+"["+this.getMsgDepName(surProjectMaterialSeal.getDeptId())+"]")); + list.add(templateMessage); + } + this.send(list,MessageTypeEnum.JPYSSP.getCode()); + } + + /** + * 取样复试操作时推送信息 + * @param surProjectCheckDetection + */ + @Async + public void send(SurProjectCheckDetection surProjectCheckDetection){ + List list = new ArrayList<>(); + String stateStr = surProjectCheckDetection.getApproveStatus(); + if(Objects.equals(PublicStateEnum.AUDITINFO_DSH.getCode(),stateStr)){ + /** + * 监理审批待审批 + */ + String supMsgId = this.getMsgId(surProjectCheckDetection.getWitnessUser()); + //模板数据 + WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() + .toUser(supMsgId) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectCheckDetection.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", surProjectCheckDetection.getWitnessUserName()+"审批")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectCheckDetection.getCreateBy())+"["+this.getMsgDepName(surProjectCheckDetection.getDeptId())+"]")); + list.add(templateMessage); + + /** + * 抄送项目甲代 + */ + templateMessage = WxMpTemplateMessage.builder() + .toUser(this.getMsgProMagUsers(surProjectCheckDetection.getProjectId())) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectCheckDetection.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", surProjectCheckDetection.getWitnessUserName()+"审批")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectCheckDetection.getCreateBy())+"["+this.getMsgDepName(surProjectCheckDetection.getDeptId())+"]")); + list.add(templateMessage); + + /** + * 抄送项目总监 + * 非审批人时推送消息 + */ + String _supMsgId = this.getMsgProSupUsers(surProjectCheckDetection.getProjectId()); + if(StringUtils.isEmpty(_supMsgId)){ + _supMsgId = ""; + } + if(!Objects.equals(supMsgId,_supMsgId)){ + templateMessage = WxMpTemplateMessage.builder() + .toUser(_supMsgId) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectCheckDetection.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", surProjectCheckDetection.getWitnessUserName()+"审批")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectCheckDetection.getCreateBy())+"["+this.getMsgDepName(surProjectCheckDetection.getDeptId())+"]")); + list.add(templateMessage); + } + }else if(Objects.equals(PublicStateEnum.AUDITINFO_SHTG.getCode(),stateStr)){ + /** + * 审批通过 + * 通知提交人审核通过 + */ + WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() + .toUser(this.getMsgId(surProjectCheckDetection.getCreateBy())) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectCheckDetection.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", surProjectCheckDetection.getWitnessUserName()+"审批通过")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectCheckDetection.getCreateBy())+"["+this.getMsgDepName(surProjectCheckDetection.getDeptId())+"]")); + list.add(templateMessage); + }else{ + /** + * 审批驳回 + * 通知提交人审核驳回 + */ + WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() + .toUser(this.getMsgId(surProjectCheckDetection.getCreateBy())) + .templateId(TemplateMessageEnum.APPLY_DEFAULT.getId()).build(); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing14", this.getMsgProName(surProjectCheckDetection.getProjectId()))); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing1", MessageTypeEnum.JPYSSP.getName())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", surProjectCheckDetection.getWitnessUserName()+"审批驳回")); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("time4", DateUtils.getTime())); + templateMessage.addWxMpTemplateData(new WxMpTemplateData("thing10", this.getMsgName(surProjectCheckDetection.getCreateBy())+"["+this.getMsgDepName(surProjectCheckDetection.getDeptId())+"]")); + list.add(templateMessage); + } + this.send(list,MessageTypeEnum.JPYSSP.getCode()); + } + + @Autowired + private RedisCache redisCache; + + /** + * 查询项目监理 + * @param proId + * @return + */ + private String getMsgProSupUsers(Long proId){ + List list = redisCache.getCacheObject(CacheConstants.WX_MPMESSAGE_P_SUP +proId); + if(list!=null){ + List strs = list.stream().map(SysUserOpenid :: getMsgOpenId).collect(Collectors.toList()); + return String.join(",",strs); + }else{ + list = sysUserOpenidMapper.findMsgProSupUsers(proId); + if(StringUtils.isNotEmpty(list)){ + //设置30分钟有效期 + redisCache.setCacheObject(CacheConstants.WX_MPMESSAGE_P_SUP +proId,list,1, TimeUnit.MINUTES); + List strs = list.stream().map(SysUserOpenid :: getMsgOpenId).collect(Collectors.toList()); + return String.join(",",strs); + }else{ + return null; + } + } + } + + /** + * 查询项目甲代 + * @param proId + * @return + */ + private String getMsgProMagUsers(Long proId){ + List list = redisCache.getCacheObject(CacheConstants.WX_MPMESSAGE_P_MAG +proId); + if(list!=null){ + List strs = list.stream().map(SysUserOpenid :: getMsgOpenId).collect(Collectors.toList()); + return String.join(",",strs); + }else{ + list = sysUserOpenidMapper.findMsgProMagUsers(proId); + if(StringUtils.isNotEmpty(list)){ + //设置30分钟有效期 + redisCache.setCacheObject(CacheConstants.WX_MPMESSAGE_P_MAG +proId,list,1, TimeUnit.MINUTES); + List strs = list.stream().map(SysUserOpenid :: getMsgOpenId).collect(Collectors.toList()); + return String.join(",",strs); + }else{ + return null; + } + } + } + + /** + * 查询单位名称 + * @param depId + * @return + */ + private String getMsgDepName(Long depId){ + String name = Convert.toStr(redisCache.getCacheObject(CacheConstants.WX_MPMESSAGE_DNAME +depId)); + if(StringUtils.isNotEmpty(name)){ + return name; + }else{ + SysDept sysDept = sysDeptMapper.selectDeptById(depId); + //项目名称截取&&超过20字符微信限制并抛出异常 + String depName = sysDept.getDeptName(); + if(depName.length()>13){ + depName = sysDept.getDeptName().substring(0,13); + } + //设置30分钟有效期 + redisCache.setCacheObject(CacheConstants.WX_MPMESSAGE_DNAME +depId,depName,1, TimeUnit.MINUTES); + return depName; + } + } + + /** + * 查询项目名称 + * @param proId + * @return + */ + private String getMsgProName(Long proId){ + String name = Convert.toStr(redisCache.getCacheObject(CacheConstants.WX_MPMESSAGE_PNAME +proId)); + if(StringUtils.isNotEmpty(name)){ + return name; + }else{ + SurProject surProject = surProjectMapper.selectSurProjectById(proId); + //项目名称截取&&超过20字符微信限制并抛出异常 + String proName = surProject.getProjectName(); + if(proName.length()>20){ + proName = surProject.getProjectName().substring(0,20); + } + //设置30分钟有效期 + redisCache.setCacheObject(CacheConstants.WX_MPMESSAGE_PNAME +proId,proName,1, TimeUnit.MINUTES); + return proName; + } + } + + /** + * 查询微信用户名称 + * @param userName + * @return + */ + private String getMsgName(String userName){ + String name = Convert.toStr(redisCache.getCacheObject(CacheConstants.WX_MPMESSAGE_UNAME +userName)); + if(StringUtils.isNotEmpty(name)){ + return name; + }else{ + SysUser sysUser = sysUserMapper.selectUserByUserName(userName); + name = sysUser!=null?sysUser.getNickName():""; + //设置30分钟有效期 + redisCache.setCacheObject(CacheConstants.WX_MPMESSAGE_UNAME +userName,name,1, TimeUnit.MINUTES); + return name; + } + } + + /** + * 查询微信用户列表 + * @param userName + * @return + */ + private String getMsgId(String userName){ + String openIds = Convert.toStr(redisCache.getCacheObject(CacheConstants.WX_MPMESSAGE_OPENID +userName)); + if(StringUtils.isNotEmpty(openIds)){ + return openIds; + }else{ + List list = sysUserOpenidMapper.findSysUserOpenidsByUser(userName); + List strs = list.stream().map(SysUserOpenid :: getMsgOpenId).collect(Collectors.toList()); + openIds = String.join(",",strs); + //设置30分钟有效期 + redisCache.setCacheObject(CacheConstants.WX_MPMESSAGE_OPENID +userName,openIds,1, TimeUnit.MINUTES); + return openIds; + } + } + + /** + * 模板消息开关 + */ + private boolean wxSwitch=false; + + /** + * 推送模板消息 + * @param lsit + */ + private void send(List lsit,String messageType){ + try { + if(wxSwitch && StringUtils.isNotEmpty(lsit)){ + for(WxMpTemplateMessage message:lsit){ + if(StringUtils.isNotEmpty(message.getToUser())){ + String[] toUsers = message.getToUser().split(","); + for(String toUser:toUsers){ + //判断短时间内是否已发送相同类型的消息 + String key = CacheConstants.WX_MPMESSAGE_KEY +toUser+"-"+messageType; + if(Convert.toBool(redisCache.getCacheObject(key),true)){ + //多个登录账号时批量发送 + message.setToUser(toUser); + wxMpService.getTemplateMsgService().sendTemplateMsg(message); + //5分钟内不推送相同类型的消息 + redisCache.setCacheObject(key,false,30, TimeUnit.SECONDS); + } + } + } + } + } + }catch (Exception e){ + log.info("出错了...{}",e.getMessage()); + } + } + +} diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/service/wxMessageService.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/service/wxMessageService.java deleted file mode 100644 index 07ee6b47..00000000 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/service/wxMessageService.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.yanzhu.jh.wxsetting.service; - -/** - * 微信消息推送 - * - * @author JiangYuQi - * @date 2023-08-24 - */ -public interface wxMessageService { - -} diff --git a/yanzhu-jh/src/main/resources/mapper/project/SurProjectMapper.xml b/yanzhu-jh/src/main/resources/mapper/project/SurProjectMapper.xml index 9cdf4bbb..0c969dcd 100644 --- a/yanzhu-jh/src/main/resources/mapper/project/SurProjectMapper.xml +++ b/yanzhu-jh/src/main/resources/mapper/project/SurProjectMapper.xml @@ -67,6 +67,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left join sur_project_userinfo spu on spu.project_id = sp.id + sp.isDel = 0 and sp.deptId like concat('%', #{deptId}, '%') and sp.projectName like concat('%', #{projectName}, '%') and sp.projectCode = #{projectCode} @@ -97,7 +98,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and sp.onAccountAmount = #{onAccountAmount} and sp.projectSchedule = #{projectSchedule} and sp.projectSummarize = #{projectSummarize} - and sp.isDel = #{isDel} and sp.projectStatus = #{projectStatus} and sp.create_by = #{createBy} and sp.servicePersonnel = #{servicePersonnel}